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

DSharp+开发Discord机器人:触发命令后发送DM消息的解决方案

解决Discord机器人触发命令后发私信及RequireDirectMessage失效问题

为什么RequireDirectMessage会导致命令全失效?

RequireDirectMessage特性的作用是强制命令只能在私信渠道触发,你设置后服务器里命令失效是预期行为,但私信里也触发不了,大概率是这两个原因:

  • 测试账号开启了「不接收陌生人私信」,机器人无法向你发送或接收私信
  • 命令同时叠加了互斥特性(比如RequireGuild),导致命令直接无法被匹配

正确实现「触发命令后发私信」的方法

你的需求是用户在任意渠道(服务器/私信)触发命令后,机器人给用户发私信,不需要用RequireDirectMessage,直接通过用户对象发送即可,以Discord.NET为例:

[Command("senddm")]
public async Task SendDMCommand()
{
    try
    {
        // 获取触发命令的用户实例
        var targetUser = Context.User;
        // 发送私信
        await targetUser.SendMessageAsync("这是机器人给你发的专属私信!");
        // 在原渠道给用户反馈
        await ReplyAsync("私信已发送,记得查看消息箱~");
    }
    catch (Exception ex)
    {
        // 处理发送失败的情况(比如用户关了私信、屏蔽机器人)
        await ReplyAsync($"发送私信失败:{ex.Message}");
    }
}

若需限制命令仅在私信触发(排查RequireDirectMessage失效)

如果你确实想让命令只能在私信里用,按以下步骤排查:

  • 测试账号取消「不接收陌生人私信」设置(Discord设置→隐私与安全→允许来自服务器成员的私信)
  • 检查命令是否同时添加了RequireGuild这类限制服务器渠道的特性,两者互斥
  • 确认机器人的命令服务已正确注册,没有遗漏该命令
  • 用机器人好友账号测试,避免陌生人权限限制

内容的提问来源于stack exchange,提问作者Рома Хлынин

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 18:06:27