【问题标题】:Send user that got kicked the reason why they got kick向被踢的用户发送他们被踢的原因
【发布时间】:2021-09-12 09:53:30
【问题描述】:

我唯一的代码是这样的:

module.exports = {
    name: "kick",

    description: "This command kicks a member!",
    execute(message, args) {
        const target = message.mentions.users.first();

        if (target) {
            const memberTarget = message.guild.members.cache.get(target.id);

            memberTarget.kick();
            message.channel.send("User has been kicked");
        } else {
            message.channel.send(`You coudn't kick that member!`);
        }
    },
};

早上好。所以我试图让它向被踢的人发送信息,说明他们被踢的原因。 (!kick user reason) 我想要它,所以机器人 DM 告诉这个人原因是什么,但我不知道该怎么做。

【问题讨论】:

    标签: javascript node.js discord discord.js bots


    【解决方案1】:

    您只需要添加以下内容:

    const reason = args.splice(1).join(` `) || 'Not specified';
    memberTarget.send(`You have been kicked: \nReason: ${reason}`)
    
    module.exports = {
        name: "kick",
    
        description: "This command kicks a member!",
        execute(message, args) {
            const target = message.mentions.users.first();
    
            if (target) {
                const memberTarget = message.guild.members.cache.get(target.id);
                const reason = args.splice(1).join(` `) || 'Not specified';
                memberTarget.kick();
                message.channel.send("User has been kicked");
                memberTarget.send(`You have been kicked: \nReason: ${reason}`)
            } else {
                message.channel.send(`You coudn't kick that member!`);
            }
        },
    };
    

    const reason = args.splice(1).join() || 'Not specified'; 定义了“原因”属性,如果没有原因,则默认为“未指定”。

    memberTarget.send(你被踢了:\n原因:${reason}) 只需将消息发送给目标成员即可。

    【讨论】:

      【解决方案2】:

      马上,我看到您正在使用message.mentions.users 获取target,并从公会的缓存中获取memberTarget。你应该避免这种情况并使用message.mentions.members


      您必须使用GuildMembersend 方法,但由于它返回Promise,因此您必须捕获任何错误。 (例如:机器人不能 DM 成员)

      // You should do some sanity checks in case you haven't. You don't want everyone to be able to kick members using the bot.
      
      // Getting the first member in message.mentions.members.
      const target = message.mentions.members.first();
      // Making sure that target is defined.
      if (!target) return message.channel.send('Please mention a member to kick.');
      // Making sure a reason is provided. (args[0] is the mention)
      if (!args[1]) return message.channel.send('Please provide a reason.');
      // Making sure the bot can kick the target.
      if (!target.kickable) return message.channel.send('Couldn\'t kick the target.');
      
      // Trying to send a message to the target, notifying them that they got kicked, and catching any errors.
      target.send(`You have been kicked from ${message.guild.name} for ${args.slice(1, 2000).join(' ')}`).catch(console.error).finally(() => {
          // After the message was sent successfully or failed to be sent, we kick the target and catch any errors.
          target.kick(`Kicked by ${message.author.tag} for ${args.slice(1, 2000).join(' ')}}.`).then(() => {
              message.channel.send(`${target.user.tag} has been kicked for ${args.slice(1, 2000).join(' ')}.`);
          }).catch(error => {
              console.error(error)
              message.channel.send(`Something went wrong...`);
          });
      });
      

      【讨论】:

        【解决方案3】:

        这是我提出的原因的有效踢命令(你可以试试):- 它具有您应该在 kick 命令中进行的所有验证

        const Discord = require('discord.js')
        
        exports.kick = async(message , prefix , client) => {
            if(!message.member.hasPermission("KICK_MEMBERS")) return message.channel.send('Missing Permission! You need to have `KICK_MEMBERS` permissions in order kick this member.')
        
            if(!message.guild.me.hasPermission("KICK_MEMBERS")) return message.channel.send('Missing Permission! I need to have `KICK_MEMBERS` permissions to kick this member.')
        
            const args = message.content.slice(prefix.length).trim().split(' ');
            const command = args.shift().toLowerCase();
        
            let member = message.mentions.members.first();
        
            if(!member){
              let err = "```css\n[ Agrument Error : You Have not mentioned the user on first args. ]\n```\n\n"
        
              let embed = new Discord.MessageEmbed()
              .setAuthor(`${client.user.username} Help Manual` , client.user.displayAvatarURL({format : "png"}))
              .setTitle(`${message.guild.name}`)
              .setDescription(err)
              .addField('Help Command:' , `\`\`\`\n${prefix}kick @user#0001 Reason\n\`\`\``)
              .setTimestamp()
              .setColor('RED')
              return message.channel.send(embed)
            }
        
            if(args[0] != `<@!${member.id}>`){
        
              let err = "```css\n[ Agrument Error : You Have not mentioned the user on first args. ]\n```"
        
              let embed = new Discord.MessageEmbed()
              .setAuthor(`${client.user.username} Help Manual` , client.user.displayAvatarURL({format : "png"}))
              .setTitle(`${message.guild.name}`)
              .setDescription(err)
              .addField('Help Command:' , `\`\`\`\n${prefix}kick @user#0001 Reason\n\`\`\``)
              .setTimestamp()
              .setColor('RED')
              return message.channel.send(embed)
            }
        
            if(member.id === message.author.id) return message.channel.send(`Why? No Just Say Why Do you want to kick yourself?`)
        
            let reason = args.slice(1).join(' ');
            if(!reason || reason.length <= 1){
              reason = "No Reason Was Provided."
            }
        
            if(!member.kickable){
              return message.channel.send(`I Don't Have Permissions to Kick ${member.user.username}`)
            }
        
            member.kick().then(() => {
              return message.channel.send(`Successfully Kicked ${member.user.username} for Reason ==> \`${reason}\``)
            }).catch(() => {
              return message.channel.send(`I Don't Have Permissions to Kick ${member.user.username}`)
            })
        }
        

        【讨论】:

        • 您被否决了,因为它没有回答问题。 OP 想向被踢的成员发送 DM。
        猜你喜欢
        • 1970-01-01
        • 2021-09-13
        • 1970-01-01
        • 2014-06-17
        • 2021-03-12
        • 1970-01-01
        • 2019-02-15
        • 1970-01-01
        • 2021-06-11
        相关资源
        最近更新 更多