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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 09:00:02