【问题标题】:My bot says it doesnt have permissions to kick/ban我的机器人说它没有权限踢/禁止
【发布时间】:2021-05-20 03:22:16
【问题描述】:

我正在用 js 制作一个 Discord 机器人。昨天我完成了机器人禁令命令的一些工作,它工作正常。今天醒来,什么都不要修改,再试一次,它说它没有权限。没有任何改变,也没有人改变机器人的权限,它仍然有管理员。错误信息:

(node:2490) UnhandledPromiseRejectionWarning: DiscordAPIError: Missing Permissions
    at RequestHandler.execute (/home/runner/AUN/node_modules/discord.js/src/rest/RequestHandler.js:154:13)
    at processTicksAndRejections (internal/process/task_queues.js:97:5)
    at async RequestHandler.push (/home/runner/AUN/node_modules/discord.js/src/rest/RequestHandler.js:39:14)

我的代码是(有点长):

const Discord = require("discord.js");
const dp = require('discord-prefix');
const lang = require('../language_manager');
const settings = require('discord-server-settings');

module.exports = (message, client) => {
  if (!message.member.permissions.has("BAN_MEMBERS")) return message.reply("You do not have the permission to ban users");
  if (!message.guild.me.hasPermission("BAN_MEMBERS")) return message.reply("I do not have permission to ban users");
  let prefix = dp.getPrefix();
  if(dp.getPrefix(message.guild.id)){
    prefix = dp.getPrefix(message.guild.id);
  }
  var langchar = settings.getSetting('lang', message.guild.id)
  const args = message.content.slice(prefix.length).trim().split(' ');
  const command = args.shift().toLowerCase();
    var noerror = true;
  const member = getUserFromMention(args[0]);
  const reason = args[1] || lang.get('ban_no_reason', langchar);
  const embed1 = new Discord.MessageEmbed()
  .setAuthor('AUN', 'https://drive.google.com/uc?export=view&id=129_JKrVi3IJ6spDDciA5Y5sm4pjUF7eI')
  .setTitle(lang.get('ban_title', langchar))
  .setColor('#ed3f2c')
  .setDescription(lang.get('ban_noone_banned', langchar))
  .setTimestamp()
  .setFooter('Ping: ' + client.ws.ping + ' | '+prefix+command);
  const embed = new Discord.MessageEmbed()
  .setTitle(lang.get('ban_you_title', langchar))
  .setAuthor("AUN", "https://drive.google.com/uc?export=view&id=129_JKrVi3IJ6spDDciA5Y5sm4pjUF7eI")
  .setColor(0x00AE86)
  .setDescription(lang.get('ban_you_part1', langchar)+message.guild.name+lang.get('ban_you_part2', langchar)+message.member.name+lang.get('ban_you_part3', langchar)+reason)
  .setFooter("Ping: "+client.ws.ping+" | AUN discord bot")
  .setTimestamp();
  if (!member) {
    embed1.setTitle(lang.get('ban_error', langchar))
      .setDescription(lang.get('ban_no_mention', langchar))
      .setColor('#bd1300');
      noerror = false;
  }
  if(noerror){
        embed1.setDescription(lang.get('ban_banned_part1', langchar)+member.tag+lang.get('ban_banned_part2', langchar));
        member.send(embed);
    }
    message.channel.send(embed1);
  try{
      return message.guild.member(member).ban();
  }catch (e){
      return;
    }
  
  function getUserFromMention(mention) {
    if (!mention) return;

    if (mention.startsWith('<@') && mention.endsWith('>')) {
      mention = mention.slice(2, -1);

      if (mention.startsWith('!')) {
        mention = mention.slice(1);
      }

      return client.users.cache.get(mention);
    }
  }
}

如果你知道发生了什么,请告诉我

【问题讨论】:

    标签: node.js discord.js bots


    【解决方案1】:

    你应该检查你是否真的可以禁止该成员。

    你可以检查这个 GuildMember#manageable

    【讨论】:

    • 好的,我检查了该成员是否可管理,但它说不,我试穿的人。你知道这可能是什么原因吗?该成员是服务器上的 alt 帐户,没有权限
    • 如果成员具有更高的权限或具有更高的角色,则易于管理。我不太确定这里发生了什么
    • 您是否考虑过您的机器人可能没有足够的权限?
    • 查看github.com/discordjs/discord.js/blob/stable/src/structures/… 可管理的代码,它只真正检查Bot 是否具有比其他成员更高的角色,因此请确保它确实如此。
    • 我等了一天,机器人现在工作正常。我知道发生了什么。我没有更改任何代码而不是权限,突然它又可以工作了。这可能是不和谐的原因造成的,但我不知道实际发生了什么
    猜你喜欢
    • 2021-08-22
    • 2020-09-22
    • 2020-12-19
    • 1970-01-01
    • 2021-09-16
    • 2021-05-31
    • 2021-06-08
    • 2021-11-21
    相关资源
    最近更新 更多