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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 22:15:15