Skip to content

Commit 68a7202

Browse files
authored
Merge pull request #43 from twitchdev/moderator-change-eventsub
Moderator change events on EventSub
2 parents 3d69b54 + 872dc62 commit 68a7202

File tree

3 files changed

+71
-4
lines changed

3 files changed

+71
-4
lines changed

internal/events/types/moderator_change/moderator_change_event.go

+34-3
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ package moderator_change
55

66
import (
77
"encoding/json"
8-
"errors"
98
"time"
109

1110
"github.com/twitchdev/twitch-cli/internal/events"
@@ -15,7 +14,7 @@ import (
1514

1615
var transportsSupported = map[string]bool{
1716
models.TransportWebSub: true,
18-
models.TransportEventSub: false,
17+
models.TransportEventSub: true,
1918
}
2019

2120
var triggerSupported = []string{"add-moderator", "remove-moderator"}
@@ -25,6 +24,10 @@ var triggerMapping = map[string]map[string]string{
2524
"add-moderator": "moderation.moderator.add",
2625
"remove-moderator": "moderation.moderator.remove",
2726
},
27+
models.TransportEventSub: {
28+
"add-moderator": "channel.moderator.add",
29+
"remove-moderator": "channel.moderator.remove",
30+
},
2831
}
2932

3033
type Event struct{}
@@ -35,7 +38,35 @@ func (e Event) GenerateEvent(params events.MockEventParameters) (events.MockEven
3538

3639
switch params.Transport {
3740
case models.TransportEventSub:
38-
return events.MockEventResponse{}, errors.New("Moderator change events are currently in beta on EventSub")
41+
body := *&models.EventsubResponse{
42+
Subscription: models.EventsubSubscription{
43+
ID: params.ID,
44+
Status: "enabled",
45+
Type: triggerMapping[params.Transport][params.Trigger],
46+
Version: "beta",
47+
Condition: models.EventsubCondition{
48+
BroadcasterUserID: params.ToUserID,
49+
},
50+
Transport: models.EventsubTransport{
51+
Method: "webhook",
52+
Callback: "null",
53+
},
54+
CreatedAt: util.GetTimestamp().Format(time.RFC3339Nano),
55+
},
56+
Event: models.ModeratorChangeEventSubEvent{
57+
UserID: params.FromUserID,
58+
UserLogin: params.FromUserName,
59+
UserName: params.FromUserName,
60+
BroadcasterUserID: params.ToUserID,
61+
BroadcasterUserLogin: params.ToUserName,
62+
BroadcasterUserName: params.ToUserName,
63+
},
64+
}
65+
66+
event, err = json.Marshal(body)
67+
if err != nil {
68+
return events.MockEventResponse{}, err
69+
}
3970
case models.TransportWebSub:
4071
body := *&models.ModeratorChangeWebSubResponse{
4172
Data: []models.ModeratorChangeWebSubEvent{

internal/events/types/moderator_change/moderator_change_event_test.go

+23-1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,28 @@ import (
1414
var fromUser = "1234"
1515
var toUser = "4567"
1616

17+
func TestEventSub(t *testing.T) {
18+
a := util.SetupTestEnv(t)
19+
20+
params := *&events.MockEventParameters{
21+
FromUserID: fromUser,
22+
ToUserID: toUser,
23+
Transport: models.TransportEventSub,
24+
Trigger: "add-moderator",
25+
}
26+
27+
r, err := Event{}.GenerateEvent(params)
28+
a.Nil(err)
29+
30+
var body models.ModeratorChangeEventSubResponse
31+
err = json.Unmarshal(r.JSON, &body)
32+
a.Nil(err)
33+
34+
a.Equal("channel.moderator.add", body.Subscription.Type, "Expected event type %v, got %v", "channel.moderator.add", body.Subscription.Type)
35+
a.Equal(toUser, body.Event.BroadcasterUserID, "Expected to user %v, got %v", toUser, body.Event.BroadcasterUserID)
36+
a.Equal(fromUser, body.Event.UserID, "Expected from user %v, got %v", r.ToUser, body.Event.UserID)
37+
}
38+
1739
func TestWebSub(t *testing.T) {
1840
a := util.SetupTestEnv(t)
1941

@@ -75,7 +97,7 @@ func TestValidTransport(t *testing.T) {
7597
a.Equal(true, r)
7698

7799
r = Event{}.ValidTransport(models.TransportEventSub)
78-
a.Equal(false, r)
100+
a.Equal(true, r)
79101
}
80102

81103
func TestGetTopic(t *testing.T) {

internal/models/moderator_change.go

+14
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,17 @@ type ModeratorChangeEventData struct {
2020
type ModeratorChangeWebSubResponse struct {
2121
Data []ModeratorChangeWebSubEvent `json:"data"`
2222
}
23+
24+
type ModeratorChangeEventSubResponse struct {
25+
Subscription EventsubSubscription `json:"subscription"`
26+
Event ModeratorChangeEventSubEvent `json:"event"`
27+
}
28+
29+
type ModeratorChangeEventSubEvent struct {
30+
UserID string `json:"user_id"`
31+
UserLogin string `json:"user_login"`
32+
UserName string `json:"user_name"`
33+
BroadcasterUserID string `json:"broadcaster_user_id"`
34+
BroadcasterUserLogin string `json:"broadcaster_user_login"`
35+
BroadcasterUserName string `json:"broadcaster_user_name"`
36+
}

0 commit comments

Comments
 (0)