Python 当提到bot时,如何获取服务器的前缀?不和谐

Python 当提到bot时,如何获取服务器的前缀?不和谐,python,discord,discord.py,Python,Discord,Discord.py,我想做什么:我有一个类似于此的自定义前缀系统:当提到我的机器人时,这是我的活动: @client.event async def on_message(message): if client.user.mentioned_in(message): embed=discord.Embed(title=f"Hello! my prefix is `{prefix}`") await message.channel.send(embed=embed)

我想做什么:我有一个类似于此的自定义前缀系统:当提到我的机器人时,这是我的活动:

@client.event
async def on_message(message):
  if client.user.mentioned_in(message):

    embed=discord.Embed(title=f"Hello! my prefix is `{prefix}`")
   
    await message.channel.send(embed=embed)

  await client.process_commands(message)
因此,我希望我的bot响应该服务器的前缀


我的问题:我不知道如何读取json文件并获取前缀。

要向bot添加自定义前缀,可以将前缀数据存储在json文件中。您应该创建一个名为
prefixes.json
的文件和3个命令/事件:当bot加入服务器时设置默认前缀的事件,从
prefixes.json
文件中删除前缀信息的事件,以及更改bot前缀的命令

以下是如何编写第一个事件:当机器人加入公会时定义默认前缀的事件:

@client.event
async def on_guild_join(guild):
    with open('prefixes.json', 'r') as f:
        prefixes = json.load(f)
    prefixes[str(guild.id)] = 'GG'

    with open('prefixes.json', 'w') as f:
        json.dump(prefixes, f, indent=4)
这是一种编写事件的方法,可以在从服务器删除bot时从JSON文件中删除前缀数据:

@client.event
async def on_guild_remove(guild):
    with open('prefixes.json', 'r') as f:
        prefixes = json.load(f)
    prefixes.pop(str(guild.id))

    with open('prefixes.json', 'w') as f:
        json.dump(prefixes, f, indent=4)
最后,这里是如何定义函数来更改bot的前缀。该命令将命名为
changeprifix
,您可以通过键入
[prefix]changeprifix
(将
[prefix]
替换为您的机器人的前缀)来使用该命令:

您还需要一个命令来查找与您的机器人所在的公会对应的前缀。这是一个简单的函数,您可以这样定义:

def get_prefix(client=None, message=None):
    with open('prefixes.json', 'r') as f:
        prefixes = json.load(f)
    try:
        prefix = str(message.guild.id)
        return prefixes[prefix]
    except AttributeError:
        return ['defaultPrefix']
现在,最后一步是将这四个命令集成到您为运行其他命令而定义的bot变量中。下面是如何更改
前缀
语句:

client = commands.Bot(command_prefix=get_prefix)

你试过什么了?我想你不知道从哪里开始。是这样吗?我试过这个:但我没能成功谢谢你的回答!但我已经有了自定义前缀。我只是想让它,如果机器人被提及,它会发送特定公会的前缀。哦,对不起,我误解了你的问题。以下是pastebin代码:。这对你有帮助吗?不客气:)非常感谢!
client = commands.Bot(command_prefix=get_prefix)