更改前缀会使机器人不响应命令 [Discord.py]

时间:2021-04-12 12:39:08

标签: python discord discord.py

我想让我的 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 仍然不响应命令。我怎样才能让它工作?

1 个答案:

答案 0 :(得分:1)

当您使用 on_message 事件时,您必须始终记得添加 process_commands 函数,如下所示:

@client.event
async def on_message(message):
    #Do Something
    await client.process_commands(message)