All checks were successful
Build And Publish Package / publish (push) Successful in 28s
478 lines
10 KiB
Python
478 lines
10 KiB
Python
from datetime import datetime
|
|
from typing import Any, Literal, TypedDict
|
|
|
|
from pydantic import BaseModel, ConfigDict, Field
|
|
|
|
|
|
class Error(Exception):
|
|
status_code: int
|
|
error: str
|
|
|
|
def __init__(self, status_code: int, error: str) -> None:
|
|
self.status_code = status_code
|
|
self.error = error
|
|
super().__init__(f'{status_code}: {error}')
|
|
|
|
|
|
class Pagination(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
cursor: str
|
|
|
|
|
|
class StartCommercialData(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
length: int
|
|
message: str
|
|
retry_after: int
|
|
|
|
|
|
class StartCommercial(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
data: list[StartCommercialData]
|
|
|
|
|
|
class AdScheduleData(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
next_ad_at: datetime | None
|
|
last_ad_at: datetime | None
|
|
duration: int
|
|
preroll_free_time: int
|
|
snooze_count: int
|
|
snooze_refresh_at: datetime
|
|
|
|
|
|
class AdSchedule(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
data: list[AdScheduleData]
|
|
|
|
|
|
class SnoozeNextAdData(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
snooze_count: int
|
|
snooze_refresh_at: datetime
|
|
next_ad_at: datetime
|
|
|
|
|
|
class SnoozeNextAd(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
data: list[SnoozeNextAdData]
|
|
|
|
|
|
class DateRange(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
started_at: datetime
|
|
ended_at: datetime
|
|
|
|
|
|
class ExtensionAnalyticsData(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
extension_id: str
|
|
URL: str
|
|
type: str
|
|
date_range: DateRange
|
|
|
|
|
|
class ExtensionAnalytics(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
data: list[ExtensionAnalyticsData]
|
|
pagination: Pagination | dict[Any, Any] | None = None
|
|
|
|
|
|
class GameAnalyticsData(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
game_id: int
|
|
URL: str
|
|
type: str
|
|
date_range: DateRange
|
|
|
|
|
|
class GameAnalytics(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
data: list[GameAnalyticsData]
|
|
pagination: Pagination | dict[Any, Any] | None = None
|
|
|
|
|
|
class BitsLeaderboardData(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
user_id: int
|
|
user_login: str
|
|
user_name: str
|
|
rank: int
|
|
score: int
|
|
|
|
|
|
class BitsLeaderboard(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
data: list[BitsLeaderboardData]
|
|
date_range: DateRange
|
|
total: int
|
|
|
|
|
|
class CheermotesImageAnimated(BaseModel):
|
|
field_1: str = Field(..., alias='1')
|
|
field_1_5: str = Field(..., alias='1.5')
|
|
field_2: str = Field(..., alias='2')
|
|
field_3: str = Field(..., alias='3')
|
|
field_4: str = Field(..., alias='4')
|
|
|
|
|
|
class CheermotesImageStatic(BaseModel):
|
|
field_1: str = Field(..., alias='1')
|
|
field_1_5: str = Field(..., alias='1.5')
|
|
field_2: str = Field(..., alias='2')
|
|
field_3: str = Field(..., alias='3')
|
|
field_4: str = Field(..., alias='4')
|
|
|
|
|
|
class CheermotesImage(BaseModel):
|
|
animated: CheermotesImageAnimated
|
|
static: CheermotesImageStatic
|
|
|
|
|
|
class CheermotesImages(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
light: CheermotesImage
|
|
dark: CheermotesImage
|
|
|
|
|
|
class CheermotesTier(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
min_bits: int
|
|
id: Literal['1', '100', '500', '1000', '5000', '10000', '100000']
|
|
color: str
|
|
can_cheer: bool
|
|
show_in_bits_card: bool
|
|
images: CheermotesImages
|
|
|
|
|
|
class CheermotesData(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
prefix: str
|
|
tiers: list[CheermotesTier]
|
|
type: Literal[
|
|
'global_first_party',
|
|
'global_third_party',
|
|
'channel_custom',
|
|
'display_only',
|
|
'sponsored',
|
|
]
|
|
order: int
|
|
last_updated: datetime
|
|
is_charitable: bool
|
|
|
|
|
|
class Cheermotes(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
data: list[CheermotesData]
|
|
|
|
|
|
class ExtensionProductCost(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
amount: int
|
|
type: Literal['bits']
|
|
|
|
|
|
class ExtensionProductData(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
domain: str
|
|
sku: str
|
|
cost: ExtensionProductCost
|
|
inDevelopment: bool
|
|
displayName: str
|
|
expiration: str
|
|
broadcast: bool
|
|
|
|
|
|
class ExtensionTransactionsData(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
id: str
|
|
timestamp: datetime
|
|
broadcaster_id: int
|
|
broadcaster_login: str
|
|
broadcaster_name: str
|
|
user_id: int
|
|
user_login: str
|
|
user_name: str
|
|
product_type: Literal['BITS_IN_EXTENSION']
|
|
product_data: ExtensionProductData
|
|
|
|
|
|
class ExtensionTransactions(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
data: list[ExtensionTransactionsData]
|
|
pagination: Pagination | dict[Any, Any] | None = None
|
|
|
|
|
|
class ContentClassificationLabel(TypedDict):
|
|
id: Literal[
|
|
'DebatedSocialIssuesAndPolitics',
|
|
'DrugsIntoxication',
|
|
'SexualThemes',
|
|
'ViolentGraphic',
|
|
'Gambling',
|
|
'ProfanityVulgarity',
|
|
]
|
|
is_enabled: bool
|
|
|
|
|
|
class ChannelInformation(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
broadcaster_id: int
|
|
broadcaster_login: str
|
|
broadcaster_name: str
|
|
broadcaster_language: str
|
|
game_name: str
|
|
game_id: int | str
|
|
title: str
|
|
delay: int
|
|
tags: list[str]
|
|
content_classification_labels: list[str]
|
|
is_branded_content: bool
|
|
|
|
|
|
class ChannelsInformation(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
data: list[ChannelInformation]
|
|
|
|
|
|
class ChannelEditor(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
user_id: int
|
|
user_name: str
|
|
created_at: datetime
|
|
|
|
|
|
class ChannelEditors(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
data: list[ChannelEditor]
|
|
|
|
|
|
class FollowedChannel(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
broadcaster_id: int
|
|
broadcaster_login: str
|
|
broadcaster_name: str
|
|
followed_at: datetime
|
|
|
|
|
|
class FollowedChannels(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
data: list[FollowedChannel]
|
|
pagination: Pagination | dict[Any, Any] | None = None
|
|
total: int
|
|
|
|
|
|
class ChannelFollower(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
user_id: int
|
|
user_login: str
|
|
user_name: str
|
|
followed_at: datetime
|
|
|
|
|
|
class ChannelFollowers(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
data: list[ChannelFollower]
|
|
pagination: Pagination | dict[Any, Any] | None = None
|
|
total: int
|
|
|
|
|
|
class CustomRewardImage(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
url_1x: str
|
|
url_2x: str
|
|
url_4x: str
|
|
|
|
|
|
class MaxPerStreamSetting(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
is_enabled: bool
|
|
max_per_stream: int
|
|
|
|
|
|
class MaxPerUserPerStreamSetting(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
is_enabled: bool
|
|
max_per_user_per_stream: int
|
|
|
|
|
|
class GlobalCooldownSetting(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
is_enabled: bool
|
|
global_cooldown_seconds: int
|
|
|
|
|
|
class CustomReward(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
broadcaster_id: int
|
|
broadcaster_login: str
|
|
broadcaster_name: str
|
|
id: int
|
|
title: str
|
|
prompt: str
|
|
cost: int
|
|
is_paused: bool
|
|
is_in_stock: bool
|
|
background_color: str
|
|
is_enabled: bool
|
|
is_user_input_required: bool
|
|
should_redemptions_skip_request_queue: bool
|
|
redemptions_redeemed_current_stream: int | None
|
|
cooldown_expires_at: datetime | None
|
|
image: CustomRewardImage | None
|
|
default_image: CustomRewardImage
|
|
max_per_stream_setting: MaxPerStreamSetting
|
|
max_per_user_per_stream_setting: MaxPerUserPerStreamSetting
|
|
global_cooldown_setting: GlobalCooldownSetting
|
|
|
|
|
|
class CustomRewards(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
data: list[CustomReward]
|
|
|
|
|
|
class CustomRewardRedemptionReward(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
id: str
|
|
title: str
|
|
prompt: str
|
|
cost: int
|
|
|
|
|
|
class CustomRewardRedemption(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
id: int
|
|
broadcaster_id: int
|
|
broadcaster_login: str
|
|
broadcaster_name: str
|
|
user_id: int
|
|
user_login: str
|
|
user_name: str
|
|
user_input: str
|
|
status: Literal['CANCELED', 'FULFILLED', 'UNFULFILLED']
|
|
redeemed_at: datetime
|
|
reward: CustomRewardRedemptionReward
|
|
|
|
|
|
class CustomRewardRedemptions(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
data: list[CustomRewardRedemption]
|
|
|
|
|
|
class CharityCampaignCurrentAmount(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
amount: int
|
|
decimal_places: int
|
|
currency: str
|
|
|
|
|
|
class CharityCampaignTargetAmount(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
value: int
|
|
decimal_places: int
|
|
currency: str
|
|
|
|
|
|
class CharityCampaignData(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
id: str
|
|
broadcaster_id: int
|
|
broadcaster_login: str
|
|
broadcaster_name: str
|
|
charity_name: str
|
|
charity_description: str
|
|
charity_logo: str
|
|
charity_website: str
|
|
current_amount: CharityCampaignCurrentAmount
|
|
target_amount: CharityCampaignTargetAmount
|
|
|
|
|
|
class CharityCampaign(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
data: list[CharityCampaignData]
|
|
|
|
|
|
class CharityDonationAmount(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
value: int
|
|
decimal_places: int
|
|
currency: str
|
|
|
|
|
|
class CharityDonation(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
id: str
|
|
campaign_id: str
|
|
user_id: int
|
|
user_login: str
|
|
user_name: str
|
|
amount: CharityDonationAmount
|
|
|
|
|
|
class CharityDonations(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
data: list[CharityDonation]
|
|
pagination: Pagination | dict[Any, Any] | None = None
|
|
|
|
|
|
class ChattersData(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
user_id: int
|
|
user_login: str
|
|
user_name: str
|
|
|
|
|
|
class Chatters(BaseModel):
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
data: list[ChattersData]
|
|
pagination: Pagination | dict[Any, Any] | None = None
|
|
total: int
|