(discord.py) 如何使我的 setprefix 命令正常工作?

Posted

技术标签:

【中文标题】(discord.py) 如何使我的 setprefix 命令正常工作?【英文标题】:(discord.py) How can I make my setprefix command work properly? 【发布时间】:2020-10-25 03:18:24 【问题描述】:

标题可能看起来有点笼统,所以让我解释一下。我的机器人使用前缀m!,我实现这一点的方法是将这一行添加到我的代码中:

client = commands.Bot(command_prefix="m!")

成功了。现在我决定更改前缀系统的工作方式,因为我希望服务器能够更改机器人的前缀。我创建了一个prefixes.json 文件并添加了以下代码:

def get_prefix(client, message):
    with open("prefixes.json", "r") as f:
        prefixes = json.load(f)
    return prefixes[str(message.guild.id)]

我也把client = commands.Bot(command_prefix="m!")改成了这个:

client = commands.Bot(command_prefix=get_prefix)

并添加了这些,以便机器人在每次加入服务器时将服务器添加到带有默认前缀 m! 的 JSON 文件中。

@client.event
async def on_guild_join(guild):
    with open("prefixes.json", "r") as f:
        prefixes = json.load(f)

    prefixes[str(guild.id)] = "m!"
    with open("prefixes.json", "w") as f:
        json.dump(prefixes, f, indent=4)


@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)

基本上,当机器人加入服务器时,它会被添加到 JSON 文件中


    "<id goes here>": "m!"

当服务器使用我添加的 setprefix 命令时,JSON 会使用它们的新前缀进行更新。

顺便说一下,setprefix 命令是这样的

@client.command()
async def setprefix(ctx, prefix):
    with open("prefixes.json", "r") as f:
        prefixes = json.load(f)
    prefixes[str(ctx.guild.id)] = prefix
    with open("prefixes.json", "w") as f:
        json.dump(prefixes, f, indent=4)
    await ctx.send(f"Prefix changed to: prefix")

现在,所有这些代码都有效。但仅适用于在我实施此操作后机器人加入的服务器。这意味着对于之前添加的所有服务器,机器人基本上都被破坏了,因为它们在 JSON 文件中没有条目。 我怎样才能让机器人也能在这些服务器上工作?

【问题讨论】:

【参考方案1】:

您可以更新get_prefix 以获得默认值:

def get_prefix(client, message):
    with open("prefixes.json", "r") as f:
        prefixes = json.load(f)
    return prefixes.get(str(message.guild.id), "m!")

【讨论】:

以上是关于(discord.py) 如何使我的 setprefix 命令正常工作?的主要内容,如果未能解决你的问题,请参考以下文章

如何让我的 discord.py 机器人识别它正在被 ping

discord.py 1.7.2 - 如何私信用户

如何让我的 discord.py 机器人提及我的消息中提到的某人?

如何改进我的队列系统 - Discord.py

如何修复 Discord.py 不为语音命令运行我的异步功能?

调整图像大小 discord.py