2017-07-26 50 views
3

我爲服務器做了一個簡單的引用bot,但管理員只希望mod +人員能夠添加引號以避免垃圾郵件。我去了文檔,並做了一切,但我無法得到這個工作。這是我有:找出是否有人有角色Discord.Js

//other code 
    else if (command === "addquote" && arg) { 
    let adminRole = message.guild.roles.find("name", "Admin"); 
    let modRole = message.guild.roles.find("name", "Mod"); 

    if(message.member.roles.has(adminRole) || message.member.roles.has(modRole)){ 
     const hasArr = arr.some((el) => { 
      return el.toLowerCase().replace(/\s/g, '') === arg.toLowerCase().replace(/\s/g, ''); 
     }); 

     if(hasArr){ 
      message.channel.send(arg.replace(/\s+/g,' ').trim() + " is already a Quote"); 
     } else { 
      fs.appendFileSync('./Quotes.txt', '\r\n' + arg); 
      message.channel.send("Quote added: " + arg); 
      arr.push(arg);    
     } 
    } 
} 

這是非常挑剔。有時候,如果用戶具有mod角色,大部分時間都不會運行,那麼這種方式就會起作用。如果我做

console.log(message.memeber.roles.has(adminRole)); 
console.log(message.memeber.roles.has(modRole)); 

兩者都會輸出爲false,但會起作用嗎?老實說,我現在不知道這一點。

回答

6

message.member.roles是一個集合。不要獲取角色對象,然後查找它,只需直接在集合中查找角色即可。試試這個:

else if (command === "addquote" && arg) { 
    if(message.member.roles.find("name", "Admin") || message.member.roles.find("name", "Mod")){ 
     //Rest of your code 
    } 

注意,角色名必須是你把發現,包括是否有任何的角色名稱的任何表情符號的名稱。

+0

我將對此進行測試,當我回家,太感謝你了! –

0

Map.has方法檢查鍵而不是值,因此您必須改用角色的ID。

message.member.roles.has(adminRole.id)

message.member.roles.has(modRole.id)

+0

啊,謝謝,但是當我修改並添加了.id部分時,我得到一個錯誤,說當執行if語句時顯示「找不到null的屬性」 –