使用Hikari框架实现Discord消息自动反应时遇BadRequestError求助
问题解决:Discord机器人添加反应失败的修复方案
错误原因分析
- 消息参数错误:你调用
bot.rest.fetch_messages(channel)得到的是MessageIterator消息迭代器,并非触发当前事件的目标消息,传给add_reaction的不是合法的消息雪花ID,导致API返回400格式错误。 - 表情格式错误:
add_reaction不支持:skull:这种冒号格式的字符串,需要传入Unicode表情字符或合法的表情对象。
修正后的代码
async def benskull(event: hikari.GuildMessageCreateEvent): # 排除机器人自身消息,避免循环触发 if event.is_bot: return # 替换为目标用户的ID if event.author_id == 123456789012345678: # 直接使用事件自带的消息对象,无需额外查询 await event.message.add_reaction("\N{SKULL}")
关键修改点
- 直接调用
event.message获取触发事件的消息,这是GuildMessageCreateEvent内置属性,无需额外调用fetch_messages。 - 用Unicode字符
"\N{SKULL}"对应💀替代:skull:,也可以直接写表情字符"💀"。 - 增加
event.is_bot判断,避免机器人对自身消息添加反应,防止无效循环。
自定义表情使用说明
如果需要添加自定义表情,需传入表情ID或hikari的Emoji对象,示例如下:
# 替换为你的自定义表情ID await event.message.add_reaction(hikari.Emoji(id=987654321098765432))
内容的提问来源于stack exchange,提问作者BensPlaza
相关产品推荐
相关产品推荐

