rename all the things
This commit is contained in:
parent
fd9e5ba23e
commit
b51712cb87
7 changed files with 168 additions and 150 deletions
|
@ -18,7 +18,7 @@ class SteamGiftsException(Exception):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class SteamGifts:
|
class EnterGiveaways:
|
||||||
def __init__(self, cookie, user_agent, gifts_type, pinned, min_points, max_entries,
|
def __init__(self, cookie, user_agent, gifts_type, pinned, min_points, max_entries,
|
||||||
max_time_left, minimum_game_points, blacklist, notification):
|
max_time_left, minimum_game_points, blacklist, notification):
|
||||||
self.contributor_level = None
|
self.contributor_level = None
|
72
src/giveaway_thread.py
Normal file
72
src/giveaway_thread.py
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
import threading
|
||||||
|
from random import randint
|
||||||
|
from threading import Thread
|
||||||
|
from time import sleep
|
||||||
|
|
||||||
|
import log
|
||||||
|
from enter_giveaways import EnterGiveaways
|
||||||
|
|
||||||
|
logger = log.get_logger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class GiveawayThread(threading.Thread):
|
||||||
|
|
||||||
|
def __init__(self, config, notification):
|
||||||
|
Thread.__init__(self)
|
||||||
|
self.exc = None
|
||||||
|
self.config = config
|
||||||
|
self.notification = notification
|
||||||
|
|
||||||
|
def run_steam_gifts(self, config, notification):
|
||||||
|
cookie = config['DEFAULT'].get('cookie')
|
||||||
|
user_agent = config['DEFAULT'].get('user_agent')
|
||||||
|
main_page_enabled = config['DEFAULT'].getboolean('enabled')
|
||||||
|
minimum_points = config['DEFAULT'].getint('minimum_points')
|
||||||
|
max_entries = config['DEFAULT'].getint('max_entries')
|
||||||
|
max_time_left = config['DEFAULT'].getint('max_time_left')
|
||||||
|
minimum_game_points = config['DEFAULT'].getint('minimum_game_points')
|
||||||
|
blacklist = config['DEFAULT'].get('blacklist_keywords')
|
||||||
|
|
||||||
|
all_page = EnterGiveaways(cookie, user_agent, 'All', False, minimum_points, max_entries,
|
||||||
|
max_time_left, minimum_game_points, blacklist, notification)
|
||||||
|
|
||||||
|
wishlist_page_enabled = config['WISHLIST'].getboolean('wishlist.enabled')
|
||||||
|
wishlist_minimum_points = config['WISHLIST'].getint('wishlist.minimum_points')
|
||||||
|
wishlist_max_entries = config['WISHLIST'].getint('wishlist.max_entries')
|
||||||
|
wishlist_max_time_left = config['WISHLIST'].getint('wishlist.max_time_left')
|
||||||
|
|
||||||
|
wishlist_page = EnterGiveaways(cookie, user_agent, 'Wishlist', False, wishlist_minimum_points,
|
||||||
|
wishlist_max_entries, wishlist_max_time_left, 0, '', notification)
|
||||||
|
|
||||||
|
if not main_page_enabled and not wishlist_page_enabled:
|
||||||
|
logger.error("⁉️ Both 'Default' and 'Wishlist' configurations are disabled. Nothing will run. Exiting...")
|
||||||
|
sleep(10)
|
||||||
|
exit(-1)
|
||||||
|
|
||||||
|
while True:
|
||||||
|
logger.info("🟢 Evaluating giveaways.")
|
||||||
|
if wishlist_page_enabled:
|
||||||
|
wishlist_page.start()
|
||||||
|
if main_page_enabled:
|
||||||
|
all_page.start()
|
||||||
|
|
||||||
|
logger.info("🔴 All giveaways evaluated.")
|
||||||
|
random_seconds = randint(1740, 3540) # sometime between 29-59 minutes
|
||||||
|
logger.info(f"🛋 Going to sleep for {random_seconds / 60} minutes.")
|
||||||
|
sleep(random_seconds)
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
# Variable that stores the exception, if raised by someFunction
|
||||||
|
self.exc = None
|
||||||
|
try:
|
||||||
|
self.run_steam_gifts(self.config, self.notification)
|
||||||
|
except BaseException as e:
|
||||||
|
self.exc = e
|
||||||
|
|
||||||
|
def join(self):
|
||||||
|
threading.Thread.join(self)
|
||||||
|
# Since join() returns in caller thread
|
||||||
|
# we re-raise the caught exception
|
||||||
|
# if any was caught
|
||||||
|
if self.exc:
|
||||||
|
raise self.exc
|
154
src/run.py
154
src/run.py
|
@ -1,155 +1,15 @@
|
||||||
import threading
|
|
||||||
from random import randint
|
|
||||||
from time import sleep
|
from time import sleep
|
||||||
|
|
||||||
from flask_basicauth import BasicAuth
|
|
||||||
|
|
||||||
import log
|
import log
|
||||||
from ConfigReader import ConfigReader, ConfigException
|
from config_reader import ConfigReader, ConfigException
|
||||||
from SteamGifts import SteamGifts, SteamGiftsException
|
from enter_giveaways import SteamGiftsException
|
||||||
|
from giveaway_thread import GiveawayThread
|
||||||
from notification import Notification
|
from notification import Notification
|
||||||
from threading import Thread
|
from webserver_thread import WebServerThread
|
||||||
|
|
||||||
|
|
||||||
logger = log.get_logger(__name__)
|
logger = log.get_logger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class WebServerThread(threading.Thread):
|
|
||||||
|
|
||||||
def __init__(self, config):
|
|
||||||
Thread.__init__(self)
|
|
||||||
self.exc = None
|
|
||||||
self.config = config
|
|
||||||
self.port = config['WEB'].getint('web.port')
|
|
||||||
self.ssl = config['WEB'].getboolean('web.ssl')
|
|
||||||
self.enabled = config['WEB'].getboolean('web.enabled')
|
|
||||||
self.app_root = config['WEB'].get('web.app_root')
|
|
||||||
self.basic_auth = config['WEB'].getboolean('web.basic_auth')
|
|
||||||
self.basic_auth_username = config['WEB'].get('web.basic_auth.username')
|
|
||||||
self.basic_auth_password = config['WEB'].get('web.basic_auth.password')
|
|
||||||
|
|
||||||
def run_webserver(self):
|
|
||||||
from flask import Flask
|
|
||||||
from flask import render_template
|
|
||||||
|
|
||||||
app = Flask(__name__)
|
|
||||||
|
|
||||||
if self.basic_auth:
|
|
||||||
app.config['BASIC_AUTH_USERNAME'] = self.basic_auth_username
|
|
||||||
app.config['BASIC_AUTH_PASSWORD'] = self.basic_auth_password
|
|
||||||
|
|
||||||
app.config['BASIC_AUTH_FORCE'] = self.basic_auth
|
|
||||||
basic_auth = BasicAuth(app)
|
|
||||||
|
|
||||||
@app.route(f"{self.app_root}")
|
|
||||||
def config():
|
|
||||||
with open('../config/config.ini', 'r') as f:
|
|
||||||
content = f.read()
|
|
||||||
return render_template('configuration.html', config=content)
|
|
||||||
|
|
||||||
@app.route(f"{self.app_root}log")
|
|
||||||
def logs():
|
|
||||||
return render_template('log.html')
|
|
||||||
|
|
||||||
@app.route(f"{self.app_root}stream")
|
|
||||||
def stream():
|
|
||||||
def generate():
|
|
||||||
with open('../config/info.log') as f:
|
|
||||||
while True:
|
|
||||||
yield f.read()
|
|
||||||
sleep(10)
|
|
||||||
|
|
||||||
return app.response_class(generate(), mimetype='text/plain')
|
|
||||||
|
|
||||||
if self.enabled:
|
|
||||||
logger.info("Webserver Enabled. Running")
|
|
||||||
if self.ssl:
|
|
||||||
app.run(port=self.port, host="0.0.0.0", ssl_context='adhoc')
|
|
||||||
else:
|
|
||||||
app.run(port=self.port, host="0.0.0.0")
|
|
||||||
else:
|
|
||||||
logger.info("Webserver NOT Enabled.")
|
|
||||||
|
|
||||||
def run(self):
|
|
||||||
# Variable that stores the exception, if raised by someFunction
|
|
||||||
self.exc = None
|
|
||||||
try:
|
|
||||||
self.run_webserver()
|
|
||||||
except BaseException as e:
|
|
||||||
self.exc = e
|
|
||||||
|
|
||||||
def join(self):
|
|
||||||
threading.Thread.join(self)
|
|
||||||
# Since join() returns in caller thread
|
|
||||||
# we re-raise the caught exception
|
|
||||||
# if any was caught
|
|
||||||
if self.exc:
|
|
||||||
raise self.exc
|
|
||||||
|
|
||||||
|
|
||||||
class GiveawayEntererThread(threading.Thread):
|
|
||||||
|
|
||||||
def __init__(self, config, notification):
|
|
||||||
Thread.__init__(self)
|
|
||||||
self.exc = None
|
|
||||||
self.config = config
|
|
||||||
self.notification = notification
|
|
||||||
|
|
||||||
def run_steam_gifts(self, config, notification):
|
|
||||||
cookie = config['DEFAULT'].get('cookie')
|
|
||||||
user_agent = config['DEFAULT'].get('user_agent')
|
|
||||||
main_page_enabled = config['DEFAULT'].getboolean('enabled')
|
|
||||||
minimum_points = config['DEFAULT'].getint('minimum_points')
|
|
||||||
max_entries = config['DEFAULT'].getint('max_entries')
|
|
||||||
max_time_left = config['DEFAULT'].getint('max_time_left')
|
|
||||||
minimum_game_points = config['DEFAULT'].getint('minimum_game_points')
|
|
||||||
blacklist = config['DEFAULT'].get('blacklist_keywords')
|
|
||||||
|
|
||||||
all_page = SteamGifts(cookie, user_agent, 'All', False, minimum_points, max_entries,
|
|
||||||
max_time_left, minimum_game_points, blacklist, notification)
|
|
||||||
|
|
||||||
wishlist_page_enabled = config['WISHLIST'].getboolean('wishlist.enabled')
|
|
||||||
wishlist_minimum_points = config['WISHLIST'].getint('wishlist.minimum_points')
|
|
||||||
wishlist_max_entries = config['WISHLIST'].getint('wishlist.max_entries')
|
|
||||||
wishlist_max_time_left = config['WISHLIST'].getint('wishlist.max_time_left')
|
|
||||||
|
|
||||||
wishlist_page = SteamGifts(cookie, user_agent, 'Wishlist', False, wishlist_minimum_points,
|
|
||||||
wishlist_max_entries, wishlist_max_time_left, 0, '', notification)
|
|
||||||
|
|
||||||
if not main_page_enabled and not wishlist_page_enabled:
|
|
||||||
logger.error("⁉️ Both 'Default' and 'Wishlist' configurations are disabled. Nothing will run. Exiting...")
|
|
||||||
sleep(10)
|
|
||||||
exit(-1)
|
|
||||||
|
|
||||||
while True:
|
|
||||||
logger.info("🟢 Evaluating giveaways.")
|
|
||||||
if wishlist_page_enabled:
|
|
||||||
wishlist_page.start()
|
|
||||||
if main_page_enabled:
|
|
||||||
all_page.start()
|
|
||||||
|
|
||||||
logger.info("🔴 All giveaways evaluated.")
|
|
||||||
random_seconds = randint(1740, 3540) # sometime between 29-59 minutes
|
|
||||||
logger.info(f"🛋 Going to sleep for {random_seconds / 60} minutes.")
|
|
||||||
sleep(random_seconds)
|
|
||||||
|
|
||||||
def run(self):
|
|
||||||
# Variable that stores the exception, if raised by someFunction
|
|
||||||
self.exc = None
|
|
||||||
try:
|
|
||||||
self.run_steam_gifts(self.config, self.notification)
|
|
||||||
except BaseException as e:
|
|
||||||
self.exc = e
|
|
||||||
|
|
||||||
def join(self):
|
|
||||||
threading.Thread.join(self)
|
|
||||||
# Since join() returns in caller thread
|
|
||||||
# we re-raise the caught exception
|
|
||||||
# if any was caught
|
|
||||||
if self.exc:
|
|
||||||
raise self.exc
|
|
||||||
|
|
||||||
|
|
||||||
def run():
|
def run():
|
||||||
logger.info("Starting Steamgifts bot.")
|
logger.info("Starting Steamgifts bot.")
|
||||||
file_name = '../config/config.ini'
|
file_name = '../config/config.ini'
|
||||||
|
@ -173,13 +33,13 @@ def run():
|
||||||
if pushover_enabled:
|
if pushover_enabled:
|
||||||
notification.enable_pushover(pushover_token, pushover_user_key)
|
notification.enable_pushover(pushover_token, pushover_user_key)
|
||||||
try:
|
try:
|
||||||
g = GiveawayEntererThread(config, notification)
|
g = GiveawayThread(config, notification)
|
||||||
g.setName("Giveaway Enterer")
|
g.setName("Giveaway Enterer")
|
||||||
g.start()
|
g.start()
|
||||||
|
|
||||||
w = WebServerThread(config)
|
w = WebServerThread(config)
|
||||||
w.setName("WebServer")
|
w.setName("WebServer")
|
||||||
# if the giveaway thread dies then this daemon thread will die by definition
|
# if the giveaway thread dies then this daemon thread will die by design
|
||||||
w.setDaemon(True)
|
w.setDaemon(True)
|
||||||
w.start()
|
w.start()
|
||||||
|
|
||||||
|
@ -191,7 +51,7 @@ def run():
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(e)
|
logger.error(e)
|
||||||
notification.send_error("Something happened and the bot had to quit!")
|
notification.send_error("Something happened and the bot had to quit!")
|
||||||
sleep(5)
|
sleep(10)
|
||||||
exit(-1)
|
exit(-1)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>Flask app</title>
|
<title>Steamgifts Bot Configuration</title>
|
||||||
<link rel="stylesheet" href="{{ url_for('static', filename='css/main.css') }}">
|
<link rel="stylesheet" href="{{ url_for('static', filename='css/main.css') }}">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>Flask app</title>
|
<title>Steamgifts Bot Logs</title>
|
||||||
<link rel="stylesheet" href="{{ url_for('static', filename='css/main.css') }}">
|
<link rel="stylesheet" href="{{ url_for('static', filename='css/main.css') }}">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
86
src/webserver_thread.py
Normal file
86
src/webserver_thread.py
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
import threading
|
||||||
|
from threading import Thread
|
||||||
|
from time import sleep
|
||||||
|
|
||||||
|
from flask_basicauth import BasicAuth
|
||||||
|
|
||||||
|
import log
|
||||||
|
|
||||||
|
logger = log.get_logger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class WebServerThread(threading.Thread):
|
||||||
|
|
||||||
|
def __init__(self, config):
|
||||||
|
Thread.__init__(self)
|
||||||
|
self.exc = None
|
||||||
|
self.config = config
|
||||||
|
self.port = config['WEB'].getint('web.port')
|
||||||
|
self.ssl = config['WEB'].getboolean('web.ssl')
|
||||||
|
self.enabled = config['WEB'].getboolean('web.enabled')
|
||||||
|
self.app_root = config['WEB'].get('web.app_root')
|
||||||
|
self.basic_auth = config['WEB'].getboolean('web.basic_auth')
|
||||||
|
self.basic_auth_username = config['WEB'].get('web.basic_auth.username')
|
||||||
|
self.basic_auth_password = config['WEB'].get('web.basic_auth.password')
|
||||||
|
|
||||||
|
def run_webserver(self):
|
||||||
|
from flask import Flask
|
||||||
|
from flask import render_template
|
||||||
|
|
||||||
|
app = Flask(__name__)
|
||||||
|
|
||||||
|
if self.basic_auth:
|
||||||
|
app.config['BASIC_AUTH_USERNAME'] = self.basic_auth_username
|
||||||
|
app.config['BASIC_AUTH_PASSWORD'] = self.basic_auth_password
|
||||||
|
|
||||||
|
app.config['BASIC_AUTH_FORCE'] = self.basic_auth
|
||||||
|
basic_auth = BasicAuth(app)
|
||||||
|
|
||||||
|
@app.route(f"{self.app_root}")
|
||||||
|
def config():
|
||||||
|
with open('../config/config.ini', 'r') as f:
|
||||||
|
content = f.read()
|
||||||
|
return render_template('configuration.html', config=content)
|
||||||
|
|
||||||
|
@app.route(f"{self.app_root}log")
|
||||||
|
def logs():
|
||||||
|
return render_template('log.html')
|
||||||
|
|
||||||
|
@app.route(f"{self.app_root}stream")
|
||||||
|
def stream():
|
||||||
|
def generate():
|
||||||
|
with open('../config/info.log') as f:
|
||||||
|
while True:
|
||||||
|
yield f.read()
|
||||||
|
sleep(10)
|
||||||
|
|
||||||
|
return app.response_class(generate(), mimetype='text/plain')
|
||||||
|
|
||||||
|
@app.route(f"{self.app_root}alive")
|
||||||
|
def alive():
|
||||||
|
return 'OK'
|
||||||
|
|
||||||
|
if self.enabled:
|
||||||
|
logger.info("Webserver Enabled. Running")
|
||||||
|
if self.ssl:
|
||||||
|
app.run(port=self.port, host="0.0.0.0", ssl_context='adhoc')
|
||||||
|
else:
|
||||||
|
app.run(port=self.port, host="0.0.0.0")
|
||||||
|
else:
|
||||||
|
logger.info("Webserver NOT Enabled.")
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
# Variable that stores the exception, if raised by someFunction
|
||||||
|
self.exc = None
|
||||||
|
try:
|
||||||
|
self.run_webserver()
|
||||||
|
except BaseException as e:
|
||||||
|
self.exc = e
|
||||||
|
|
||||||
|
def join(self):
|
||||||
|
threading.Thread.join(self)
|
||||||
|
# Since join() returns in caller thread
|
||||||
|
# we re-raise the caught exception
|
||||||
|
# if any was caught
|
||||||
|
if self.exc:
|
||||||
|
raise self.exc
|
Loading…
Reference in a new issue