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)