如何向命令发起者发送DM?Discord机器人无报错未发DM问题
Discord机器人无法发送DM的问题排查与解决
这种情况我碰到好多次了!明明代码没报错,但就是收不到DM,大概率是几个常见的小问题,我帮你捋一捋:
首先检查代码参数的问题
你当前的代码里把命令函数的参数写成了message,但用@client.command装饰器的时候,默认第一个参数是Context(上下文)对象,而不是Message对象。虽然Context也有author属性,但有时候会因为参数命名的混淆导致逻辑异常,更规范的写法应该是用ctx作为参数:
@client.command(aliases=['manage']) async def oversee(ctx): await ctx.author.send('Hello World!')
然后排查权限与设置问题
即使代码改对了,还有几个Discord层面的设置会阻止DM发送:
- 你和机器人必须在同一个Discord服务器里:Discord的规则是,机器人只能给和它共享至少一个服务器的用户发DM(除非用户主动给机器人发过消息)
- 检查服务器的隐私设置:进入服务器设置→「隐私安全」,确认「允许来自服务器成员的直接消息」是开启状态
- 检查你自己的隐私设置:打开用户设置→「隐私与安全」→「服务器隐私设置」,确保允许接收来自该服务器成员的DM
- 确认你没有屏蔽机器人:去Discord的「隐私设置」→「已屏蔽的用户」里看看有没有机器人的名字
最后确认机器人的运行状态
- 检查PyCharm的控制台,有没有显示机器人成功登录的日志(比如
Logged in as [你的机器人名称]),如果没有,说明机器人根本没连上Discord,自然发不了消息 - 确认你用对了命令前缀:比如你的机器人前缀是
!,那要发送!manage或者!oversee才能触发命令,直接打manage是没用的
内容的提问来源于stack exchange,提问作者D.sLyak
相关产品推荐
相关产品推荐

