DiscordAPIError: Недопустимое тело формы Идентификатор пользователя: Значение «информация» не является снежинкой

#javascript #node.js #discord #discord.js #bots

Вопрос:

Я создаю бота discord, и одна из команд-это команда удара, поэтому проблема в том, что при вводе «=информация о ударе» должна отображаться вставка, которая даст вам информацию о команде, и она продолжает выдавать мне ошибку

DiscordAPIError: Invalid Form Body user_id: Value "info" is not snowflake.

Раньше он работал просто отлично, но по какой-то причине он начал выдавать мне эту ошибку не только с этой командой, но и со всеми остальными.

Я попытался создать отдельную команду, которая отображала бы встраивание, если вы набрали =info «команда», но это не сработало, если для этого есть исправление, пожалуйста, дайте мне знать.

Вот код:

 const Discord = require('discord.js')

module.exports = {
    name: 'kick',
    description: 'Use this command to kick a member from the server so that they have to recieve an invite to re-join it.',
    async execute(client, message, args) {
           let PermissionEmbed = new Discord.MessageEmbed()
           .setDescription(":no_entry: **You do not have Permission to use this command.**")
           .setColor('#FF0000');
   
           let PermissionEmbed2 = new Discord.MessageEmbed()
           .setDescription(":no_entry: **I do not have Permission to Kick members.**")
           .setColor('#FF0000');
           
   if(!message.member.hasPermission("KICK_MEMBERS")) return message.channel.send(PermissionEmbed);
   if(!message.guild.me.hasPermission("KICK_MEMBERS")) return message.channel.send(PermissionEmbed2);

   let reason = args.slice(1).join(" ");
   const mentionedMember = message.mentions.members.first() || await message.guild.members.fetch(args[0]);
   let yes = 'info'
   let ErrorEmbed = new Discord.MessageEmbed()
   .setDescription(":no_entry: **User could not be kicked, the user's role is higher than mine**")
   .setColor('#FF0000');

   let ErrorEmbed2 = new Discord.MessageEmbed()
   .setDescription(":no_entry: **User could not be kicked, the user's role is higher than Yours**")
   .setColor('#FF0000');

   let ErrorEmbed3 = new Discord.MessageEmbed()
   .setDescription(":no_entry: **You cannot kick me.**")
   .setColor('#FF0000');

   let ErrorEmbed4 = new Discord.MessageEmbed()
   .setDescription(":no_entry: **You cannot kick yourself.**")
   .setColor('#FF0000');

   const KickedEmbed = new Discord.MessageEmbed()
   .setDescription(':white_check_mark: **Successfully Kicked ' mentionedMember.user.tag '**')
   .setColor('2eb82e')

   const Embedhelp = new Discord.MessageEmbed()
   .setTitle('Kick Command')
   .setColor('#6DCE75')
   .setDescription('**Description**nUse this command to kick a member from the server so that they have to recieve an invite to re-join it')
   .addFields(
     { name: '**Usage:**', value: '=kick (user) (reason)'},
     { name: '**Example:**', value: '=kick @Michael gtfo'},
     { name: '**Info**', value: 'I cannot kick members that have a higher role than menYou cannot kick members that have a higher role than you.nYou cannot kick me.nYou cannot kick yourself'}
  )
   .setFooter(client.user.tag, client.user.displayAvatarURL());

   if (!reason) reason = 'No reason given';
   if (!args[0]) return message.channel.send(Embedhelp);
   if (args[0] === yes.toLowerCase)
   if (!mentionedMember) return message.channel.send(Embedhelp);
   if (!mentionedMember.kickable) return message.channel.send(ErrorEmbed);
   if (mentionedMember.user.id == message.author.id) return message.channel.send(ErrorEmbed4);
   if (mentionedMember.user.id == client.user.id) return message.channel.send(ErrorEmbed3);
   if (message.member.roles.highest.position <= mentionedMember.roles.highest.position) return message.channel.send(ErrorEmbed2)

   const kickEmbed = new Discord.MessageEmbed()
     .setTitle('You have been Kicked from ' message.guild.name)
     .setDescription('Reason for Kick: ' reason)
     .setColor('#6DCE75')
     .setTimestamp()
     .setFooter(client.user.tag, client.user.displayAvatarURL());

    await mentionedMember.send(kickEmbed).catch(err => console.log(err));
    await mentionedMember.kick({
      days: 7,
      reason: reason
    }).catch(err => console.log(err)).then(() => message.channel.send(KickedEmbed));
    }
}
 

Я попытался поискать в Интернете исправление, но не смог найти ни одного, которое бы сработало.

Ответ №1:

Если содержимое вашего сообщения таково =kick info , args[0] это строка "info" . Когда вы пытаетесь извлечь участника, используя message.guild.members.fetch(args[0]) его, он отправляет запрос user_id "info" , в котором указано, что не является допустимой снежинкой.

Быстрым решением было бы проверить значение args[0] ранее и вернуть, если оно "info" :

 module.exports = {
  name: 'kick',
  description:
    'Use this command to kick a member from the server so that they have to recieve an invite to re-join it.',
  async execute(client, message, args) {
    if (args[0] === 'info')
      return message.channel.send('Some info about this command...')

    let PermissionEmbed = new Discord.MessageEmbed()
    // ...
 

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

1. Я попробовал исправить то, что @Zsolt Meszaros сказал мне попробовать, но это не сработало, это все еще дает мне ту же ошибку