【问题标题】:discord.js BOT - ERROR Creating Channels with Permissionsdiscord.js BOT - 使用权限创建频道时出错
【发布时间】:2021-08-05 16:31:27
【问题描述】:

我正在执行一个机器人,它可以帮助我创建许多具有特定锦标赛权限的频道。频道名称为“Team1-vs-Team2”。在服务器中,我们定义了与每个团队同名的角色(即来自“BarcelonaFC”的成员有一个名为“BarcelonaFC”的角色)

那么,假设本轮巴塞罗那FC面对皇家马德里,那么执行的命令将是:

  $stage
  BarcelonaFC-vs-RealMadrid

然后,结果应该是创建一个名为“BarcelonaFC-vs-RealMadrid”的频道,并为其分配具有特定权限的角色 BarcelonaFC 和 RealMadrid

这是我的代码(仅调整为使用 HOME 信息分配 BarcelonaFC 角色):

client.on('message', (message) => {
if (message.author.bot) return;
if (message.content.startsWith(process.env.PREFIX)) {
    const [CMD_NAME, ...args] = message.content
        .trim()
        .substring(process.env.PREFIX.length)
        .split(/\n+/);
    if (CMD_NAME === 'del') {
        message.guild.channels.cache.forEach(channel => channel.delete());
        message.guild.channels.create('General', { type: 'text' });
        message.guild.channels.create('FRENTE XXXX', { type: 'category' });
    }
    if (CMD_NAME === 'stage') {
        if (args.length == 0) return message.reply('Please provide a stage number and teams');
        var i;
        for (i = 0; i < process.env.QTY_LLAVES; i++) {
            const [HOME, AWAY] = args[i].split('-vs-');
            let roleH = message.guild.roles.cache.find(r => r.name === HOME);

            message.guild.channels.create(args[i], { 
                type: 'text',
                permissionOverwrites: [
                    {
                        id: roleH.id,
                        allow: permAllowed,
                        deny: permDenied,

                    },
                ],
            
            }).then((channel) => {
                const categoryId = message.guild.channels.cache.find(cat => cat.name === 'FRENTE XXXX');
                channel.setParent(categoryId);
                
            })

因此,permissionsOverwrites 中的以下行出现错误:

     id: roleH.id,

得到错误

   C:\Users\alexi\Desktop\Discord\OESTE-FWT\pikabot\src\pikabot.js:121
                        id: roleH.id,
                                  ^

TypeError: Cannot read property 'id' of undefined
    at Client.<anonymous> (C:\Users\alexi\Desktop\Discord\OESTE-FWT\pikabot\src\pikabot.js:121:39)

我需要帮助来确定为什么是“未定义”以及为什么会出现此错误。 提前致谢

编辑:在角色H 分配之后,我运行了一个 console.log(roleH) 并在第一次迭代中得到它: 重要提示:我在这里使用的角色称为“boca”(这是一个拉丁团队)。很抱歉没有使用巴塞罗那或皇家马德里。

Role {
  guild: <ref *1> Guild {
    members: GuildMemberManager {
      cacheType: [class Collection extends Collection],
      cache: [Collection [Map]],
      guild: [Circular *1]
    },
    channels: GuildChannelManager {
      cacheType: [class Collection extends Collection],
      cache: [Collection [Map]],
      guild: [Circular *1]
    },
    roles: RoleManager {
      cacheType: [class Collection extends Collection],
      cache: [Collection [Map]],
      guild: [Circular *1]
    },
    presences: PresenceManager {
      cacheType: [class Collection extends Collection],
      cache: Collection(0) [Map] {}
    },
    voiceStates: VoiceStateManager {
      cacheType: [class Collection extends Collection],
      cache: Collection(0) [Map] {},
      guild: [Circular *1]
    },
    deleted: false,
    available: true,
    id: '836369921939210250',
    shardID: 0,
    name: "pilo's server",
    icon: null,
    splash: null,
    discoverySplash: null,
    region: 'brazil',
    memberCount: 3,
    large: false,
    features: [],
    applicationID: null,
    afkTimeout: 300,
    afkChannelID: null,
    systemChannelID: null,
    embedEnabled: undefined,
    premiumTier: 0,
    premiumSubscriptionCount: 0,
    verificationLevel: 'NONE',
    explicitContentFilter: 'DISABLED',
    mfaLevel: 0,
    joinedTimestamp: 1619656895701,
    defaultMessageNotifications: 'ALL',
    systemChannelFlags: SystemChannelFlags { bitfield: 0 },
    maximumMembers: 100000,
    maximumPresences: null,
    approximateMemberCount: null,
    approximatePresenceCount: null,
    vanityURLCode: null,
    vanityURLUses: null,
    description: null,
    banner: null,
    rulesChannelID: null,
    publicUpdatesChannelID: null,
    preferredLocale: 'en-US',
    ownerID: '440862122201579520',
    emojis: GuildEmojiManager {
      cacheType: [class Collection extends Collection],
      cache: Collection(0) [Map] {},
      guild: [Circular *1]
    }
  },
  id: '840675247035383890',
  name: 'boca',
  color: 2123412,
  hoist: false,
  rawPosition: 5,
  permissions: Permissions { bitfield: 1983368913 },
  managed: false,
  mentionable: false,
  deleted: false
}

【问题讨论】:

    标签: javascript discord.js


    【解决方案1】:

    机器人无法找到从提供的消息中拆分出来的给定名称角色,请确保您具有与机器人正在寻找的名称相同的角色。

    【讨论】:

    • 嗨!感谢您的回答。所有角色都在服务器中定义,输入中的名称与 Discord 服务器中定义的角色没有区别。另外,如果我在进入创建通道方法之前放置一个console.log(roleH),控制台会显示所有角色定义
    • 我能得到roleH的类型或日志吗
    • 再次感谢您!抱歉耽搁了,我是新手,已经习惯了通知。我已经用 console.log(roleH) 编辑了这篇文章。让我知道任何事情。
    猜你喜欢
    • 2018-03-04
    • 2022-01-18
    • 2021-02-01
    • 2021-06-21
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 2021-01-12
    相关资源
    最近更新 更多