Skip to content

Commit bf2d2b0

Browse files
topi314apricotbucket28
authored andcommitted
add newly_created field to EventThreadCreate & fix broken unmarshalling of EventThreadCreate, EventIntegrationUpdate & EventIntegrationCreate (disgoorg#396)
1 parent acea141 commit bf2d2b0

File tree

4 files changed

+97
-15
lines changed

4 files changed

+97
-15
lines changed

_examples/threads/example.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ func main() {
3838
}
3939
},
4040
OnThreadCreate: func(event *events.ThreadCreate) {
41-
slog.Info("ThreadCreateEvent")
41+
slog.Info("ThreadCreateEvent", slog.Any("newly_created", event.NewlyCreated))
4242
},
4343
OnThreadUpdate: func(event *events.ThreadUpdate) {
4444
slog.Info("ThreadUpdateEvent")

events/guild_thread_events.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ type GenericThread struct {
1919
type ThreadCreate struct {
2020
*GenericThread
2121
ThreadMember discord.ThreadMember
22+
NewlyCreated bool
2223
}
2324

2425
// ThreadUpdate is dispatched when a thread is updated.

gateway/gateway_events.go

Lines changed: 94 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,48 @@ func (EventChannelDelete) eventData() {}
107107
type EventThreadCreate struct {
108108
discord.GuildThread
109109
ThreadMember discord.ThreadMember `json:"thread_member"`
110+
NewlyCreated bool `json:"newly_created"`
111+
}
112+
113+
func (e *EventThreadCreate) UnmarshalJSON(data []byte) error {
114+
var guildThread discord.GuildThread
115+
if err := json.Unmarshal(data, &guildThread); err != nil {
116+
return err
117+
}
118+
119+
e.GuildThread = guildThread
120+
121+
var v struct {
122+
ThreadMember discord.ThreadMember `json:"thread_member"`
123+
NewlyCreated bool `json:"newly_created"`
124+
}
125+
if err := json.Unmarshal(data, &v); err != nil {
126+
return err
127+
}
128+
129+
e.ThreadMember = v.ThreadMember
130+
e.NewlyCreated = v.NewlyCreated
131+
return nil
132+
}
133+
134+
func (e EventThreadCreate) MarshalJSON() ([]byte, error) {
135+
data1, err := json.Marshal(e.GuildThread)
136+
if err != nil {
137+
return nil, err
138+
}
139+
140+
data2, err := json.Marshal(struct {
141+
ThreadMember discord.ThreadMember `json:"thread_member"`
142+
NewlyCreated bool `json:"newly_created"`
143+
}{
144+
ThreadMember: e.ThreadMember,
145+
NewlyCreated: e.NewlyCreated,
146+
})
147+
if err != nil {
148+
return nil, err
149+
}
150+
151+
return json.SimpleMerge(data1, data2)
110152
}
111153

112154
func (EventThreadCreate) messageData() {}
@@ -713,22 +755,41 @@ type EventIntegrationCreate struct {
713755
}
714756

715757
func (e *EventIntegrationCreate) UnmarshalJSON(data []byte) error {
716-
type integrationCreateEvent EventIntegrationCreate
717-
var v struct {
718-
discord.UnmarshalIntegration
719-
integrationCreateEvent
758+
var integration discord.UnmarshalIntegration
759+
if err := json.Unmarshal(data, &integration); err != nil {
760+
return err
720761
}
721762

763+
var v struct {
764+
GuildID snowflake.ID `json:"guild_id"`
765+
}
722766
if err := json.Unmarshal(data, &v); err != nil {
723767
return err
724768
}
725769

726-
*e = EventIntegrationCreate(v.integrationCreateEvent)
727-
728-
e.Integration = v.UnmarshalIntegration.Integration
770+
e.Integration = integration.Integration
771+
e.GuildID = v.GuildID
729772
return nil
730773
}
731774

775+
func (e EventIntegrationCreate) MarshalJSON() ([]byte, error) {
776+
data1, err := json.Marshal(e.Integration)
777+
if err != nil {
778+
return nil, err
779+
}
780+
781+
data2, err := json.Marshal(struct {
782+
GuildID snowflake.ID `json:"guild_id"`
783+
}{
784+
GuildID: e.GuildID,
785+
})
786+
if err != nil {
787+
return nil, err
788+
}
789+
790+
return json.SimpleMerge(data1, data2)
791+
}
792+
732793
func (EventIntegrationCreate) messageData() {}
733794
func (EventIntegrationCreate) eventData() {}
734795

@@ -738,22 +799,41 @@ type EventIntegrationUpdate struct {
738799
}
739800

740801
func (e *EventIntegrationUpdate) UnmarshalJSON(data []byte) error {
741-
type integrationUpdateEvent EventIntegrationUpdate
742-
var v struct {
743-
discord.UnmarshalIntegration
744-
integrationUpdateEvent
802+
var integration discord.UnmarshalIntegration
803+
if err := json.Unmarshal(data, &integration); err != nil {
804+
return err
745805
}
746806

807+
var v struct {
808+
GuildID snowflake.ID `json:"guild_id"`
809+
}
747810
if err := json.Unmarshal(data, &v); err != nil {
748811
return err
749812
}
750813

751-
*e = EventIntegrationUpdate(v.integrationUpdateEvent)
752-
753-
e.Integration = v.UnmarshalIntegration.Integration
814+
e.Integration = integration.Integration
815+
e.GuildID = v.GuildID
754816
return nil
755817
}
756818

819+
func (e EventIntegrationUpdate) MarshalJSON() ([]byte, error) {
820+
data1, err := json.Marshal(e.Integration)
821+
if err != nil {
822+
return nil, err
823+
}
824+
825+
data2, err := json.Marshal(struct {
826+
GuildID snowflake.ID `json:"guild_id"`
827+
}{
828+
GuildID: e.GuildID,
829+
})
830+
if err != nil {
831+
return nil, err
832+
}
833+
834+
return json.SimpleMerge(data1, data2)
835+
}
836+
757837
func (EventIntegrationUpdate) messageData() {}
758838
func (EventIntegrationUpdate) eventData() {}
759839

handlers/thread_handler.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ func gatewayHandlerThreadCreate(client bot.Client, sequenceNumber int, shardID i
1919
Thread: event.GuildThread,
2020
},
2121
ThreadMember: event.ThreadMember,
22+
NewlyCreated: event.NewlyCreated,
2223
})
2324
}
2425

0 commit comments

Comments
 (0)