Discord.py Interactions Buttons 调用无响应问题求助
问题根因
代码触发无响应是三个核心问题导致的:
- 库混用冲突:你同时导入了
discord.py和interactions.py两个完全独立的Discord机器人开发库,两者的Bot实例、指令注册逻辑、上下文对象完全不兼容。discord.ext.commands的指令装饰器无法识别interactions.CommandContext类型的上下文,反过来interactions的Bot实例也不会响应discord.py注册的前缀指令,指令触发后自然不会执行任何逻辑。 - 组件传参格式错误:interactions库规定所有消息组件(按钮、下拉菜单)都必须放在
ActionRow容器内传入,不能直接把单个Button对象传给components参数。 - 配置不匹配:interactions库默认注册的是斜杠指令,而非你预期的
!前缀触发的文本指令,且需要在开发者后台开启对应权限、邀请Bot时勾选正确的授权范围,否则指令不会被识别。
修正方案
彻底移除冲突的discord.py相关导入,单独使用interactions库实现功能,修正后的代码如下:
import random import time import interactions from interactions import Button, ButtonStyle, ActionRow # 初始化interactions客户端,不要使用discord.py的Bot类 bot = interactions.Client( token="替换为你的机器人Token", intents=interactions.Intents.DEFAULT ) # 注册斜杠指令,填写服务器ID可以让指令即时生效,不填则为全局指令,最长需要1小时同步时间 @bot.command( name="test", description="测试按钮功能", scope=替换为你自己的服务器ID ) async def test(ctx: interactions.CommandContext): button = Button( style=ButtonStyle.PRIMARY, custom_id="primary", label="Blue button", ) # 将按钮放入ActionRow容器后再传入components参数 await ctx.send("Hello World!", components=ActionRow(components=[button])) if __name__ == "__main__": bot.start()
前置配置检查项
- 前往Discord开发者后台,在Bot设置页开启
MESSAGE CONTENT INTENT、SERVER MEMBERS INTENT权限开关 - 重新邀请机器人进入服务器,邀请链接必须同时勾选
bot和applications.commands两个授权范围,否则斜杠指令无法被识别 - 如果需要使用
!test这类前缀触发的文本指令,需要额外安装interactions的前缀指令扩展,不要混用discord.py的指令装饰器 - 如果项目本身是基于discord.py 2.0+开发的,不需要额外引入interactions库,discord.py原生已经支持按钮组件,可以直接用discord.ui下的相关类实现,避免库冲突。
内容的提问来源于stack exchange,提问作者WolfClawsKevin
相关产品推荐
相关产品推荐

