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

Discord.py开发斜杠命令与按钮时出现custom_id KeyError报错求解

问题原因
  • 多交互组件库冲突:你同时初始化了discord_buttons_plugin的ButtonsClient和discord-components的DiscordComponents,两个库都会监听Discord的socket响应事件,当斜杠命令触发非按钮类的交互事件时,discord_buttons_plugin的事件监听器会强制读取不存在的custom_id字段,触发报错。
  • 链接按钮本身无custom_id:你代码中使用了style=5的Link类型按钮,这类按钮Discord官方不会返回custom_id字段,discord_buttons_plugin没有做兼容校验,碰到这类交互直接抛出KeyError。
  • 代码存在缩进错误:play_voice函数中await SeagamiCommandsListening.commands_Listening.play_(ctx, 링크)行缩进异常,会导致逻辑执行不符合预期。
解决方案

方案1(推荐):统一使用单个交互组件库

删除冗余的discord_buttons_plugin相关代码,全量使用discord-components处理按钮交互,避免库冲突:

  1. 删除所有from discord_buttons_plugin import *导入语句,删除buttons = ButtonsClient(seagami)初始化代码
  2. 将原有ButtonsClient的按钮定义、发送、回调逻辑替换为discord-components的对应写法,该库原生支持所有按钮类型、斜杠命令交互,不存在字段兼容问题。

方案2:保留现有库,删除冲突初始化

如果要继续使用discord_buttons_plugin,删除on_ready事件中的DiscordComponents(seagami)初始化语句,避免两个库同时监听socket事件。同时需要手动给discord_buttons_plugin打兼容补丁:找到库源码的soclistener方法,在读取custom_id前增加字段存在性判断:

# 修改discord_buttons_plugin/__main__.py第17行附近代码
if "custom_id" in data["data"]:
    await self.emit(data["data"]["custom_id"], data)

额外修复

修正play_voice函数的缩进错误,保证业务逻辑正确执行。

内容的提问来源于stack exchange,提问作者Yuna

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 14:36:03