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

我的Discord bot如何发送欢迎消息并授予角色?当前代码无报错无响应该怎么解决?

问题排查及解决方案

下面按优先级从高到低排查对应问题:

  • 开启必要的Intents权限
    Discord.py v2.0及以上版本默认关闭成员相关事件的监听,这是无报错无响应最常见的原因,需要完成两步操作:
    1. 登录Discord开发者后台,进入你的Bot应用页,在「Bot」选项卡下开启Server Members Intent开关
    2. 代码初始化Client时开启members权限:
    intents = discord.Intents.default()
    intents.members = True
    # 实例化客户端时传入权限参数
    client = MyClient(intents=intents)
    
  • 修正类方法的参数错误
    类内的异步方法第一个参数必须是实例自身self,你当前写的on_member_join方法缺失self参数,同时后续调用类方法的方式错误,要把方法定义改成:
    async def on_member_join(self, member):
    
  • 修正弃用属性与方法调用错误
    1. 新版discord.py已经弃用member.server属性,替换为member.guild
    2. add_roles是成员对象的方法,不是Client的方法,直接调用member.add_roles即可
    3. get_channel是实例方法,要通过self调用,不能直接调用类的静态方法
  • 修正ID格式
    代码里的<role_id>和<channel_id>需要替换为实际的整数类型ID,去掉尖括号,不要使用字符串格式
  • 检查Bot权限配置
    1. 给Bot分配的角色要拥有「管理角色」权限,且Bot的角色排序要高于你要分配给新用户的角色
    2. 目标欢迎频道要给Bot开放「发送消息」权限

修正后的完整参考代码

import discord
from keep_alive import keep_alive

# 开启必要权限
intents = discord.Intents.default()
intents.members = True
intents.message_content = True # 如有其他消息相关需求可开启

class MyClient(discord.Client):
    # 登录成功回调
    async def on_ready(self):
        print("BOT is online")

    async def on_member_join(self, member):
      # 获取角色,替换为你的实际角色ID(整数)
      role = discord.utils.get(member.guild.roles, id=123456789012345678)
      # 获取频道,替换为你的实际频道ID(整数)
      channel = self.get_channel(123456789012345678)
      # 给用户添加角色
      await member.add_roles(role)
      # 发送欢迎消息,mention字段可以主动@新用户
      await channel.send(f"Hello {member.mention} nice to see you!")

# 实例化并启动Bot
client = MyClient(intents=intents)
keep_alive()
client.run("你的Bot Token")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 13:45:03