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

使用discord.py开发机器人时如何为自身发送的消息添加反应

问题修复方案

1. 无法给消息添加反应的修复

  • 问题原因:discord.py的add_reaction方法不支持直接传入冒号包裹的表情别名,需要传入Unicode原生表情或者官方Emoji对象
  • 修复方法:将你代码中添加反应的两行替换为直接使用Unicode表情:
await dm.add_reaction('✅')
await dm.add_reaction('⛔')

注意:必须提前在Discord开发者后台开启Message Content Intent、Guild Reactions Intent权限,否则机器人无法读取消息内容和监听反应事件

2. 点击确认反应后分配角色的实现

你可以使用wait_for方法监听当前这条验证私信的反应事件,过滤掉机器人自身的反应,仅响应指定管理员的操作,拿到结果后给用户分配对应角色,完整修改后代码如下:

@client.command()
async def verify(ctx):
    # 跳过私聊触发命令的情况,避免报错
    if ctx.guild is None:
        return
    verifier = ctx.author
    admin = await client.fetch_user(270397954773352469)
    await ctx.send(f'{verifier.mention} 正在等待验证,验证通过后你将收到私信通知')
    # 给管理员发验证私信
    verify_dm = await admin.send(f'{verifier.mention} 申请进入服务器,是否通过验证?')
    # 添加指定反应
    await verify_dm.add_reaction('✅')
    await verify_dm.add_reaction('⛔')

    # 定义反应检查规则:仅监听管理员对这条验证消息的两个指定反应
    def check(reaction, user):
        return user == admin and str(reaction.emoji) in ['✅', '⛔'] and reaction.message.id == verify_dm.id

    try:
        # 等待管理员反应,超时时间可自行调整,此处设为1天
        reaction, user = await client.wait_for('reaction_add', timeout=86400.0, check=check)
    except TimeoutError:
        await admin.send('验证请求已超时')
        await verifier.send('验证请求超时,请重新输入.verify申请验证')
        return
    
    # 处理反应结果
    if str(reaction.emoji) == '✅':
        # 替换为你服务器内验证通过角色的数字ID
        verified_role = ctx.guild.get_role(1234567890)
        await verifier.add_roles(verified_role)
        await verifier.send('你已通过服务器验证,现在可以正常访问服务器内容')
        await admin.send(f'已通过{verifier.mention}的验证申请')
    else:
        await verifier.send('你的验证申请被拒绝')
        await admin.send(f'已拒绝{verifier.mention}的验证申请')
  • 额外注意事项:
    • 确保机器人在服务器内拥有管理角色权限,且其自身角色排序高于你要分配的验证通过角色,否则会出现权限不足无法分配角色的问题
    • 必须开启Server Members Intent权限,否则无法正常获取成员对象执行添加角色操作

内容的提问来源于stack exchange,提问作者JJ Malovich

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:54:07