You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为Discord机器人设置自定义前缀时遭遇KeyError错误求助

解决Discord机器人自定义前缀的KeyError问题

错误原因

这个KeyError是因为你的prefixes字典里没有存储ID为1036979664775815178的服务器的前缀配置,当机器人在该服务器收到消息时,找不到对应的前缀记录,导致索引失败。

解决方案

1. 用字典get()方法设置默认前缀

直接替换字典索引为get()方法,找不到对应键时返回指定默认前缀,避免抛出KeyError:

def get_prefix(client, message):
    # 将'!'设为默认前缀,可按需修改
    return prefixes.get(str(message.guild.id), '!')

2. 监听服务器加入事件自动初始化前缀

当机器人加入新服务器时,自动把默认前缀存入prefixes字典,并同步到持久化存储(比如JSON文件):

import json

@client.event
async def on_guild_join(guild):
    guild_id = str(guild.id)
    prefixes[guild_id] = '!'
    # 同步保存到JSON文件,防止重启后配置丢失
    with open('prefixes.json', 'w') as f:
        json.dump(prefixes, f)

3. 在获取前缀时检查并初始化

在get_prefix函数里先判断服务器ID是否存在,不存在则添加默认前缀并保存:

import json

def get_prefix(client, message):
    if not message.guild:
        # 处理私聊消息,返回默认前缀
        return '!'
    
    guild_id = str(message.guild.id)
    if guild_id not in prefixes:
        prefixes[guild_id] = '!'
        # 同步保存到存储介质
        with open('prefixes.json', 'w') as f:
            json.dump(prefixes, f)
    return prefixes[guild_id]

额外注意点

  • 若使用持久化存储(如JSON、数据库),每次修改prefixes后都要同步保存,避免机器人重启后配置丢失。
  • 私聊消息中message.guild为None,需要单独处理,否则会引发新的错误。

内容的提问来源于stack exchange,提问作者I am goku

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 05:45:47