mirror of
https://github.com/discordeno/discordeno.git
synced 2026-06-01 16:30:08 +00:00
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:
@@ -480,6 +480,7 @@ export function createDesiredPropertiesObject<T extends RecursivePartial<Transfo
|
||||
guildScheduledEvent: defaultValue,
|
||||
stageInstance: defaultValue,
|
||||
expiresAt: defaultValue,
|
||||
flags: defaultValue,
|
||||
...desiredProperties.invite,
|
||||
},
|
||||
member: {
|
||||
|
||||
@@ -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')
|
||||
|
||||
@@ -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. */
|
||||
|
||||
@@ -260,6 +260,8 @@ export enum GuildFeatures {
|
||||
VipRegions = 'VIP_REGIONS',
|
||||
/** Guild has enabled the welcome screen */
|
||||
WelcomeScreenEnabled = 'WELCOME_SCREEN_ENABLED',
|
||||
/** Guild has access to guest invites */
|
||||
GuestsEnabled = 'GUESTS_ENABLED',
|
||||
/** Guild is able to set gradient colors to roles */
|
||||
EnhancedRoleColors = 'ENHANCED_ROLE_COLORS',
|
||||
}
|
||||
@@ -340,8 +342,11 @@ export interface DiscordMember {
|
||||
banner?: string
|
||||
/** Array of role object ids */
|
||||
roles: string[]
|
||||
/** When the user joined the guild */
|
||||
joined_at: string
|
||||
/**
|
||||
* When the user joined the guild
|
||||
* @remarks Member objects retrieved from `VOICE_STATE_UPDATE` events will have `joined_at` set as `null` if the member was invited as a guest.
|
||||
*/
|
||||
joined_at: string | null
|
||||
/** When the user started boosting the guild */
|
||||
premium_since?: string | null
|
||||
/** The permissions this member has in the guild. Only present on interaction events and OAuth2 current member fetch. */
|
||||
|
||||
@@ -34,6 +34,12 @@ export interface DiscordInvite {
|
||||
stage_instance?: DiscordInviteStageInstance
|
||||
/** guild scheduled event data */
|
||||
guild_scheduled_event?: DiscordScheduledEvent
|
||||
/**
|
||||
* Guild invite flags for guild invites.
|
||||
*
|
||||
* @see {@link DiscordGuildInviteFlags}
|
||||
*/
|
||||
flags?: number
|
||||
}
|
||||
|
||||
/** https://discord.com/developers/docs/resources/invite#invite-object-invite-types */
|
||||
@@ -49,6 +55,12 @@ export enum TargetTypes {
|
||||
EmbeddedApplication,
|
||||
}
|
||||
|
||||
/** https://discord.com/developers/docs/resources/invite#invite-object-guild-invite-flags */
|
||||
export enum DiscordGuildInviteFlags {
|
||||
/** This invite is a guest invite for a voice channel */
|
||||
isGuestInvite = 1 << 0,
|
||||
}
|
||||
|
||||
/** https://discord.com/developers/docs/resources/invite#invite-metadata-object-invite-metadata-structure */
|
||||
export interface DiscordInviteMetadata extends DiscordInvite {
|
||||
/** Number of times this invite has been used */
|
||||
|
||||
Reference in New Issue
Block a user