Сообщение о внедрении бота Discord в проблему с обработчиком команд

#javascript #node.js #discord.js

Вопрос:

Я играл с ботом discord, когда мой код начал выходить из-под контроля, потому что кода было слишком много. Поэтому я решил немного поработать с командами.

Сначала я попытался сделать это с помощью команды ping, но, похоже, это не сработало.

То main.js :

 const config = require("./config.json");
const Discord = require('discord.js');
const { clientUser } = require("discord.js");
const clients = new Discord.Client({ intents: 14087});
const prefix = "-scp ";
var version = '1.6.6';
const packageJSON = require("./package.json");
const fs = require(`fs`);
const commandFiles= fs.readdirSync('./commands/')
                      .filter(file => file.endsWith('.js'));
for(const file of commandFiles){
  const command = require(`./commands/${file}`);

  clients.commands.set(command.name,command)
}

clients.on("messageCreate", (message) => {
  try{
    if( message.content == prefix   "ping" ){
    clients.commands.get('ping').execute(message,args);
}
 

файл для «ping» — это ping.js

 const Discord = require("discord.js");

module.exports = {
    name:'ping',
    description:"ping command",
    execute(message,args){
       
        const embed = new Discord.MessageEmbed()
          .setTitle("Pong! 🏓")
          .setDescription("clients's latency: "   
                     `**${message.createdTimestamp - Date.now()}ms**`   
                     "n"   `API's Latency: **${Math.round(clients.ws.ping)}ms**`)
          .setColor('RANDOM');
channel.send({embeds: });

    }
}
 

Ошибка:

 C:Users1loveDropboxMy PC (DESKTOP-MEST1TS)DesktopBot Core AssetsSCP bot assetsnode_modulesdiscord.jssrcrestRequestHandler.js:298
      throw new DiscordAPIError(data, res.status, request);
            ^
> DiscordAPIError: Cannot send an empty message
    at RequestHandler.execute (C:Users1loveDropboxMy PC (DESKTOP-MEST1TS)DesktopBot Core AssetsSCP bot assetsnode_modulesdiscord.jssrcrestRequestHandler.js:298:13)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async RequestHandler.push (C:Users1loveDropboxMy PC (DESKTOP-MEST1TS)DesktopBot Core AssetsSCP bot assetsnode_modulesdiscord.jssrcrestRequestHandler.js:50:14)
    at async TextChannel.send (C:Users1loveDropboxMy PC (DESKTOP-MEST1TS)DesktopBot Core AssetsSCP bot assetsnode_modulesdiscord.jssrcstructuresinterfacesTextBasedChannel.js:171:15) {
  method: 'post',
  path: '/channels/417093499167440896/messages',
  code: 50006,
  httpStatus: 400,
  requestData: {
    json: {
      content: undefined,
      tts: false,
      nonce: undefined,
      embeds: undefined,
      components: undefined,
      username: undefined,
      avatar_url: undefined,
      allowed_mentions: undefined,
      flags: undefined,
      message_reference: undefined,
      attachments: undefined,
      sticker_ids: undefined
    },
    files: []
  }
}
 

Ответ №1:

Ошибка новичка, вы пытаетесь отправить embed сообщение до того, как оно будет определено:

 const embed = new Discord.MessageEmbed()
   .setTitle("Pong! 🏓")
   .setDescription("clients's latency: " 
         `**${message.createdTimestamp - Date.now()}ms**` 
         "n"   `API's Latency: **${Math.round(clients.ws.ping)}ms**`)
   .setColor('RANDOM');
channel.send({embeds: });
 

Комментарии:

1. Разве вам тоже не нужно content: " " отправить сообщение?

2. содержимое не требуется при отправке встраивания самостоятельно

3. на самом деле это не решило проблему, но спасибо(я отредактировал сообщение)

4. Ты уверен? Каждый раз, когда я пытался отправить только вставку (без content: " " ) Я получил ошибку API Discord — Не удается отправить пустое сообщение

5. @Toasty используя 13.1.0, я смог отправить вставку без content опции. @какой-то ребенок играет в js, какую версию диджеев ты запускаешь?