如何在discord.py中编写新成员欢迎指令 无报错但消息不发送如何解决
问题原因及解决方法
- 未正确配置Intents权限
这是该类问题最常见的诱因:discord.py 1.5及以上版本要求显式声明需要监听的事件类型,同时需要在Discord开发者平台的机器人设置页手动开启「Server Members Intent」开关,否则on_member_join事件不会被触发。
代码层面需要修改你的client初始化逻辑,参考如下:import discord intents = discord.Intents.default() intents.members = True # 开启成员事件监听权限 # 如果你使用commands.Bot,写法如下: # from discord.ext import commands # bot = commands.Bot(command_prefix='你的前缀', intents=intents) # 如果你直接使用discord.Client,写法如下: client = discord.Client(intents=intents) - 代码存在语法疏漏
你当前编写的Embed标题前缺少f-string前缀,会导致{member.mention}无法被解析为实际的成员提及内容,修正对应代码行即可:# 原代码title前缺少f,修正后如下 embed=discord.Embed(title=f"Welcome {member.mention}!",description=f"{member.mention} Has joined us. Go to #info for more information") - 机器人权限不足
确认机器人在ID为912778268803993685的频道中,拥有「发送消息」、「发送嵌入链接」两项基础权限,缺少任意一项都会导致消息发送失败。 - 频道ID配置错误
确认你填写的频道ID属于当前服务器的有效文本频道,不要误填为其他服务器的频道ID。
快速排查技巧
你可以在on_member_join函数第一行加入打印语句:
async def on_member_join(member): print(f"成员加入事件触发,成员名:{member.name}") # 后续原有代码
如果新成员加入时控制台无对应输出,说明事件未触发,优先排查Intents配置问题;如果有输出但无消息发送,优先排查频道ID、机器人权限问题。
内容的提问来源于stack exchange,提问作者oHydro
相关产品推荐
相关产品推荐

