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

Discord机器人on_member_join事件无报错但无法触发问题排查

问题排查与解决方案

你的on_member_join事件无法正常触发/执行,结合代码细节,核心问题及解决方式如下:

1. Embed类名大小写错误

Python是大小写敏感语言,Discord.py中的嵌入消息类为**discord.Embed**(首字母大写),你代码里写成了discord.embed,这会导致事件执行时抛出异常,且Discord.py默认不会主动打印未捕获的事件异常,看起来像是事件没触发。

2. Intents可能未实际生效

你虽然配置了Intents,但如果创建Bot对象时没有将intents参数传入,配置的权限不会生效。正确的Bot实例创建方式:

bot = commands.Bot(command_prefix="你的指令前缀", intents=intents)

3. 频道与权限验证

  • 确认目标频道ID 1047615507995562014 是服务器内存在的文本频道
  • 机器人在该频道需拥有「发送消息」和「嵌入链接」权限,否则发送Embed会失败,表现为事件看似未触发

修正后的完整代码示例

import discord
from discord.ext import commands

# 配置Intents
intents = discord.Intents.all()
intents.members = True

# 创建Bot实例时传入intents
bot = commands.Bot(command_prefix="!", intents=intents)

@bot.event
async def on_member_join(member):
    """成员加入时发送欢迎Embed"""
    # 修正Embed类名
    embed = discord.Embed(
        title=f'Welcome to {member.guild.name}',
        description=f'{member.mention}, welcome to the server! \nMake sure to checkout the rules first. Enjoy your stay <3',
        color=0x0061ff
    )

    if member.guild.icon is not None:
        embed.set_thumbnail(url=member.guild.icon.url)

    try:
        channel = bot.get_channel(1047615507995562014)
        if channel:
            await channel.send(embed=embed)
        else:
            print("未找到目标频道,请检查频道ID是否正确")
    except Exception as e:
        print(f"发送欢迎消息失败: {str(e)}")

bot.run("你的机器人Token")

额外排查建议

开启日志输出,方便查看事件执行时的异常细节:

import logging
logging.basicConfig(level=logging.INFO)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 16:20:27