diff --git a/eventhandlers.go b/eventhandlers.go index 52227e4..b3569a7 100644 --- a/eventhandlers.go +++ b/eventhandlers.go @@ -41,6 +41,7 @@ const ( guildScheduledEventUpdateEventType = "GUILD_SCHEDULED_EVENT_UPDATE" guildScheduledEventUserAddEventType = "GUILD_SCHEDULED_EVENT_USER_ADD" guildScheduledEventUserRemoveEventType = "GUILD_SCHEDULED_EVENT_USER_REMOVE" + guildStickersUpdateEventType = "GUILD_STICKERS_UPDATE" guildUpdateEventType = "GUILD_UPDATE" integrationCreateEventType = "INTEGRATION_CREATE" integrationDeleteEventType = "INTEGRATION_DELETE" @@ -746,6 +747,26 @@ func (eh guildScheduledEventUserRemoveEventHandler) Handle(s *Session, i interfa } } +// guildStickersUpdateEventHandler is an event handler for GuildStickersUpdate events. +type guildStickersUpdateEventHandler func(*Session, *GuildStickersUpdate) + +// Type returns the event type for GuildStickersUpdate events. +func (eh guildStickersUpdateEventHandler) Type() string { + return guildStickersUpdateEventType +} + +// New returns a new instance of GuildStickersUpdate. +func (eh guildStickersUpdateEventHandler) New() interface{} { + return &GuildStickersUpdate{} +} + +// Handle is the handler for GuildStickersUpdate events. +func (eh guildStickersUpdateEventHandler) Handle(s *Session, i interface{}) { + if t, ok := i.(*GuildStickersUpdate); ok { + eh(s, t) + } +} + // guildUpdateEventHandler is an event handler for GuildUpdate events. type guildUpdateEventHandler func(*Session, *GuildUpdate) @@ -1573,6 +1594,8 @@ func handlerForInterface(handler interface{}) EventHandler { return guildScheduledEventUserAddEventHandler(v) case func(*Session, *GuildScheduledEventUserRemove): return guildScheduledEventUserRemoveEventHandler(v) + case func(*Session, *GuildStickersUpdate): + return guildStickersUpdateEventHandler(v) case func(*Session, *GuildUpdate): return guildUpdateEventHandler(v) case func(*Session, *IntegrationCreate): @@ -1686,6 +1709,7 @@ func init() { registerInterfaceProvider(guildScheduledEventUpdateEventHandler(nil)) registerInterfaceProvider(guildScheduledEventUserAddEventHandler(nil)) registerInterfaceProvider(guildScheduledEventUserRemoveEventHandler(nil)) + registerInterfaceProvider(guildStickersUpdateEventHandler(nil)) registerInterfaceProvider(guildUpdateEventHandler(nil)) registerInterfaceProvider(integrationCreateEventHandler(nil)) registerInterfaceProvider(integrationDeleteEventHandler(nil)) diff --git a/events.go b/events.go index 61daca6..ccc7346 100644 --- a/events.go +++ b/events.go @@ -181,6 +181,12 @@ type GuildEmojisUpdate struct { Emojis []*Emoji `json:"emojis"` } +// A GuildStickersUpdate is the data for a GuildStickersUpdate event. +type GuildStickersUpdate struct { + GuildID string `json:"guild_id"` + Stickers []*Sticker `json:"stickers"` +} + // A GuildMembersChunk is the data for a GuildMembersChunk event. type GuildMembersChunk struct { GuildID string `json:"guild_id"` diff --git a/state.go b/state.go index bac4bf3..d1fbb38 100644 --- a/state.go +++ b/state.go @@ -42,6 +42,7 @@ type State struct { TrackChannels bool TrackThreads bool TrackEmojis bool + TrackStickers bool TrackMembers bool TrackThreadMembers bool TrackRoles bool @@ -63,6 +64,7 @@ func NewState() *State { TrackChannels: true, TrackThreads: true, TrackEmojis: true, + TrackStickers: true, TrackMembers: true, TrackThreadMembers: true, TrackRoles: true, @@ -175,8 +177,8 @@ func (s *State) GuildRemove(guild *Guild) error { // Guild gets a guild by ID. // Useful for querying if @me is in a guild: -// _, err := discordgo.Session.State.Guild(guildID) -// isInGuild := err == nil +// _, err := discordgo.Session.State.Guild(guildID) +// isInGuild := err == nil func (s *State) Guild(guildID string) (*Guild, error) { if s == nil { return nil, ErrNilState @@ -1050,6 +1052,17 @@ func (s *State) OnInterface(se *Session, i interface{}) (err error) { defer s.Unlock() guild.Emojis = t.Emojis } + case *GuildStickersUpdate: + if s.TrackStickers { + var guild *Guild + guild, err = s.Guild(t.GuildID) + if err != nil { + return err + } + s.Lock() + defer s.Unlock() + guild.Stickers = t.Stickers + } case *ChannelCreate: if s.TrackChannels { err = s.ChannelAdd(t.Channel)