我想让我的 Discord Bot 具有不断变化的前缀。我的意思是用户(必须具有管理员权限)按照他们的意愿设置前缀。默认前缀是 &
但如果他们想要它是 !
他们将使用 &spr
命令,像这样 &spr !
并且前缀将更改为 {{1 }}。这本身就很好用。但是,要使其正常工作,它需要一个起始前缀,因此我将其设置如下:
!
当机器人像这样加入服务器时,它会写入一个 json 文件:
@client.event
async def on_guild_join(guild):
with open('prefixes.json', 'r') as pr:
prefixes = json.load(pr)
prefixes[str(guild.id)] = '&'
with open('prefixes.json', 'w') as pr:
json.dump(prefixes, pr, indent = 4)
我还有一个函数,在代码的开头,检索前缀:
{
"SERVER1 ID": "&",
"SERVER2 ID": "&",
"SERVER3 ID": "&",
"SERVER4 ID": "&",
"SERVER5 ID": "&"
}
并将其提供给客户:
def getPrefix(client, message):
with open('prefixes.json', 'r') as pr:
prefixes = json.load(pr)
return prefixes[str(message.guild.id)]
一切正常。但是,我意识到因为它在加入服务器时将前缀添加到 json 文件中,所以如果机器人在离线时加入服务器,它不会添加它。这意味着机器人无法响应任何命令,因为它没有前缀。为了解决这个问题,我创建了一个设置事件:
client = commands.Bot(command_prefix = getPrefix, help_command = None)
它按计划将前缀 @client.event
async def on_message(message):
if message.author == client.user:
return
if message.content.startswith('&setup'):
with open('prefixes.json', 'r') as pr:
prefixes = json.load(pr)
prefixes[str(message.guild.id)] = '&'
with open('prefixes.json', 'w') as pr:
json.dump(prefixes, pr, indent = 4)
添加到 json 文件中。但是,即使在 json 文件中设置了前缀,bot 仍然不响应命令。我怎样才能让它工作?
答案 0 :(得分:1)
当您使用 on_message
事件时,您必须始终记得添加 process_commands
函数,如下所示:
@client.event
async def on_message(message):
#Do Something
await client.process_commands(message)