Discord.py实现Embed内按钮假Nitro命令无响应问题排查
Discord.py 假Nitro整蛊命令无法触发排查方案
- 首先解决依赖冲突:你同时导入了
discord_components和discord_buttons_plugin两个功能重叠的第三方按钮库,二者API逻辑会互相干扰,直接删除其中一个不需要的导入即可。更推荐使用discord.py 2.0及以上版本内置的组件系统,不需要安装额外第三方库,稳定性更强。 - 检查Cog注册逻辑:你贴出的代码仅为Cog类的内部代码片段,缺少外层的
class 自定义Cog名(commands.Cog):类定义,同时要确认你在机器人主程序的异步上下文中执行了await client.add_cog(自定义Cog名(client))的加载逻辑,未完成注册的Cog内部命令不会被机器人识别触发。 - 检查触发条件配置:首先确认你的机器人主程序中设置了正确的命令前缀,比如前缀设置为
!的情况下,需要输入!nitro才能触发命令。其次你给命令加了@commands.has_permissions(ban_members=True)的权限校验装饰器,触发命令的账号没有封禁成员权限的情况下,命令会被直接拦截不会执行。 - 修正类变量定义:你在
__init__方法中定义的buttons是局部变量,类内其他方法无法访问,需要修改为self.buttons = ButtonsClient(client),调用发送方法时改为await self.buttons.send(...),否则命令执行时会抛出变量未定义报错(你当前没有报错说明命令还没走到执行步骤就被拦截了)。
以下是改用discord.py内置组件的简化实现代码,无需额外依赖:
import discord from discord.ext import commands from discord import ui class NitroPrankCog(commands.Cog): def __init__(self, client): self.client = client @commands.command(name='nitro') @commands.has_permissions(ban_members=True) async def nitro(self, ctx, member: discord.Member = None): member = member or ctx.author embed = discord.Embed( title = "**You've been gifted a subscription!**", description = f"||**{member.mention}**|| has gifted you Nitro for **1 month!**", color = 0xc17ce0 ) embed.set_image(url = 'https://media.threatpost.com/wp-content/uploads/sites/103/2021/04/19145523/Discord-Nitro-e1618858537976.png' ) # 内置链接按钮实现 prank_view = ui.View() prank_view.add_item(ui.Button( style=discord.ButtonStyle.link, label="Accept", url="https://c.tenor.com/Bvb1iMhQQUUAAAAC/gorilla-middle-finger.gif" )) await ctx.send(embed=embed, view=prank_view) # 主程序异步初始化位置添加以下代码完成Cog注册 # await client.add_cog(NitroPrankCog(client))
内容的提问来源于stack exchange,提问作者TalhaIqbal
相关产品推荐
相关产品推荐

