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

Discord.py能否通过用户ID向非服务器成员发送私信?

回答:Discord.py机器人向非服务器成员发私信的可行方案

首先得明确:你遇到的discord.errors.Forbidden错误,本质是Discord API的安全限制——机器人默认不能主动给和它没有共同服务器的用户发起私信,这是Discord为了防止垃圾机器人骚扰用户设置的核心规则。

那有没有可行的方法?只有一种例外情况:

可行场景:用户先主动联系过机器人

如果目标用户曾经主动给你的机器人发送过私信,那么Discord会允许机器人后续主动给该用户发消息。这种情况下,你可以通过用户ID获取用户对象,然后发送私信,代码示例如下:

import discord
from discord.ext import commands

bot = commands.Bot(command_prefix="!", intents=discord.Intents.all())

@bot.command()
async def dm_non_member(ctx, user_id: int, *, message: str):
    try:
        # 通过用户ID获取用户对象
        user = await bot.fetch_user(user_id)
        # 发送私信
        await user.send(message)
        await ctx.send(f"已成功给用户ID {user_id} 发送私信!")
    except discord.errors.Forbidden:
        await ctx.send("无法发送私信:该用户未主动联系过机器人,或已屏蔽机器人/关闭私信权限。")
    except discord.errors.NotFound:
        await ctx.send("未找到该用户ID对应的账号。")
    except Exception as e:
        await ctx.send(f"发送失败:{str(e)}")

bot.run("你的机器人令牌")

不可行的情况

如果用户从来没有主动给机器人发过消息,哪怕你知道用户ID,也无法强制发送私信——这是Discord API的硬限制,没有任何绕过的方法(任何声称可以绕过的手段都是违反Discord服务条款的,可能导致机器人账号被封禁)。

另外还要注意:即使用户主动联系过机器人,如果用户后来屏蔽了机器人,或者关闭了“允许来自服务器成员的私信”权限,机器人还是会触发403错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:50:49