【问题标题】:discord.js simple kick users commanddiscord.js 简单的踢用户命令
【发布时间】:2021-08-04 14:02:48
【问题描述】:

我最近使用参数为我的机器人创建了一个踢命令。我不想使用message.mentions.users.first(),因为如果他/她的消息被!kick 回复,那会踢用户。我在下面给出了我的代码。尽管我已经提到了一个用户,但机器人只要求我提及一个用户。

module.exports = {
  name: 'kick',
  description: 'kicks a user',
  async execute(message, args){
         
    if (!message.member.hasPermission('KICK_MEMBERS')) {
      message.reply('Insufficient Permissions')
      return;
    }

    if (!message.guild.me.hasPermission('KICK_MEMBERS')) {
      message.reply('I need the `KICK_MEMBERS` permission to execute this!')
      return;
    }
    
    const user = message.guild.members.cache.get(args[1]);

    if (!user) {
      message.reply('Mention the uer to kick!')
      return;      
    }
     
    if (message.guild.members.cache.get(args[1]) == undefined) {
      message.reply('Couldn\'t find the user')
      return;
    }

    const reason = args.slice(2).join(' ')

    await user.send(`You have been kicked from **${message.guild.name}**. Reason : ${reason}`)
    .catch(err => {
      console.log(err)
    });
    
    await user.kick(reason);

    await message.channel.send(`**${message.author.username}** kicked **${user.username}**! Reason : ${reason}`)

  }
}

【问题讨论】:

    标签: node.js discord.js repl.it


    【解决方案1】:

    这是因为.get()需要ID作为参数

    第一种方法

    用这个替换你的用户常量 const member = message.mentions.members.first() || message.guild.members.cache.get(args[1]) 这样您就可以同时支持 ID 和提及

    第二种方法

    使用正则表达式

    const member = await message.guild.members.fetch(args[1].replace(/\D/g,'')).catch(() => {}); 此正则表达式从字符串中删除所有非数字字符,不和谐的提及是这样组成的 ,正则表达式删除 并返回用户 ID,然后传递给 .fetch() 并返回您的成员需要踢。

    这将是正确的代码 iirc

    module.exports = {
      name: 'kick',
      description: 'kicks a user',
      async execute(message, args){
             
        if (!message.member.hasPermission('KICK_MEMBERS')) {
          message.reply('Insufficient Permissions')
          return;
        }
    
        if (!message.guild.me.hasPermission('KICK_MEMBERS')) {
          message.reply('I need the `KICK_MEMBERS` permission to execute this!')
          return;
        }
    
        if (!args[1) return message.reply('provide a member for me to kick');
    
        const member = await message.guild.members.fetch(args[1].replace(/\D/g,'')).catch(() => {});
    
        if (!member) return message.reply('Member not found :(')
    
        const reason = args.slice(2).join(' ')
    
        await member.send(`You have been kicked from **${message.guild.name}**. Reason : ${reason}`)
        .catch(err => {
          console.log(err)
        });
        
        await member.kick(reason);
    
        await message.channel.send(`**${message.author.username}** kicked **${member.user.username}**! Reason : ${reason}`)
    
      }
    }
    

    【讨论】:

    • 嗯,机器人不会踢用户,也不会在控制台中显示错误。相反,它说找不到成员,尽管该成员在服务器中
    • @DarshanB 我检查了我的代码它工作正常,我认为它与你的 args 有关系,尝试控制台记录 args[1],确保 args[1] 是 ID/提及。跨度>
    猜你喜欢
    • 2021-06-01
    • 2021-11-13
    • 2020-11-18
    • 2020-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-15
    • 2021-06-03
    相关资源
    最近更新 更多