import sys import requests from bs4 import BeautifulSoup import json import time import threading from requests import RequestException try: file = open('cookie.txt', 'r') cook = file.readline() if len(cook) == 0: print('There is no cookie in cookie.txt file') time.sleep(30) sys.exit(0) except FileNotFoundError: print('Cant find cookie.txt file') time.sleep(30) sys.exit(0) timeout = 900 def get_page(): global soup, xsrf_token, cookies, points try: url = 'https://www.steamgifts.com' cookies = {'PHPSESSID': cook} r = requests.get(url, cookies=cookies) soup = BeautifulSoup(r.text, 'html.parser') xsrf_token = soup.find('input', {'name': 'xsrf_token'})['value'] points = soup.find('span', {'class': 'nav__points'}).text # storage points except RequestException: print('Cant connect to the site') print('Waiting 2 minutes and reconnect...') time.sleep(120) get_page() except TypeError: print('Cant recognize your cookie value.') time.sleep(30) sys.exit(0) # get codes of the games def get_games(): global game_name gifts_list = soup.find_all(lambda tag: tag.name == 'div' and tag.get('class') == ['giveaway__row-inner-wrap']) for item in gifts_list: if int(points) == 0: print('> Sleeping to get 6 points') time.sleep(timeout) get_games() break game_cost = item.find_all('span', {'class': 'giveaway__heading__thin'}) last_div = None for last_div in game_cost: pass if last_div: game_cost = last_div.getText().replace('(', '').replace(')', '').replace('P', '') game_name = item.find('a', {'class': 'giveaway__heading__name'}).text if int(points) - int(game_cost) < 0: print('Not enough points to enter: ' + game_name) continue elif int(points) - int(game_cost) > 0: entry_gift(item.find('a', {'class': 'giveaway__heading__name'})['href'].split('/')[2]) print('List of games is ended. Waiting 2 min to update...') time.sleep(120) get_page() get_games() def entry_gift(code): payload = {'xsrf_token': xsrf_token, 'do': 'entry_insert', 'code': code} entry = requests.post('https://www.steamgifts.com/ajax.php', data=payload, cookies=cookies) json_data = json.loads(entry.text) get_page() # print(json_data) # updating points after entered a giveaway if json_data['type'] == 'success': print('> Bot has entered giveaway: ' + game_name) time.sleep(5) def inputs_data(): global timeout while 1: cmd = input().split() if cmd == '!help': print(' [ HELP BOX ]') print('!sleep [arg]\t- change a sleeping interval in sec (default is 900 sec)') if len(cmd) == 1: print('!help to see available commands') if cmd[0] == '!sleep': try: timeout = int(cmd[1]) except ValueError: print('Expecting a digit!') if __name__ == '__main__': thread = threading.Thread(target=inputs_data) thread.start() get_page() get_games()