【问题标题】:display message when trying to kick itsellf (the bot)尝试踢自己(机器人)时显示消息
【发布时间】:2021-04-16 19:57:37
【问题描述】:

我在命令中做出响应。我在尝试踢自己并工作时做出了响应,但现在我尝试在尝试踢机器人时做出响应并且它不起作用。

踢命令代码:

module.exports = {
    name: 'kick',
 aliases: ["k"],
    description: "kick a member",
 execute(message, Discord, client) {
    if(message.member.permissions.has("KICK_MEMBERS")){
        const member = message.mentions.members.first();
        let mention = message.mentions.members.first();
        if (message.mentions.members.size < 1) return message.reply('You must mention someone to kick them.').catch(console.error);
        if (message.mentions.members.first().id === message.author.id) return message.reply("I can't let you do that, self-harm is bad:facepalm:");

        if (message.mentions.members.id === client.member.id) return message.reply("You pleblord, how can you use a bot to kick itself?:joy:");

        if (message.mentions.members.first().id === "521311050193436682") return message.reply("You can't kick my Developer:wink:");
        if (reason.length < 1) reason = 'No reason supplied';

        if (!message.guild.member(user).kickable) return message.reply('I cannot kick that member');

        const embed = new Discord.MessageEmbed()
        .setColor(0x0000FF)
        .setTimestamp()
        .addField('Action:', 'Kick')
        .addField('User:', `${user.username}#${user.discriminator} (${user.id})`)
        .addField('Moderator:', `${message.author.username}#${message.author.discriminator}`)
        .addField('Reason', reason)
        .setFooter(`© Cryptonix X Mod Bot by ${customisation.ownername}`);

            if(user.bot) return;
          message.mentions.users.first().send({embed}).catch(e =>{
          if(e) return;
          });
             message.guild.member(user).kick();

         let logchannel = message.guild.channels.cache.find(x => x.name = 'logs');
            if  (!logchannel){
         message.channel.send({embed});
            }else{
         client.channels.cache.get(logchannel.id).send({embed});
          message.channel.send({embed});
         } 
            if(user.bot) return;
         message.mentions.users.first().send({embed}).catch(e =>{
            if(e) return ;
             });
         }

         else{
            let newEmbed = new MessageEmbed()
            .setColor('#e4e265')
            .setTitle('')
            .setURL('')
            .setDescription("Eeeh wait! You can't use that command <a:yepaa:797528125894295567>")
            .setImage('')
            .setFooter('');
    
            message.channel.send(newEmbed).then(r => r.delete({ timeout: 10000 }));
            }    
     }
};

这是我在不和谐聊天中尝试运行命令时遇到的错误

TypeError: Cannot read property 'member' of undefined
at Object.execute (C:\Users\ayman\Desktop\sharky music\commands\kick.js:15:56)

(kick.js:15:16 是尝试踢机器人时机器人响应的行)

【问题讨论】:

  • 错误是说client 是未定义的。你确定客户端参数被传递给execute 还是你只是把它塞进函数声明中并希望?也许尝试将client.member.id 更改为message.client.member.id,因为message 肯定存在并且第二个提示here 说“message.client”是访问客户端的一种方式。
  • 谢谢我试试
  • 嗨。我做了你所说的但仍然没有工作,所以我尝试将 client.member.id 替换为“是机器人”并工作。但是现在我想踢一个人,它告诉我原因没有定义,我不知道如何定义它

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


【解决方案1】:

如果您仔细观察,您已将成员定义为 const member = message.mentions.members.first(); let mention = message.mentions.members.first();

!message.guild.member(user).kickable 在您从他们的代码中更改了用户值后,您错过了更改返回成员未定义的 (user).kickable,因为机器人找不到“用户”而不是“提及”

member和mention都是djs中定义的值。所以我想说把它改成上面提到的。

您可以尝试: 删除const member = message.mentions.members.first();

改为:

const mentioned = message.mentions.members.first();

!message.guild.member(mentioned).kickable

if(mentioned.bot) return;

message.mentions.mentioned.first().send({embed}).catch(e =&gt;{if(e) return;});

最后被 message.guild.member(mentioned).kick();踢了

不知道它是否有效,但希望毕竟成员会被定义!


认为詹姆斯可能会得到回答,因为他已经在 cmets 上发帖了,但我只是把我的想法留在这里。如果我错了,请纠正我。

【讨论】:

  • 嗨。我做了你所说的但仍然没有工作,所以我尝试将 client.member.id 替换为“是机器人”并工作。另外,你说了一些复制的事情。我的朋友是 Nezuko(+100k 服务器)的开发者,他帮助我编写了代码。
  • 啊...那没关系。我只是想知道,因为它与链接中的非常相似。如果他帮助了你,那当然。我原以为我的代码没有按预期工作,因为我只是改变了值。
  • 好的没问题,也感谢您的宝贵时间
【解决方案2】:

if (message.mentions.members.id === client.member.id)

此 if 条件错误,因为 client 上不存在属性 member

您有两种方法可以解决您的问题:

  1. client.member.id替换为client.user.id(id相同)

    // The other code from above this if statement
    if (message.mentions.members.id === client.user.id) return message.reply("You pleblord, how can you use a bot to kick itself?:joy:");
    // The following code
    
  2. client.member.id 替换为 message.guild.me.id me 是来自客户端的 Guild#GuildMember 对象

    // The other code from above this if statement
    if (message.mentions.members.id === message.guild.me.id) return message.reply("You pleblord, how can you use a bot to kick itself?:joy:");
    // The following code
    

【讨论】:

    猜你喜欢
    • 2023-03-19
    • 1970-01-01
    • 2018-12-29
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多