mirror of
https://github.com/discordeno/discordeno.git
synced 2026-09-17 08:47:22 +00:00
Add recurrence rule to scheduled event (#3834)
This commit is contained in:
@@ -42,6 +42,7 @@ import type {
|
||||
DiscordPresenceUpdate,
|
||||
DiscordRole,
|
||||
DiscordScheduledEvent,
|
||||
DiscordScheduledEventRecurrenceRule,
|
||||
DiscordSku,
|
||||
DiscordStageInstance,
|
||||
DiscordSticker,
|
||||
@@ -97,6 +98,7 @@ import {
|
||||
type PresenceUpdate,
|
||||
type Role,
|
||||
type ScheduledEvent,
|
||||
type ScheduledEventRecurrenceRule,
|
||||
type Sku,
|
||||
type StageInstance,
|
||||
type Sticker,
|
||||
@@ -155,6 +157,7 @@ import {
|
||||
transformPresence,
|
||||
transformRole,
|
||||
transformScheduledEvent,
|
||||
transformScheduledEventRecurrenceRule,
|
||||
transformSku,
|
||||
transformStageInstance,
|
||||
transformSticker,
|
||||
@@ -219,6 +222,7 @@ export interface Transformers {
|
||||
applicationCommandPermission: GuildApplicationCommandPermissions,
|
||||
) => any
|
||||
scheduledEvent: (bot: Bot, payload: DiscordScheduledEvent, scheduledEvent: ScheduledEvent) => any
|
||||
scheduledEventRecurrenceRule: (bot: Bot, payload: DiscordScheduledEventRecurrenceRule, scheduledEvent: ScheduledEventRecurrenceRule) => any
|
||||
threadMember: (bot: Bot, payload: DiscordThreadMember, threadMember: ThreadMember) => any
|
||||
threadMemberGuildCreate: (bot: Bot, payload: DiscordThreadMemberGuildCreate, threadMemberGuildCreate: ThreadMemberGuildCreate) => any
|
||||
welcomeScreen: (bot: Bot, payload: DiscordWelcomeScreen, welcomeScreen: WelcomeScreen) => any
|
||||
@@ -295,6 +299,7 @@ export interface Transformers {
|
||||
applicationCommandOption: (bot: Bot, payload: DiscordApplicationCommandOption) => ApplicationCommandOption
|
||||
applicationCommandPermission: (bot: Bot, payload: DiscordGuildApplicationCommandPermissions) => GuildApplicationCommandPermissions
|
||||
scheduledEvent: (bot: Bot, payload: DiscordScheduledEvent) => ScheduledEvent
|
||||
scheduledEventRecurrenceRule: (bot: Bot, payload: DiscordScheduledEventRecurrenceRule) => ScheduledEventRecurrenceRule
|
||||
threadMember: (bot: Bot, payload: DiscordThreadMember) => ThreadMember
|
||||
threadMemberGuildCreate: (bot: Bot, payload: DiscordThreadMemberGuildCreate) => ThreadMemberGuildCreate
|
||||
welcomeScreen: (bot: Bot, payload: DiscordWelcomeScreen) => WelcomeScreen
|
||||
@@ -592,6 +597,19 @@ export interface TransformersDesiredProperties {
|
||||
userCount: boolean
|
||||
location: boolean
|
||||
image: boolean
|
||||
recurrenceRule: boolean
|
||||
}
|
||||
scheduledEventRecurrenceRule: {
|
||||
start: boolean
|
||||
end: boolean
|
||||
frequency: boolean
|
||||
interval: boolean
|
||||
byWeekday: boolean
|
||||
byNWeekday: boolean
|
||||
byMonth: boolean
|
||||
byMonthDay: boolean
|
||||
byYearDay: boolean
|
||||
count: boolean
|
||||
}
|
||||
stageInstance: {
|
||||
id: boolean
|
||||
@@ -783,6 +801,7 @@ export function createTransformers(options: RecursivePartial<Transformers>, opts
|
||||
invite: options.customizers?.invite ?? defaultCustomizer,
|
||||
presence: options.customizers?.presence ?? defaultCustomizer,
|
||||
scheduledEvent: options.customizers?.scheduledEvent ?? defaultCustomizer,
|
||||
scheduledEventRecurrenceRule: options.customizers?.scheduledEventRecurrenceRule ?? defaultCustomizer,
|
||||
stageInstance: options.customizers?.stageInstance ?? defaultCustomizer,
|
||||
inviteStageInstance: options.customizers?.inviteStageInstance ?? defaultCustomizer,
|
||||
sticker: options.customizers?.sticker ?? defaultCustomizer,
|
||||
@@ -857,6 +876,7 @@ export function createTransformers(options: RecursivePartial<Transformers>, opts
|
||||
applicationCommandOption: options.applicationCommandOption ?? transformApplicationCommandOption,
|
||||
applicationCommandPermission: options.applicationCommandPermission ?? transformApplicationCommandPermission,
|
||||
scheduledEvent: options.scheduledEvent ?? transformScheduledEvent,
|
||||
scheduledEventRecurrenceRule: options.scheduledEventRecurrenceRule ?? transformScheduledEventRecurrenceRule,
|
||||
threadMember: options.threadMember ?? transformThreadMember,
|
||||
threadMemberGuildCreate: options.threadMemberGuildCreate ?? transformThreadMemberGuildCreate,
|
||||
welcomeScreen: options.welcomeScreen ?? transformWelcomeScreen,
|
||||
@@ -1175,8 +1195,22 @@ export function createDesiredPropertiesObject(
|
||||
userCount: defaultValue,
|
||||
location: defaultValue,
|
||||
image: defaultValue,
|
||||
recurrenceRule: defaultValue,
|
||||
...desiredProperties.scheduledEvent,
|
||||
},
|
||||
scheduledEventRecurrenceRule: {
|
||||
start: defaultValue,
|
||||
end: defaultValue,
|
||||
frequency: defaultValue,
|
||||
interval: defaultValue,
|
||||
byWeekday: defaultValue,
|
||||
byNWeekday: defaultValue,
|
||||
byMonth: defaultValue,
|
||||
byMonthDay: defaultValue,
|
||||
byYearDay: defaultValue,
|
||||
count: defaultValue,
|
||||
...desiredProperties.scheduledEventRecurrenceRule,
|
||||
},
|
||||
stageInstance: {
|
||||
id: defaultValue,
|
||||
guildId: defaultValue,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import type { DiscordScheduledEvent } from '@discordeno/types'
|
||||
import { type Bot, type ScheduledEvent, iconHashToBigInt } from '../index.js'
|
||||
import type { DiscordScheduledEvent, DiscordScheduledEventRecurrenceRule } from '@discordeno/types'
|
||||
import { type Bot, type ScheduledEvent, type ScheduledEventRecurrenceRule, iconHashToBigInt } from '../index.js'
|
||||
|
||||
export function transformScheduledEvent(bot: Bot, payload: DiscordScheduledEvent): ScheduledEvent {
|
||||
const props = bot.transformers.desiredProperties.scheduledEvent
|
||||
@@ -21,6 +21,26 @@ export function transformScheduledEvent(bot: Bot, payload: DiscordScheduledEvent
|
||||
if (props.userCount) scheduledEvent.userCount = payload.user_count ?? 0
|
||||
if (props.location && payload.entity_metadata?.location) scheduledEvent.location = payload.entity_metadata.location
|
||||
if (props.image && payload.image) scheduledEvent.image = iconHashToBigInt(payload.image)
|
||||
if (props.recurrenceRule && payload.recurrence_rule)
|
||||
scheduledEvent.recurrenceRule = bot.transformers.scheduledEventRecurrenceRule(bot, payload.recurrence_rule)
|
||||
|
||||
return bot.transformers.customizers.scheduledEvent(bot, payload, scheduledEvent)
|
||||
}
|
||||
|
||||
export function transformScheduledEventRecurrenceRule(bot: Bot, payload: DiscordScheduledEventRecurrenceRule): ScheduledEventRecurrenceRule {
|
||||
const props = bot.transformers.desiredProperties.scheduledEventRecurrenceRule
|
||||
const recurrenceRule = {} as ScheduledEventRecurrenceRule
|
||||
|
||||
if (props.start && payload.start) recurrenceRule.start = Date.parse(payload.start)
|
||||
if (props.end && payload.end) recurrenceRule.end = Date.parse(payload.end)
|
||||
if (props.frequency && payload.frequency) recurrenceRule.frequency = payload.frequency
|
||||
if (props.interval && payload.interval) recurrenceRule.interval = payload.interval
|
||||
if (props.byWeekday && payload.by_weekday) recurrenceRule.byWeekday = payload.by_weekday
|
||||
if (props.byNWeekday && payload.by_n_weekday) recurrenceRule.byNWeekday = payload.by_n_weekday
|
||||
if (props.byMonth && payload.by_month) recurrenceRule.byMonth = payload.by_month
|
||||
if (props.byMonthDay && payload.by_month_day) recurrenceRule.byMonthDay = payload.by_month_day
|
||||
if (props.byYearDay && payload.by_year_day) recurrenceRule.byYearDay = payload.by_year_day
|
||||
if (props.count && payload.count) recurrenceRule.count = payload.count
|
||||
|
||||
return bot.transformers.customizers.scheduledEventRecurrenceRule(bot, payload, recurrenceRule)
|
||||
}
|
||||
|
||||
@@ -22,6 +22,10 @@ import type {
|
||||
DiscordInviteType,
|
||||
DiscordOverwrite,
|
||||
DiscordPollLayoutType,
|
||||
DiscordScheduledEventRecurrenceRuleFrequency,
|
||||
DiscordScheduledEventRecurrenceRuleMonth,
|
||||
DiscordScheduledEventRecurrenceRuleNWeekday,
|
||||
DiscordScheduledEventRecurrenceRuleWeekday,
|
||||
DiscordSkuType,
|
||||
DiscordTeamMemberRole,
|
||||
DiscordTemplateSerializedSourceGuild,
|
||||
@@ -1437,6 +1441,31 @@ export interface ScheduledEvent {
|
||||
userCount?: number
|
||||
/** the cover image hash of the scheduled event */
|
||||
image?: bigint
|
||||
/** the definition for how often this event should recur */
|
||||
recurrenceRule?: ScheduledEventRecurrenceRule
|
||||
}
|
||||
|
||||
export interface ScheduledEventRecurrenceRule {
|
||||
/** Starting time of the recurrence interval */
|
||||
start: number
|
||||
/** Ending time of the recurrence interval */
|
||||
end: number | null
|
||||
/** How often the event occurs */
|
||||
frequency: DiscordScheduledEventRecurrenceRuleFrequency
|
||||
/** The spacing between the events, defined by `frequency`. For example, `frequency` of `Weekly` and an `interval` of `2` would be "every-other week" */
|
||||
interval: number
|
||||
/** Set of specific days within a week for the event to recur on */
|
||||
byWeekday: DiscordScheduledEventRecurrenceRuleWeekday[] | null
|
||||
/** List of specific days within a specific week (1-5) to recur on */
|
||||
byNWeekday: DiscordScheduledEventRecurrenceRuleNWeekday[] | null
|
||||
/** Set of specific months to recur on */
|
||||
byMonth: DiscordScheduledEventRecurrenceRuleMonth[] | null
|
||||
/** Set of specific dates within a month to recur on */
|
||||
byMonthDay: number[] | null
|
||||
/** Set of days within a year to recur on (1-364) */
|
||||
byYearDay: number[] | null
|
||||
/** The total amount of times that the event is allowed to recur before stopping */
|
||||
count: number | null
|
||||
}
|
||||
|
||||
export interface Sku {
|
||||
|
||||
Reference in New Issue
Block a user