@@ -150,31 +150,31 @@ public void run() {
150150 JSONObject eventSubObject = new JSONObject (BrowserClient .requestToString (bd .getResponse ()));
151151
152152 if (hasEventHandler (eventSubObject , "channel.prediction.begin" ,
153- userObject .getString ("id" ), overlaySubBaseURL )) {
153+ userObject .getString ("id" ), exchange . getRequestHeaders (). get ( "User-Agent" ). get ( 0 ), overlaySubBaseURL )) {
154154 registerEventSub ("channel.prediction.begin" , userObject .getString ("id" ),
155155 exchange .getRequestHeaders ().get ("User-Agent" ).get (0 ),
156156 TwitchOverlayServer .INSTANCE .getAppAccessTokenHandle ().getAccessToken (),
157157 overlaySubBaseURL , 1 );
158158 }
159159
160160 if (hasEventHandler (eventSubObject , "channel.prediction.progress" ,
161- userObject .getString ("id" ), overlaySubBaseURL )) {
161+ userObject .getString ("id" ), exchange . getRequestHeaders (). get ( "User-Agent" ). get ( 0 ), overlaySubBaseURL )) {
162162 registerEventSub ("channel.prediction.progress" , userObject .getString ("id" ),
163163 exchange .getRequestHeaders ().get ("User-Agent" ).get (0 ),
164164 TwitchOverlayServer .INSTANCE .getAppAccessTokenHandle ().getAccessToken (),
165165 overlaySubBaseURL , 1 );
166166 }
167167
168168 if (hasEventHandler (eventSubObject , "channel.prediction.lock" ,
169- userObject .getString ("id" ), overlaySubBaseURL )) {
169+ userObject .getString ("id" ), exchange . getRequestHeaders (). get ( "User-Agent" ). get ( 0 ), overlaySubBaseURL )) {
170170 registerEventSub ("channel.prediction.lock" , userObject .getString ("id" ),
171171 exchange .getRequestHeaders ().get ("User-Agent" ).get (0 ),
172172 TwitchOverlayServer .INSTANCE .getAppAccessTokenHandle ().getAccessToken (),
173173 overlaySubBaseURL , 1 );
174174 }
175175
176176 if (hasEventHandler (eventSubObject , "channel.prediction.end" ,
177- userObject .getString ("id" ), overlaySubBaseURL )) {
177+ userObject .getString ("id" ), exchange . getRequestHeaders (). get ( "User-Agent" ). get ( 0 ), overlaySubBaseURL )) {
178178 registerEventSub ("channel.prediction.end" , userObject .getString ("id" ),
179179 exchange .getRequestHeaders ().get ("User-Agent" ).get (0 ),
180180 TwitchOverlayServer .INSTANCE .getAppAccessTokenHandle ().getAccessToken (),
@@ -189,23 +189,23 @@ public void run() {
189189 JSONObject eventSubObject = new JSONObject (BrowserClient .requestToString (bd .getResponse ()));
190190
191191 if (hasEventHandler (eventSubObject , "channel.poll.begin" ,
192- userObject .getString ("id" ), overlaySubBaseURL )) {
192+ userObject .getString ("id" ), exchange . getRequestHeaders (). get ( "User-Agent" ). get ( 0 ), overlaySubBaseURL )) {
193193 registerEventSub ("channel.poll.begin" , userObject .getString ("id" ),
194194 exchange .getRequestHeaders ().get ("User-Agent" ).get (0 ),
195195 TwitchOverlayServer .INSTANCE .getAppAccessTokenHandle ().getAccessToken (),
196196 overlaySubBaseURL , 1 );
197197 }
198198
199199 if (hasEventHandler (eventSubObject , "channel.poll.progress" ,
200- userObject .getString ("id" ), overlaySubBaseURL )) {
200+ userObject .getString ("id" ), exchange . getRequestHeaders (). get ( "User-Agent" ). get ( 0 ), overlaySubBaseURL )) {
201201 registerEventSub ("channel.poll.progress" , userObject .getString ("id" ),
202202 exchange .getRequestHeaders ().get ("User-Agent" ).get (0 ),
203203 TwitchOverlayServer .INSTANCE .getAppAccessTokenHandle ().getAccessToken (),
204204 overlaySubBaseURL , 1 );
205205 }
206206
207207 if (hasEventHandler (eventSubObject , "channel.poll.end" ,
208- userObject .getString ("id" ), overlaySubBaseURL )) {
208+ userObject .getString ("id" ), exchange . getRequestHeaders (). get ( "User-Agent" ). get ( 0 ), overlaySubBaseURL )) {
209209 registerEventSub ("channel.poll.end" , userObject .getString ("id" ),
210210 exchange .getRequestHeaders ().get ("User-Agent" ).get (0 ),
211211 TwitchOverlayServer .INSTANCE .getAppAccessTokenHandle ().getAccessToken (),
@@ -220,47 +220,47 @@ public void run() {
220220 JSONObject eventSubObject = new JSONObject (BrowserClient .requestToString (bd .getResponse ()));
221221
222222 if (hasEventHandler (eventSubObject , "channel.follow" ,
223- userObject .getString ("id" ), overlaySubBaseURL )) {
223+ userObject .getString ("id" ), exchange . getRequestHeaders (). get ( "User-Agent" ). get ( 0 ), overlaySubBaseURL )) {
224224 registerEventSub ("channel.follow" , userObject .getString ("id" ),
225225 exchange .getRequestHeaders ().get ("User-Agent" ).get (0 ),
226226 TwitchOverlayServer .INSTANCE .getAppAccessTokenHandle ().getAccessToken (),
227227 overlaySubBaseURL , 2 );
228228 }
229229
230230 if (hasEventHandler (eventSubObject , "channel.subscribe" ,
231- userObject .getString ("id" ), overlaySubBaseURL )) {
231+ userObject .getString ("id" ), exchange . getRequestHeaders (). get ( "User-Agent" ). get ( 0 ), overlaySubBaseURL )) {
232232 registerEventSub ("channel.subscribe" , userObject .getString ("id" ),
233233 exchange .getRequestHeaders ().get ("User-Agent" ).get (0 ),
234234 TwitchOverlayServer .INSTANCE .getAppAccessTokenHandle ().getAccessToken (),
235235 overlaySubBaseURL , 1 );
236236 }
237237
238238 if (hasEventHandler (eventSubObject , "channel.subscription.gift" ,
239- userObject .getString ("id" ), overlaySubBaseURL )) {
239+ userObject .getString ("id" ), exchange . getRequestHeaders (). get ( "User-Agent" ). get ( 0 ), overlaySubBaseURL )) {
240240 registerEventSub ("channel.subscription.gift" , userObject .getString ("id" ),
241241 exchange .getRequestHeaders ().get ("User-Agent" ).get (0 ),
242242 TwitchOverlayServer .INSTANCE .getAppAccessTokenHandle ().getAccessToken (),
243243 overlaySubBaseURL , 1 );
244244 }
245245
246246 if (hasEventHandler (eventSubObject , "channel.subscription.message" ,
247- userObject .getString ("id" ), overlaySubBaseURL )) {
247+ userObject .getString ("id" ), exchange . getRequestHeaders (). get ( "User-Agent" ). get ( 0 ), overlaySubBaseURL )) {
248248 registerEventSub ("channel.subscription.message" , userObject .getString ("id" ),
249249 exchange .getRequestHeaders ().get ("User-Agent" ).get (0 ),
250250 TwitchOverlayServer .INSTANCE .getAppAccessTokenHandle ().getAccessToken (),
251251 overlaySubBaseURL , 1 );
252252 }
253253
254254 if (hasEventHandler (eventSubObject , "channel.cheer" ,
255- userObject .getString ("id" ), overlaySubBaseURL )) {
255+ userObject .getString ("id" ), exchange . getRequestHeaders (). get ( "User-Agent" ). get ( 0 ), overlaySubBaseURL )) {
256256 registerEventSub ("channel.cheer" , userObject .getString ("id" ),
257257 exchange .getRequestHeaders ().get ("User-Agent" ).get (0 ),
258258 TwitchOverlayServer .INSTANCE .getAppAccessTokenHandle ().getAccessToken (),
259259 overlaySubBaseURL , 1 );
260260 }
261261
262262 if (hasEventHandler (eventSubObject , "channel.raid" ,
263- userObject .getString ("id" ), overlaySubBaseURL )) {
263+ userObject .getString ("id" ), exchange . getRequestHeaders (). get ( "User-Agent" ). get ( 0 ), overlaySubBaseURL )) {
264264 registerEventSub ("channel.raid" , userObject .getString ("id" ),
265265 exchange .getRequestHeaders ().get ("User-Agent" ).get (0 ),
266266 TwitchOverlayServer .INSTANCE .getAppAccessTokenHandle ().getAccessToken (),
@@ -287,21 +287,30 @@ public void run() {
287287 }
288288 }
289289
290- public boolean hasEventHandler (JSONObject eventSubObject , String subType , String userId , String overlaySubBaseURL ) {
290+ public boolean hasEventHandler (JSONObject eventSubObject , String subType , String userId , String userAgent , String overlaySubBaseURL ) throws IOException {
291291 for (int i = 0 ; i < eventSubObject .getJSONArray ("data" ).length (); i ++) {
292292 JSONObject eventSubObj = eventSubObject .getJSONArray ("data" ).getJSONObject (i );
293293
294294 if (eventSubObj .getString ("type" ).equals (subType )) {
295295 if (eventSubObj .getJSONObject ("transport" ).getString ("method" ).equals ("webhook" ) &&
296296 eventSubObj .getJSONObject ("transport" ).getString ("callback" )
297297 .equals (TwitchOverlayServer .INSTANCE .getConfig ().getOverlayBaseURL ()
298- + "/webhook" + overlaySubBaseURL + "/" + userId )) {
298+ + "/webhook" + overlaySubBaseURL + "/" + userId ) &&
299+ eventSubObj .getString ("status" ).equals ("enabled" )) {
300+ return true ;
301+ } else if (eventSubObj .getJSONObject ("transport" ).getString ("method" ).equals ("webhook" ) &&
302+ eventSubObj .getJSONObject ("transport" ).getString ("callback" )
303+ .equals (TwitchOverlayServer .INSTANCE .getConfig ().getOverlayBaseURL ()
304+ + "/webhook" + overlaySubBaseURL + "/" + userId ) &&
305+ eventSubObj .getString ("status" ).equals ("enabled" )) {
306+ deleteEventSub (eventSubObject .getString ("id" ), userAgent , overlaySubBaseURL );
307+
299308 return false ;
300309 }
301310 }
302311 }
303312
304- return true ;
313+ return false ;
305314 }
306315
307316 public void registerEventSub (String subType , String userId , String userAgent , String accessToken
@@ -332,4 +341,14 @@ public void registerEventSub(String subType, String userId, String userAgent, St
332341 payload .toString (), headers );
333342 }
334343
344+ public void deleteEventSub (String eventId , String userAgent , String accessToken ) throws IOException {
345+ Map <String , String > headers = new HashMap <>();
346+ headers .put ("User-Agent" , userAgent );
347+ headers .put ("Authorization" , "Bearer " + accessToken );
348+ headers .put ("Client-Id" , TwitchOverlayServer .INSTANCE .getConfig ().getClientID ());
349+ headers .put ("Content-Type" , "application/json" );
350+
351+ BrowserClient .executeDELETERequest (new URL ("https://api.twitch.tv/helix/eventsub/subscriptions?id=" + eventId ), headers );
352+ }
353+
335354}
0 commit comments