如何为Discord Bot设置私信标准自动回复,非指令场景也触发预设应答
实现思路
首先需要在Bot的事件监听逻辑里,优先拦截messageCreate事件中**私信频道(Direct Message)**的消息,判断消息发送者不是Bot自身的前提下,先发送预设的自动回复内容,再根据你的业务需求决定是否继续匹配后续指令逻辑。
具体实现步骤(以discord.js v14为例)
- 第一步:在事件监听逻辑中添加消息类型判断,优先识别私信频道的非Bot自身消息
- 第二步:配置你需要的预设自动回复内容,支持嵌入消息(Embed)、普通文本等格式,可对齐Ticket Tool的回复效果
- 第三步:根据需求设置是否拦截后续指令匹配,比如需要优先回复后不响应私信指令的话,可在发送完自动回复后直接
return终止后续逻辑
代码示例
const { Client, GatewayIntentBits, EmbedBuilder } = require('discord.js'); const client = new Client({ intents: [ GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent, GatewayIntentBits.DirectMessages // 必须开启私信消息的监听权限 ], partials: ['CHANNEL', 'MESSAGE'] // 处理私信这类部分缓存的内容 }); // 预设自动回复嵌入消息配置,可自行调整内容、样式 const autoReplyEmbed = new EmbedBuilder() .setColor('#2B2D31') .setTitle('⚠️ 此账号为自动机器人') .setDescription('你发送的私信不会被人工查看,请前往对应服务器通过指令提交相关需求。\n\n常用操作指引:\n• 提交工单请在服务器内使用 `/ticket` 指令\n• 查看Bot功能说明请在服务器内使用 `/help` 指令') .setFooter({ text: '自动回复消息' }); client.on('messageCreate', async (message) => { // 优先判断是否为私信、消息发送者不是Bot自身 if (message.channel.type === 1 && !message.author.bot) { // 发送预设自动回复 await message.reply({ embeds: [autoReplyEmbed] }); // 如果不需要响应私信中的指令,直接return终止后续逻辑 return; } // 下方保留你原来的服务器指令匹配逻辑即可 // ... }); client.login('你的Bot Token');
注意事项
- 必须在Discord开发者后台的Bot设置页,开启
Message Content Intent权限,否则无法读取消息内容 - 如果你使用其他语言/框架(比如Python的discord.py),逻辑完全一致,只需要调整对应框架的私信频道判断、事件监听的写法即可
- 可以根据需求调整自动回复的内容,添加自定义功能说明、服务器指引等信息
内容的提问来源于stack exchange,提问作者Imereth
相关产品推荐
相关产品推荐

