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,提问作者Рома Хлынин
相关产品推荐
相关产品推荐

