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

discord.py中on_member_join函数未触发问题求助

解决discord.py中on_member_join事件未触发的问题

核心问题:成员意图设置错误

你代码里的discord.members = True是无效写法,成员意图需要通过intents对象开启,而非直接修改discord模块属性。

修正步骤

  • 将discord.members = True替换为intents.members = True,确保成员意图被正确传递给Client实例
  • 确认Discord开发者后台的「服务器成员特权意图」已开启(你已完成此操作)
  • 邀请机器人时,确保链接包含guilds.members.read权限(重置邀请时可勾选对应权限,或直接在链接中添加包含该权限的参数)

修正后的完整代码

import discord
from discord import app_commands
from discord.ext import commands

import responses #my other class with the text responses

def run_discord_bot():
    TOKEN = 'token here'
    intents = discord.Intents.default()
    intents.message_content = True
    # 正确开启成员意图
    intents.members = True
    client = discord.Client(intents=intents)

    @client.event
    async def on_ready():
        print(f'{client.user} is now running!')

    @client.event
    async def on_member_join(member):
        print('here') # 现在应该能正常触发打印
        # 可在此添加分配默认角色的逻辑,示例:
        # default_role = discord.utils.get(member.guild.roles, name="默认角色")
        # if default_role:
        #     await member.add_roles(default_role)

    client.run(TOKEN)

额外排查点

如果修正后仍未触发,检查以下内容:

  • 测试时邀请全新用户进入服务器,on_member_join仅对首次加入的用户生效,已在服务器的用户重新加入不会触发
  • 确保机器人在服务器中的角色位置高于要分配的默认角色,否则无权限为用户添加该角色

内容的提问来源于stack exchange,提问作者Chad.W

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 03:07:41