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" guildScheduledEventUpdateEventType = "GUILD_SCHEDULED_EVENT_UPDATE"
guildScheduledEventUserAddEventType = "GUILD_SCHEDULED_EVENT_USER_ADD" guildScheduledEventUserAddEventType = "GUILD_SCHEDULED_EVENT_USER_ADD"
guildScheduledEventUserRemoveEventType = "GUILD_SCHEDULED_EVENT_USER_REMOVE" guildScheduledEventUserRemoveEventType = "GUILD_SCHEDULED_EVENT_USER_REMOVE"
guildStickersUpdateEventType = "GUILD_STICKERS_UPDATE"
guildUpdateEventType = "GUILD_UPDATE" guildUpdateEventType = "GUILD_UPDATE"
integrationCreateEventType = "INTEGRATION_CREATE" integrationCreateEventType = "INTEGRATION_CREATE"
integrationDeleteEventType = "INTEGRATION_DELETE" 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. // guildUpdateEventHandler is an event handler for GuildUpdate events.
type guildUpdateEventHandler func(*Session, *GuildUpdate) type guildUpdateEventHandler func(*Session, *GuildUpdate)
@@ -1573,6 +1594,8 @@ func handlerForInterface(handler interface{}) EventHandler {
return guildScheduledEventUserAddEventHandler(v) return guildScheduledEventUserAddEventHandler(v)
case func(*Session, *GuildScheduledEventUserRemove): case func(*Session, *GuildScheduledEventUserRemove):
return guildScheduledEventUserRemoveEventHandler(v) return guildScheduledEventUserRemoveEventHandler(v)
case func(*Session, *GuildStickersUpdate):
return guildStickersUpdateEventHandler(v)
case func(*Session, *GuildUpdate): case func(*Session, *GuildUpdate):
return guildUpdateEventHandler(v) return guildUpdateEventHandler(v)
case func(*Session, *IntegrationCreate): case func(*Session, *IntegrationCreate):
@@ -1686,6 +1709,7 @@ func init() {
registerInterfaceProvider(guildScheduledEventUpdateEventHandler(nil)) registerInterfaceProvider(guildScheduledEventUpdateEventHandler(nil))
registerInterfaceProvider(guildScheduledEventUserAddEventHandler(nil)) registerInterfaceProvider(guildScheduledEventUserAddEventHandler(nil))
registerInterfaceProvider(guildScheduledEventUserRemoveEventHandler(nil)) registerInterfaceProvider(guildScheduledEventUserRemoveEventHandler(nil))
registerInterfaceProvider(guildStickersUpdateEventHandler(nil))
registerInterfaceProvider(guildUpdateEventHandler(nil)) registerInterfaceProvider(guildUpdateEventHandler(nil))
registerInterfaceProvider(integrationCreateEventHandler(nil)) registerInterfaceProvider(integrationCreateEventHandler(nil))
registerInterfaceProvider(integrationDeleteEventHandler(nil)) registerInterfaceProvider(integrationDeleteEventHandler(nil))

View File

@@ -181,6 +181,12 @@ type GuildEmojisUpdate struct {
Emojis []*Emoji `json:"emojis"` 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. // A GuildMembersChunk is the data for a GuildMembersChunk event.
type GuildMembersChunk struct { type GuildMembersChunk struct {
GuildID string `json:"guild_id"` GuildID string `json:"guild_id"`

View File

@@ -42,6 +42,7 @@ type State struct {
TrackChannels bool TrackChannels bool
TrackThreads bool TrackThreads bool
TrackEmojis bool TrackEmojis bool
TrackStickers bool
TrackMembers bool TrackMembers bool
TrackThreadMembers bool TrackThreadMembers bool
TrackRoles bool TrackRoles bool
@@ -63,6 +64,7 @@ func NewState() *State {
TrackChannels: true, TrackChannels: true,
TrackThreads: true, TrackThreads: true,
TrackEmojis: true, TrackEmojis: true,
TrackStickers: true,
TrackMembers: true, TrackMembers: true,
TrackThreadMembers: true, TrackThreadMembers: true,
TrackRoles: true, TrackRoles: true,
@@ -175,8 +177,8 @@ func (s *State) GuildRemove(guild *Guild) error {
// Guild gets a guild by ID. // Guild gets a guild by ID.
// Useful for querying if @me is in a guild: // Useful for querying if @me is in a guild:
// _, err := discordgo.Session.State.Guild(guildID) // _, err := discordgo.Session.State.Guild(guildID)
// isInGuild := err == nil // isInGuild := err == nil
func (s *State) Guild(guildID string) (*Guild, error) { func (s *State) Guild(guildID string) (*Guild, error) {
if s == nil { if s == nil {
return nil, ErrNilState return nil, ErrNilState
@@ -1050,6 +1052,17 @@ func (s *State) OnInterface(se *Session, i interface{}) (err error) {
defer s.Unlock() defer s.Unlock()
guild.Emojis = t.Emojis 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: case *ChannelCreate:
if s.TrackChannels { if s.TrackChannels {
err = s.ChannelAdd(t.Channel) err = s.ChannelAdd(t.Channel)