【问题标题】:Unban everyone command解禁所有人命令
【发布时间】:2021-01-01 21:42:57
【问题描述】:

我制作了这个代码来解除所有人的禁令。但它不起作用。这有什么问题?我是初学者。

let discord = require("discord.js")
let client = new discord.Client()

client.on('message', message => {
  const member = message.member;
  switch (message.content.toLowerCase()) {
    case (PREFIX + "-unban all"):
      if (member.hasPermission('MANAGE_SERVER')) {
        async function ubAll() {
          const users = await message.guild.fetchBans()
          for (const user of users.array()) {
            await message.guild.unban(user)
          }
        }
        let embed = new discord.MessageEmbed()
          .setTitle("Done!")
          .setDescription("Successfully Unbanned everyone.")
          .setColor("Green")
          .setThumbnail("https://riyazapp.com/wp-content/uploads/2020/04/checkmark.gif")

      }
      if (!member.hasPermission('MANAGE_SERVER')) {
        message.reply("You do not have enough permissions for this command!")
      }
  }
})

client.login("not showing")

   

【问题讨论】:

标签: javascript discord discord.js


【解决方案1】:
let discord = require("discord.js");
let client = new discord.Client();

client.on('message', message => {
  const member = message.member;
  switch (message.content.toLowerCase()) {
    case ("-unban all"):
      if (member.hasPermission('MANAGE_SERVER')) {
        async function ubAll() {
            let users = await message.guild.fetchBans();
            let userArr = users.array();
            let unbanUsers = [];
            for(var i = 0; i < userArr.length; i++) {
                unbanUsers.push(userArr[i].user.id);
            }
            for(var j = 0; j < unbanUsers.length; j++) {
                message.guild.members.unban(unbanUsers[j]);
            }
        }
        ubAll();
        let embed = new discord.MessageEmbed()
          .setTitle("Done!")
          .setDescription("Successfully Unbanned everyone.")
          .setColor("Green")
          .setThumbnail("https://riyazapp.com/wp-content/uploads/2020/04/checkmark.gif")
        message.channel.send(embed);

      }
      else {
        message.reply("You do not have enough permissions for this command!")
      }
      break;
  }
})

client.login("not showing")

您好,您的代码中有很多错误。你使用了PREFIX 却没有定义它。我猜你的前缀是-,因为我在你的开关盒的第一种情况下看到了它。无论如何,我还修复了您的 ubAll 功能。它现在看起来有点复杂,但不要担心它并不难理解。因为我是经典 for 循环的粉丝,所以我在新函数中使用了它们。

那么功能是什么?
users 中存储了来自被禁止用户的所有信息。在userArr 中,我们只是将我们从users 获得的所有信息存储在一个数组中。然后我创建了一个空数组unbanUsers,如果我们想要存储我们想要解禁的所有用户(在我们的例子中是每个人)。然后在第一个 for 循环中,我们遍历 users 数组中的所有值,并将用户 ID 推送到我们的 unbanUsers 数组中(因为我们需要用户的 ID 来解除他的禁令)。现在,我们在第一个 for 循环中找到的每个用户的 ID 都存储在 unbanUsers 中。在第二个 for 循环中,我们遍历 unbanUsers 数组并取消禁止每个用户。

然后您必须调用该函数,因为如果您不这样做,它根本无法工作。在您的情况下,您还忘记了 break;。对于 switch-case 中的每个 case,您都需要一个 break;,否则它将搜索直到找到第一个 break;,如果没有,它将创建一个无限循环。并且您必须将您创建的嵌入发送到频道中。

【讨论】:

    猜你喜欢
    • 2021-04-05
    • 2021-01-12
    • 2021-06-20
    • 2021-04-18
    • 2021-07-27
    • 2021-01-18
    • 1970-01-01
    • 2021-08-09
    • 2018-11-03
    相关资源
    最近更新 更多