Add recurrence rule to scheduled event (#3834)

This commit is contained in:
Fleny
2024-08-10 19:34:55 -05:00
committed by GitHub
parent 68c8ab76c9
commit 62b3122e89
5 changed files with 158 additions and 2 deletions
+34
View File
@@ -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)
}
+29
View File
@@ -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 {