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

Python开发Discord机器人时on_member_join异步函数未执行是什么原因?

问题原因及解决方案
  • 核心代码错误:你已配置Intents但未将其传入Client初始化参数,这是导致事件无法触发的最直接原因。你现有代码中client=discord.Client()未携带intents参数,机器人不会使用你开启的members权限接收相关事件。
  • 特权网关意图未开启:discord.py v2.0及以上版本中,on_member_join这类成员相关事件属于特权事件,你需要登录Discord开发者门户,在对应机器人的设置页面中开启Server Members Intent开关,否则Discord网关不会向你的机器人推送成员加入事件。
  • 配置参数错误:请检查代码中ServerID、ChannelID是否为正确的整数类型数值,若填错值即使事件触发也会执行失败无响应,可在on_member_join函数首行加入打印语句测试事件是否被触发。
修正后的代码示例
import discord
intent = discord.Intents.default()
intent.members = True
# 修正:将配置好的intent传入Client
client = discord.Client(intents=intent)
# 注意将下方ServerID、ChannelID替换为你自己的实际数值
ServerID = 你的服务器ID
ChannelID = 你的频道ID

@client.event
async def on_ready():
    print('We have logged in as {0.user}'.format(client))

@client.event
async def on_member_join(member):
    # 可加此行测试事件是否触发
    print(f"新成员加入:{member.name}")
    guild = client.get_guild(ServerID)
    channel = guild.get_channel(ChannelID)
    await channel.send(f'Welcome to the server{member.mention}! :D')
    await member.send(f'Welcome to the {guild.name} server,{member.name}! :D')
    print(f'Welcome to the {guild.name} server,{member.name}! :D')

@client.event
async def on_message(message):
    if message.author == client.user:
        return
    if message.content.startswith('$hello'):
        await message.channel.send('Hello!')

内容的提问来源于stack exchange,提问作者Mohammad Yusuf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 07:15:04