【问题标题】:user.ban is Not a function?user.ban 是不是一个函数?
【发布时间】:2020-10-11 09:41:54
【问题描述】:

我试图发出一个禁止命令,您可以在其中有理由禁止用户。

结果 user.ban 不是 Discord.js V12 中的一个函数,尽管它应该是。

这是我的代码。

const { MessageEmbed } = require('discord.js');

module.exports = {
 name: 'ban',
 description: 'Bans a user.',
 category: 'Moderation',
 usage: '^ban <user> <reason>',
 run: async (bot, message, args) => {
  if (!message.member.hasPermission('BAN_MEMBERS')) {
   return message.channel.send('You do not have permission to do this! ❌');
  }

  if (!message.guild.me.hasPermission('BAN_MEMBERS')) {
   return message.channel.send('I do not have permission to do this! ❌');
  }

  const user = message.mentions.users.first();

  if (!user) {
   return message.channel.send('User was not specified. ❌');
  }

  if (user.id === message.author.id) {
   return message.channel.send('You cannot ban yourself! ❌');
  }

  let reason = message.content
   .split(' ')
   .slice(2)
   .join(' ');

  if (!reason) {
   reason = 'No reason provided.';
  }

  let Embed = new MessageEmbed()
   .setTitle(`Justice! | Ban Action`)
   .setDescription(`Banned \`${user}\` - Tag: \`${user.discriminator}\``)
   .setColor('ORANGE')
   .setThumbnail(user.avatarURL)
   .addField('Banned by', `\`${message.author.username}\``)
   .addField(`Reason?`, `\`${reason}\``)
   .setTimestamp();

  message.channel.send(Embed);

  user.ban(reason);
 },
};

有没有办法解决这个问题?

【问题讨论】:

标签: discord.js


【解决方案1】:

您获得的是用户而不是 GuildMember。用户代表不和谐的人,而 GuildMember 代表服务器的成员。您可以通过使用 mentions.members 而不是 mentions.users 来获得 GuildMember 而不是用户:

    const user = message.mentions.members.first()

【讨论】:

  • 我不认为这是问题所在,我的 ban 命令适用于提及的用户。
  • 在当前的 discord.js 版本 (v12) 中,mentions.users 返回一个没有 ban 方法的 'User' 集合。见the docs
  • 如果我没记错的话,我应该有 v12。有什么办法可以检查吗?
  • @Apollo24 你可以在你的机器人目录中运行npm list --depth=0,它应该会打印出你拥有的所有包及其版本。
  • discord.js 不在其中
猜你喜欢
  • 2017-11-26
  • 2016-07-08
  • 2020-05-17
  • 2016-03-18
  • 1970-01-01
  • 2013-03-03
  • 2022-01-09
  • 2018-03-12
  • 2017-08-17
相关资源
最近更新 更多