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

实现Discord机器人验证用户后发送私信功能求助

解决Discord机器人验证后发送私信的问题

先修正原代码的缩进逻辑漏洞,再添加私信发送功能并处理异常情况,修改后的代码如下:

@bot.event
async def on_raw_reaction_add(payload):
    if payload.channel_id == 1030905311231483904:
        guild_id = payload.guild_id
        guild = discord.utils.find(lambda g : g.id == guild_id, bot.guilds)

        if payload.emoji.name == '✅':
            role = discord.utils.get(guild.roles, name='Verified')
            role2 = discord.utils.get(guild.roles, name='Not-Verified')

            if role is not None and role2 is not None:
                msg = await bot.get_channel(payload.channel_id).fetch_message(payload.message_id)
                member = msg.author
                if member is not None:
                    await member.add_roles(role)
                    await member.remove_roles(role2)
                    # 添加验证成功私信逻辑
                    try:
                        await member.send("You have been verified")
                        print('验证完成并发送私信')
                    except discord.Forbidden:
                        print('验证完成但无法发送私信:用户关闭了私信权限')
                else:
                    print('未找到用户')
            else:
                print('一个或两个角色不存在')
    else:
        pass

关键调整说明:

  • 将角色存在性判断缩进至✅表情的分支内,避免非目标表情触发无效检查
  • 同时检查Verified和Not-Verified两个角色的存在性,防止移除不存在角色报错
  • 用try-except捕获私信发送失败的异常(比如用户关闭了私信),避免机器人崩溃
  • 优化打印信息,方便调试排查问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 09:50:17