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

Discord Bot新建频道时发送私信功能运行无响应问题排查

故障原因

代码无法正常工作是三个明确问题导致的:

  • bot.get_user() 只接受整数类型的用户ID,你传入的是字符串占位符"My_Discord_ID",既没有替换为真实ID,字符串格式的ID也无法被识别,调用后会直接返回None,后续执行user.send()时直接抛出异常,没有任何可见提示。
  • 未配置Gateway Intents。discord.py 1.5及以上版本默认关闭服务器频道、成员相关的事件推送,on_guild_channel_create事件属于需要主动开启Intents才能接收的事件,不开启的话频道创建时Bot根本不会收到回调,自然不会执行后续逻辑。
  • 没有做基础的状态判断和异常捕获,Bot未完成缓存加载、用户关闭私信权限等场景下的报错不会打印到控制台,无法定位故障点。
修复后的可运行代码
import discord
from discord.ext import commands

# 开启所需事件权限
intents = discord.Intents.default()
intents.guilds = True
bot = commands.Bot(command_prefix="!", intents=intents)

@bot.event
async def on_ready():
    print(f"Bot登录成功,当前账号:{bot.user}")

@bot.event
async def on_guild_channel_create(channel):
    message = "This Message is sent via DM"
    # 替换为你自己的纯数字Discord ID,不要加引号
    target_user_id = 123456789012345678
    user = bot.get_user(target_user_id)
    if user:
        try:
            await user.send(message)
            print(f"已向{user.name}发送新频道通知,新频道名:{channel.name}")
        except discord.Forbidden:
            print("用户关闭了服务器成员私信权限,发送失败")
    else:
        print("未找到目标用户,请检查ID配置是否正确")

# 替换为你自己的Bot Token
bot.run("YOUR_BOT_TOKEN")
部署前检查项
  • 前往Discord开发者平台,在你的Bot应用设置页找到「Privileged Gateway Intents」分区,打开对应Intents开关,和代码里的Intents配置保持一致。
  • 邀请Bot进入服务器时,确保勾选了基础的查看频道权限,不需要额外给管理员权限。
  • 通知接收用户需要在对应服务器的隐私设置中,开启「允许来自服务器成员的直接消息」,否则Bot会被拦截无法发送私信。
  • 代码里的target_user_id必须替换为纯数字格式的Discord ID,不要加引号,YOUR_BOT_TOKEN替换为你Bot的真实Token。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 16:36:39