如何用Python开发Discord机器人按频道名称匹配的验证系统?
Discord多服务器验证系统代码修正方案
原代码核心问题
- 硬编码了频道、角色ID,不符合多服务器通过名称校验的要求
- 判断语句
if message.content == '.agree' in verify_channel语法逻辑完全错误,无法正确触发条件 - 引用了未定义的
member变量,角色ID传入了字符串类型不符合API要求 - 角色添加、消息发送的方法调用错误,没有忽略机器人自身消息的逻辑
- 缺少3秒后删除两条消息的逻辑
修正后可运行代码
import discord from discord.utils import get import asyncio # 你的client初始化代码保持不变,这里仅修正on_message事件逻辑 @client.event async def on_message(message): # 忽略机器人自己发送的消息,避免循环触发 if message.author.bot: return # 校验是否为指定验证命令 if message.content.strip() != '.agree': return # 按频道名称校验是否在验证频道,适配多服务器 if message.channel.name != 'verify_here': return # 从当前服务器动态获取Member角色,适配多服务器 verify_role = get(message.guild.roles, name='Member') if not verify_role: return try: # 给用户添加角色 await message.author.add_roles(verify_role) # 发送回复消息 reply_msg = await message.channel.send(f'{message.author.mention}, thank you!') # 等待3秒 await asyncio.sleep(3) # 依次删除触发消息和回复消息 await message.delete() await reply_msg.delete() except discord.Forbidden: # 可根据需要在此处添加权限不足的日志记录逻辑 pass
适配说明
- 所有频道、角色均从当前消息所属服务器动态获取,无任何硬编码ID,完美适配多服务器网络
- 增加了权限异常捕获,避免机器人无管理权限时抛出报错
- 增加了角色不存在时的兼容逻辑,部分未配置Member角色的服务器不会触发异常
内容的提问来源于stack exchange,提问作者Eliahs Johansson
相关产品推荐
相关产品推荐

