Skip to content

Commit a0ef288

Browse files
committed
Add Shield events Eventsub
Add Shield events Eventsub
1 parent cf3803a commit a0ef288

File tree

4 files changed

+103
-0
lines changed

4 files changed

+103
-0
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
- ext.eventsub
2525
- Additions
2626
- Updated docs regarding new HypeTrain contribution method ``other`` for :attr:`~twitchio.ext.eventsub.HypeTrainContributor.type`
27+
- Added Shield Status events
28+
- :func:`~twitchio.ext.eventsub.EventSubClient.subscribe_channel_shield_mode_begin`
29+
- :func:`~twitchio.ext.eventsub.EventSubClient.subscribe_channel_shield_mode_end`
2730

2831
2.5.0
2932
======

docs/exts/eventsub.rst

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,14 @@ This is a list of events dispatched by the eventsub ext.
192192

193193
Called when a hype train ends on their channel.
194194

195+
.. function:: event_eventsub_notification_channel_shield_mode_begin(event: ShieldModeBegin)
196+
197+
Called when a channel's Shield Mode status is activated.
198+
199+
.. function:: event_eventsub_notification_channel_shield_mode_end(event: ShieldModeEnd)
200+
201+
Called when a channel's Shield Mode status is deactivated.
202+
195203
API Reference
196204
--------------
197205

@@ -387,6 +395,18 @@ API Reference
387395
:members:
388396
:inherited-members:
389397

398+
.. attributetable::: ShieldModeBegin
399+
400+
.. autoclass:: ShieldModeBegin
401+
:members:
402+
:inherited-members:
403+
404+
.. attributetable::: ShieldModeEnd
405+
406+
.. autoclass:: ShieldModeEnd
407+
:members:
408+
:inherited-members:
409+
390410
.. attributetable::: StreamOnlineData
391411
392412
.. autoclass:: StreamOnlineData

twitchio/ext/eventsub/models.py

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1314,6 +1314,50 @@ def __init__(self, client: EventSubClient, data: dict):
13141314
self.ended_at: datetime.datetime = _parse_datetime(data["ended_at"])
13151315

13161316

1317+
class ShieldModeBegin:
1318+
"""
1319+
Represents a Shield Mode activation status.
1320+
1321+
Attributes
1322+
-----------
1323+
broadcaster: :class:`~twitchio.PartialUser`
1324+
The broadcaster whose Shield Mode status was updated.
1325+
moderator: :class:`~twitchio.PartialUser`
1326+
The moderator that updated the Shield Mode staus.
1327+
started_at: :class:`datetime.datetime`
1328+
The UTC datetime of when Shield Mode was last activated.
1329+
"""
1330+
1331+
__slots__ = ("broadcaster", "moderator", "started_at")
1332+
1333+
def __init__(self, client: EventSubClient, data: dict):
1334+
self.broadcaster: PartialUser = _transform_user(client, data, "broadcaster_user")
1335+
self.moderator: PartialUser = _transform_user(client, data, "moderator_user")
1336+
self.started_at: datetime.datetime = _parse_datetime(data["started_at"])
1337+
1338+
1339+
class ShieldModeEnd:
1340+
"""
1341+
Represents a Shield Mode activation status.
1342+
1343+
Attributes
1344+
-----------
1345+
broadcaster: :class:`~twitchio.PartialUser`
1346+
The broadcaster whose Shield Mode status was updated.
1347+
moderator: :class:`~twitchio.PartialUser`
1348+
The moderator that updated the Shield Mode staus.
1349+
ended_at: :class:`datetime.datetime`
1350+
The UTC datetime of when Shield Mode was last deactivated.
1351+
"""
1352+
1353+
__slots__ = ("broadcaster", "moderator", "ended_at")
1354+
1355+
def __init__(self, client: EventSubClient, data: dict):
1356+
self.broadcaster: PartialUser = _transform_user(client, data, "broadcaster_user")
1357+
self.moderator: PartialUser = _transform_user(client, data, "moderator_user")
1358+
self.ended_at: datetime.datetime = _parse_datetime(data["ended_at"])
1359+
1360+
13171361
_DataType = Union[
13181362
ChannelBanData,
13191363
ChannelUnbanData,
@@ -1342,6 +1386,8 @@ def __init__(self, client: EventSubClient, data: dict):
13421386
UserAuthorizationGrantedData,
13431387
UserAuthorizationRevokedData,
13441388
UserUpdateData,
1389+
ShieldModeBegin,
1390+
ShieldModeEnd,
13451391
]
13461392

13471393

@@ -1387,6 +1433,9 @@ class _SubscriptionTypes(metaclass=_SubTypesMeta):
13871433
channel_goal_progress = "channel.goal.progress", 1, ChannelGoalBeginProgressData
13881434
channel_goal_end = "channel.goal.end", 1, ChannelGoalEndData
13891435

1436+
channel_shield_mode_begin = "channel.shield_mode.begin", 1, ShieldModeBegin
1437+
channel_shield_mode_end = "channel.shield_mode.end", 1, ShieldModeEnd
1438+
13901439
hypetrain_begin = "channel.hype_train.begin", 1, HypeTrainBeginProgressData
13911440
hypetrain_progress = "channel.hype_train.progress", 1, HypeTrainBeginProgressData
13921441
hypetrain_end = "channel.hype_train.end", 1, HypeTrainEndData

twitchio/ext/eventsub/server.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,23 @@ async def _subscribe_with_broadcaster(
111111
broadcaster = str(broadcaster)
112112
return await self._http.create_subscription(event, {"broadcaster_user_id": broadcaster})
113113

114+
async def _subscribe_with_broadcaster_moderator(
115+
self,
116+
event: Tuple[str, int, Type[models._DataType]],
117+
broadcaster: Union[PartialUser, str, int],
118+
moderator: Union[PartialUser, str, int],
119+
):
120+
if isinstance(broadcaster, PartialUser):
121+
broadcaster = broadcaster.id
122+
if isinstance(moderator, PartialUser):
123+
moderator = moderator.id
124+
125+
broadcaster = str(broadcaster)
126+
moderator = str(moderator)
127+
return await self._http.create_subscription(
128+
event, {"broadcaster_user_id": broadcaster, "moderator_user_id": moderator}
129+
)
130+
114131
def subscribe_channel_bans(self, broadcaster: Union[PartialUser, str, int]):
115132
return self._subscribe_with_broadcaster(models.SubscriptionTypes.ban, broadcaster)
116133

@@ -214,6 +231,20 @@ def subscribe_channel_prediction_lock(self, broadcaster: Union[PartialUser, str,
214231
def subscribe_channel_prediction_end(self, broadcaster: Union[PartialUser, str, int]):
215232
return self._subscribe_with_broadcaster(models.SubscriptionTypes.prediction_end, broadcaster)
216233

234+
def subscribe_channel_shield_mode_begin(
235+
self, broadcaster: Union[PartialUser, str, int], moderator: Union[PartialUser, str, int]
236+
):
237+
return self._subscribe_with_broadcaster_moderator(
238+
models.SubscriptionTypes.channel_shield_mode_begin, broadcaster, moderator
239+
)
240+
241+
def subscribe_channel_shield_mode_end(
242+
self, broadcaster: Union[PartialUser, str, int], moderator: Union[PartialUser, str, int]
243+
):
244+
return self._subscribe_with_broadcaster_moderator(
245+
models.SubscriptionTypes.channel_shield_mode_end, broadcaster, moderator
246+
)
247+
217248
async def subscribe_user_authorization_granted(self):
218249
return await self._http.create_subscription(
219250
models.SubscriptionTypes.user_authorization_grant, {"client_id": self.client._http.client_id}

0 commit comments

Comments
 (0)