簡體   English   中英

在 guildMemberUpdate discord.js 上分配角色時遇到問題

[英]Having issue assigning roles on guildMemberUpdate discord.js

我目前正在為具有第三方年齡驗證的服務器開發 discord 機器人,在他們更新后添加了經過驗證的角色。

然后,我想根據單獨的識別角色應用另一個角色。 但是我一直遇到部分代碼未定義或不是 function 的問題,所以我真的被卡住了。

代碼圖片

bot.on('guildMemberUpdate', (oldMember, newMember) => {
    if(oldMember.roles !== newMember.roles) {
      if(newMember.roles.cache.some(r => r.name === "Verified")) {
        if(newMember.roles.cache.some(r => r.name === "Workshop Devotee")) {
          let role1 = newMember.guild.roles.cache.some(role => role.name === "Verified Workshop Devotee");
          newMember.guild.cache.get(newMember.author.id).roles.add(role1);
        }
        else if (newMember.roles.cache.some(r => r.name === "Workshop Helpers")) {
          let role2 = newMember.guild.roles.cache.some(role => role.name === "Verified Workshop Helpers");
          newMember.guild.cache.get(newMember.author.id).roles.add(role2);
        }
        else if (newMember.roles.cache.some(r => r.name === "Workshop Supporters")) {
          let role3 = newMember.guild.roles.cache.some(role => role.name === "Verified Workshop Supporters");
          newMember.guild.cache.get(newMember.author.id).roles.add(role3);
        }
        else{
          return;
        }

此代碼有兩個主要錯誤,這就是它不起作用的原因。

首先,您使用.some()方法獲取role object,但是.some()僅檢查列表中是否存在項目,並返回 true 或 false。 相反,您應該使用.get()方法來獲取角色。

let role1 = newMember.guild.roles.cache.get(role => role.name === "Verified Workshop Devotee");

我可以看到的另一個錯誤是您讓member object 添加角色。 您出於某種原因嘗試使用成員 ID 的newMember.author.id獲取guild object,因此這將返回錯誤。 相反,你可以寫

newMember.guild.members.cache.get(newMember.author.id).roles.add(role1);

但是,此代碼也是多余的,因為您已經擁有要添加角色的成員的member object - 它的newMember 因此,您可以改為編寫

newMember.roles.add(role1);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM