Discord机器人on_member_join事件跨服务器触发,如何限制仅指定服务器生效
解决方法
你的代码未对成员变动事件所属的服务器做校验,因此机器人加入的所有服务器触发的成员进出事件都会向指定频道推送通知。你只需要在事件逻辑最开头增加服务器ID匹配判断,仅当事件发生在你指定的目标服务器时才执行后续的通知逻辑即可。
修改后的代码示例
# 请先替换下方的目标服务器ID为你自己要接收通知的服务器ID TARGET_GUILD_ID = 替换为你的服务器数字ID # 比如1234567890,不要加引号 TARGET_WELCOME_CHANNEL_ID = 870700792691167278 # 你原来的通知频道ID @client.event async def on_member_join(member): # 先判断事件发生的服务器是不是目标服务器,不匹配直接终止逻辑 if member.guild.id != TARGET_GUILD_ID: return channel = client.get_channel(TARGET_WELCOME_CHANNEL_ID) await channel.send(f"{member.mention} 加入服务器啦!可以查看 📣公告📣 频道了解服务器和机器人相关通知~") await member.send(f"欢迎加入Bot测试服务器,你可以查看公告频道了解服务器/机器人的更新动态哦!") @client.event async def on_member_remove(member): if member.guild.id != TARGET_GUILD_ID: return channel = client.get_channel(TARGET_WELCOME_CHANNEL_ID) await channel.send(f"{member.mention} 离开了服务器,很遗憾你走啦~") await member.send(f"很遗憾你离开duckmods服务器,欢迎下次再来哦~")
注意事项
- 不知道服务器ID的情况下,可以先打开Discord开发者模式,右键服务器图标选择「复制ID」即可获取
- 请确保你的机器人已经在Discord开发者后台开启了
Server Members Intent,否则成员进出事件无法正常触发 - 如果你后续需要支持多服务器的通知推送,可以将服务器和对应通知频道的ID关联存储在字典或者数据库中,按不同服务器匹配对应的推送频道即可
内容的提问来源于stack exchange,提问作者Derek
相关产品推荐
相关产品推荐

