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
相关产品推荐
相关产品推荐

