【问题标题】:Role member count function角色成员计数功能
【发布时间】:2020-05-27 04:46:56
【问题描述】:

我创建了一个函数,它应该返回一个角色成员计数,但它返回“未定义”。

这是我的代码:

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

【问题讨论】:

  • 为什么显示成员在引号中?

标签: javascript discord discord.js


【解决方案1】:

它返回“未定义”的原因是因为 .fetch() 是一个承诺,因此您的名为 membercount 的函数不会立即返回值。事实上,membercount 甚至不返回值。您可以参考Return from a promise then() 了解原因。解决这个问题的方法就是用message.channel.send(total.length)替换return 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 语句。

【讨论】:

  • 还有没有办法返回总会员?
  • Object.keys(fetched).length 会给你公会的成员总数。
猜你喜欢
  • 2021-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-26
  • 2012-02-19
  • 2018-07-27
  • 2017-02-20
  • 1970-01-01
相关资源
最近更新 更多