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

Nextcord Cog投票命令中❌反应无法添加的问题求助

Nextcord Cogs投票命令无法添加❌反应的解决办法

问题描述

切换至Nextcord的Cogs架构后,编写的投票命令中,await message.add_reaction("❌")无法正常执行,✅反应能正常添加,但❌反应无法显示。相关代码如下:

@commands.command()
@commands.has_permissions(moderate_members=True)
async def poll(self, ctx, *, content:str=None):
    if content == None:
        content = "Lorem Ipsum"
    embed=nextcord.Embed(title=f"{content}", description="• ✅ for Yes
• ❌ for No.",  color=discord.Colour.random())
    embed.set_author(name=ctx.author.display_name, icon_url=ctx.author.avatar.url)
    embed.set_footer(text="Don't choose both man.")
    message = await ctx.channel.send(embed=embed)
    #adding the reactions the reactions
    await message.add_reaction("✅")
    await message.add_reaction("❌")

@poll.error
async def poll_error(self, ctx, error):
    if isinstance(error, commands.MissingPermissions):
        embed = nextcord.Embed(
        title="<:mod:955112014408208455> Not Authorized",
        description=
        "Sorry but this command can only be used by members with `Moderate Members` permission.",
        colour=nextcord.Colour.random())
        await ctx.reply(content="ALERT!!", embed=embed)  

可能原因及解决步骤

1. 表情字符编码不一致

有时候复制的❌表情可能是其他相似的Unicode字符,而非标准的U+274C。直接使用Unicode编码代替字符可以避免这个问题:

  • ✅的Unicode编码:"\u2705"
  • ❌的Unicode编码:"\u274C"

修改添加反应的代码为:

await message.add_reaction("\u2705")
await message.add_reaction("\u274C")

2. 机器人权限不足

确认机器人在目标频道拥有添加反应的权限:

  • 进入服务器设置→角色→找到机器人角色,确保「添加反应」权限已开启
  • 检查目标频道的权限设置,是否单独限制了机器人添加反应的权限

3. 消息缓存未同步

发送消息后,message对象可能未完全写入缓存,导致后续操作失败。可以尝试重新获取消息后再添加反应:

message = await ctx.channel.send(embed=embed)
# 重新获取消息对象
message = await ctx.channel.fetch_message(message.id)
await message.add_reaction("✅")
await message.add_reaction("❌")

4. 添加异常捕获排查错误

当前代码未处理添加反应时的异常,无法定位具体错误。添加异常捕获可以直接查看问题原因:

try:
    await message.add_reaction("✅")
    await message.add_reaction("❌")
except Exception as e:
    await ctx.send(f"添加反应出错: {str(e)}")
    print(f"投票命令错误日志: {e}")

修改后的完整示例代码

@commands.command()
@commands.has_permissions(moderate_members=True)
async def poll(self, ctx, *, content: str = None):
    content = content or "Lorem Ipsum"
    embed = nextcord.Embed(
        title=content,
        description="• ✅ 同意\n• ❌ 反对.",
        color=nextcord.Colour.random()
    )
    embed.set_author(name=ctx.author.display_name, icon_url=ctx.author.avatar.url)
    embed.set_footer(text="别两个都选啊喂。")
    message = await ctx.channel.send(embed=embed)
    
    try:
        # 使用Unicode编码添加反应
        await message.add_reaction("\u2705")
        await message.add_reaction("\u274C")
    except Exception as e:
        await ctx.send(f"添加反应失败: {str(e)}")
        print(f"Poll命令错误: {e}")

@poll.error
async def poll_error(self, ctx, error):
    if isinstance(error, commands.MissingPermissions):
        embed = nextcord.Embed(
            title="<:mod:955112014408208455> 无权限",
            description="抱歉,只有拥有「Moderate Members」权限的成员才能使用此命令。",
            colour=nextcord.Colour.random()
        )
        await ctx.reply(content="警告!!", embed=embed)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 10:35:22