Skip to content

Commit

Permalink
Detect completed drops via notifications feed
Browse files Browse the repository at this point in the history
  • Loading branch information
DevilXD committed Nov 4, 2023
1 parent eded7ed commit 5271d6a
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 4 deletions.
35 changes: 31 additions & 4 deletions constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ def _merge_vars(base_vars: JsonType, vars: JsonType) -> None:
URLType = NewType("URLType", str)
TopicProcess: TypeAlias = "abc.Callable[[int, JsonType], Any]"
# Values
BASE_TOPICS = 2
BASE_TOPICS = 3
MAX_WEBSOCKETS = 8
WS_TOPICS_LIMIT = 50
TOPICS_PER_CHANNEL = 2
Expand Down Expand Up @@ -324,6 +324,33 @@ def with_variables(self, variables: JsonType) -> GQLOperation:
"sortTypeIsRecency": False,
},
),
"NotificationsView": GQLOperation( # unused, triggers notifications "update-summary"
"OnsiteNotifications_View",
"f6bdb1298f376539487f28b7f8a6b5d7434ec04ba4d7dc5c232b258410ae04d6",
variables={
"input": {},
},
),
"NotificationsList": GQLOperation( # unused
"OnsiteNotifications_ListNotifications",
"e709b905ddb963d7cf4a8f6760148926ecbd0eee0f2edc48d1cf17f3e87f6490",
variables={
"cursor": "",
"displayType": "VIEWER",
"language": "en",
"limit": 10,
"shouldLoadLastBroadcast": False,
},
),
"NotificationsDelete": GQLOperation(
"OnsiteNotifications_DeleteNotification",
"13d463c831f28ffe17dccf55b3148ed8b3edbbd0ebadd56352f1ff0160616816",
variables={
"input": {
"id": "", # ID of the notification to delete
}
},
),
}


Expand Down Expand Up @@ -368,15 +395,15 @@ def __hash__(self) -> int:

WEBSOCKET_TOPICS: dict[str, dict[str, str]] = {
"User": { # Using user_id
"Presence": "presence", # unused
"Drops": "user-drop-events",
"Notifications": "onsite-notifications",
"CommunityPoints": "community-points-user-v1",
"Presence": "presence", # unused
"Notifications": "onsite-notifications", # unused
},
"Channel": { # Using channel_id
"Drops": "channel-drop-events", # unused
"CommunityPoints": "community-points-channel-v1", # unused
"StreamState": "video-playback-by-id",
"StreamUpdate": "broadcast-settings-update",
"CommunityPoints": "community-points-channel-v1", # unused
},
}
15 changes: 15 additions & 0 deletions twitch.py
Original file line number Diff line number Diff line change
Expand Up @@ -790,6 +790,9 @@ async def _run(self):
self.websocket.add_topics([
WebsocketTopic("User", "Drops", auth_state.user_id, self.process_drops),
WebsocketTopic("User", "CommunityPoints", auth_state.user_id, self.process_points),
WebsocketTopic(
"User", "Notifications", auth_state.user_id, self.process_notifications
),
])
full_cleanup: bool = False
channels: Final[OrderedDict[int, Channel]] = self.channels
Expand Down Expand Up @@ -1391,6 +1394,18 @@ async def process_drops(self, user_id: int, message: JsonType):
self._drop_update.set_result(False)
self._drop_update = None

@task_wrapper
async def process_notifications(self, user_id: int, message: JsonType):
if message["type"] == "create-notification":
data: JsonType = message["data"]["notification"]
if data["type"] == "user_drop_reward_reminder_notification":
self.change_state(State.INVENTORY_FETCH)
await self.gql_request(
GQL_OPERATIONS["NotificationsDelete"].with_variables(
{"input": {"id": data["id"]}}
)
)

@task_wrapper
async def process_points(self, user_id: int, message: JsonType):
# Example payloads:
Expand Down

0 comments on commit 5271d6a

Please sign in to comment.