You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Discord.js公告机器人异常求助:发送内容含指令前缀

解决Discord.js公告机器人的内容发送问题&嵌入功能实现

我来帮你搞定这个问题!你的核心问题有两个:一是机器人发送了完整的指令内容而非你想要的公告文本,二是需要正确嵌入命令相关内容到消息里。咱们一步步来修正:

问题根源分析

  1. 错误引用了完整消息内容:你原代码里用message.content填充嵌入字段,这会把用户发送的整条消息(包括前缀?和命令Ann)都放进去,自然会输出?Ann Hello Guys。你需要提取的是命令后面的参数部分。
  2. 未处理命令大小写匹配:你的switch判断的是小写'ann',但用户输入的是?Ann(大写A),这会导致匹配失败(除非你测试时输入的是小写),统一转成小写能避免这个问题。
  3. 缺少删除用户消息的逻辑:你提到要删除指令消息,但原代码里没有这部分逻辑,得补上。

修正后的完整代码

const Discord = require('discord.js'); // 必须导入Discord模块,原代码遗漏了这一步!
const client = new Discord.Client();
const PREFIX = '?';

client.login('你的机器人Token');

client.once('ready', () => {
 console.log('Questo bot e online!');
});

client.on('message', async message => {
 // 忽略机器人自身的消息,防止循环触发
 if (message.author.bot) return;
 // 只处理以设定前缀开头的消息
 if (!message.content.startsWith(PREFIX)) return;

 // 提取命令与参数:移除前缀后分割,同时统一命令大小写
 const args = message.content.slice(PREFIX.length).trim().split(/ +/);
 const command = args.shift().toLowerCase(); // 移除命令部分,剩下的args就是公告内容的分段

 switch(command) {
 case 'ann':
 // 先删除用户的指令消息,用async/await确保删除完成后再发送公告
 await message.delete().catch(err => {
  console.error('无法删除消息:', err);
 });

 // 拼接公告内容:如果有参数就合并成字符串,否则设置默认提示
 const announcementContent = args.join(' ') || '请输入公告内容哦!';

 // 创建嵌入消息,将提取到的公告内容嵌入进去
 const embed = new Discord.MessageEmbed()
  .setTitle('服务器公告') // 自定义嵌入标题
  .setDescription(announcementContent) // 把公告内容放在嵌入描述区
  .setColor('#2f3136') // 自定义嵌入颜色(这里用Discord深色主题色)
  .setTimestamp(); // 自动添加时间戳,可选

 // 发送嵌入公告到当前频道
 message.channel.send(embed);
 break;
 }
});

关键改动说明

  • 补上Discord模块导入:原代码没有require('discord.js'),会导致Discord.MessageEmbed无法识别,这是基础错误。
  • 优化参数提取逻辑:用trim()去除前后空格,split(/ +/)处理多个空格的情况,args.shift()把命令从参数数组里分离,剩下的参数拼接后就是你要的公告文本。
  • 加入消息删除逻辑:用async/await保证删除消息后再发送公告,同时添加错误捕获,避免机器人因权限不足报错。
  • 正确实现嵌入功能:现在嵌入消息里展示的是提取后的公告内容,完全符合你预期的效果。

注意事项

  • 确保机器人在服务器中拥有管理消息的权限,否则无法删除用户的指令消息。
  • 如果你使用的是Discord.js v13及以上版本,需要在Discord开发者门户的机器人设置中开启消息内容意图(Message Content Intent),否则机器人无法读取消息内容。

内容的提问来源于stack exchange,提问作者user13775332

火山引擎 最新活动