【问题标题】:I want to get members count in discord bot but it gives error我想让成员在不和谐机器人中计数,但它给出了错误
【发布时间】:2021-01-25 04:02:21
【问题描述】:

我想在 discord bot 中统计成员,但它给出了错误。我通过互联网搜索它,但我没有找到它! 这是代码:

const Commando = require('discord.js-commando');
const bot = new Commando.Client({commandPrefix: '$'});
const TOKEN = 'here is token';
const MIN_INTERVAL = 3 * 1000;
const guild = bot.guilds.get("394805546450026496");

bot.registry.registerGroup('connectc', 'Connectc');
bot.registry.registerGroup('defaultc', 'Defaultc');
bot.registry.registerDefaults();
bot.registry.registerCommandsIn(__dirname + "/commands")

bot.on('ready', function(){
    console.log("Ready");
    setInterval(function(){
        var memberCount = guild.members.filter(member => !member.user.bot).size;
        var memberCountChannel = bot.channels.get("547805078787194891");
        memberCountChannel.setName("????Osoby: "+ memberCount +" ????");
    }, MIN_INTERVAL);
});
bot.login(TOKEN);

这里有错误:

C:\Users\User\Documents\Visual Studio Code\Discord Bots\VblacqeBot\index.js:18
    var memberCount = guild.members.filter(member => !member.user.bot).size;
                            ^

TypeError: Cannot read property 'members' of undefined
    at CommandoClient.<anonymous> (C:\Users\User\Documents\Visual Studio Code\Discord Bots\VblacqeBot\index.js:18:29)    
    at CommandoClient.emit (events.js:194:15)
    at WebSocketConnection.triggerReady (C:\Users\User\Documents\Visual Studio Code\Discord Bots\VblacqeBot\node_modules\discord.js\src\client\websocket\WebSocketConnection.js:125:17)
    at WebSocketConnection.checkIfReady (C:\Users\User\Documents\Visual Studio Code\Discord Bots\VblacqeBot\node_modules\discord.js\src\client\websocket\WebSocketConnection.js:141:61)
    at GuildCreateHandler.handle (C:\Users\User\Documents\Visual Studio Code\Discord Bots\VblacqeBot\node_modules\discord.js\src\client\websocket\packets\handlers\GuildCreate.js:13:31)
    at WebSocket.onMessage (C:\Users\User\Documents\Visual Studio Code\Discord Bots\VblacqeBot\node_modules\ws\lib\event-target.js:120:16)
    at WebSocket.emit (events.js:189:13)

请帮帮我!

【问题讨论】:

  • 公会ID正确吗?在设置 memberCount 变量之前添加console.log(guild);,如果定义了公会,请检查输出
  • 您是否启用了会员意图?

标签: node.js count bots discord.js member


【解决方案1】:

根据您的错误结果,guildundefined。 我运行了代码,它按预期工作。

module.exports.run = async (client, message, arguments) => {
   const guild = client.guilds.get("566596189827629066");
   setInterval(function () {
      var memberCount = guild.members.filter(member => !member.user.bot).size;  
      var memberCountChannel = client.channels.get("626462657817477131");
      memberCountChannel.setName(`${guild.name} has ${memberCount} members!`);
   }, 1000);
};

Image

请仔细检查 394805546450026496 是有效的公会 ID,而不是频道 ID/用户 ID。如果是,请检查该机器人是否在上述公会中。

另外,建议在执行操作或从中读取数据之前查看公会是否可用。您可以通过guild.available 进行检查。

【讨论】:

    【解决方案2】:
    // update member
    let myGuild = client.guilds.get("guilds_id_here");
    let memberCount = myGuild.memberCount;
    let memberCountChannel = myGuild.channels.get("channel_id_here");
    memberCountChannel.setName("Member•" +memberCount+ "•User")
    

    【讨论】:

      【解决方案3】:

      看起来当函数guild.members.filter(member =&gt; !member.user.bot).size; 被调用时,guild 的值是未定义的。你确定const guild = bot.guilds.get("394805546450026496"); 正确返回公会吗?您可以在调用 get 后尝试记录 guild 的值吗?我在 discord.js 文档中的任何地方都没有看到 get(String id) 方法。您是否尝试过使用推荐的find()

      试试这个。

      const guild = bot.guilds.find(guild =&gt; {guild.id == "394805546450026496"});

      【讨论】:

      • 在我更改为 const guild = bot.guilds.find(guild =&gt; {guild.id == "394805546450026496"}); 之前,我添加了 console.log(guild); 并且它抛出未定义但后来它抛出 null
      • 嗯,您可以尝试但包含退货声明吗?即const guild = bot.guilds.find(guild =&gt; {return guild.id == "394805546450026496"});您也可以尝试搜索具有其他属性的公会,例如其名称。如果您在这些更改后得到 null 或 undefined,那么您要查找的公会很可能不在公会集合中。
      【解决方案4】:
      let memberChannel = message.guild.channels.cache.get("802617217450901514");
      memberChannel.setName("Member Count: " + message.guild.memberCount);
      

      【讨论】:

      • 虽然此代码可能会为问题提供解决方案,但最好添加有关其工作原理/方式的上下文。这可以帮助未来的用户学习并将这些知识应用到他们自己的代码中。在解释代码时,您也可能会以赞成票的形式从用户那里获得积极的反馈。
      猜你喜欢
      • 2022-01-21
      • 1970-01-01
      • 2023-03-21
      • 2019-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多