discord.py on_member_join事件重复发送欢迎消息问题
解决Discord机器人重复发送欢迎消息的问题
可能的原因
- 代码中多次定义了
on_member_join事件处理函数,触发事件时多份逻辑同时执行 - 机器人客户端被多次实例化或重复启动,导致事件监听器重复注册
- 极少数情况是Discord网关重复推送了
member_join事件
解决方案
1. 移除重复的事件定义
检查代码中是否存在多段@client.event async def on_member_join(member):的代码,只保留一份即可。
2. 确保机器人仅初始化一次
确认没有多次调用client.run(TOKEN),也没有在循环中重复创建discord.Client()实例,这类操作会导致事件监听重复注册。
3. 添加成员ID去重机制(兜底方案)
如果以上方法无效,可以用集合记录已发送过欢迎消息的成员ID,避免重复发送:
# 全局存储已发送欢迎消息的成员ID sent_welcomes = set() @client.event async def on_member_join(member): # 已发送过则直接返回 if member.id in sent_welcomes: return sent_welcomes.add(member.id) channel = client.get_channel(1119942896309784576) if isinstance(channel, discord.TextChannel): welcome_message = f"{member.mention} welcome to My Server!\n\nPlease check the channels below:\n\n"\ f"<#{1119942908615872542}>\n<#{1119942920695451698}>\n<#{1119942922247348326}>\n<#{1119942952572178452}>" await channel.send(welcome_message)
额外提示
如果使用discord.ext.commands.Bot框架,还要注意加载cog时不要重复添加相同的事件监听。
内容的提问来源于stack exchange,提问作者Kloud
相关产品推荐
相关产品推荐

