Skip to content

Commit e9ac1b4

Browse files
committed
Add newer subscriptions to websocket client for release
1 parent 4df2c0a commit e9ac1b4

File tree

4 files changed

+62
-9
lines changed

4 files changed

+62
-9
lines changed

docs/changelog.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ Master
2424
- Fix reconnect loop when Twitch sends a RECONNECT via IRC websocket
2525
- Fix :func:`~twitchio.CustomReward.edit` so it now can enable the reward
2626

27+
- ext.eventsub
28+
- Added websocket support via eventsub.EventSubWSClient
29+
2730
- Other
2831
- [speed] extra
2932
- Added wheels on external pypi index for cchardet and ciso8601

docs/exts/eventsub.rst

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,12 @@ API Reference
217217
:members:
218218
:undoc-members:
219219

220+
.. attributetable:: EventSubWSClient
221+
222+
.. autoclass:: EventSubWSClient
223+
:members:
224+
:undoc-members:
225+
220226
.. attributetable:: Subscription
221227

222228
.. autoclass:: Subscription

twitchio/ext/eventsub/server.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ async def delete_all_active_subscriptions(self):
5151
# A convenience method
5252
active_subscriptions = await self.get_subscriptions("enabled")
5353
for subscription_id in active_subscriptions:
54-
await self.delete_subscription(subscription_id)
54+
await self.delete_subscription(subscription_id.id)
5555

5656
async def get_subscriptions(
5757
self, status: Optional[str] = None, sub_type: Optional[str] = None, user_id: Optional[int] = None
@@ -127,7 +127,7 @@ async def _subscribe_with_broadcaster_moderator(
127127

128128
broadcaster = str(broadcaster)
129129
moderator = str(moderator)
130-
return await self._http.create_subscription(
130+
return await self._http.create_webhook_subscription(
131131
event, {"broadcaster_user_id": broadcaster, "moderator_user_id": moderator}
132132
)
133133

twitchio/ext/eventsub/websocket.py

Lines changed: 51 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,24 @@ def _subscribe_with_broadcaster(
261261
broadcaster = str(broadcaster)
262262
sub = _Subscription(event, {"broadcaster_user_id": broadcaster}, token)
263263
self._assign_subscription(sub)
264+
265+
def _subscribe_with_broadcaster_moderator(
266+
self,
267+
event: Tuple[str, int, Type[models._DataType]],
268+
broadcaster: Union[PartialUser, str, int],
269+
moderator: Union[PartialUser, str, int],
270+
token: str
271+
):
272+
if isinstance(broadcaster, PartialUser):
273+
broadcaster = broadcaster.id
274+
if isinstance(moderator, PartialUser):
275+
moderator = moderator.id
276+
277+
broadcaster = str(broadcaster)
278+
moderator = str(moderator)
279+
sub = _Subscription(event, {"broadcaster_user_id": broadcaster, "moderator_user_id": moderator}, token)
280+
self._assign_subscription(sub)
281+
264282

265283
def subscribe_channel_bans(self, broadcaster: Union[PartialUser, str, int], token: str):
266284
return self._subscribe_with_broadcaster(models.SubscriptionTypes.ban, broadcaster, token)
@@ -287,7 +305,12 @@ def subscribe_channel_update(self, broadcaster: Union[PartialUser, str, int], to
287305
return self._subscribe_with_broadcaster(models.SubscriptionTypes.channel_update, broadcaster, token)
288306

289307
def subscribe_channel_follows(self, broadcaster: Union[PartialUser, str, int], token: str):
290-
return self._subscribe_with_broadcaster(models.SubscriptionTypes.follow, broadcaster, token)
308+
raise RuntimeError("This subscription has been removed by twitch, please use subscribe_channel_follows_v2")
309+
310+
def subscribe_channel_follows_v2(
311+
self, broadcaster: Union[PartialUser, str, int], moderator: Union[PartialUser, str, int], token: str
312+
):
313+
return self._subscribe_with_broadcaster_moderator(models.SubscriptionTypes.followV2, broadcaster, moderator, token)
291314

292315
def subscribe_channel_moderators_add(self, broadcaster: Union[PartialUser, str, int], token: str):
293316
return self._subscribe_with_broadcaster(models.SubscriptionTypes.channel_moderator_add, broadcaster, token)
@@ -365,10 +388,31 @@ def subscribe_channel_prediction_lock(self, broadcaster: Union[PartialUser, str,
365388
def subscribe_channel_prediction_end(self, broadcaster: Union[PartialUser, str, int], token: str):
366389
return self._subscribe_with_broadcaster(models.SubscriptionTypes.prediction_end, broadcaster, token)
367390

368-
def subscribe_user_authorization_granted(self, token: str):
369-
sub = _Subscription(models.SubscriptionTypes.user_authorization_grant, {"client_id": self.client._http.client_id}, token)
370-
self._assign_subscription(sub)
391+
392+
def subscribe_channel_shield_mode_begin(
393+
self, broadcaster: Union[PartialUser, str, int], moderator: Union[PartialUser, str, int], token: str
394+
):
395+
return self._subscribe_with_broadcaster_moderator(
396+
models.SubscriptionTypes.channel_shield_mode_begin, broadcaster, moderator, token
397+
)
371398

372-
async def subscribe_user_authorization_revoked(self, token: str):
373-
sub = _Subscription(models.SubscriptionTypes.user_authorization_revoke, {"client_id": self.client._http.client_id}, token)
374-
self._assign_subscription(sub)
399+
def subscribe_channel_shield_mode_end(
400+
self, broadcaster: Union[PartialUser, str, int], moderator: Union[PartialUser, str, int], token: str
401+
):
402+
return self._subscribe_with_broadcaster_moderator(
403+
models.SubscriptionTypes.channel_shield_mode_end, broadcaster, moderator, token
404+
)
405+
406+
def subscribe_channel_shoutout_create(
407+
self, broadcaster: Union[PartialUser, str, int], moderator: Union[PartialUser, str, int], token: str
408+
):
409+
return self._subscribe_with_broadcaster_moderator(
410+
models.SubscriptionTypes.channel_shoutout_create, broadcaster, moderator, token
411+
)
412+
413+
def subscribe_channel_shoutout_receive(
414+
self, broadcaster: Union[PartialUser, str, int], moderator: Union[PartialUser, str, int], token: str
415+
):
416+
return self._subscribe_with_broadcaster_moderator(
417+
models.SubscriptionTypes.channel_shoutout_receive, broadcaster, moderator, token
418+
)

0 commit comments

Comments
 (0)