Skip to content

Commit 76c0122

Browse files
chillymoshIAmTomahawkx
authored andcommitted
ChannelModerate
1 parent 6bcc5a7 commit 76c0122

File tree

3 files changed

+155
-4
lines changed

3 files changed

+155
-4
lines changed

twitchio/ext/eventsub/models.py

Lines changed: 128 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1916,6 +1916,130 @@ def __init__(self, client: EventSubClient, data: dict) -> None:
19161916
self.from_automod: bool = data["from_automod"]
19171917
self.terms: List[str] = data["terms"]
19181918

1919+
1920+
class ChannelModerateData(EventData):
1921+
"""
1922+
Represents a channel moderation event.
1923+
1924+
Attributes
1925+
-----------
1926+
broadcaster: :class:`PartialUser`
1927+
The channel where the moderation event occurred.
1928+
moderator: :class:`PartialUser`
1929+
The moderator who performed the action.
1930+
action: :class:`str`
1931+
The action performed.
1932+
"""
1933+
1934+
__slots__ = (
1935+
"broadcaster",
1936+
"moderator",
1937+
"action",
1938+
"followers",
1939+
"slow",
1940+
"vip",
1941+
"unvip",
1942+
"mod",
1943+
"unmod",
1944+
"ban",
1945+
"unban",
1946+
"timeout",
1947+
"untimeout",
1948+
"raid",
1949+
"unraid",
1950+
"delete",
1951+
"automod_terms",
1952+
"unban_request",
1953+
)
1954+
1955+
class Followers:
1956+
def __init__(self, data: dict) -> None:
1957+
self.follow_duration_minutes: int = data["follow_duration_minutes"]
1958+
1959+
class Slow:
1960+
def __init__(self, data: dict) -> None:
1961+
self.wait_time_seconds: int = data["wait_time_seconds"]
1962+
1963+
class VIPStatus:
1964+
def __init__(self, client: EventSubClient, data: dict) -> None:
1965+
self.user: PartialUser = _transform_user(client, data, "user")
1966+
1967+
class ModeratorStatus:
1968+
def __init__(self, client: EventSubClient, data: dict) -> None:
1969+
self.user: PartialUser = _transform_user(client, data, "user")
1970+
1971+
class Ban:
1972+
def __init__(self, client: EventSubClient, data: dict) -> None:
1973+
self.user: PartialUser = _transform_user(client, data, "user")
1974+
self.reason: Optional[str] = data.get("reason")
1975+
1976+
class UnBan:
1977+
def __init__(self, client: EventSubClient, data: dict) -> None:
1978+
self.user: PartialUser = _transform_user(client, data, "user")
1979+
1980+
class Timeout:
1981+
def __init__(self, client: EventSubClient, data: dict) -> None:
1982+
self.user: PartialUser = _transform_user(client, data, "user")
1983+
self.reason: Optional[str] = data.get("reason")
1984+
self.expires_at: datetime.datetime = _parse_datetime(data["expires_at"])
1985+
1986+
class UnTimeout:
1987+
def __init__(self, client: EventSubClient, data: dict) -> None:
1988+
self.user: PartialUser = _transform_user(client, data, "user")
1989+
1990+
class Raid:
1991+
def __init__(self, client: EventSubClient, data: dict) -> None:
1992+
self.user: PartialUser = _transform_user(client, data, "user")
1993+
self.viewer_count: int = data["viewer_count"]
1994+
1995+
class UnRaid:
1996+
def __init__(self, client: EventSubClient, data: dict) -> None:
1997+
self.user: PartialUser = _transform_user(client, data, "user")
1998+
1999+
class Delete:
2000+
def __init__(self, client: EventSubClient, data: dict) -> None:
2001+
self.user: PartialUser = _transform_user(client, data, "user")
2002+
self.message_id: str = data["message_id"]
2003+
self.message_body: str = data["message_body"]
2004+
2005+
class AutoModTerms:
2006+
def __init__(self, data: dict) -> None:
2007+
self.action: str = data["action"]
2008+
self.list: str = data["list"]
2009+
self.terms: List[str] = data["terms"]
2010+
self.from_automod: bool = data["from_automod"]
2011+
2012+
class UnBanRequest:
2013+
def __init__(self, client: EventSubClient, data: dict) -> None:
2014+
self.user: PartialUser = _transform_user(client, data, "user")
2015+
self.is_approved: bool = data["is_approved"]
2016+
self.moderator_message: str = data["moderator_message"]
2017+
2018+
def __init__(self, client: EventSubClient, data: dict) -> None:
2019+
self.broadcaster = _transform_user(client, data, "broadcaster_user")
2020+
self.moderator = _transform_user(client, data, "moderator_user")
2021+
self.action: str = data["action"]
2022+
self.followers = self.Followers(data["followers"]) if data.get("followers") is not None else None
2023+
self.slow = self.Slow(data["slow"]) if data.get("slow") is not None else None
2024+
self.vip = self.VIPStatus(client, data["vip"]) if data.get("vip") is not None else None
2025+
self.unvip = self.VIPStatus(client, data["unvip"]) if data.get("unvip") is not None else None
2026+
self.mod = self.ModeratorStatus(client, data["mod"]) if data.get("mod") is not None else None
2027+
self.unmod = self.ModeratorStatus(client, data["unmod"]) if data.get("unmod") is not None else None
2028+
self.ban = self.Ban(client, data["ban"]) if data.get("ban") is not None else None
2029+
self.unban = self.UnBan(client, data["unban"]) if data.get("unban") is not None else None
2030+
self.timeout = self.Timeout(client, data["timeout"]) if data.get("timeout") is not None else None
2031+
self.untimeout = self.UnTimeout(client, data["untimeout"]) if data.get("untimeout") is not None else None
2032+
self.raid = self.Raid(client, data["raid"]) if data.get("raid") is not None else None
2033+
self.unraid = self.UnRaid(client, data["unraid"]) if data.get("unraid") is not None else None
2034+
self.delete = self.Delete(client, data["delete"]) if data.get("delete") is not None else None
2035+
self.automod_terms = (
2036+
self.AutoModTerms(client, data["automod_terms"]) if data.get("automod_terms") is not None else None
2037+
)
2038+
self.unban_request = (
2039+
self.UnBanRequest(client, data["unban_request"]) if data.get("unban_request") is not None else None
2040+
)
2041+
2042+
19192043
class SuspiciousUserUpdateData(EventData):
19202044
"""
19212045
Represents a suspicious user update event.
@@ -1941,7 +2065,6 @@ def __init__(self, client: EventSubClient, data: dict) -> None:
19412065
self.trust_status: Literal["active_monitoring", "restricted", "none"] = data["low_trust_status"]
19422066

19432067

1944-
19452068
_DataType = Union[
19462069
ChannelBanData,
19472070
ChannelUnbanData,
@@ -1982,6 +2105,7 @@ def __init__(self, client: EventSubClient, data: dict) -> None:
19822105
AutomodSettingsUpdateData,
19832106
AutomodTermsUpdateData,
19842107
SuspiciousUserUpdateData,
2108+
ChannelModerateData,
19852109
]
19862110

19872111

@@ -2041,6 +2165,8 @@ class _SubscriptionTypes(metaclass=_SubTypesMeta):
20412165

20422166
channel_charity_donate = "channel.charity_campaign.donate", 1, ChannelCharityDonationData
20432167

2168+
channel_moderate = "channel.moderate", 1, ChannelModerateData
2169+
20442170
hypetrain_begin = "channel.hype_train.begin", 1, HypeTrainBeginProgressData
20452171
hypetrain_progress = "channel.hype_train.progress", 1, HypeTrainBeginProgressData
20462172
hypetrain_end = "channel.hype_train.end", 1, HypeTrainEndData
@@ -2064,7 +2190,7 @@ class _SubscriptionTypes(metaclass=_SubTypesMeta):
20642190
user_authorization_revoke = "user.authorization.revoke", 1, UserAuthorizationRevokedData
20652191

20662192
user_update = "user.update", 1, UserUpdateData
2067-
2193+
20682194
suspicious_user_update = "channel.suspicious_user.update", 1, SuspiciousUserUpdateData
20692195

20702196

twitchio/ext/eventsub/server.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -321,8 +321,19 @@ def subscribe_automod_terms_update(
321321
def subscribe_channel_charity_donate(self, broadcaster: Union[PartialUser, str, int]):
322322
return self._subscribe_with_broadcaster(models.SubscriptionTypes.channel_charity_donate, broadcaster)
323323

324-
def subscribe_suspicious_user_update(self, broadcaster: Union[PartialUser, str, int], moderator: Union[PartialUser, str, int]):
325-
return self._subscribe_with_broadcaster_moderator(models.SubscriptionTypes.suspicious_user_update, broadcaster, moderator)
324+
def subscribe_suspicious_user_update(
325+
self, broadcaster: Union[PartialUser, str, int], moderator: Union[PartialUser, str, int]
326+
):
327+
return self._subscribe_with_broadcaster_moderator(
328+
models.SubscriptionTypes.suspicious_user_update, broadcaster, moderator
329+
)
330+
331+
def subscribe_channel_moderate(
332+
self, broadcaster: Union[PartialUser, str, int], moderator: Union[PartialUser, str, int]
333+
):
334+
return self._subscribe_with_broadcaster_moderator(
335+
models.SubscriptionTypes.channel_moderate, broadcaster, moderator
336+
)
326337

327338
async def subscribe_user_authorization_granted(self):
328339
return await self._http.create_webhook_subscription(

twitchio/ext/eventsub/websocket.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -555,3 +555,17 @@ async def subscribe_automod_terms_update(
555555
await self._subscribe_with_broadcaster_moderator(
556556
models.SubscriptionTypes.automod_terms_update, broadcaster, moderator, token
557557
)
558+
559+
async def subscribe_suspicious_user_update(
560+
self, broadcaster: Union[PartialUser, str, int], moderator: Union[PartialUser, str, int], token: str
561+
):
562+
await self._subscribe_with_broadcaster_moderator(
563+
models.SubscriptionTypes.suspicious_user_update, broadcaster, moderator, token
564+
)
565+
566+
async def subscribe_channel_moderate(
567+
self, broadcaster: Union[PartialUser, str, int], moderator: Union[PartialUser, str, int], token: str
568+
):
569+
await self._subscribe_with_broadcaster_moderator(
570+
models.SubscriptionTypes.channel_moderate, broadcaster, moderator, token
571+
)

0 commit comments

Comments
 (0)