簡體   English   中英

怎么修? 由於值錯誤,Discord.js Bot 不斷脫機

[英]How to fix? Discord.js Bot keeps going offline because of Value error

我不斷收到此錯誤

TypeError: Cannot read property 'size' of undefined
at Client.client.on.message 
(/home/colter/Code/groundskeeper/index.js:38:30)
at emitOne (events.js:116:13)
at Client.emit (events.js:211:7)
at MessageCreateHandler.handle 

我檢查了錯誤並將其與示例代碼進行了比較。 這一切對我來說都是正確的。

client.on('message', message => {
    if (!message.content.startsWith(prefix) || message.author.bot) 
return;

const args = message.content.slice(prefix.length).split(/ +/);
const command = args.shift().toLowerCase();

// Here is my syntax for adding commands. So far simple ones, but commands non the less!
if (command === 'ping') {
    message.channel.send('Pong');
}
else if (command === 'beep') {
    message.channel.send('Boop');
}
else if (command === 'server') {
    message.channel.send(`Server name: ${message.guild.name}\nTotal members: ${message.guild.memberCount}`);
}
else if (command === 'user-info') {
    message.channel.send(`Your username: ${message.author.username}\nYour ID: ${message.author.id}`);
}
else if (command === 'args-info') {
    if (!args.length) {
        return message.channel.send(`Your didnt provide any arguments, ${message.author}!`);
    }
    else if (args[0] === 'foo') {
        return message.channel.send('bar');
    }
    message.channel.send(`first argument: ${args[0]}`);
}
else if (command === 'kick') {
    if (!message.mentions.user.size) {
        return message.reply('you need to tag a user in order to kick them');
    }

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

    message.channel.send(`You wanted to kick: ${taggedUser}`);
}
});


client.login(token);

預期的輸出應該是您需要標記用戶,以便在我使用 ?kick 命令時將他們從我的機器人中踢出。

在您的代碼上:

message.mentions.user.size

正在嘗試讀取用戶的屬性大小,即內部提及,即內部消息。 如果消息、提及和用戶不存在,則沒有要讀取的大小屬性,您無法讀取不存在的內容的屬性。 您可以事先檢查它是否存在:

if(message.mentions.user) {
    if (!message.mentions.user.size) {
        return message.reply('you need to tag a user in order to kick them');
    }
}

在第 38 行,您有一個看似簡單的印刷錯誤。

user (singular) 不是MessageMentions的有效屬性。 正確的屬性是users (復數),您在幾行之后正確使用它。

也許你可以使用這個,如果你一次只需要踢一個人。

if(!message.guild) return; // Only runs if in a server
const member = message.mentions.members.first(); // This gets the first guild member, not user.
if (member && message.member.hasPermission('KICK_MEMBERS')) {  // Only tries to kick them if they exist and have permission
  try {
    member.kick(args.slice(1).join(' '); // Gives reason, if any and kicks them.
  } catch (err) {
    console.error(err);
  }
} else {
  message.channel.send(`You tried to kick: ${args[0]}`);
}

您應該將它用於kick命令!

client.on("message", (message) => {
  // the cmd  >>        if (message.content.startsWith("{prefix}kick")) {
  //permission set to kick members only >>    if (!message.member.hasPermission(["KICK_MEMBERS"])) return message.channel.send // not enough perms message >("this bot Found An Error! Error: You Do Not Have Kick Members Permission!")
  // >> this is used to define @mentions    const member = message.mentions.members.first()
  if (!member) {
    return message
      .reply
      // A User didnt mention someone so thy get this error>>      (`the bot Found An Error! Error: A User Was Not Mentioned!`)
      ();
  }
  // if the bots role doesnt have their role above the user>>  if (!member.kickable) {
  return message.reply(
    `bot Found An Error! Error: Permission Is Not Above The User, Try Again When This Is Fixed!`
  );

  return (
    member
      // >> sucess kick message    .kick()
      .then(() => message.reply(`bot Kicked ${member.user.tag} Sucessfully!`))
  );
  // error bot message >>     .catch(error => message.reply('Error!  Please Try Again!`))
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM