【问题标题】:How to auto-give role when someone is playing game? V12 discord js有人玩游戏时如何自动分配角色? V12 不和谐 js
【发布时间】:2021-05-30 15:09:28
【问题描述】:

我最近决定将我的 discord js 库升级到 v12。 我想当有人打开游戏(Golf With Your Friends)时,他会得到一个角色。但我无法在 discord js v12 中对其进行编程。你能帮助我吗? 这是我在 v11 中的代码:

bot.on("presenceUpdate", (oldMember, newMember) => {
    let guild = newMember.guild;
    let playRole = guild.roles.get("633589794357641235");
    if (!playRole) return;

    if (newMember.user.presence.game && newMember.user.presence.game.name === "Golf With Your Friends") {
        newMember.addRole(playRole);
    }
});

【问题讨论】:

    标签: javascript node.js discord discord.js


    【解决方案1】:

    这是 discordjs.guide 中关于从 v11 更新到 v12 的指南:

    https://discordjs.guide/additional-info/changes-in-v12.html#managers-cache

    您也可以在这里查看官方文档:

    https://discord.js.org/#/docs/main/stable/class/Client?scrollTo=e-presenceUpdate

    首先他们将参数更新为oldPresencenewPresence

    所以:

    client.on("presenceUpdate", (oldPresence, newPresence) => {
      //....
    }
    

    第二次他们将集合从 guild.roles 更改为 guild.roles.cache

    const playRole = guild.roles.cache.get("633589794357641235");
    

    您的第三个 if 语句使用 newMember.user.presence 现在只是 newPresence,游戏已修改为 Activity 类,并且没有更多 <Presence>.game,因此您将不得不循环 <Presence>.activites数组:

    if (newPresence.find(e => e.name === "Golf With Your Friends")) {
      //...
    }
    

    最后他们将<GuildMember>.addRole 移至<GuildMember>.roles.add

    newPresence.member.roles.add(playRole);
    

    完整代码:

    bot.on("presenceUpdate", (oldPresence, newPresence) => {
        let guild = oldPresence.guild;
        //guild.roles => guild.roles.cache
        let playRole = guild.roles.cache.get("633589794357641235");
        if (!playRole) return;
    
        if (newPresence.find(e => e.name === "Golf With Your Friends")) {
            newPresence.member.roles.add(playRole);
        }
    });
    

    【讨论】:

      【解决方案2】:
      
      const Discord = require('discord.js')
      
      const client = new Discord.Client()
      
      client.on('ready', () => {
          console.log('bot sucessfully logged')
      })
      
      client.on("presenceUpdate", (oldPresence, newPresence) => {
          let guild = oldPresence.guild;
          //guild.roles => guild.roles.cache
          let playRole = guild.roles.cache.get("837208147302154252");
          if (!playRole) return;
      
          if (newPresence.find(e => e.name === "Testing")) {
              newPresence.member.roles.add(playRole);
          }
      });
      
      client.login("token")
      
      

      错误是 if (newPresence.find(e => e.name === "Testing")) { ^

      TypeError: newPresence.find 不是函数

      【讨论】:

        猜你喜欢
        • 2020-08-19
        • 2017-05-10
        • 2022-09-27
        • 2020-10-24
        • 1970-01-01
        • 2022-01-23
        • 1970-01-01
        • 2021-12-26
        • 2021-01-06
        相关资源
        最近更新 更多