Discord.js Bot实现向指定用户ID发送自定义私信命令开发求助
实现步骤
1. 修复现有代码的基础问题
你当前的代码存在2处需要先修正的问题,否则会无法正常运行后续功能:
- 客户端初始化缺少发送私信必须的
DIRECT_MESSAGESIntent,且Discord.js v13及以上版本的消息触发事件名应为messageCreate,而非旧版的message,同时需要添加CHANNEL部分匹配配置才能正常触发私信相关逻辑 - 拆分参数的
split方法错误给正则加了引号,正则语法不需要用引号包裹
修正后的基础代码片段如下:
// 修正Intent和partials配置 const client = new Discord.Client({ intents: ["GUILDS", "GUILD_MESSAGES", "DIRECT_MESSAGES"], partials: ["CHANNEL"] }) // 替换旧的message事件为v13+支持的messageCreate事件 client.on('messageCreate', async message => { if (message.author.bot) return; let prefix = '??' if (!message.content.startsWith(prefix)) return; // 修正split的正则写法,去掉多余引号 let args = message.content.slice(prefix.length).trim().split(/ +/g); let msg = message.content.toLowerCase(); let cmd = args.shift().toLowerCase(); // 原有ping、hello命令逻辑保持不变 if (msg.startsWith(prefix + 'ping')) { message.channel.send('pong'); } if (msg.startsWith(prefix + 'hello')) { message.channel.send('hewwo uwu'); }
2. 新增私信发送命令逻辑
在现有hello命令的判断下方新增dm命令的处理代码,命令使用格式为??dm @目标用户 要发送的自定义私信内容
if (cmd === 'dm') { // 权限校验:仅管理员可使用该命令,避免被滥用发送垃圾私信 if (!message.member.permissions.has('ADMINISTRATOR')) return message.reply('你没有权限使用该命令') // 校验是否指定了目标用户 const targetUser = message.mentions.users.first() if (!targetUser) return message.reply('请@要接收私信的目标用户') // 提取要发送的私信内容 const dmContent = args.slice(1).join(' ') if (!dmContent) return message.reply('请输入要发送的私信内容') // 尝试发送私信 try { await targetUser.send(dmContent) message.reply(`已成功向${targetUser.tag}发送私信`) } catch (err) { // 发送失败的常见场景:用户关闭了陌生人私信、用户屏蔽了机器人 message.reply('私信发送失败,可能是目标用户关闭了陌生人私信权限或屏蔽了机器人') } } });
3. 额外注意事项
- 不要将机器人TOKEN硬编码写入代码,建议放到
config.json中读取,避免TOKEN泄露导致机器人被盗用 - 如果你使用的是Discord.js v14版本,Intent常量需要改为
GatewayIntentBits前缀的写法,权限常量也需要对应改为PermissionFlagsBits.Administrator
内容的提问来源于stack exchange,提问作者sara x
相关产品推荐
相关产品推荐

