Skip to content

Commit 8f3c66b

Browse files
committed
Add ScheduledEventRecurrenceRule
discord/discord-api-docs#7058
1 parent b06f2e7 commit 8f3c66b

File tree

1 file changed

+94
-35
lines changed

1 file changed

+94
-35
lines changed

discord/guild_scheduled_event.go

Lines changed: 94 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -9,22 +9,23 @@ import (
99

1010
// GuildScheduledEvent a representation of a scheduled event in a Guild (https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object)
1111
type GuildScheduledEvent struct {
12-
ID snowflake.ID `json:"id"`
13-
GuildID snowflake.ID `json:"guild_id"`
14-
ChannelID *snowflake.ID `json:"channel_id"`
15-
CreatorID snowflake.ID `json:"creator_id"`
16-
Name string `json:"name"`
17-
Description string `json:"description"`
18-
ScheduledStartTime time.Time `json:"scheduled_start_time"`
19-
ScheduledEndTime *time.Time `json:"scheduled_end_time"`
20-
PrivacyLevel ScheduledEventPrivacyLevel `json:"privacy_level"`
21-
Status ScheduledEventStatus `json:"status"`
22-
EntityType ScheduledEventEntityType `json:"entity_type"`
23-
EntityID *snowflake.ID `json:"entity_id"`
24-
EntityMetaData *EntityMetaData `json:"entity_metadata"`
25-
Creator User `json:"creator"`
26-
UserCount int `json:"user_count"`
27-
Image *string `json:"image"`
12+
ID snowflake.ID `json:"id"`
13+
GuildID snowflake.ID `json:"guild_id"`
14+
ChannelID *snowflake.ID `json:"channel_id"`
15+
CreatorID snowflake.ID `json:"creator_id"`
16+
Name string `json:"name"`
17+
Description string `json:"description"`
18+
ScheduledStartTime time.Time `json:"scheduled_start_time"`
19+
ScheduledEndTime *time.Time `json:"scheduled_end_time"`
20+
PrivacyLevel ScheduledEventPrivacyLevel `json:"privacy_level"`
21+
Status ScheduledEventStatus `json:"status"`
22+
EntityType ScheduledEventEntityType `json:"entity_type"`
23+
EntityID *snowflake.ID `json:"entity_id"`
24+
EntityMetaData *EntityMetaData `json:"entity_metadata"`
25+
Creator User `json:"creator"`
26+
UserCount int `json:"user_count"`
27+
Image *string `json:"image"`
28+
RecurrenceRule *ScheduledEventRecurrenceRule `json:"recurrence_rule"`
2829
}
2930

3031
func (e GuildScheduledEvent) CreatedAt() time.Time {
@@ -41,28 +42,30 @@ func (e GuildScheduledEvent) CoverURL(opts ...CDNOpt) *string {
4142
}
4243

4344
type GuildScheduledEventCreate struct {
44-
ChannelID snowflake.ID `json:"channel_id,omitempty"`
45-
EntityMetaData *EntityMetaData `json:"entity_metadata,omitempty"`
46-
Name string `json:"name"`
47-
PrivacyLevel ScheduledEventPrivacyLevel `json:"privacy_level"`
48-
ScheduledStartTime time.Time `json:"scheduled_start_time"`
49-
ScheduledEndTime *time.Time `json:"scheduled_end_time,omitempty"`
50-
Description string `json:"description,omitempty"`
51-
EntityType ScheduledEventEntityType `json:"entity_type"`
52-
Image *Icon `json:"image,omitempty"`
45+
ChannelID snowflake.ID `json:"channel_id,omitempty"`
46+
EntityMetaData *EntityMetaData `json:"entity_metadata,omitempty"`
47+
Name string `json:"name"`
48+
PrivacyLevel ScheduledEventPrivacyLevel `json:"privacy_level"`
49+
ScheduledStartTime time.Time `json:"scheduled_start_time"`
50+
ScheduledEndTime *time.Time `json:"scheduled_end_time,omitempty"`
51+
Description string `json:"description,omitempty"`
52+
EntityType ScheduledEventEntityType `json:"entity_type"`
53+
Image *Icon `json:"image,omitempty"`
54+
RecurrenceRule *ScheduledEventRecurrenceRule `json:"recurrence_rule,omitempty"`
5355
}
5456

5557
type GuildScheduledEventUpdate struct {
56-
ChannelID *snowflake.ID `json:"channel_id,omitempty"`
57-
EntityMetaData *EntityMetaData `json:"entity_metadata,omitempty"`
58-
Name string `json:"name,omitempty"`
59-
PrivacyLevel *ScheduledEventPrivacyLevel `json:"privacy_level,omitempty"`
60-
ScheduledStartTime *time.Time `json:"scheduled_start_time,omitempty"`
61-
ScheduledEndTime *time.Time `json:"scheduled_end_time,omitempty"`
62-
Description *string `json:"description,omitempty"`
63-
EntityType *ScheduledEventEntityType `json:"entity_type,omitempty"`
64-
Status *ScheduledEventStatus `json:"status,omitempty"`
65-
Image *json.Nullable[Icon] `json:"image,omitempty"`
58+
ChannelID *snowflake.ID `json:"channel_id,omitempty"`
59+
EntityMetaData *EntityMetaData `json:"entity_metadata,omitempty"`
60+
Name string `json:"name,omitempty"`
61+
PrivacyLevel *ScheduledEventPrivacyLevel `json:"privacy_level,omitempty"`
62+
ScheduledStartTime *time.Time `json:"scheduled_start_time,omitempty"`
63+
ScheduledEndTime *time.Time `json:"scheduled_end_time,omitempty"`
64+
Description *string `json:"description,omitempty"`
65+
EntityType *ScheduledEventEntityType `json:"entity_type,omitempty"`
66+
Status *ScheduledEventStatus `json:"status,omitempty"`
67+
Image *json.Nullable[Icon] `json:"image,omitempty"`
68+
RecurrenceRule *json.Nullable[ScheduledEventRecurrenceRule] `json:"recurrence_rule,omitempty"`
6669
}
6770

6871
type GuildScheduledEventUser struct {
@@ -98,6 +101,62 @@ const (
98101
ScheduledEventEntityTypeExternal
99102
)
100103

104+
type ScheduledEventRecurrenceRule struct {
105+
Start time.Time `json:"start"`
106+
End *time.Time `json:"end"`
107+
Frequency ScheduledEventRecurrenceRuleFrequency `json:"frequency"`
108+
Interval int `json:"interval"`
109+
ByWeekday []ScheduledEventRecurrenceRuleWeekday `json:"by_weekday"`
110+
ByNWeekday []ScheduledEventRecurrenceRuleNWeekday `json:"by_n_weekday"`
111+
ByMonth []ScheduledEventRecurrenceRuleMonth `json:"by_month"`
112+
ByMonthDay []int `json:"by_month_day"`
113+
ByYearDay []int `json:"by_year_day"`
114+
Count *int `json:"count"`
115+
}
116+
117+
type ScheduledEventRecurrenceRuleFrequency int
118+
119+
const (
120+
ScheduledEventRecurrenceRuleFrequencyYearly ScheduledEventRecurrenceRuleFrequency = iota
121+
ScheduledEventRecurrenceRuleFrequencyMonthly
122+
ScheduledEventRecurrenceRuleFrequencyWeekly
123+
ScheduledEventRecurrenceRuleFrequencyDaily
124+
)
125+
126+
type ScheduledEventRecurrenceRuleWeekday int
127+
128+
const (
129+
ScheduledEventRecurrenceRuleWeekdayMonday ScheduledEventRecurrenceRuleWeekday = iota
130+
ScheduledEventRecurrenceRuleWeekdayTuesday
131+
ScheduledEventRecurrenceRuleWeekdayWednesday
132+
ScheduledEventRecurrenceRuleWeekdayThursday
133+
ScheduledEventRecurrenceRuleWeekdayFriday
134+
ScheduledEventRecurrenceRuleWeekdaySaturday
135+
ScheduledEventRecurrenceRuleWeekdaySunday
136+
)
137+
138+
type ScheduledEventRecurrenceRuleNWeekday struct {
139+
N int `json:"n"`
140+
Day ScheduledEventRecurrenceRuleWeekday `json:"day"`
141+
}
142+
143+
type ScheduledEventRecurrenceRuleMonth int
144+
145+
const (
146+
ScheduledEventRecurrenceRuleMonthJanuary ScheduledEventRecurrenceRuleMonth = iota + 1
147+
ScheduledEventRecurrenceRuleMonthFebruary
148+
ScheduledEventRecurrenceRuleMonthMarch
149+
ScheduledEventRecurrenceRuleMonthApril
150+
ScheduledEventRecurrenceRuleMonthMay
151+
ScheduledEventRecurrenceRuleMonthJune
152+
ScheduledEventRecurrenceRuleMonthJuly
153+
ScheduledEventRecurrenceRuleMonthAugust
154+
ScheduledEventRecurrenceRuleMonthSeptember
155+
ScheduledEventRecurrenceRuleMonthOctober
156+
ScheduledEventRecurrenceRuleMonthNovember
157+
ScheduledEventRecurrenceRuleMonthDecember
158+
)
159+
101160
// EntityMetaData additional metadata for the scheduled event (https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event-object-guild-scheduled-event-entity-metadata)
102161
type EntityMetaData struct {
103162
Location string `json:"location"`

0 commit comments

Comments
 (0)