Skip to content

Commit 1805dec

Browse files
authored
Merge pull request #745 from 0x8fv/rdavydov-master
hotfix change GraphQL operations to use UserByLogin for fetching user data and improve response handling in Twitch and TwitchLogin classes
2 parents 1057587 + ace9d25 commit 1805dec

File tree

4 files changed

+26
-13
lines changed

4 files changed

+26
-13
lines changed

TwitchChannelPointsMiner/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# -*- coding: utf-8 -*-
2-
__version__ = "2.0.0"
2+
__version__ = "2.0.1"
33
from .TwitchChannelPointsMiner import TwitchChannelPointsMiner
44

55
__all__ = [

TwitchChannelPointsMiner/classes/Twitch.py

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -197,8 +197,8 @@ def check_streamer_online(self, streamer):
197197
streamer.set_offline()
198198

199199
def get_channel_id(self, streamer_username):
200-
json_data = copy.deepcopy(GQLOperations.ReportMenuItem)
201-
json_data["variables"] = {"channelLogin": streamer_username}
200+
json_data = copy.deepcopy(GQLOperations.GetIDFromLogin)
201+
json_data["variables"]["login"] = streamer_username
202202
json_response = self.post_gql_request(json_data)
203203
if (
204204
"data" not in json_response
@@ -826,12 +826,16 @@ def __get_inventory(self):
826826

827827
def __get_drops_dashboard(self, status=None):
828828
response = self.post_gql_request(GQLOperations.ViewerDropsDashboard)
829-
campaigns = response["data"]["currentUser"]["dropCampaigns"] or []
829+
campaigns = (
830+
response.get("data", {})
831+
.get("currentUser", {})
832+
.get("dropCampaigns", [])
833+
or []
834+
)
830835

831836
if status is not None:
832837
campaigns = (
833-
list(filter(lambda x: x["status"] ==
834-
status.upper(), campaigns)) or []
838+
list(filter(lambda x: x["status"] == status.upper(), campaigns)) or []
835839
)
836840

837841
return campaigns
@@ -850,9 +854,15 @@ def __get_campaigns_details(self, campaigns):
850854
}
851855

852856
response = self.post_gql_request(json_data)
857+
if not isinstance(response, list):
858+
logger.debug("Unexpected campaigns response format, skipping chunk")
859+
continue
853860
for r in response:
854-
if r["data"]["user"] is not None:
855-
result.append(r["data"]["user"]["dropCampaign"])
861+
drop_campaign = (
862+
r.get("data", {}).get("user", {}).get("dropCampaign", None)
863+
)
864+
if drop_campaign is not None:
865+
result.append(drop_campaign)
856866
return result
857867

858868
def __sync_campaigns(self, campaigns):
@@ -921,6 +931,7 @@ def claim_all_drops_from_inventory(self):
921931

922932
def sync_campaigns(self, streamers, chunk_size=3):
923933
campaigns_update = 0
934+
campaigns = []
924935
while self.running:
925936
try:
926937
# Get update from dashboard each 60minutes
@@ -977,6 +988,7 @@ def sync_campaigns(self, streamers, chunk_size=3):
977988

978989
except (ValueError, KeyError, requests.exceptions.ConnectionError) as e:
979990
logger.error(f"Error while syncing inventory: {e}")
991+
campaigns = []
980992
self.__check_connection_handler(chunk_size)
981993

982994
self.__chuncked_sleep(60, chunk_size=chunk_size)

TwitchChannelPointsMiner/classes/TwitchLogin.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -341,8 +341,8 @@ def get_user_id(self):
341341
return user_id
342342

343343
def __set_user_id(self):
344-
json_data = copy.deepcopy(GQLOperations.ReportMenuItem)
345-
json_data["variables"] = {"channelLogin": self.username}
344+
json_data = copy.deepcopy(GQLOperations.GetIDFromLogin)
345+
json_data["variables"]["login"] = self.username
346346
response = self.session.post(GQLOperations.url, json=json_data)
347347

348348
if response.status_code == 200:

TwitchChannelPointsMiner/constants.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -170,12 +170,13 @@ class GQLOperations:
170170
}
171171
},
172172
}
173-
ReportMenuItem = { # Use for replace https://api.twitch.tv/helix/users?login={self.username}
174-
"operationName": "ReportMenuItem",
173+
GetIDFromLogin = {
174+
"operationName": "GetIDFromLogin",
175+
"variables": {"login": None},
175176
"extensions": {
176177
"persistedQuery": {
177178
"version": 1,
178-
"sha256Hash": "8f3628981255345ca5e5453dfd844efffb01d6413a9931498836e6268692a30c",
179+
"sha256Hash": "94e82a7b1e3c21e186daa73ee2afc4b8f23bade1fbbff6fe8ac133f50a2f58ca",
179180
}
180181
},
181182
}

0 commit comments

Comments
 (0)