types: fix recurrence rule types (#10694)

* types: fix recurrence rule types

* fix: endAt not endsAt

* types: remove fields that cannot be set by the client

* chore: cleanup JS lands too

* chore: missed you

* chore: bite me

---------

Co-authored-by: Jiralite <33201955+Jiralite@users.noreply.github.com>
This commit is contained in:
Vlad Frangu
2025-02-04 16:06:46 +02:00
committed by GitHub
parent 73c6bc2c36
commit 193a5e9e20
4 changed files with 117 additions and 17 deletions

View File

@@ -41,15 +41,12 @@ class GuildScheduledEventManager extends CachedManager {
* Options for setting a recurrence rule for a guild scheduled event.
* @typedef {Object} GuildScheduledEventRecurrenceRuleOptions
* @property {DateResolvable} startAt The time the recurrence rule interval starts at
* @property {?DateResolvable} endAt The time the recurrence rule interval ends at
* @property {GuildScheduledEventRecurrenceRuleFrequency} frequency How often the event occurs
* @property {number} interval The spacing between the events
* @property {?GuildScheduledEventRecurrenceRuleWeekday[]} byWeekday The days within a week to recur on
* @property {?GuildScheduledEventRecurrenceRuleNWeekday[]} byNWeekday The days within a week to recur on
* @property {?GuildScheduledEventRecurrenceRuleMonth[]} byMonth The months to recur on
* @property {?number[]} byMonthDay The days within a month to recur on
* @property {?number[]} byYearDay The days within a year to recur on
* @property {?number} count The total amount of times the event is allowed to recur before stopping
*/
/**

View File

@@ -63,16 +63,12 @@ function _transformAPIMessageInteractionMetadata(client, messageInteractionMetad
function _transformGuildScheduledEventRecurrenceRule(recurrenceRule) {
return {
start: new Date(recurrenceRule.startAt).toISOString(),
// eslint-disable-next-line eqeqeq
end: recurrenceRule.endAt != null ? new Date(recurrenceRule.endAt).toISOString() : recurrenceRule.endAt,
frequency: recurrenceRule.frequency,
interval: recurrenceRule.interval,
by_weekday: recurrenceRule.byWeekday,
by_n_weekday: recurrenceRule.byNWeekday,
by_month: recurrenceRule.byMonth,
by_month_day: recurrenceRule.byMonthDay,
by_year_day: recurrenceRule.byYearDay,
count: recurrenceRule.count,
};
}

View File

@@ -6378,18 +6378,35 @@ export interface GuildScheduledEventCreateOptions {
recurrenceRule?: GuildScheduledEventRecurrenceRuleOptions;
}
export interface GuildScheduledEventRecurrenceRuleOptions {
export type GuildScheduledEventRecurrenceRuleOptions =
| BaseGuildScheduledEventRecurrenceRuleOptions<
GuildScheduledEventRecurrenceRuleFrequency.Yearly,
{
byMonth: readonly GuildScheduledEventRecurrenceRuleMonth[];
byMonthDay: readonly number[];
}
>
| BaseGuildScheduledEventRecurrenceRuleOptions<
GuildScheduledEventRecurrenceRuleFrequency.Monthly,
{
byNWeekday: readonly GuildScheduledEventRecurrenceRuleNWeekday[];
}
>
| BaseGuildScheduledEventRecurrenceRuleOptions<
GuildScheduledEventRecurrenceRuleFrequency.Weekly | GuildScheduledEventRecurrenceRuleFrequency.Daily,
{
byWeekday: readonly GuildScheduledEventRecurrenceRuleWeekday[];
}
>;
type BaseGuildScheduledEventRecurrenceRuleOptions<
Frequency extends GuildScheduledEventRecurrenceRuleFrequency,
Extra extends {},
> = {
startAt: DateResolvable;
endAt: DateResolvable;
frequency: GuildScheduledEventRecurrenceRuleFrequency;
interval: number;
byWeekday: readonly GuildScheduledEventRecurrenceRuleWeekday[];
byNWeekday: readonly GuildScheduledEventRecurrenceRuleNWeekday[];
byMonth: readonly GuildScheduledEventRecurrenceRuleMonth[];
byMonthDay: readonly number[];
byYearDay: readonly number[];
count: number;
}
frequency: Frequency;
} & Extra;
export interface GuildScheduledEventEditOptions<
Status extends GuildScheduledEventStatus,

View File

@@ -33,6 +33,9 @@ import {
APIMentionableSelectComponent,
APIModalInteractionResponseCallbackData,
WebhookType,
GuildScheduledEventRecurrenceRuleFrequency,
GuildScheduledEventRecurrenceRuleMonth,
GuildScheduledEventRecurrenceRuleWeekday,
} from 'discord-api-types/v10';
import {
ApplicationCommand,
@@ -214,6 +217,7 @@ import {
PollData,
UserManager,
InteractionCallbackResponse,
GuildScheduledEventRecurrenceRuleOptions,
ThreadOnlyChannel,
} from '.';
import {
@@ -2690,3 +2694,89 @@ client.on('interactionCreate', interaction => {
declare const guildScheduledEventManager: GuildScheduledEventManager;
await guildScheduledEventManager.edit(snowflake, { recurrenceRule: null });
{
expectNotAssignable<GuildScheduledEventRecurrenceRuleOptions>({
startAt: new Date(),
frequency: GuildScheduledEventRecurrenceRuleFrequency.Yearly,
interval: 1,
byMonth: [GuildScheduledEventRecurrenceRuleMonth.May],
byMonthDay: [4],
// Invalid property
byWeekday: [GuildScheduledEventRecurrenceRuleWeekday.Monday],
});
expectNotAssignable<GuildScheduledEventRecurrenceRuleOptions>({
startAt: new Date(),
frequency: GuildScheduledEventRecurrenceRuleFrequency.Yearly,
interval: 1,
byMonth: [GuildScheduledEventRecurrenceRuleMonth.May],
byMonthDay: [4],
// Invalid property
byNWeekday: [{ n: 1, day: GuildScheduledEventRecurrenceRuleWeekday.Monday }],
});
expectAssignable<GuildScheduledEventRecurrenceRuleOptions>({
startAt: new Date(),
frequency: GuildScheduledEventRecurrenceRuleFrequency.Yearly,
interval: 1,
byMonth: [GuildScheduledEventRecurrenceRuleMonth.May],
byMonthDay: [4],
});
}
{
expectAssignable<GuildScheduledEventRecurrenceRuleOptions>({
startAt: new Date(),
frequency: GuildScheduledEventRecurrenceRuleFrequency.Monthly,
interval: 1,
byNWeekday: [{ n: 1, day: GuildScheduledEventRecurrenceRuleWeekday.Monday }],
});
expectNotAssignable<GuildScheduledEventRecurrenceRuleOptions>({
startAt: new Date(),
frequency: GuildScheduledEventRecurrenceRuleFrequency.Monthly,
interval: 1,
byNWeekday: [{ n: 1, day: GuildScheduledEventRecurrenceRuleWeekday.Monday }],
// Invalid property
byWeekday: [GuildScheduledEventRecurrenceRuleWeekday.Monday],
});
}
{
expectAssignable<GuildScheduledEventRecurrenceRuleOptions>({
startAt: new Date(),
frequency: GuildScheduledEventRecurrenceRuleFrequency.Weekly,
interval: 1,
byWeekday: [GuildScheduledEventRecurrenceRuleWeekday.Monday],
});
expectNotAssignable<GuildScheduledEventRecurrenceRuleOptions>({
startAt: new Date(),
frequency: GuildScheduledEventRecurrenceRuleFrequency.Weekly,
interval: 1,
byWeekday: [GuildScheduledEventRecurrenceRuleWeekday.Monday],
// Invalid property
byNWeekday: [{ n: 1, day: GuildScheduledEventRecurrenceRuleWeekday.Monday }],
});
}
{
expectNotAssignable<GuildScheduledEventRecurrenceRuleOptions>({
startAt: new Date(),
frequency: GuildScheduledEventRecurrenceRuleFrequency.Daily,
interval: 1,
byWeekday: [GuildScheduledEventRecurrenceRuleWeekday.Monday],
// Invalid property
byNWeekday: [{ n: 1, day: GuildScheduledEventRecurrenceRuleWeekday.Monday }],
});
expectNotAssignable<GuildScheduledEventRecurrenceRuleOptions>({
startAt: new Date(),
frequency: GuildScheduledEventRecurrenceRuleFrequency.Daily,
interval: 1,
byWeekday: [GuildScheduledEventRecurrenceRuleWeekday.Monday],
// Invalid property
byMonth: [GuildScheduledEventRecurrenceRuleMonth.May],
});
}