使用discord.py开发机器人时新成员入群欢迎功能无法触发怎么办
问题根因
你配置了包含members权限的Intents对象,但没有将它传入discord.Client()的初始化参数中,导致实际运行时机器人没有启用成员相关的网关事件,on_member_join自然无法触发。
修正方案
将client = discord.Client()修改为client = discord.Client(intents=intents),将你配置好的权限对象传入客户端实例即可。完整修正后的代码如下:
import discord intents = discord.Intents.default() intents.members = True # 传入配置好的intents参数 client = discord.Client(intents=intents) @client.event async def on_ready(): # When ready print('We have logged in as {0.user}'.format(client)) @client.event async def on_member_join(member): print('Someone new!') try: await member.send("Welcome") except: # 兼容用户关闭陌生人私信的场景,可替换为频道发欢迎消息逻辑 print(f"无法向新成员{member.name}发送私信") @client.event async def on_message(message): # On every message if message.author == client.user: # Cancel own message return if message.content.startswith('?'): await message.channel.send('Command') client.run(DISCORD_TOKEN)
额外注意事项
- 如果你使用discord.py 2.0及以上版本,你已经确认开启的Discord开发者后台「Privileged Gateway Intents」下的
Server Members Intent权限是正常触发事件的必要前提 - 向新成员发私信可能因为对方关闭了陌生人私信权限触发异常,建议增加异常捕获逻辑,或者改为在指定的服务器公开欢迎频道发送欢迎消息
内容的提问来源于stack exchange,提问作者Trevor Mathisen
相关产品推荐
相关产品推荐

