实现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
相关产品推荐
相关产品推荐

