使用 Quick.db (Discord.js) 的自动角色问题

Posted

技术标签:

【中文标题】使用 Quick.db (Discord.js) 的自动角色问题【英文标题】:Issues with autorole using Quick.db (Discord.js) 【发布时间】:2021-06-21 19:11:20 【问题描述】:

我正在尝试使用 quick.db 制作自动角色代码,但它返回错误:UnhandledPromiseRejectionWarning:TypeError [INVALID_TYPE]: Supplied roles is not a Role, Snowflake or Array or Collection of Roles or Snowflakes 我的“设置角色”命令:

      const role = message.mentions.roles.first() || message.guild.roles.cache.get(args[0])
      if(!role) return message.channel.send('I couldnt find the role')
db.set(`autorole`, role)
message.channel.send('The process worked fine!')

这是机器人的索引:

client.on("guildMemberAdd", (member) => 
  let few = db.get(`autorole_$member.guild.id`)
  if(few === null) return;
  member.roles.add(few)
)

好吧,我不知道如何解决这个错误,我需要一点帮助

【问题讨论】:

【参考方案1】:

最好将角色ID保存在数据库中

顺便说一句,你做错了。它应该类似于setautorole.js

const role = message.mentions.roles.first() || message.guild.roles.cache.get(args[0]);
if(!role)
    return( message.channel.send('I couldnt find the role') );

db.set(`autorole_$message.guild.id`, role.id);
message.channel.send('The process worked fine!');

index.js

client.on("guildMemberAdd", (member) => 
  let roleID = db.get(`autorole_$member.guild.id`)
  if(!roleID) return;
  role = member.guild.roles.find(roleID);
  if(!role)
     console.log("That role dosen't exist");
     return (false);
  
  member.roles.add(role)
)

【讨论】:

【参考方案2】:

感谢 Akio 的想法,但是,我做了类似的事情:

client.on("guildMemberAdd", (member) => 
  let roleID = db.get(`autorole_$member.guild.id`)
  if(!roleID) return;
 let role = member.guild.roles.cache.find(r => r.id === roleID);
  if(!role)
     console.log("That role dosen't exist");
     return (false);
  
  member.roles.add(role)
)

成功了,谢谢你的帮助:)

【讨论】:

以上是关于使用 Quick.db (Discord.js) 的自动角色问题的主要内容,如果未能解决你的问题,请参考以下文章

排行榜命令中未定义的用户名 [ quick.db / discord.js ]

Quick.db discord.js

Discord.js 错误:它正在删除整个数组。 Quick.db 和 discord.js

带有 quick.db 的 discord.js 手动调平系统

Discord.js Quick.db 过滤器

在 discord.js(Typescript)中使用 quick.db 获取值时遇到问题