Discord机器人/ping命令开发问题:私信提及用户及回复pong
解决Discord机器人/ping命令私信发送问题
我来帮你搞定这个私信发送的问题!先梳理下你代码里的问题,再给出靠谱的修正方案:
1. 先揪出代码里的小错误
你原代码里用了mention_user这个变量,但实际上你定义的被提及用户变量是usr——这个笔误会直接导致私信发送失败,甚至可能抛出未定义变量的错误。
2. 正确的私信发送实现
如果你的机器人基于discord.py开发,给用户发私信的标准方式是调用用户对象的send()方法。移除自定义的safe_send_message后,咱们用原生API来替代,同时增加异常处理让命令更健壮。
下面是修正后的完整代码:
async def cmd_ping(self, author, user_mentions): if not user_mentions: raise exceptions.CommandError("No users listed.", expire_in=20) else: usr = user_mentions[0] # 尝试给被提及用户发送私信 try: await usr.send("`pong!`") except discord.Forbidden: # 处理无法发送私信的情况(比如用户关闭了陌生人私信) return Response(self.str.get('dm-failed', "无法给 ***{0}*** 发送私信!").format(usr.name)) # 返回频道内的pong回复 return Response(self.str.get('mentioned-user', "***{0}*** `pong`").format(usr.name))
关键细节说明
- 变量修正:把
mention_user替换成正确的usr,确保私信发送的对象是被@的用户。 - 原生私信方法:
usr.send()是discord.py官方提供的私信发送接口,稳定性比自定义封装方法更高。 - 异常处理:增加
try-except捕获Forbidden异常——毕竟有些用户会设置拒绝接收陌生人私信,加上这个处理能避免机器人报错崩溃,还能给用户反馈。
这样修改后,机器人就能正常给被@的用户发私信,同时在聊天频道回复pong啦。
内容的提问来源于stack exchange,提问作者Xehelias
相关产品推荐
相关产品推荐

