Discord Bot如何向无共同服务器的指定用户ID列表发送私信?
Discord无共同服务器Bot发送私信实现说明
实现原理
你收到的这类私信是垃圾Bot利用Discord的私信规则实现的:
- 只要Bot获取到目标用户的有效ID,且目标用户的Discord隐私设置没有开启「仅允许同服务器成员发送私信」,Bot不需要和用户处于共同服务器就能发起私信
- 这类垃圾Bot通常是批量爬取公开频道、评论区露出的用户ID,定向批量发送邀请广告
你提到的原有代码只能给同服务器用户发私信,是因为代码中用的Greedy[User]参数解析逻辑,只能识别和Bot同服务器内的用户对象,无法解析不在同服务器的用户。
修改后的代码实现
你需要调整逻辑,直接通过用户ID拉取全局用户对象再发送私信,修改后代码如下:
from discord.ext.commands import Bot from discord import Intents # 初始化时开启必要的意图 intents = Intents.default() intents.message_content = True bot = Bot(command_prefix='!', intents=intents) @bot.command() async def pm(ctx, *, message): # 填入你要发送的目标用户ID列表,为整数格式 target_user_ids = [123456789012345678, 987654321098765432] for user_id in target_user_ids: try: # 通过ID全局拉取用户对象,不需要同服务器 user = await bot.fetch_user(user_id) await user.send(message) print(f"已向用户{user_id}发送私信") except Exception as e: print(f"向用户{user_id}发送失败:{e}") bot.run("你的Bot TOKEN")
注意事项
- Discord对Bot发送私信有严格的速率限制,短时间批量发送会直接触发风控,导致Bot账号被封禁
- 如果目标用户开启了非共同服务器私信拦截,消息会发送失败
- 批量发送广告邀请类内容违反Discord服务条款,一旦被举报,你的开发者账号、Bot都会被永久封禁
你提到的两条私信示例如下图:

内容的提问来源于stack exchange,提问作者help_me
相关产品推荐
相关产品推荐

