角色成员计数功能

时间:2020-05-27 04:46:56

标签: javascript discord discord.js

我做了一个应该返回角色成员计数但返回“未定义”的函数。

这是我的代码:

const Discord = require('discord.js');
const client = new Discord.Client();

client.on('message', (message) => {
    argument = message.content.split(' ');
    switch (argument[0]) {
        case 'showmember':
          let membercount = (therole) => {
            let role = message.guild.roles.cache.find(r => r.name === therole);
            message.guild.members.fetch().then(fetched => {
              let total = fetched.filter(m => m.roles.cache.some(r => r === role));
              return total.length;
            });
          };
          message.channel.send(membercount(argument.join(',').slice('showmember'.length)));
        break;
    }
}

这就是控制台(node:133436) UnhandledPromiseRejectionWarning: DiscordAPIError: Cannot send an empty message

上的内容

1 个答案:

答案 0 :(得分:2)

它返回“未定义”的原因是因为.fetch()是一个承诺,因此名为membercount的函数不会立即返回值。实际上,membercount甚至不返回任何值。您可以参考Return from a promise then()来了解原因。解决方案是将return total.length替换为message.channel.send(total.length)

此外,我必须指出message.content.slice('showmember'.length)将是一个空字符串。问题在于您的switch语句switch (message.content),因为您的case语句将寻找完全匹配的message.content === 'showmember'。您要做的是检查message.content是否以'showmember'开头。我建议用if(message.content.startsWith('showmember')或类似的逻辑替换您的switch-case语句。