Skip to content

Commit 77ef79d

Browse files
authored
Add channel.ad_break.begin for EventSub (#464)
* Introduce `channel.ad_break.begin` for EventSub Implementation for this subscription type: https://dev.twitch.tv/docs/eventsub/eventsub-subscription-types/#channelad_breakbegin * Fix docs mess-up Sorry, I m noob in docs and stuff
1 parent 8e91cec commit 77ef79d

File tree

4 files changed

+49
-0
lines changed

4 files changed

+49
-0
lines changed

docs/exts/eventsub.rst

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

235235
Called when a user donates to an active charity campaign.
236236

237+
.. function:: event_eventsub_notification_channel_ad_break_begin(event: ChannelAdBreakBeginData)
238+
239+
Called when a user runs a midroll commercial break, either manually or automatically via ads manager.
240+
237241
API Reference
238242
--------------
239243

@@ -543,6 +547,12 @@ API Reference
543547
:members:
544548
:inherited-members:
545549

550+
.. attributetable::: ChannelAdBreakBeginData
551+
552+
.. autoclass:: ChannelAdBreakBeginData
553+
:members:
554+
:inherited-members:
555+
546556
.. autoclass:: ChannelVIPAddRemove
547557
:members:
548558
:inherited-members:

twitchio/ext/eventsub/models.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2195,6 +2195,36 @@ def __init__(self, client: EventSubClient, data: dict) -> None:
21952195
self.trust_status: Literal["active_monitoring", "restricted", "none"] = data["low_trust_status"]
21962196

21972197

2198+
class ChannelAdBreakBeginData(EventData):
2199+
"""
2200+
An ad begin event.
2201+
2202+
Attributes
2203+
-----------
2204+
is_automatic: :class:`bool`
2205+
Whether the ad was run manually or automatically via ads manager.
2206+
broadcaster: :class:`~twitchio.PartialUser`
2207+
The channel where a midroll commercial break has started running.
2208+
requester: Optional[:class:`twitchio.PartialUser`]
2209+
The user who started the ad break. Will be ``None`` if ``is_automatic`` is ``True``.
2210+
duration: :class:`int`
2211+
The ad duration in seconds.
2212+
started_at: :class:`datetime.datetime`
2213+
When the ad began.
2214+
"""
2215+
2216+
__slots__ = ("is_automatic", "broadcaster", "requester", "duration", "started_at")
2217+
2218+
def __init__(self, client: EventSubClient, data: dict) -> None:
2219+
self.is_automatic: bool = data["is_automatic"]
2220+
self.broadcaster: PartialUser = _transform_user(client, data, "broadcaster_user")
2221+
self.requester: Optional[PartialUser] = (
2222+
None if self.is_automatic else _transform_user(client, data, "requester_user")
2223+
)
2224+
self.duration: int = data["duration_seconds"]
2225+
self.started_at: datetime.datetime = _parse_datetime(data["started_at"])
2226+
2227+
21982228
class AutoCustomReward:
21992229
"""
22002230
A reward object for an Auto Reward Redeem.
@@ -2318,6 +2348,7 @@ def __init__(self, client: EventSubClient, data: dict) -> None:
23182348
ChannelModerateData,
23192349
AutoRewardRedeem,
23202350
ChannelVIPAddRemove,
2351+
ChannelAdBreakBeginData,
23212352
]
23222353

23232354

@@ -2410,6 +2441,8 @@ class _SubscriptionTypes(metaclass=_SubTypesMeta):
24102441

24112442
suspicious_user_update = "channel.suspicious_user.update", 1, SuspiciousUserUpdateData
24122443

2444+
channel_ad_break_begin = "channel.ad_break.begin", 1, ChannelAdBreakBeginData
2445+
24132446

24142447
SubscriptionTypes = _SubscriptionTypes()
24152448

twitchio/ext/eventsub/server.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -344,6 +344,9 @@ def subscribe_channel_vip_add(self, broadcaster: Union[PartialUser, str, int]):
344344
def subscribe_channel_vip_remove(self, broadcaster: Union[PartialUser, str, int]):
345345
return self._subscribe_with_broadcaster(models.SubscriptionTypes.channel_vip_remove, broadcaster)
346346

347+
def subscribe_channel_ad_break_begin(self, broadcaster: Union[PartialUser, str, int]):
348+
return self._subscribe_with_broadcaster(models.SubscriptionTypes.channel_ad_break_begin, broadcaster)
349+
347350
async def subscribe_user_authorization_granted(self):
348351
return await self._http.create_webhook_subscription(
349352
models.SubscriptionTypes.user_authorization_grant, {"client_id": self.client._http.client_id}

twitchio/ext/eventsub/websocket.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -578,3 +578,6 @@ async def subscribe_channel_vip_add(self, broadcaster: Union[PartialUser, str, i
578578

579579
async def subscribe_channel_vip_remove(self, broadcaster: Union[PartialUser, str, int], token: str):
580580
await self._subscribe_with_broadcaster(models.SubscriptionTypes.channel_vip_remove, broadcaster, token)
581+
582+
async def subscribe_channel_ad_break_begin(self, broadcaster: Union[PartialUser, str, int], token: str):
583+
await self._subscribe_with_broadcaster(models.SubscriptionTypes.channel_ad_break_begin, broadcaster, token)

0 commit comments

Comments
 (0)