Add Chzzk campaign and reward models, import command, and schemas
Some checks failed
Deploy to Server / deploy (push) Failing after 19s

This commit is contained in:
Joakim Hellsén 2026-03-31 21:57:12 +02:00
commit 677aedf42b
Signed by: Joakim Hellsén
SSH key fingerprint: SHA256:/9h/CsExpFp+PRhsfA0xznFx2CGfTT5R/kpuFfUgEQk
14 changed files with 650 additions and 9 deletions

265
twitch/tests/example.json generated Normal file
View file

@ -0,0 +1,265 @@
[
{
"data": {
"user": {
"id": "17658559",
"dropCampaign": {
"id": "3b965979-ecd2-11f0-876e-0a58a9feac02",
"self": {
"isAccountConnected": true,
"__typename": "DropCampaignSelfEdge"
},
"allow": {
"channels": null,
"isEnabled": false,
"__typename": "DropCampaignACL"
},
"accountLinkURL": "https://link.smite2.com/",
"description": "Viewers will receive 50 Wandering Market Coins for each two hours spent viewing participating streams. Watch to earn 7 drops for a total of 350 Wandering Market Coins for the week!",
"detailsURL": "https://www.smite2.com/news/closed-alpha-twitch-drops/",
"endAt": "2026-01-17T10:58:59.999Z",
"eventBasedDrops": [],
"game": {
"id": "2094865572",
"slug": "smite-2",
"displayName": "SMITE 2",
"__typename": "Game"
},
"imageURL": "https://static-cdn.jtvnw.net/twitch-quests-assets/CAMPAIGN/47db66e8-933c-484f-ab5a-30ba09093098.png",
"name": "Jan Drops Week 2",
"owner": {
"id": "51a157a0-674a-4863-b120-7bb6ee2466a8",
"name": "Hi-Rez Studios",
"__typename": "Organization"
},
"startAt": "2026-01-10T11:00:00Z",
"status": "ACTIVE",
"timeBasedDrops": [
{
"id": "933c8f91-ecd2-11f0-b3fd-0a58a9feac02",
"requiredSubs": 0,
"benefitEdges": [
{
"benefit": {
"id": "ccb3fb7f-e59b-11ef-aef0-0a58a9feac02",
"createdAt": "2025-02-07T21:37:58.881Z",
"entitlementLimit": 1,
"game": {
"id": "2094865572",
"name": "SMITE 2",
"__typename": "Game"
},
"imageAssetURL": "https://static-cdn.jtvnw.net/twitch-quests-assets/REWARD/903496ad-de97-41ff-ad97-12f099e20ea8.jpeg",
"isIosAvailable": false,
"name": "Market Coins Bundle 1",
"ownerOrganization": {
"id": "51a157a0-674a-4863-b120-7bb6ee2466a8",
"name": "Hi-Rez Studios",
"__typename": "Organization"
},
"distributionType": "DIRECT_ENTITLEMENT",
"__typename": "DropBenefit"
},
"entitlementLimit": 1,
"__typename": "DropBenefitEdge"
}
],
"endAt": "2026-01-17T10:58:59.999Z",
"name": "Market Coins Bundle 1",
"preconditionDrops": null,
"requiredMinutesWatched": 120,
"startAt": "2026-01-10T11:00:00Z",
"__typename": "TimeBasedDrop"
},
{
"id": "9909373d-ecd2-11f0-92b1-0a58a9feac02",
"requiredSubs": 0,
"benefitEdges": [
{
"benefit": {
"id": "ccb3fb7f-e59b-11ef-aef0-0a58a9feac02",
"createdAt": "2025-02-07T21:37:58.881Z",
"entitlementLimit": 1,
"game": {
"id": "2094865572",
"name": "SMITE 2",
"__typename": "Game"
},
"imageAssetURL": "https://static-cdn.jtvnw.net/twitch-quests-assets/REWARD/903496ad-de97-41ff-ad97-12f099e20ea8.jpeg",
"isIosAvailable": false,
"name": "Market Coins Bundle 1",
"ownerOrganization": {
"id": "51a157a0-674a-4863-b120-7bb6ee2466a8",
"name": "Hi-Rez Studios",
"__typename": "Organization"
},
"distributionType": "DIRECT_ENTITLEMENT",
"__typename": "DropBenefit"
},
"entitlementLimit": 1,
"__typename": "DropBenefitEdge"
}
],
"endAt": "2026-01-17T10:58:59.999Z",
"name": "Market Coins Bundle 2",
"preconditionDrops": null,
"requiredMinutesWatched": 240,
"startAt": "2026-01-10T11:00:00Z",
"__typename": "TimeBasedDrop"
},
{
"id": "a5289489-ecd2-11f0-b098-0a58a9feac02",
"requiredSubs": 0,
"benefitEdges": [
{
"benefit": {
"id": "ccb3fb7f-e59b-11ef-aef0-0a58a9feac02",
"createdAt": "2025-02-07T21:37:58.881Z",
"entitlementLimit": 1,
"game": {
"id": "2094865572",
"name": "SMITE 2",
"__typename": "Game"
},
"imageAssetURL": "https://static-cdn.jtvnw.net/twitch-quests-assets/REWARD/903496ad-de97-41ff-ad97-12f099e20ea8.jpeg",
"isIosAvailable": false,
"name": "Market Coins Bundle 1",
"ownerOrganization": {
"id": "51a157a0-674a-4863-b120-7bb6ee2466a8",
"name": "Hi-Rez Studios",
"__typename": "Organization"
},
"distributionType": "DIRECT_ENTITLEMENT",
"__typename": "DropBenefit"
},
"entitlementLimit": 1,
"__typename": "DropBenefitEdge"
}
],
"endAt": "2026-01-17T10:58:59.999Z",
"name": "Market Coins Bundle 3",
"preconditionDrops": null,
"requiredMinutesWatched": 360,
"startAt": "2026-01-10T11:00:00Z",
"__typename": "TimeBasedDrop"
},
{
"id": "ab5ea171-ecd2-11f0-9e33-0a58a9feac02",
"requiredSubs": 0,
"benefitEdges": [
{
"benefit": {
"id": "ccb3fb7f-e59b-11ef-aef0-0a58a9feac02",
"createdAt": "2025-02-07T21:37:58.881Z",
"entitlementLimit": 1,
"game": {
"id": "2094865572",
"name": "SMITE 2",
"__typename": "Game"
},
"imageAssetURL": "https://static-cdn.jtvnw.net/twitch-quests-assets/REWARD/903496ad-de97-41ff-ad97-12f099e20ea8.jpeg",
"isIosAvailable": false,
"name": "Market Coins Bundle 1",
"ownerOrganization": {
"id": "51a157a0-674a-4863-b120-7bb6ee2466a8",
"name": "Hi-Rez Studios",
"__typename": "Organization"
},
"distributionType": "DIRECT_ENTITLEMENT",
"__typename": "DropBenefit"
},
"entitlementLimit": 1,
"__typename": "DropBenefitEdge"
}
],
"endAt": "2026-01-17T10:58:59.999Z",
"name": "Market Coins Bundle 4",
"preconditionDrops": null,
"requiredMinutesWatched": 480,
"startAt": "2026-01-10T11:00:00Z",
"__typename": "TimeBasedDrop"
},
{
"id": "b19b7afb-ecd2-11f0-bbd3-0a58a9feac02",
"requiredSubs": 0,
"benefitEdges": [
{
"benefit": {
"id": "ccb3fb7f-e59b-11ef-aef0-0a58a9feac02",
"createdAt": "2025-02-07T21:37:58.881Z",
"entitlementLimit": 1,
"game": {
"id": "2094865572",
"name": "SMITE 2",
"__typename": "Game"
},
"imageAssetURL": "https://static-cdn.jtvnw.net/twitch-quests-assets/REWARD/903496ad-de97-41ff-ad97-12f099e20ea8.jpeg",
"isIosAvailable": false,
"name": "Market Coins Bundle 1",
"ownerOrganization": {
"id": "51a157a0-674a-4863-b120-7bb6ee2466a8",
"name": "Hi-Rez Studios",
"__typename": "Organization"
},
"distributionType": "DIRECT_ENTITLEMENT",
"__typename": "DropBenefit"
},
"entitlementLimit": 1,
"__typename": "DropBenefitEdge"
}
],
"endAt": "2026-01-17T10:58:59.999Z",
"name": "Market Coins Bundle 5",
"preconditionDrops": null,
"requiredMinutesWatched": 600,
"startAt": "2026-01-10T11:00:00Z",
"__typename": "TimeBasedDrop"
},
{
"id": "b82db8e0-ecd2-11f0-8c96-0a58a9feac02",
"requiredSubs": 0,
"benefitEdges": [
{
"benefit": {
"id": "ccb3fb7f-e59b-11ef-aef0-0a58a9feac02",
"createdAt": "2025-02-07T21:37:58.881Z",
"entitlementLimit": 1,
"game": {
"id": "2094865572",
"name": "SMITE 2",
"__typename": "Game"
},
"imageAssetURL": "https://static-cdn.jtvnw.net/twitch-quests-assets/REWARD/903496ad-de97-41ff-ad97-12f099e20ea8.jpeg",
"isIosAvailable": false,
"name": "Market Coins Bundle 1",
"ownerOrganization": {
"id": "51a157a0-674a-4863-b120-7bb6ee2466a8",
"name": "Hi-Rez Studios",
"__typename": "Organization"
},
"distributionType": "DIRECT_ENTITLEMENT",
"__typename": "DropBenefit"
},
"entitlementLimit": 1,
"__typename": "DropBenefitEdge"
}
],
"endAt": "2026-01-17T10:58:59.999Z",
"name": "Market Coins Bundle 6",
"preconditionDrops": null,
"requiredMinutesWatched": 720,
"startAt": "2026-01-10T11:00:00Z",
"__typename": "TimeBasedDrop"
}
],
"__typename": "DropCampaign"
},
"__typename": "User"
}
},
"extensions": {
"durationMilliseconds": 48,
"operationName": "DropCampaignDetails"
}
}
]

View file

@ -620,7 +620,7 @@ class ExampleJsonImportTests(TestCase):
command = Command()
repo_root: Path = Path(__file__).resolve().parents[2]
example_path: Path = repo_root / "example.json"
example_path: Path = repo_root / "twitch" / "tests" / "example.json"
responses = json.loads(example_path.read_text(encoding="utf-8"))