feat!: Add invite flags for guest invites (#4237)

* sort GuildFeatures

* Add invite flags for guest invites

* fix desired props type error
This commit is contained in:
Fleny
2025-07-12 09:42:21 +02:00
committed by GitHub
parent 03734ea6a1
commit 76e64ce748
7 changed files with 35 additions and 6 deletions
+1
View File
@@ -480,6 +480,7 @@ export function createDesiredPropertiesObject<T extends RecursivePartial<Transfo
guildScheduledEvent: defaultValue,
stageInstance: defaultValue,
expiresAt: defaultValue,
flags: defaultValue,
...desiredProperties.invite,
},
member: {
+2 -1
View File
@@ -1,5 +1,5 @@
import type { DiscordApplication, DiscordInviteCreate, DiscordInviteMetadata } from '@discordeno/types'
import { type InternalBot, type Invite, isInviteWithMetadata } from '../index.js'
import { type InternalBot, type Invite, ToggleBitfield, isInviteWithMetadata } from '../index.js'
export function transformInvite(
bot: InternalBot,
@@ -42,6 +42,7 @@ export function transformInvite(
if (props.expiresAt && payload.invite.expires_at) {
invite.expiresAt = Date.parse(payload.invite.expires_at)
}
if (props.flags && payload.invite.flags) invite.flags = new ToggleBitfield(payload.invite.flags)
} else {
if (props.channelId && payload.invite.channel_id) invite.channelId = bot.transformers.snowflake(payload.invite.channel_id)
if (props.guildId && payload.invite.guild_id) invite.guildId = bot.transformers.snowflake(payload.invite.guild_id)
@@ -26,7 +26,7 @@ export function transformMemberToDiscordMember(bot: InternalBot, payload: Member
return {
nick: payload.nick ?? undefined,
roles: payload.roles.map((id) => id.toString()),
joined_at: new Date(payload.joinedAt).toISOString(),
joined_at: payload.joinedAt ? new Date(payload.joinedAt).toISOString() : null,
premium_since: payload.premiumSince ? new Date(payload.premiumSince).toISOString() : undefined,
avatar: payload.avatar ? iconBigintToHash(payload.avatar) : undefined,
permissions: payload.permissions?.toString(),
@@ -30,6 +30,7 @@ const featureNames = [
'verified',
'vipRegions',
'welcomeScreenEnabled',
'guestsEnabled',
'enhancedRoleColors',
] as const
@@ -46,7 +47,6 @@ export const GuildToggle = {
premiumProgressBarEnabled: 1n << 4n,
// GUILD FEATURES ARE BELOW THIS
// MISSING VALUES IN THE BITFIELD: 36+
/** Whether the guild has access to set an animated guild banner image */
animatedBanner: 1n << 11n,
@@ -106,6 +106,8 @@ export const GuildToggle = {
vipRegions: 1n << 6n,
/** Whether the guild has enabled the welcome screen */
welcomeScreenEnabled: 1n << 18n,
/** Whether the guild has access to guest invites */
guestsEnabled: 1n << 26n,
/** Whether the guild is able to set gradient colors to roles */
enhancedRoleColors: 1n << 35n,
}
@@ -155,6 +157,7 @@ export class GuildToggles extends ToggleBitfieldBigint {
if (guild.features.includes(GuildFeatures.Verified)) this.add(GuildToggle.verified)
if (guild.features.includes(GuildFeatures.VipRegions)) this.add(GuildToggle.vipRegions)
if (guild.features.includes(GuildFeatures.WelcomeScreenEnabled)) this.add(GuildToggle.welcomeScreenEnabled)
if (guild.features.includes(GuildFeatures.GuestsEnabled)) this.add(GuildToggle.guestsEnabled)
if (guild.features.includes(GuildFeatures.EnhancedRoleColors)) this.add(GuildToggle.enhancedRoleColors)
}
}
@@ -341,6 +344,11 @@ export class GuildToggles extends ToggleBitfieldBigint {
return this.has('soundboard')
}
/** Whether the guild has access to guest invites */
get guestsEnabled(): boolean {
return this.has('guestsEnabled')
}
/** Whether the guild is able to set gradient colors to roles */
get enhancedRoleColors(): boolean {
return this.has('enhancedRoleColors')
+3 -1
View File
@@ -1081,6 +1081,8 @@ export interface Invite {
guildScheduledEvent?: ScheduledEvent
/** Approximate count of online members (only present when target_user is set) */
approximatePresenceCount?: number
/** Guild invite flags for guild invites. */
flags?: ToggleBitfield
}
export interface Member {
@@ -1106,7 +1108,7 @@ export interface Member {
/** Array of role object ids */
roles: bigint[]
/** When the user joined the guild */
joinedAt: number
joinedAt?: number
/** When the user started boosting the guild */
premiumSince?: number
/** The permissions this member has in the guild. Only present on interaction events. */