首页 > 解决方案 > 无法弄清楚使用变量的语法,如果用户有角色,我必须搜索

问题描述

到目前为止,我的代码正确地收集了我要搜索的服务器 ID、我要查找的角色 ID 以及邀请机器人的公会所有者 ID。

我需要它做的是检查它是否OwnerId具有我之前在服务器中提到的角色。

这是我到目前为止所得到的,但我觉得我错过了一些简单的东西。

/// adding a guild to the database upon invite
bot.on('guildCreate', async (guild) => {
    // Guild the user needs to have the role in
    let guildA = process.env.BOT_GUILD;
    console.log(guildA);

    // Role that the user needs
    let requiredRole = process.env.PAID_ROLE;
    console.log(requiredRole);

    // Member object of the user in guildA
    let guildOwner = await guild.members.fetch(guild.ownerID);
    
    let OwnerId = guildOwner.guild.ownerID;
    console.log(OwnerId);
    
    //Check if they have the role 
    if (guildA.OwnerId.cache.has(`${requiredRole}`))

我也尝试添加.rolesafterOwnerId和 before .cache,但出现错误。

如果有人有更多关于这种事情如何运作的信息,那就太好了,我知道谷歌到底要做什么。

标签: javascriptdiscord.js

解决方案


OwnerId不会有任何角色,因为它只是雪花/ID。如果您想检查公会所有者是否具有 ID 的角色process.env.PAID_ROLE(如果它是一个 ID 而不仅仅是一个角色名称......),您可以将所有者作为成员获取,并检查他们roles的 ' 是否缓存has此 ID:

bot.on('guildCreate', async (guild) => {
  // guild the user needs to have the role in
  // do you use it anywhere?!
  let guildA = process.env.BOT_GUILD;

  // member object of the owner of the guild the bot just joined
  let guildOwner = await guild.members.fetch(guild.ownerID);

  // check if that guildOwner has the role required
  let ownerHasPaidRole = guildOwner.roles.cache.has(process.env.PAID_ROLE);

  if (ownerHasPaidRole)
    console.log(`Woohoo, ${guildOwner} has the required role`);
});

编辑:如果您想获取属于您的公会 ID 的成员process.env.BOT_GUILD,您将需要使用YOUR_GUILD#members.fetch(guild.ownerID). 要通过其 ID 获取您的公会,您也可以获取它。bot.guilds返回机器人当前正在处理的所有公会,因此您可以使用它的fetch()方法

bot.on('guildCreate', async (guild) => {
  // guild the user needs to have the role in
  let myGuild = await bot.guilds.fetch(process.env.BOT_GUILD);

  // get the member object of the owner on myGuild
  let guildOwner = await myGuild.members.fetch(guild.ownerID)

  if (!guildOwner)
    return console.log(`Oops, ${guild.owner} is not a member of your server.`)

  // check if that guildOwner has the role required on myGuild
  let ownerHasPaidRole = guildOwner.roles.cache.has(process.env.PAID_ROLE);

  if (ownerHasPaidRole)
    console.log(`Woohoo, ${guildOwner} has the required role`);
});

推荐阅读