Discord.py DM ALL功能无法向服务器全员发送消息问题咨询
问题原因
你描述的现象核心原因是未启用Discord成员特权网关意图:discord.py v2.0及以上版本默认关闭了服务器成员相关的网关权限,此时ctx.guild.members仅能获取到机器人自身的账号信息,因此遍历的时候只会尝试给机器人自己发私信。
解决步骤
- 第一步:打开Discord开发者平台,进入你的机器人对应的应用页面,点击左侧「Bot」菜单,下滑找到「特权网关意图」分类,开启
服务器成员意图的开关。 - 第二步:修改代码中client的初始化配置,显式声明启用成员意图,示例初始化代码如下:
import discord from discord.ext import commands # 显式配置意图 intents = discord.Intents.default() intents.members = True # 启用成员意图 # 初始化时传入意图配置 client = commands.Bot(command_prefix='你的命令前缀', intents=intents)
- 第三步:原有业务逻辑代码建议优化异常捕获逻辑,避免裸
except吞掉所有错误信息影响排查:
@client.command() async def adm(ctx, *, message): await ctx.message.delete() for user in ctx.guild.members: try: await user.send(message) print(f"已向{user.name}发送私信") except discord.Forbidden: print(f"无法向{user.name}发送私信:用户关闭了陌生人私信权限/机器人被拉黑") except Exception as e: print(f"向{user.name}发送私信失败:{str(e)}") print("全员私信操作执行完毕")
补充说明
部分服务器开启了全员私信限制,或者用户设置了非共同服务器成员无法发送私信,这类场景触发的发送失败属于Discord平台的正常限制,无法通过代码规避。
内容的提问来源于stack exchange,提问作者qEniuu
相关产品推荐
相关产品推荐

