【问题标题】:How to add an array of roles to member at once discord.js v13如何一次向成员添加角色数组 discord.js v13
【发布时间】:2022-10-01 11:05:32
【问题描述】:

我想将“自动角色系统”添加到我的不和谐机器人中。 我做得很好,但它出错了,您可以检查文章末尾是否有错误。

我想做的是:

  1. 所有者通过提及一个角色或一堆角色来使用命令
  2. Bot 将它们存储在一个数组中,然后将其保存在数据库中
  3. 当用户加入公会时,机器人将该角色数组提供给成员

    所以首先,我们需要为数据库创建一个模型,所以我创建了一个:

    // Guild.js
    const mongoose = require(\'mongoose\');
    
    const guildConfigSchema = mongoose.Schema({
      guildId: { type: String, match: /\\d{18}/igm, required: true },
      autoRoleDisabled: {
        type: Boolean,
      },
      autoRoleRoles: {type: Array},
    });
    
    module.exports = mongoose.model(\'guild\', guildConfigSchema);
    

    然后我编写了设置命令:

            const role = message.mentions.roles.first();
            if (!role) return message.channel.send(\'Please Mention the Role you want to add to other Auto Roles.\');
            Schema.findOne({ guildId: message.guild.id }, async (err, data) => {
                if (data) {
                    data.autoRoleDisabled = false;
                    data.autoRoleRoles.push(role.id);
                    data.save();
                } else {
                    new Schema({
                        guildId: message.guild.id,
                        autoRoleDisabled: false,
                        $push: { autoRoleRoles: role.id }
                    }).save();
                }
                message.channel.send(\'Role Added: \' + `<@&${role.id}>`);
            })
    

    最后我们需要让它工作:

    // Main.js
    
    client.on(\"guildMemberAdd\", async (member) => {
      // ****Auto-Role****
      const Welcome = require(\'./models/Guild\');
      try {
        Welcome.findOne({ guildId: member.guild.id }, async (err, data) => {
          if (!data) {
            return;
          } else {
            if (data.autoRoleDisabled == false) {
              let roles = data.autoRoleRoles;
              roles.forEach(r => {
                guildRrole = member.guild.roles.cache.find(role => role.id)
                member.roles.add(guildRrole);
              })
            } else {
              return;
            }
          }
        });
      } catch (e) {
        console.log(e);
      }
    });
    

    但它不起作用并给出错误:

    Error: cyclic dependency detected
    at serializeObject (C:\\Users\\Pooyan\\Desktop\\PDMBot\\node_modules\\bson\\lib\\bson\\parser\\serializer.js:333:34)
    

    而且我认为问题在于在数组中推送角色 ID。

    注意:我正在使用 discord.js@13.8.0 和 Node.js v16

  • 该错误意味着您在某个节点中获得了一个引用自身的对象
  • 我该如何解决?
  • 至少给出发生错误的行,仅从该代码很难分辨
  • 好的,看看我的新问题。

标签: javascript node.js arrays discord discord.js


【解决方案1】:

你可以简单地改变

   guildRrole = member.guild.roles.cache.find(role => role.id)
   member.roles.add(guildRrole);

   guildRrole = member.guild.roles.cache.get(r);
   if (!guildRrole) return;
   member.roles.add(guildRrole);

因为您没有找到具有 id 的角色,所以您只是做了.find(role =&gt; role.id),它只给出了role id,所以如果您想使用.find(),您必须检查role idrole id,例如:

.find((role) => {
 role.id == r
})

【讨论】:

    猜你喜欢
    • 2021-10-28
    • 1970-01-01
    • 2021-12-14
    • 2021-11-03
    • 1970-01-01
    • 2021-12-21
    • 2020-11-16
    • 2021-05-03
    • 1970-01-01
    相关资源
    最近更新 更多