【问题标题】:Bot assigns user a role, even if user doesn't own role即使用户不拥有角色,机器人也会为用户分配角色
【发布时间】:2021-06-11 16:37:43
【问题描述】:

抱歉标题令人困惑,我会澄清一下。我正在尝试让机器人检查用户是否在他们的 quick.db 库存中具有特定角色,如果有,它将配备该角色。我遇到的问题是,即使在库存中使用角色,它也会返回角色不拥有的错误。我感觉问题出在if (db.has(message.author.id + '.hot rod red')) 行,因为我不太确定如何使用 quick.db 格式化检查角色。很抱歉代码混乱,如果有人知道如何解决这个问题,请告诉我,谢谢!

if (db.has(message.author.id + '.hot rod red')) {
  if (message.member.roles.cache.some(role => role.name === 'hot rod red')) {
    let embed = new Discord.MessageEmbed().setDescription('You already have this role equipped!');
    return message.channel.send(embed);
  } else {
       await message.guild.members.cache.get(user.id).roles.add('733373020491481219');

       let embed = new Discord.MessageEmbed().setDescription(`You now have the ${message.guild.roles.cache.get('733373020491481219')} role!`);
       message.channel.send(embed);
       user.roles.remove(user.roles.highest);
  }
} else {
    let embed = new Discord.MessageEmbed().setDescription('You do not own this role!'); // ERROR HERE; GIVES ROLE EVEN WITHOUT OWNING
    return message.channel.send(embed);
}

【问题讨论】:

  • 尝试console.log(db.get(message.author.id + '.hot rod red'))检查用户是否真的有这个角色
  • 看起来好像不起作用,它仍然返回相同的东西,但现在在控制台中,它返回 false。它可能与 .hot rod red 的格式有关吗?这是一个角色,所以它在库存中显示为“@hot rod red”

标签: javascript node.js discord discord.js quick.db


【解决方案1】:

可能会尝试类似的东西 let check = db.get(message.author.id+'.hot rod red') 并检查它是否为真/假,我会说使用字符串而不是布尔值,因为您可以使用if(check === 'false/true'){}。你也可以这样做

if(!check || check === 'false'){ return 
let embed = new Discord.MessageEmbed().setDescription('You do not own this role!');
return message.channel.send(embed);
 }

所以最终的代码是:

let check = await db.get(message.author.id + '.hot rod red');
let rejectEmbed = new Discord.MessageEmbed()
.setDescription('You do not own this role!');

if(!check){
return message.channel.send(rejectEmbed) 
}
if(check === 'true'){
if (message.member.roles.cache.some(role => role.name === 'hot rod red')) {
    let embed = new Discord.MessageEmbed().setDescription('You already have this role!');
    return message.channel.send(embed);
  } else {
       await message.guild.members.cache.get(user.id).roles.add('733373020491481219');

       let embed = new Discord.MessageEmbed().setDescription(`You now have the ${message.guild.roles.cache.get('733373020491481219')} role!`);
       message.channel.send(embed);
       user.roles.remove(user.roles.highest); // I'm unsure why this is here, this could be causing a potential error
  }
}

如果还有什么问题,欢迎评论!!我希望这会有所帮助。

【讨论】:

  • 非常感谢您的深入回复!我尝试了该解决方案,但由于某种原因仍然给出相同的('You do not own this role!') 响应,我尝试重新输入所有内容,但仍然没有运气。会不会是let check = await db.get(message.author.id + '.hot rod red'); 行中的角色名称格式错误,导致机器人找不到该角色? (最后一行是移除当前最高角色,这样当用户装备新角色时,他们当前的颜色角色会被移除,不会超出它)
  • 你可以在 discord 上私信我,我可以向你解释所有细节,我的 discord 用户名是:N̷i̷g̷h̷t̷m̷a̷r̷e̷̷ Jeff#2616
猜你喜欢
  • 1970-01-01
  • 2010-10-09
  • 2020-12-29
  • 2018-08-21
  • 2021-01-06
  • 2021-05-10
  • 2021-05-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多