【问题标题】:Trying to make a Member Count Discord bot尝试制作会员计数不和谐机器人
【发布时间】:2021-09-04 16:59:49
【问题描述】:

我正在尝试制作一个 Discord 机器人,它计算服务器中有多少成员,然后将频道名称更改为“成员:”。 这是我到目前为止的代码:

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

client.on('ready', () => {
  console.log(`Logged in as ${client.user.tag}!`);

});
client.on("guildMemberAdd", function(member){
  let myGuild = member.guild;
  let myChannel = myGuild.channels.cache.get("Channel ID Here");
  let memberNumber = myGuild.members.cache.filter(member => !member.user.bot).size;
  myChannel.name = `Members: ${memberNumber}`;
})

client.login('000000000000000000000000000000000');

我遇到的问题是,我没有收到任何错误,但是当添加新人时,机器人什么也没做,绝对没有。我需要什么才能让机器人更改频道名称。此外,如果有人知道如何使用 Discord 机器人执行此操作,您能否在代码中添加如何使机器人应显示成员计数的文本通道无法访问,就像您可以看到通道的名称但如果您点击它,什么都没有发生,你不能进入频道。

【问题讨论】:

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


    【解决方案1】:

    myChannel.name 只是一个属性,不能直接更改。您需要在频道上调用.edit() 并传入新名称。

    const Discord = require('discord.js');
    const client = new Discord.Client();
    
    client.on('ready', () => {
      console.log(`Logged in as ${client.user.tag}!`);
    
    });
    client.on("guildMemberAdd", function(member){
      let myGuild = member.guild;
      let myChannel = myGuild.channels.cache.get("Channel ID Here");
      let memberNumber = myGuild.members.cache.filter(member => !member.user.bot).size;
      myChannel.edit({ name: `Members: ${memberNumber}` });
    })
    
    client.login('000000000000000000000000000000000');
    

    Documentation on TextChannel#edit()

    【讨论】:

    • 我试过了,但是好像还是一样,什么都没有发生
    • 我在myChannel.edit({ name: Members: ${memberNumber}` })` 之前尝试了console.log(memberNumber),以查看发生了什么,即使我将某人添加到服务器,终端也没有显示任何内容。我似乎没有检测到有人被添加到服务器或类似的东西,我不知道为什么。
    • 您的客户端是否在您重新启动时登录并记录消息到终端?如果它确实登录,您可能需要启用公会成员意图,值得一试
    【解决方案2】:

    当用户加入离开服务器时,您需要调用一个事件:

    const Discord = require('discord.js');
    const client = new Discord.Client();
    
    client.on('ready', () => {
      console.log(`Logged in as ${client.user.tag}!`);
    });
    
    
    client.on("guildMemberAdd", function(member){
       memberCount(member);
    });
    
    client.on("guildMemberRemove", function(member){
        memberCount(member);
    });
    
    client.login('000000000000000000000000000000000');
    
    function memberCount(member){
        let myGuild = member.guild;
        let myChannel = myGuild.channels.cache.get("Channel ID Here");
        let memberNumber = myGuild.memberCount;
        myChannel.setName({ name: `Members: ${memberNumber.toLocaleString()}` });
    }
    

    确保机器人具有特权网关意图。 只需转到Discord Developer Portal,并确保您已检查Presence IntentServer Members Intent。 例如

    【讨论】:

    • 机器人正常工作,但当我添加或删除成员时,没有任何反应,即使机器人具有服务器的管理员权限以及频道和类别的完全权限。
    • @Arian 我做了一些改变。如果你仍然遇到这个问题,也许我的新解决方案对你有用。
    猜你喜欢
    • 2021-06-24
    • 2021-07-13
    • 2021-08-19
    • 2021-09-20
    • 2017-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    相关资源
    最近更新 更多