1
1
import NodeCG from "@nodecg/types" ;
2
2
import { StreamElementsReplicant , StreamElementsServiceClient } from "nodecg-io-streamelements" ;
3
+ import { StreamElementsEvent , StreamElementsTestEvent } from "nodecg-io-streamelements/extension/StreamElementsEvent" ;
3
4
import { requireService } from "nodecg-io-core" ;
4
5
5
6
module . exports = function ( nodecg : NodeCG . ServerAPI ) {
@@ -12,38 +13,32 @@ module.exports = function (nodecg: NodeCG.ServerAPI) {
12
13
nodecg . log . info ( "SE client has been updated, registering handlers now." ) ;
13
14
14
15
client . onCheer ( ( data ) => {
15
- nodecg . log . info (
16
- `${ data . data . displayName } just cheered ${ data . data . amount } bit(s). Message: ${ data . data . message } ` ,
17
- ) ;
16
+ nodecg . log . info ( `${ getName ( data ) } just cheered ${ data . data . amount } bit(s). Message: ${ data . data . message } ` ) ;
18
17
} ) ;
19
18
20
19
client . onTestCheer ( ( data ) => {
21
20
nodecg . log . info (
22
- `${ data . event . displayName } just cheered ${ data . event . amount } bit(s). Message: ${ data . event . message } ` ,
21
+ `${ getName ( data ) } just cheered ${ data . event . amount } bit(s). Message: ${ data . event . message } ` ,
23
22
) ;
24
23
} ) ;
25
24
26
25
client . onFollow ( ( data ) => {
27
- nodecg . log . info ( `${ data . data . displayName } just followed.` ) ;
26
+ nodecg . log . info ( `${ getName ( data ) } just followed.` ) ;
28
27
} ) ;
29
28
30
29
client . onTestFollow ( ( data ) => {
31
- nodecg . log . info ( `${ data . event . displayName } just followed.` ) ;
30
+ nodecg . log . info ( `${ getName ( data ) } just followed.` ) ;
32
31
} ) ;
33
32
34
33
client . onSubscriber ( ( data ) => {
35
34
nodecg . log . info (
36
- `${ data . data . displayName } just subscribed for ${ data . data . amount } months (${ formatSubTier (
37
- data . data . tier ,
38
- ) } ).`,
35
+ `${ getName ( data ) } just subscribed for ${ data . data . amount } months (${ formatSubTier ( data . data . tier ) } ).` ,
39
36
) ;
40
37
} ) ;
41
38
42
39
client . onTestSubscriber ( ( data ) => {
43
40
nodecg . log . info (
44
- `${ data . event . displayName } just subscribed for ${ data . event . amount } months (${ formatSubTier (
45
- data . event . tier ,
46
- ) } ).`,
41
+ `${ getName ( data ) } just subscribed for ${ data . event . amount } months (${ formatSubTier ( data . event . tier ) } ).` ,
47
42
) ;
48
43
} ) ;
49
44
@@ -57,47 +52,51 @@ module.exports = function (nodecg: NodeCG.ServerAPI) {
57
52
58
53
client . onGift ( ( data ) => {
59
54
nodecg . log . info (
60
- `${ data . data . displayName } just got a tier ${ formatSubTier ( data . data . tier ) } subscription from ${
55
+ `${ getName ( data ) } just got a tier ${ formatSubTier ( data . data . tier ) } subscription from ${
61
56
data . data . sender ?? "anonymous"
62
- } ! It's ${ data . data . displayName } 's ${ data . data . amount } month.`,
57
+ } ! It's ${ data . data . displayName ?? data . data . username } 's ${ data . data . amount } month.`,
63
58
) ;
64
59
} ) ;
65
60
66
61
client . onTestGift ( ( data ) => {
67
62
nodecg . log . info (
68
- `${ data . event . displayName } just got a tier ${ formatSubTier ( data . event . tier ) } subscription from ${
63
+ `${ getName ( data ) } just got a tier ${ formatSubTier ( data . event . tier ) } subscription from ${
69
64
data . event . sender ?? "anonymous"
70
65
} ! It's ${ data . event . displayName } 's ${ data . event . amount } month.`,
71
66
) ;
72
67
} ) ;
73
68
74
69
client . onHost ( ( data ) => {
75
- nodecg . log . info ( `${ data . data . displayName } just hosted the stream for ${ data . data . amount } viewer(s).` ) ;
70
+ nodecg . log . info ( `${ getName ( data ) } just hosted the stream for ${ data . data . amount } viewer(s).` ) ;
76
71
} ) ;
77
72
78
73
client . onTestHost ( ( data ) => {
79
- nodecg . log . info ( `${ data . event . displayName } just hosted the stream for ${ data . event . amount } viewer(s).` ) ;
74
+ nodecg . log . info ( `${ getName ( data ) } just hosted the stream for ${ data . event . amount } viewer(s).` ) ;
80
75
} ) ;
81
76
82
77
client . onRaid ( ( data ) => {
83
- nodecg . log . info ( `${ data . data . displayName } just raided the stream with ${ data . data . amount } viewers.` ) ;
78
+ nodecg . log . info ( `${ getName ( data ) } just raided the stream with ${ data . data . amount } viewers.` ) ;
84
79
} ) ;
85
80
86
81
client . onTestRaid ( ( data ) => {
87
- nodecg . log . info ( `${ data . event . displayName } just raided the stream with ${ data . event . amount } viewers.` ) ;
82
+ nodecg . log . info ( `${ getName ( data ) } just raided the stream with ${ data . event . amount } viewers.` ) ;
88
83
} ) ;
89
84
90
85
client . onTip ( ( data ) => {
91
86
if ( data . data . currency ) {
92
87
nodecg . log . info (
93
- `${ data . data . username } just donated ${ data . data . amount } ${ data . data . currency } . Message. ${ data . data . message } ` ,
88
+ `${ getName ( data ) } just donated ${ data . data . amount } ${ data . data . currency } . Message. ${
89
+ data . data . message
90
+ } `,
94
91
) ;
95
92
}
96
93
} ) ;
97
94
98
95
client . onTestTip ( ( data ) => {
99
96
nodecg . log . info (
100
- `${ data . event . name } just donated ${ data . event . amount } ${ data . event . currency } . Message. ${ data . event . message } ` ,
97
+ `${ getName ( data ) } just donated ${ data . event . amount } ${ data . event . currency } . Message. ${
98
+ data . event . message
99
+ } `,
101
100
) ;
102
101
} ) ;
103
102
@@ -111,6 +110,27 @@ module.exports = function (nodecg: NodeCG.ServerAPI) {
111
110
streamElements ?. onUnavailable ( ( ) => nodecg . log . info ( "SE client has been unset." ) ) ;
112
111
} ;
113
112
113
+ /**
114
+ * Gets the name of the user from the event.
115
+ * Defaults to use the displayName that is sent by StreamElements.
116
+ * The displayName contains capitalization and special characters.
117
+ * If the displayName is not available, the normal username of the relevant platform is used.
118
+ * Supports real and test events.
119
+ */
120
+ function getName ( event : StreamElementsEvent | StreamElementsTestEvent ) : string {
121
+ const eventData = "data" in event ? event . data : event . event ;
122
+
123
+ if ( "displayName" in eventData && typeof eventData . displayName === "string" ) {
124
+ return eventData . displayName ;
125
+ } else if ( "name" in eventData && typeof eventData . name === "string" ) {
126
+ return eventData . name ;
127
+ } else if ( "username" in eventData && typeof eventData . username === "string" ) {
128
+ return eventData . username ;
129
+ } else {
130
+ return "unknown" ;
131
+ }
132
+ }
133
+
114
134
function formatSubTier ( tier : "1000" | "2000" | "3000" | "prime" ) : string {
115
135
if ( tier === "prime" ) return "Twitch Prime" ;
116
136
0 commit comments