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

