我的机器人现在位于几台服务器中,我得到的主要反馈之一是服务器管理员希望阻止该机器人在某些渠道进行响应,而无需通过Discord的权限管理器。但是我不确定从哪里开始,所以我想我可以在这里接触一下,看看是否可以得到任何建议或代码段来使用!
基本上,管理员将使用!fg ignore 'channel name or id'
之类的东西,然后机器人在某个地方将其存储并且不响应,然后类似地,如果他们使用!fg unignore 'channel name or id'
,它将从列表或存储位置中删除该东西。
任何帮助将不胜感激,谢谢!
答案 0 :(得分:0)
您需要将通道ID保留在列表中,然后在bots on_message函数中检查消息是否不在该通道中,如果没有,请运行命令。
答案 1 :(得分:0)
这是我为使其正常工作而制作的一个示例:
import discord
from discord.ext import commands
ignoredChannels = [] # List of all the ignored channels, you can use a text file instead if you prefer
client = discord.ext.commands.Bot(command_prefix = "fg!");
@client.event
async def on_message(message):
if message.channel.id in ignoredChannels:
return # If the channel is in the ignored list - return
else:
await client.process_commands(message) # Otherwise process the commands
@client.command()
async def ignore(ctx, channelID):
if int(channelID) not in ignoredChannels:
ignoredChannels.append(int(channelID)) # Add the channel if it hasn't been added yet
await ctx.send("Successfully added the channel to the ignored list!")
else:
await ctx.send("Channel was already inside the ignored list!") # Otherwise warn user that the channel is already ignored
@client.command()
async def unignore(ctx, channelID):
try:
ignoredChannels.remove(int(channelID)) # Attempt to remove the channel from the list
await ctx.send("Successfully removed the channel from the ignored list!")
except:
await ctx.send("This channel is already removed!") # If fails, warn the user that the channel is already removed
client.run(your_bot_token) # Run the bot with your token
它是如何工作的,它会在每次发送消息时检查列表中是否存在该频道ID,如果在列表中找到该频道,它将返回并且不执行任何其他操作;否则,如果该频道不在列表中,它将进行操作继续处理该通道中的命令。
如果只允许管理员使用命令,则可以在@commands.has_permissions(administrator=True)
的每一行下添加@client.command()
。
希望它对您有所帮助并且编码愉快:)