feat(state): add missing BeforeDelete/BeforeUpdate for threads, members, channels and roles (#1647)

This commit is contained in:
Vladimir Petrov
2025-08-31 13:37:06 +03:00
committed by GitHub
parent 98dc133497
commit 30fe1930ba
2 changed files with 35 additions and 2 deletions

View File

@@ -60,6 +60,7 @@ type ChannelUpdate struct {
// ChannelDelete is the data for a ChannelDelete event.
type ChannelDelete struct {
*Channel
BeforeDelete *Channel `json:"-"`
}
// ChannelPinsUpdate stores data for a ChannelPinsUpdate event.
@@ -84,6 +85,7 @@ type ThreadUpdate struct {
// ThreadDelete is the data for a ThreadDelete event.
type ThreadDelete struct {
*Channel
BeforeDelete *Channel `json:"-"`
}
// ThreadListSync is the data for a ThreadListSync event.
@@ -158,6 +160,7 @@ type GuildMemberUpdate struct {
// GuildMemberRemove is the data for a GuildMemberRemove event.
type GuildMemberRemove struct {
*Member
BeforeDelete *Member `json:"-"`
}
// GuildRoleCreate is the data for a GuildRoleCreate event.
@@ -168,12 +171,14 @@ type GuildRoleCreate struct {
// GuildRoleUpdate is the data for a GuildRoleUpdate event.
type GuildRoleUpdate struct {
*GuildRole
BeforeUpdate *Role `json:"-"`
}
// A GuildRoleDelete is the data for a GuildRoleDelete event.
type GuildRoleDelete struct {
RoleID string `json:"role_id"`
GuildID string `json:"guild_id"`
RoleID string `json:"role_id"`
GuildID string `json:"guild_id"`
BeforeDelete *Role `json:"-"`
}
// A GuildEmojisUpdate is the data for a guild emoji update event.

View File

@@ -1014,6 +1014,12 @@ func (s *State) OnInterface(se *Session, i interface{}) (err error) {
// Removes member from the cache if tracking is enabled.
if s.TrackMembers {
old, err := s.Member(t.Member.GuildID, t.Member.User.ID)
if err == nil {
oldCopy := *old
t.BeforeDelete = &oldCopy
}
err = s.MemberRemove(t.Member)
}
case *GuildMembersChunk:
@@ -1035,10 +1041,22 @@ func (s *State) OnInterface(se *Session, i interface{}) (err error) {
}
case *GuildRoleUpdate:
if s.TrackRoles {
old, err := s.Role(t.GuildID, t.Role.ID)
if err == nil {
oldCopy := *old
t.BeforeUpdate = &oldCopy
}
err = s.RoleAdd(t.GuildID, t.Role)
}
case *GuildRoleDelete:
if s.TrackRoles {
old, err := s.Role(t.GuildID, t.RoleID)
if err == nil {
oldCopy := *old
t.BeforeDelete = &oldCopy
}
err = s.RoleRemove(t.GuildID, t.RoleID)
}
case *GuildEmojisUpdate:
@@ -1078,6 +1096,11 @@ func (s *State) OnInterface(se *Session, i interface{}) (err error) {
}
case *ChannelDelete:
if s.TrackChannels {
old, err := s.Channel(t.ID)
if err == nil {
oldCopy := *old
t.BeforeDelete = &oldCopy
}
err = s.ChannelRemove(t.Channel)
}
case *ThreadCreate:
@@ -1095,6 +1118,11 @@ func (s *State) OnInterface(se *Session, i interface{}) (err error) {
}
case *ThreadDelete:
if s.TrackThreads {
old, err := s.Channel(t.ID)
if err == nil {
oldCopy := *old
t.BeforeDelete = &oldCopy
}
err = s.ChannelRemove(t.Channel)
}
case *ThreadMemberUpdate: