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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:19:50