Skip to content

Commit abb857e

Browse files
Hype train added
Added hype train related features
1 parent 7215694 commit abb857e

11 files changed

+795
-50
lines changed

docs/event.md

+43-37
Original file line numberDiff line numberDiff line change
@@ -16,25 +16,28 @@ Used to either create or send mock events for use with local webhooks testing.
1616

1717
**Args**
1818

19-
| Argument | Description |
20-
| ------------------- | ---------------------------------------------------------------------------------------------------------- |
21-
| `subscribe` | A standard subscription event. Triggers a basic tier 1 sub. |
22-
| `unsubscribe` | A standard unsubscribe event. Triggers a basic tier 1 sub. |
23-
| `gift` | A gifted subscription event. Triggers a basic tier 1 sub. |
24-
| `cheer` | Only usable with the `eventsub` transport, shows Cheers from chat. |
25-
| `transaction` | Bits in Extensions transactions events. |
26-
| `add-reward` | Channel Points EventSub event for a Custom Reward being added. |
27-
| `update-reward` | Channel Points EventSub event for a Custom Reward being updated. |
28-
| `remove-reward` | Channel Points EventSub event for a Custom Reward being removed. |
29-
| `add-redemption` | Channel Points EventSub event for a redemption being performed. |
30-
| `update-redemption` | Channel Points EventSub event for a redemption being updated. |
31-
| `raid` | Channel Raid event with a random viewer count. |
32-
| `revoke` | User authorization revoke event. Uses local Client as set in `twitch configure` or generates one randomly. |
33-
| `stream-change` | Stream Changed event. |
34-
| `streamup` | Only usable with the `eventsub` transport, a stream online event. |
35-
| `streamdown` | Only usable with the `eventsub` transport, a stream offline event. |
36-
| `add-moderator` | Channel moderator add event. |
37-
| `remove-moderator` | Channel moderator removal event. |
19+
| Argument | Description |
20+
| ---------------------- | ---------------------------------------------------------------------------------------------------------- |
21+
| `subscribe` | A standard subscription event. Triggers a basic tier 1 sub. |
22+
| `unsubscribe` | A standard unsubscribe event. Triggers a basic tier 1 sub. |
23+
| `gift` | A gifted subscription event. Triggers a basic tier 1 sub. |
24+
| `cheer` | Only usable with the `eventsub` transport, shows Cheers from chat. |
25+
| `transaction` | Bits in Extensions transactions events. |
26+
| `add-reward` | Channel Points EventSub event for a Custom Reward being added. |
27+
| `update-reward` | Channel Points EventSub event for a Custom Reward being updated. |
28+
| `remove-reward` | Channel Points EventSub event for a Custom Reward being removed. |
29+
| `add-redemption` | Channel Points EventSub event for a redemption being performed. |
30+
| `update-redemption` | Channel Points EventSub event for a redemption being updated. |
31+
| `raid` | Channel Raid event with a random viewer count. |
32+
| `revoke` | User authorization revoke event. Uses local Client as set in `twitch configure` or generates one randomly. |
33+
| `stream-change` | Stream Changed event. |
34+
| `streamup` | Only usable with the `eventsub` transport, a stream online event. |
35+
| `streamdown` | Only usable with the `eventsub` transport, a stream offline event. |
36+
| `add-moderator` | Channel moderator add event. |
37+
| `remove-moderator` | Channel moderator removal event. |
38+
| `hype-train-begin` | Hype Train begins event. |
39+
| `hype-train-progress` | Hype Train progress event. |
40+
| `hype-train-end` | Hype Train ends event. |
3841

3942
**Flags**
4043

@@ -102,24 +105,27 @@ Allows you to test if your webserver responds to subscription requests properly.
102105
**Args**
103106

104107
| Argument | Description |
105-
| ------------------- | ---------------------------------------------------------------------------------------------------------- |
106-
| `subscribe` | A standard subscription event. Triggers a basic tier 1 sub. |
107-
| `unsubscribe` | A standard unsubscribe event. Triggers a basic tier 1 sub. |
108-
| `gift` | A gifted subscription event. Triggers a basic tier 1 sub. |
109-
| `cheer` | Only usable with the `eventsub` transport, shows Cheers from chat. |
110-
| `transaction` | Bits in Extensions transactions events. |
111-
| `add-reward` | Channel Points EventSub event for a Custom Reward being added. |
112-
| `update-reward` | Channel Points EventSub event for a Custom Reward being updated. |
113-
| `remove-reward` | Channel Points EventSub event for a Custom Reward being removed. |
114-
| `add-redemption` | Channel Points EventSub event for a redemption being performed. |
115-
| `update-redemption` | Channel Points EventSub event for a redemption being updated. |
116-
| `raid` | Channel Raid event with a random viewer count. |
117-
| `revoke` | User authorization revoke event. Uses local Client as set in `twitch configure` or generates one randomly. |
118-
| `stream_change` | Stream changed event. |
119-
| `streamup` | Only usable with the `eventsub` transport, a stream online event. |
120-
| `streamdown` | Only usable with the `eventsub` transport, a stream offline event. |
121-
| `add-moderator` | Channel moderator add event. |
122-
| `remove-moderator` | Channel moderator removal event. |
108+
| ---------------------- | ---------------------------------------------------------------------------------------------------------- |
109+
| `subscribe` | A standard subscription event. Triggers a basic tier 1 sub. |
110+
| `unsubscribe` | A standard unsubscribe event. Triggers a basic tier 1 sub. |
111+
| `gift` | A gifted subscription event. Triggers a basic tier 1 sub. |
112+
| `cheer` | Only usable with the `eventsub` transport, shows Cheers from chat. |
113+
| `transaction` | Bits in Extensions transactions events. |
114+
| `add-reward` | Channel Points EventSub event for a Custom Reward being added. |
115+
| `update-reward` | Channel Points EventSub event for a Custom Reward being updated. |
116+
| `remove-reward` | Channel Points EventSub event for a Custom Reward being removed. |
117+
| `add-redemption` | Channel Points EventSub event for a redemption being performed. |
118+
| `update-redemption` | Channel Points EventSub event for a redemption being updated. |
119+
| `raid` | Channel Raid event with a random viewer count. |
120+
| `revoke` | User authorization revoke event. Uses local Client as set in `twitch configure` or generates one randomly. |
121+
| `stream_change` | Stream changed event. |
122+
| `streamup` | Only usable with the `eventsub` transport, a stream online event. |
123+
| `streamdown` | Only usable with the `eventsub` transport, a stream offline event. |
124+
| `add-moderator` | Channel moderator add event. |
125+
| `remove-moderator` | Channel moderator removal event. |
126+
| `hype-train-begin` | Hype Train begins event. |
127+
| `hype-train-progress` | Hype Train progress event. |
128+
| `hype-train-end` | Hype Train ends event. |
123129

124130
**Flags**
125131

internal/events/models.go

+16-13
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,22 @@
33
package events
44

55
var triggerSupported = map[string]bool{
6-
"subscribe": true,
7-
"unsubscribe": true,
8-
"gift": true,
9-
"cheer": true,
10-
"transaction": true,
11-
"follow": true,
12-
"add-redemption": true,
13-
"update-redemption": true,
14-
"add-reward": true,
15-
"update-reward": true,
16-
"remove-reward": true,
17-
"add-moderator": true,
18-
"remove-moderator": true,
6+
"subscribe": true,
7+
"unsubscribe": true,
8+
"gift": true,
9+
"cheer": true,
10+
"transaction": true,
11+
"follow": true,
12+
"add-redemption": true,
13+
"update-redemption": true,
14+
"add-reward": true,
15+
"update-reward": true,
16+
"remove-reward": true,
17+
"add-moderator": true,
18+
"remove-moderator": true,
19+
"hype-train-begin": true,
20+
"hype-train-progress": true,
21+
"hype-train-end": true,
1922
}
2023

2124
var transportSupported = map[string]bool{
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
package hype_train_begin
4+
5+
import(
6+
"encoding/json"
7+
"time"
8+
9+
"github.com/twitchdev/twitch-cli/internal/events"
10+
"github.com/twitchdev/twitch-cli/internal/models"
11+
"github.com/twitchdev/twitch-cli/internal/util"
12+
)
13+
14+
var transportsSupported = map[string]bool{
15+
models.TransportWebSub: false,
16+
models.TransportEventSub: true,
17+
}
18+
19+
var triggerSupported = []string{"hype-train-begin"}
20+
21+
var triggerMapping = map[string]map[string]string{
22+
models.TransportEventSub: {
23+
"hype-train-begin": "channel.hype_train.begin",
24+
},
25+
}
26+
27+
type Event struct{}
28+
29+
func (e Event) GenerateEvent(params events.MockEventParameters) (events.MockEventResponse, error) {
30+
var event []byte
31+
var err error
32+
33+
//Some values
34+
StartedAtTime := util.GetTimestamp()
35+
localTotal := util.RandomViewerCount()
36+
localGoal := util.RandomViewerCount()
37+
localProgress := (localTotal/localGoal)
38+
localRandomUser1 := util.RandomUserID()
39+
localRandomUser2 := util.RandomUserID()
40+
localRandomUser3 := util.RandomUserID()
41+
localLC := models.ContributionData{TotalContribution: util.RandomViewerCount(), TypeOfContribution: util.RandomType(), UserWhoMadeContribution: localRandomUser1, UserNameWhoMadeContribution: localRandomUser1, UserLoginWhoMadeContribution: localRandomUser1}
42+
localTC := []models.ContributionData{{TotalContribution: util.RandomViewerCount(), TypeOfContribution: util.RandomType(), UserWhoMadeContribution: localRandomUser2, UserNameWhoMadeContribution: localRandomUser2, UserLoginWhoMadeContribution: localRandomUser2},{TotalContribution: util.RandomViewerCount(), TypeOfContribution: util.RandomType(), UserWhoMadeContribution: localRandomUser3, UserNameWhoMadeContribution: localRandomUser3, UserLoginWhoMadeContribution: localRandomUser3}}
43+
ExpiresAtTime := util.GetTimestamp()
44+
45+
switch params.Transport {
46+
case models.TransportEventSub:
47+
body := *&models.EventsubResponse{
48+
Subscription: models.EventsubSubscription{
49+
ID: params.ID,
50+
Status: "enabled",
51+
Type: triggerMapping[params.Transport][params.Trigger],
52+
Version: "1.0",
53+
Condition: models.EventsubCondition{
54+
BroadcasterUserID: params.ToUserID,
55+
},
56+
Transport: models.EventsubTransport{
57+
Method: "webhook",
58+
Callback: "null",
59+
},
60+
CreatedAt: util.GetTimestamp().Format(time.RFC3339Nano),
61+
},
62+
Event: models.HypeTrainEventBeginSubEvent{
63+
BroadcasterUserID: params.ToUserID,
64+
BroadcasterUserLogin: params.ToUserName,
65+
BroadcasterUserName: params.ToUserName,
66+
Total: localTotal,
67+
Progress: localProgress,
68+
Goal: localGoal,
69+
TopContributions: localTC,
70+
LastContribution: localLC,
71+
StartedAtTimestamp: StartedAtTime.String(),
72+
ExpiresAtTimestamp: ExpiresAtTime.String(),
73+
},
74+
}
75+
76+
event, err = json.Marshal(body)
77+
if err != nil {
78+
return events.MockEventResponse{}, err
79+
}
80+
81+
default:
82+
return events.MockEventResponse{}, nil
83+
}
84+
85+
return events.MockEventResponse{
86+
ID: params.ID,
87+
JSON: event,
88+
FromUser: params.FromUserID,
89+
ToUser: params.ToUserID,
90+
}, nil
91+
}
92+
93+
func (e Event) ValidTransport(t string) bool {
94+
return transportsSupported[t]
95+
}
96+
97+
func (e Event) ValidTrigger(t string) bool {
98+
for _, ts := range triggerSupported {
99+
if ts == t {
100+
return true
101+
}
102+
}
103+
return false
104+
}
105+
func (e Event) GetTopic(transport string, trigger string) string {
106+
return triggerMapping[transport][trigger]
107+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
package hype_train_begin
4+
5+
import (
6+
"encoding/json"
7+
"testing"
8+
9+
"github.com/twitchdev/twitch-cli/internal/events"
10+
"github.com/twitchdev/twitch-cli/internal/models"
11+
"github.com/twitchdev/twitch-cli/internal/util"
12+
)
13+
14+
15+
var toUser = "4567"
16+
17+
func TestEventSub(t *testing.T) {
18+
a := util.SetupTestEnv(t)
19+
20+
params := *&events.MockEventParameters{
21+
ToUserID: toUser,
22+
Transport: models.TransportEventSub,
23+
Trigger: "hype-train-begin",
24+
}
25+
26+
r, err := Event{}.GenerateEvent(params)
27+
a.Nil(err)
28+
29+
var body models.HypeTrainEventBeginSubResponse
30+
err = json.Unmarshal(r.JSON, &body)
31+
a.Nil(err)
32+
33+
a.Equal("channel.hype_train.begin", body.Subscription.Type, "Expected event type %v, got %v", "channel.hype_train.begin", body.Subscription.Type)
34+
a.Equal(toUser, body.Event.BroadcasterUserID, "Expected to user %v, got %v", toUser, body.Event.BroadcasterUserID)
35+
36+
}
37+
38+
func TestWebSub(t *testing.T) {
39+
40+
// Hype_Train_begin does not have a websub part
41+
// Remove?
42+
43+
a := util.SetupTestEnv(t)
44+
45+
params := *&events.MockEventParameters{
46+
ToUserID: toUser,
47+
Transport: models.TransportWebSub,
48+
Trigger: "hype-train-begin",
49+
}
50+
51+
_, err := Event{}.GenerateEvent(params)
52+
a.NotNil(err)
53+
54+
55+
}
56+
func TestFakeTransport(t *testing.T) {
57+
a := util.SetupTestEnv(t)
58+
59+
params := *&events.MockEventParameters{
60+
ToUserID: toUser,
61+
Transport: "fake_transport",
62+
Trigger: "hype-train-begin",
63+
}
64+
65+
r, err := Event{}.GenerateEvent(params)
66+
a.Nil(err)
67+
a.Empty(r)
68+
}
69+
func TestValidTrigger(t *testing.T) {
70+
a := util.SetupTestEnv(t)
71+
72+
r := Event{}.ValidTrigger("hype-train-begin")
73+
a.Equal(true, r)
74+
}
75+
76+
func TestValidTransport(t *testing.T) {
77+
a := util.SetupTestEnv(t)
78+
79+
r := Event{}.ValidTransport(models.TransportWebSub)
80+
a.Equal(false, r)
81+
82+
r = Event{}.ValidTransport(models.TransportEventSub)
83+
a.Equal(true, r)
84+
}
85+
86+
func TestGetTopic(t *testing.T) {
87+
a := util.SetupTestEnv(t)
88+
}

0 commit comments

Comments
 (0)