Ошибка Null при использовании метода .createInvite в API v13

#discord #discord.js

Вопрос:

Я использую этот базовый код, чтобы бот сгенерировал ссылку для приглашения на сервер, где идентификатор гильдии — это строка моего идентификатора гильдии:

 const Guild = await client.guilds.fetch(guildId);
            
const invite = await Guild.systemChannel.createInvite({
    maxAge: 14,
    maxUses: 10,
    unique: true
});
 

Сделав это, я получаю сообщение об ошибке:
TypeError: Cannot read properties of null (reading 'createInvite')

Интересно, может ли кто-нибудь указать, неправильно ли я использовал этот метод?

Просто для дополнительной информации, мой объект гильдии возвращается нормально, как показано ниже:

 <ref *2> Guild {
  id: 'XXXXXXXXXX',
  name: 'NAMEHERE',
  icon: 'a_479390a16bfef56aee3c39330d4d2e3e',
  features: [
    'MEMBER_PROFILES',
    'ROLE_ICONS',
    'PRIVATE_THREADS',
    'THREE_DAY_THREAD_ARCHIVE',
    'SEVEN_DAY_THREAD_ARCHIVE',
    'INVITE_SPLASH',
    'BANNER',
    'ANIMATED_ICON'
  ],
  commands: <ref *1> GuildApplicationCommandManager {
    permissions: ApplicationCommandPermissionsManager {
      manager: [Circular *1],
      guild: [Circular *2],
      guildId: 'CENSORED',
      commandId: null
    },
    guild: [Circular *2]
  },
  members: GuildMemberManager { guild: [Circular *2] },
  channels: GuildChannelManager { guild: [Circular *2] },
  bans: GuildBanManager { guild: [Circular *2] },
  roles: RoleManager { guild: [Circular *2] },
  presences: PresenceManager {},
  voiceStates: VoiceStateManager { guild: [Circular *2] },
  stageInstances: StageInstanceManager { guild: [Circular *2] },
  invites: GuildInviteManager { guild: [Circular *2] },
  deleted: false,
  available: true,
  shardId: 0,
  splash: '53c57d1053959d572635640ef34aecce',
  banner: null,
  description: null,
  verificationLevel: 'MEDIUM',
  vanityURLCode: null,
  nsfwLevel: 'DEFAULT',
  discoverySplash: null,
  memberCount: 459,
  large: true,
  applicationId: null,
  afkTimeout: 300,
  afkChannelId: null,
  systemChannelId: null,
  premiumTier: 'TIER_2',
  premiumSubscriptionCount: 9,
  explicitContentFilter: 'DISABLED',
  mfaLevel: 'NONE',
  joinedTimestamp: 1634610823632,
  defaultMessageNotifications: 'ONLY_MENTIONS',
  systemChannelFlags: SystemChannelFlags { bitfield: 0 },
  maximumMembers: 250000,
  maximumPresences: null,
  approximateMemberCount: null,
  approximatePresenceCount: null,
  vanityURLUses: null,
  rulesChannelId: null,
  publicUpdatesChannelId: null,
  preferredLocale: 'en-US',
  ownerId: 'CENSORED',
  emojis: GuildEmojiManager { guild: [Circular *2] },
  stickers: GuildStickerManager { guild: [Circular *2] }
}
 

Комментарии:

1. Guild.systemChannel возвращает значение null, убедитесь Guild , что возвращает то, что вы ожидаете, и проверьте .systemChannel

2. Да, и я вижу это — но Гильдия возвращает объект гильдии правильно, но не со строкой системного канала в объекте. Есть идеи, почему? Эта функция работает на некоторых моих серверах, а не на других, и я ломаю голову, пытаясь понять, почему

3. Только что обновил свой пост с объектом гильдии, о котором мы упоминаем — я максимально следую api discord v13

Ответ №1:

В соответствии с discord.js документы для Guild#systemChannel , это свойство может быть нулевым, что означает, что не у каждой Гильдии есть systemChannel . Возможно, вам захочется проверить, является ли он нулевым перед созданием приглашения, чтобы вы могли выбрать другой канал, если это так.