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

Discord.py Interactions Buttons 调用无响应问题求助

问题根因

代码触发无响应是三个核心问题导致的:

  1. 库混用冲突:你同时导入了discord.py和interactions.py两个完全独立的Discord机器人开发库,两者的Bot实例、指令注册逻辑、上下文对象完全不兼容。discord.ext.commands的指令装饰器无法识别interactions.CommandContext类型的上下文,反过来interactions的Bot实例也不会响应discord.py注册的前缀指令,指令触发后自然不会执行任何逻辑。
  2. 组件传参格式错误:interactions库规定所有消息组件(按钮、下拉菜单)都必须放在ActionRow容器内传入,不能直接把单个Button对象传给components参数。
  3. 配置不匹配: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 13:33:26