【问题标题】:Creating a custom prefix for different discord servers为不同的不和谐服务器创建自定义前缀
【发布时间】:2021-11-19 00:27:45
【问题描述】:

我试图让机器人有一个前缀,你可以为你想要的每台服务器使用,但是当你使用命令时,它会在控制台中弹出

return prefixes[str(message.guild.id)] #recieve the prefix for the guild id given
KeyError: '882434407212925000'

这是我使用的代码和它说它失败的那一行

def get_prefix(client, message): ##first we define get_prefix
    with open("prefixes.js", "r") as f: ##we open and read the prefixes.json, assuming it's in the same file
        prefixes = json.load(f) #load the json as prefixes
    return prefixes[str(message.guild.id)] #recieve the prefix for the guild id given

【问题讨论】:

  • 公会ID不存在于前缀var中
  • @FloweyTF 所以你能告诉我我需要添加什么,那就太好了
  • 尝试调试?在返回前缀之前打印出前缀的值?
  • 为什么JSON文件命名为prefixes.js?此外,在加载时打印 prefixes 的键。如果它不存在,您可以创建一个函数将公会 ID 和默认前缀作为键值对添加到字典 prefixes 中,然后再添加到文件prefixes.json

标签: discord.py command


【解决方案1】:

错误的文件类型

首先,您尝试输入的文件是一个 .js (JavaScript) 文件,它不是一种数据库形式。您很可能正在寻找可以存储数据的 .json(JavaScript 对象表示法)文件。

找不到公会ID

您的代码无法正常工作的另一个原因是您返回的数据集不存在。换句话说,公会不在前缀文件中。

示例

def get_prefix(client, message):
    with open('prefixes.json', 'r') as f:
        prefixes = json.load(f)
    try:
        return prefixes[str(message.guild.id)]
    except:
        prefixes[str(message.guild.id)] = 'put default prefix here'}
        with open('prefixes.json', 'w') as f:
            json.dump(prefixes, f)
        return prefixes(message.guild.id)]

将 'put default prefix here' 替换为您的机器人前缀。

说明

在上面的示例中,我在您的代码中添加了一个 try except,以便在发生错误时(无法在数据集中找到公会)将其添加到数据集中并返回机器人的默认前缀作为占位符。

【讨论】:

    猜你喜欢
    • 2021-06-19
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    • 2021-05-19
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    • 2019-08-22
    相关资源
    最近更新 更多