feat: implement GuildStickersUpdate event (#1614)

---------

Co-authored-by: Fedor Lapshin <fe.lap.prog@gmail.com>
This commit is contained in:
Kedas
2025-05-23 06:31:56 -07:00
committed by GitHub
parent 9d43928917
commit 9fe3e5749c
3 changed files with 45 additions and 2 deletions

View File

@@ -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))

View File

@@ -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"`

View File

@@ -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,
@@ -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)