команда kick and ban больше не работает для меня, хотя я не изменил ее - PullRequest
0 голосов
/ 07 июня 2019

Я успешно сделал удар и забанил день или два назад, а сегодня я снова его тестировал, и вдруг он не сработал, и я не могу понять, почему. Я не верю, что я изменил что-то внутри команды, кроме заданного цвета.

И теперь kick @user также не удаляется после отправки. Тем не менее, кодовое сообщение отправляет мне сообщение о том, что этого человека выгнали. Я использую discord.js и код Visual Studio. Я также новичок в программировании и создании ботов.

Я попытался изменить message.guild.member (kUser) .kick (kReason) и изменить порядок вещей.

// A command to ban certain people aand will then send me a dm
    case 'ban':
            if(message.member.roles.find("name", "Owner")){

                let bUser = message.guild.member(message.mentions.members.first() || message.guild.members.get(args[0]));
                if (!bUser) return message.channel.send("Who is being banned?");
                let bReason = args.join("Banned  ").slice(3);
              message.delete();
                let banEmbed = new Discord.RichEmbed()
                  .setDescription("Ban Management")
                  .setColor(0xf44242)
                  .addField("Banned User", `${bUser.user.tag} with ID ${bUser.id}`)
                  .addField("Banned By", `<@${message.author.id}> with ID ${message.author.id}`)
                  .addField("Banned In", message.channel.name)
                  .addField("Time", message.createdAt)
                  .addField("Reason", bReason);


                // sends me a dm
                  bot.users.get("485655477812723712").send(banEmbed);  // 485655477812723712 is second sofiras id
                  message.guild.member(bUser).ban(bReason)           

                }else{
                    message.channel.sendMessage('You have not been granted this ability');
                }


              break;

    // command to kick certain people and then send me a dm 
    case 'kick':
            if(message.member.roles.find("name", "Owner")){
                let kUser = message.guild.member(message.mentions.members.first() || message.guild.members.get(args[0]));
                if (!kUser) return message.channel.send("Who is being kicked?");
                let kReason = args.join("Kicked ").slice(4);

                let kickEmbed = new Discord.RichEmbed()
                  .setDescription("Ban Management")
                  .setColor(0xf44242)
                  .addField("Kicked User", `${kUser.user.tag} with ID ${kUser.id}`)
                  .addField("kicked By", `<@${message.author.id}> with ID ${message.author.id}`)
                  .addField("Kicked In", message.channel.name)
                  .addField("Time", message.createdAt)
                  .addField("Reason", kReason);

                  // sends me a dm
                  bot.users.get("485655477812723712").send(kickEmbed); // 485655477812723712 is second sofiras id
                  message.guild.member(kUser).kick(kReason)

                }else{
                    message.channel.sendMessage('You have not been granted this ability')

            }

              break;

Я ожидал, что когда я отправлю команду, что человек будет выгнан или забанен, удалите эту команду / сообщение, а затем отправьте мне на вставку, однако он просто отправляет вставку. Не удаляет команду / сообщение и не пинает и не банит участника.

1 Ответ

1 голос
/ 07 июня 2019
  • Я не вижу, чтобы вы удаляли командное сообщение где-либо в вашем коде.
    message.delete()

  • Когда вы запрещаете или пинаете участника, вы неправильно используете параметр options.
    bUser.ban({ reason: bReason }) / kUser.kick({ reason: kReason })

  • В приведенном ниже коде есть несколько других улучшений, таких как перехват отклоненных обещаний, удаление избыточного кода, выполнение дополнительных проверок перед запретом, передача функции в Collection.find() и удаление устаревшего Channel.sendMessage() вызова. Я сделал это только с одной из команд, так как вы можете реализовать эти улучшения в обеих.

// Async context needed in order to use the keyword 'await'

case 'ban':
  try {
    if (!message.member.roles.find(r => r.name === 'Owner')) return await message.channel.send(':x: Insufficient permission.');

    const banning = message.mentions.members.first() || message.guild.members.get(args[0]);

    if (!banning) return await message.channel.send(':x: No user provided.');
    if (banning.id === bot.user.id) return await message.channel.send(':x: Think you\'re smart?');
    if (!banning.bannable || banning.roles.find(r => r.name === 'Owner')) return await message.channel.send(':x: Insufficient permission.');

    const reason = args.slice(1).join(' ') || '*None*'; // Assuming args[1] is the reason

    await message.delete();

    var embed = new Discord.RichEmbed()
      .setColor(0xf44242)
      .setTitle('**Ban Management**')
      .setDescription('A user has been banned.')
      .addField('User', `${banning.user} (${banning.user.tag})`)
      .addField('Moderator', `${message.author} (${message.author.tag})`)
      .addField('Location', `${message.channel} (${message.channel.name})`)
      .addField('Reason', `${reason}`)
      .setTimestamp();

    const me = bot.users.get('485655477812723712');
    await me.send(embed);

    await banning.ban({ reason: reason });
  } catch(err) {
    console.error(err);
  }
...