Skip to content

Commit

Permalink
Message of type: drop-claim is useless. If current progress is >= req…
Browse files Browse the repository at this point in the history
…uired check the drop in inventory and get the dropInstanceID for auto-claim #21

Signed-off-by: Alessandro Maggio <[email protected]>
  • Loading branch information
Tkd-Alex committed Jan 29, 2021
1 parent 97dee30 commit 508a107
Show file tree
Hide file tree
Showing 5 changed files with 80 additions and 45 deletions.
4 changes: 4 additions & 0 deletions TwitchChannelPointsMiner/classes/Exceptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,7 @@ class StreamerIsOfflineException(Exception):

class WrongCookiesException(Exception):
pass


class TimeBasedDropNotFound(Exception):
pass
19 changes: 14 additions & 5 deletions TwitchChannelPointsMiner/classes/Twitch.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
from TwitchChannelPointsMiner.classes.Exceptions import (
StreamerIsOfflineException,
StreamerDoesNotExistException,
TimeBasedDropNotFound,
)
from TwitchChannelPointsMiner.constants.twitch import CLIENT_ID, API, GQLOperations

Expand Down Expand Up @@ -149,19 +150,27 @@ def claim_drop(self, streamer, drop_instance_id):
json_data["variables"] = {"input": {"dropInstanceID": drop_instance_id}}
self.post_gql_request(json_data)

def search_drop_in_inventory(self, streamer, drop_id):
response = self.post_gql_request(GQLOperations.Inventory)
inventory = response["data"]["currentUser"]["inventory"]
for campaign in inventory["dropCampaignsInProgress"]:
for drop in campaign["timeBasedDrops"]:
if drop["id"] == drop_id:
return drop["self"]
raise TimeBasedDropNotFound

# Load the amount of current points for a channel, check if a bonus is available
def load_channel_points_context(self, streamer, less_printing=False):
json_data = copy.deepcopy(GQLOperations.ChannelPointsContext)
json_data["variables"] = ({"channelLogin": streamer.username})
json_data["variables"] = {"channelLogin": streamer.username}

response = self.post_gql_request(json_data)
if response["data"]["community"] is None:
raise StreamerDoesNotExistException
community_points = response["data"]["community"]["channel"]["self"][
"communityPoints"
]
channel = response["data"]["community"]["channel"]
community_points = channel["self"]["communityPoints"]
streamer.channel_points = community_points["balance"]
# logger.info(f"{streamer.channel_points} channel points for {streamer.username}!")

if community_points["availableClaim"] is not None:
self.claim_bonus(
streamer,
Expand Down
28 changes: 20 additions & 8 deletions TwitchChannelPointsMiner/classes/WebSocketsPool.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from millify import millify
from dateutil import parser

from TwitchChannelPointsMiner.classes.Exceptions import TimeBasedDropNotFound
from TwitchChannelPointsMiner.classes.EventPrediction import EventPrediction
from TwitchChannelPointsMiner.classes.Raid import Raid
from TwitchChannelPointsMiner.classes.TwitchWebSocket import TwitchWebSocket
Expand Down Expand Up @@ -283,14 +284,25 @@ def on_message(ws, message):
ws.events_predictions[event_id].bet_confirmed = True

elif message.topic == "user-drop-events":
# if message.type == "drop-progress" # We don't need to handle this event
if message.type == "drop-claim":
# Random delay before claim. Maybe It's not required.
time.sleep(random.uniform(20, 40))
ws.twitch.claim_drop(
ws.streamers[streamer_index],
message.data["drop_instance_id"]
)
if message.type == "drop-progress":
if (
message.data["current_progress_min"]
>= message.data["required_progress_min"]
):
try:
drop = ws.twitch.search_drop_in_inventory(
ws.streamers[streamer_index],
message.data["drop_id"],
)
if drop["dropInstanceID"] is not None:
ws.twitch.claim_drop(
ws.streamers[streamer_index],
drop["dropInstanceID"],
)
except TimeBasedDropNotFound:
logger.error(
f"Unable to find {message.data['drop_id']} in your inventory"
)

except Exception:
logger.error(
Expand Down
10 changes: 10 additions & 0 deletions TwitchChannelPointsMiner/constants/twitch.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,3 +71,13 @@ class GQLOperations:
}
},
}
Inventory = {
"operationName": "Inventory",
"variables": {},
"extensions": {
"persistedQuery": {
"version": 1,
"sha256Hash": "e0765ebaa8e8eeb4043cc6dfeab3eac7f682ef5f724b81367e6e55c7aef2be4c",
}
},
}
64 changes: 32 additions & 32 deletions TwitchChannelPointsMiner/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,38 +78,38 @@ def get_user_agent(browser):
def remove_emoji(string):
emoji_pattern = re.compile(
"["
u"\U0001F600-\U0001F64F" # emoticons
u"\U0001F300-\U0001F5FF" # symbols & pictographs
u"\U0001F680-\U0001F6FF" # transport & map symbols
u"\U0001F1E0-\U0001F1FF" # flags (iOS)
u"\U00002500-\U00002BEF" # chinese char
u"\U00002702-\U000027B0"
u"\U00002702-\U000027B0"
u"\U000024C2-\U0001F251"
u"\U0001f926-\U0001f937"
u"\U00010000-\U0010ffff"
u"\u2640-\u2642"
u"\u2600-\u2B55"
u"\u200d"
u"\u23cf"
u"\u23e9"
u"\u231a"
u"\ufe0f" # dingbats
u"\u3030"
u"\u231b"
u"\u2328"
u"\u23cf"
u"\u23e9"
u"\u23ea"
u"\u23eb"
u"\u23ec"
u"\u23ed"
u"\u23ee"
u"\u23ef"
u"\u23f0"
u"\u23f1"
u"\u23f2"
u"\u23f3"
"\U0001F600-\U0001F64F" # emoticons
"\U0001F300-\U0001F5FF" # symbols & pictographs
"\U0001F680-\U0001F6FF" # transport & map symbols
"\U0001F1E0-\U0001F1FF" # flags (iOS)
"\U00002500-\U00002BEF" # chinese char
"\U00002702-\U000027B0"
"\U00002702-\U000027B0"
"\U000024C2-\U0001F251"
"\U0001f926-\U0001f937"
"\U00010000-\U0010ffff"
"\u2640-\u2642"
"\u2600-\u2B55"
"\u200d"
"\u23cf"
"\u23e9"
"\u231a"
"\ufe0f" # dingbats
"\u3030"
"\u231b"
"\u2328"
"\u23cf"
"\u23e9"
"\u23ea"
"\u23eb"
"\u23ec"
"\u23ed"
"\u23ee"
"\u23ef"
"\u23f0"
"\u23f1"
"\u23f2"
"\u23f3"
"]+",
flags=re.UNICODE,
)
Expand Down

0 comments on commit 508a107

Please sign in to comment.