From c3dd6f61d6cb38a37c5a13e8063750db5f8583f7 Mon Sep 17 00:00:00 2001 From: profitroll Date: Sat, 18 Mar 2023 00:52:15 +0100 Subject: [PATCH] Formatted everything with black --- bwtbot.py | 196 +++++++++++++++++++++++++++++++--------------- functions.py | 55 +++++++------ modules/bwt.py | 73 +++++++++++------ modules/colors.py | 38 ++++----- 4 files changed, 231 insertions(+), 131 deletions(-) diff --git a/bwtbot.py b/bwtbot.py index 101ed77..70ec35a 100644 --- a/bwtbot.py +++ b/bwtbot.py @@ -1,4 +1,4 @@ -#-*- coding: utf-8 -*- +# -*- coding: utf-8 -*- from os import getpid, system from subprocess import call @@ -15,19 +15,32 @@ config = jsonLoad("config.json") owner_id = config["owner_id"] -app = Client(config["bot_name"], api_id=config["api_id"], api_hash=config["api_hash"], bot_token=config["bot_token"]) +app = Client( + config["bot_name"], + api_id=config["api_id"], + api_hash=config["api_hash"], + bot_token=config["bot_token"], +) -@app.on_message(~ filters.scheduled & filters.command(["setcard", "задать карту"], prefixes=["/", ""])) +@app.on_message( + ~filters.scheduled + & filters.command(["setcard", "задать карту"], prefixes=["/", ""]) +) async def setcard(_: Client, msg: Message): if userGet(msg.from_user.id, "context") is None: userSet(msg.from_user.id, "context", "set") - await msg.reply_text(string("send_number"), reply_markup=ForceReply(placeholder=string("enter_number"))) + await msg.reply_text( + string("send_number"), + reply_markup=ForceReply(placeholder=string("enter_number")), + ) else: await msg.reply_text(string("cancel_first")) -@app.on_message(~ filters.scheduled & filters.command(["cancel", "відміна"], prefixes=["/", ""])) +@app.on_message( + ~filters.scheduled & filters.command(["cancel", "відміна"], prefixes=["/", ""]) +) async def cancel(_: Client, msg: Message): if userGet(msg.from_user.id, "context") is not None: userReset(msg.from_user.id, "context") @@ -36,7 +49,10 @@ async def cancel(_: Client, msg: Message): await msg.reply_text(string("cancel_none")) -@app.on_message(~ filters.scheduled & filters.command(["resetcard", "забути картку"], prefixes=["/", ""])) +@app.on_message( + ~filters.scheduled + & filters.command(["resetcard", "забути картку"], prefixes=["/", ""]) +) async def resetcard(_: Client, msg: Message): if userGet(msg.from_user.id, "context") is None: if "card" in jsonLoad("data/database.json")[str(msg.from_user.id)]: @@ -50,52 +66,91 @@ async def resetcard(_: Client, msg: Message): await msg.reply_text(string("cancel_first")) -@app.on_message(~ filters.scheduled & filters.command(["balance", "баланс"], prefixes=["/", ""])) +@app.on_message( + ~filters.scheduled & filters.command(["balance", "баланс"], prefixes=["/", ""]) +) async def balance(_: Client, msg: Message): if userGet(msg.from_user.id, "context") is None: try: if "card" in jsonLoad("data/database.json")[str(msg.from_user.id)]: - await app.send_chat_action(chat_id=msg.chat.id, action=ChatAction.TYPING) - water_left = await getWaterLeft(userGet(msg.from_user.id, "card"), msg.from_user.id, app) + await app.send_chat_action( + chat_id=msg.chat.id, action=ChatAction.TYPING + ) + water_left = await getWaterLeft( + userGet(msg.from_user.id, "card"), msg.from_user.id, app + ) if water_left == "": - await msg.reply_text(string("error_new").format(f'https://bwtaqua.com.ua/card-topup/?id={userGet(msg.from_user.id, "card")}')) + await msg.reply_text( + string("error_new").format( + f'https://bwtaqua.com.ua/card-topup/?id={userGet(msg.from_user.id, "card")}' + ) + ) # raise EmptyCardException("Card information is empty") elif water_left == "Failure": - await msg.reply_text(string("error_occured").format(string("get_number"))) - appendLog(f"User {str(msg.from_user.id)} could not get left water amount") + await msg.reply_text( + string("error_occured").format(string("get_number")) + ) + appendLog( + f"User {str(msg.from_user.id)} could not get left water amount" + ) else: await msg.reply_text(string("card_balance").format(water_left)) - appendLog(f"User {str(msg.from_user.id)} has {water_left} liters remaining") + appendLog( + f"User {str(msg.from_user.id)} has {water_left} liters remaining" + ) else: - await msg.reply_text(string("card_not_linked").format(string("get_number"))) - appendLog(f"User {str(msg.from_user.id)} tried to get balance without card set") + await msg.reply_text( + string("card_not_linked").format(string("get_number")) + ) + appendLog( + f"User {str(msg.from_user.id)} tried to get balance without card set" + ) except Exception as exp: if msg.from_user.id != config["owner_id"]: - await msg.reply_text(string("error_occured").format(string("get_number"))) - await app.send_message(owner_id, f"Error occured by {str(msg.from_user.id)}:\nException: `{exp}`\nTraceback: `{format_exc()}`") + await msg.reply_text( + string("error_occured").format(string("get_number")) + ) + await app.send_message( + owner_id, + f"Error occured by {str(msg.from_user.id)}:\nException: `{exp}`\nTraceback: `{format_exc()}`", + ) appendLog(f"User {str(msg.from_user.id)} could not get left water amount") else: await msg.reply_text(string("cancel_first")) -@app.on_message(~ filters.scheduled & filters.command(["topup", "refill", "поповнити"], prefixes=["/", ""])) +@app.on_message( + ~filters.scheduled + & filters.command(["topup", "refill", "поповнити"], prefixes=["/", ""]) +) async def topup_cmd(_: Client, msg: Message): if userGet(msg.from_user.id, "context") is None: try: if "card" in jsonLoad("data/database.json")[str(msg.from_user.id)]: - await app.send_chat_action(chat_id=msg.chat.id, action=ChatAction.TYPING) - await msg.reply_text(string("top_up").format(str(userGet(msg.from_user.id, "card")))) + await app.send_chat_action( + chat_id=msg.chat.id, action=ChatAction.TYPING + ) + await msg.reply_text( + string("top_up").format(str(userGet(msg.from_user.id, "card"))) + ) appendLog(f"User {str(msg.from_user.id)} requested top up") else: - await msg.reply_text(string("card_not_linked").format(string("get_number"))) - appendLog(f"User {str(msg.from_user.id)} tried to request top up without card set") + await msg.reply_text( + string("card_not_linked").format(string("get_number")) + ) + appendLog( + f"User {str(msg.from_user.id)} tried to request top up without card set" + ) except Exception as exp: await msg.reply_text(str(exp)) else: await msg.reply_text(string("cancel_first")) -@app.on_message(~ filters.scheduled & filters.command(["start", "help", "допомога"], prefixes=["/", ""])) +@app.on_message( + ~filters.scheduled + & filters.command(["start", "help", "допомога"], prefixes=["/", ""]) +) async def help(_: Client, msg: Message): if userGet(msg.from_user.id, "context") is None: await msg.reply_text(string("welcome").format(string("get_number"))) @@ -106,16 +161,20 @@ async def help(_: Client, msg: Message): else: await msg.reply_text(string("cancel_first")) + pid = getpid() -@app.on_message(~ filters.scheduled & filters.command(["kill", "die", "shutdown"], prefixes="/")) + +@app.on_message( + ~filters.scheduled & filters.command(["kill", "die", "shutdown"], prefixes="/") +) async def kill(_: Client, msg: Message): if msg.from_user.id == owner_id: await msg.reply_text(f"Shutting down bot with pid **{pid}**") system(f"kill -9 {pid}") -@app.on_message(~ filters.scheduled) +@app.on_message(~filters.scheduled) async def any_message_handler(app, msg): if userGet(msg.from_user.id, "context") == "set": userSet(msg.from_user.id, "card", msg.text) @@ -123,54 +182,63 @@ async def any_message_handler(app, msg): appendLog(f"User {str(msg.from_user.id)} set card id to {msg.text}") await msg.reply_text(string("card_linked").format(msg.text)) -print(f'{nowtime()} {WHITE}Starting with PID {YELLOW}{pid}{RESET}') -app.start() # type: ignore -app.send_message(owner_id, f"Starting bot with pid **{pid}**") # type: ignore +print(f"{nowtime()} {WHITE}Starting with PID {YELLOW}{pid}{RESET}") -app.set_bot_commands([ - BotCommand("help", "Меню допомоги"), - BotCommand("balance", "Баланс картки"), - BotCommand("topup", "Поповнити картку"), - BotCommand("setcard", "Прив'язати картку"), - BotCommand("resetcard", "Відв'язати картку"), - BotCommand("cancel", "Відмінити операцію"), +app.start() # type: ignore +app.send_message(owner_id, f"Starting bot with pid **{pid}**") # type: ignore + +app.set_bot_commands( + [ + BotCommand("help", "Меню допомоги"), + BotCommand("balance", "Баланс картки"), + BotCommand("topup", "Поповнити картку"), + BotCommand("setcard", "Прив'язати картку"), + BotCommand("resetcard", "Відв'язати картку"), + BotCommand("cancel", "Відмінити операцію"), ], - language_code="uk") # type: ignore + language_code="uk", +) # type: ignore -app.set_bot_commands([ - BotCommand("help", "Меню допомоги"), - BotCommand("balance", "Баланс картки"), - BotCommand("topup", "Поповнити картку"), - BotCommand("setcard", "Прив'язати картку"), - BotCommand("resetcard", "Відв'язати картку"), - BotCommand("cancel", "Відмінити операцію"), +app.set_bot_commands( + [ + BotCommand("help", "Меню допомоги"), + BotCommand("balance", "Баланс картки"), + BotCommand("topup", "Поповнити картку"), + BotCommand("setcard", "Прив'язати картку"), + BotCommand("resetcard", "Відв'язати картку"), + BotCommand("cancel", "Відмінити операцію"), ], - language_code="ru") # type: ignore + language_code="ru", +) # type: ignore -app.set_bot_commands([ - BotCommand("help", "Help menu"), - BotCommand("balance", "Card's balance"), - BotCommand("topup", "Refill card"), - BotCommand("setcard", "Link card"), - BotCommand("resetcard", "Unlink card"), - BotCommand("cancel", "Cancel operation"), - ]) # type: ignore +app.set_bot_commands( + [ + BotCommand("help", "Help menu"), + BotCommand("balance", "Card's balance"), + BotCommand("topup", "Refill card"), + BotCommand("setcard", "Link card"), + BotCommand("resetcard", "Unlink card"), + BotCommand("cancel", "Cancel operation"), + ] +) # type: ignore -app.set_bot_commands([ - BotCommand("help", "Help menu"), - BotCommand("balance", "Card's balance"), - BotCommand("topup", "Refill card"), - BotCommand("setcard", "Link card"), - BotCommand("resetcard", "Unlink card"), - BotCommand("shutdown", "Turn off the bot"), - BotCommand("cancel", "Cancel operation"), +app.set_bot_commands( + [ + BotCommand("help", "Help menu"), + BotCommand("balance", "Card's balance"), + BotCommand("topup", "Refill card"), + BotCommand("setcard", "Link card"), + BotCommand("resetcard", "Unlink card"), + BotCommand("shutdown", "Turn off the bot"), + BotCommand("cancel", "Cancel operation"), ], - scope=BotCommandScopeChat(chat_id=owner_id)) # type: ignore + scope=BotCommandScopeChat(chat_id=owner_id), +) # type: ignore idle() -app.send_message(owner_id, f"Shutting down bot with pid **{pid}**") # type: ignore -print(f'\n{nowtime()} {WHITE}Shutting down with PID {YELLOW}{pid}{RESET}') +app.send_message(owner_id, f"Shutting down bot with pid **{pid}**") # type: ignore +print(f"\n{nowtime()} {WHITE}Shutting down with PID {YELLOW}{pid}{RESET}") -call(f'kill -9 {pid}', shell=True) +call(f"kill -9 {pid}", shell=True) diff --git a/functions.py b/functions.py index b1a824b..91c2de5 100644 --- a/functions.py +++ b/functions.py @@ -1,4 +1,4 @@ -#-*- coding: utf-8 -*- +# -*- coding: utf-8 -*- from os import makedirs, stat from gzip import open as gzipopen @@ -13,11 +13,12 @@ logs_folder = "logs/" def jsonSave(filename, value): - with open(filename, 'w', encoding="utf-8") as f: + with open(filename, "w", encoding="utf-8") as f: f.write(dumps(value, indent=4, ensure_ascii=False)) + def jsonLoad(filename): - with open(filename, 'r', encoding="utf-8") as f: + with open(filename, "r", encoding="utf-8") as f: value = loads(f.read()) return value @@ -31,60 +32,64 @@ owner_id = config["owner_id"] def nowtime(): return f'{BBLACK}[{CYAN}{datetime.now().strftime("%H:%M:%S")}{BBLACK}]{RESET}' + def checkSize(): global logs_folder, log_size - + i = 0 while i < 2: try: - log = stat(logs_folder + 'latest.log') + log = stat(logs_folder + "latest.log") if (log.st_size / 1024) > log_size: - with open(logs_folder + 'latest.log', 'rb') as f_in: - with gzipopen(f'{logs_folder}{datetime.now().strftime("%d.%m.%Y_%H:%M:%S")}.zip', 'wb') as f_out: + with open(logs_folder + "latest.log", "rb") as f_in: + with gzipopen( + f'{logs_folder}{datetime.now().strftime("%d.%m.%Y_%H:%M:%S")}.zip', + "wb", + ) as f_out: copyfileobj(f_in, f_out) - - open(logs_folder + 'latest.log', 'w').close() - + + open(logs_folder + "latest.log", "w").close() + i = 2 except FileNotFoundError: - try: - log = open(logs_folder + 'latest.log', 'a') - open(logs_folder + 'latest.log', 'a').close() + log = open(logs_folder + "latest.log", "a") + open(logs_folder + "latest.log", "a").close() except: try: makedirs(logs_folder, exist_ok=True) - log = open(logs_folder + 'latest.log', 'a') - open(logs_folder + 'latest.log', 'a').close() + log = open(logs_folder + "latest.log", "a") + open(logs_folder + "latest.log", "a").close() except: pass - + i += 1 + def appendLog(message): global logs_folder checkSize() try: - log = open(logs_folder + 'latest.log', 'a') - open(logs_folder + 'latest.log', 'a').close() + log = open(logs_folder + "latest.log", "a") + open(logs_folder + "latest.log", "a").close() except: try: makedirs(logs_folder, exist_ok=True) - log = open(logs_folder + 'latest.log', 'a') - open(logs_folder + 'latest.log', 'a').close() + log = open(logs_folder + "latest.log", "a") + open(logs_folder + "latest.log", "a").close() except: sleep(2) - print('Log file could not be created') + print("Log file could not be created") return - + print(message, flush=True) log.write(f'[{datetime.now().strftime("%H:%M:%S | %d.%m.%Y")}] {message}\n') - + log.close() @@ -104,15 +109,17 @@ def userSet(userid, key: str, value): database[str(userid)][key] = value jsonSave("data/database.json", database) + def userReset(userid, key: str): database = jsonLoad("data/database.json") del database[str(userid)][key] jsonSave("data/database.json", database) + def userGet(userid, key: str): try: return jsonLoad("data/database.json")[str(userid)][key] except KeyError: return None except FileNotFoundError: - return None \ No newline at end of file + return None diff --git a/modules/bwt.py b/modules/bwt.py index 1f35519..96c8fee 100644 --- a/modules/bwt.py +++ b/modules/bwt.py @@ -1,4 +1,4 @@ -#-*- coding: utf-8 -*- +# -*- coding: utf-8 -*- from os import makedirs, path from subprocess import check_output @@ -9,39 +9,60 @@ from bs4 import BeautifulSoup config = jsonLoad("config.json") + class EmptyCardException(Exception): pass -async def getWaterLeft(cardid, filename, app=None): - - url = f"https://bwtaqua.com.ua/card-topup/?id={cardid}" - - try: +async def getWaterLeft(cardid, filename, app=None): + url = f"https://bwtaqua.com.ua/card-topup/?id={cardid}" + + try: # if path.exists(f"data/pages/{str(filename)}.html") is False: # run(["touch", f"data/pages/{str(filename)}.html"]) appendLog(f"Trying to get liters for url '{url}'") - + if config["use_compiled_page_saver"] is True: - proc = check_output(["PageSaver/pageSaver", f"https://bwtaqua.com.ua/card-topup/?id={cardid}"]) #, ">", f"data/pages/{str(filename)}.html"]) + proc = check_output( + [ + "PageSaver/pageSaver", + f"https://bwtaqua.com.ua/card-topup/?id={cardid}", + ] + ) # , ">", f"data/pages/{str(filename)}.html"]) html_file = proc.decode("utf-8") else: - proc = check_output(["node", "./PageSaver/pageSaver.js", f"https://bwtaqua.com.ua/card-topup/?id={cardid}"]) #, ">", f"data/pages/{str(filename)}.html"]) + proc = check_output( + [ + "node", + "./PageSaver/pageSaver.js", + f"https://bwtaqua.com.ua/card-topup/?id={cardid}", + ] + ) # , ">", f"data/pages/{str(filename)}.html"]) html_file = proc.decode("utf-8") # with open(f'data/pages/{str(filename)}.html') as f: # html_file = f.read() # f.close() - - soup = BeautifulSoup(html_file, 'html.parser') - output = (soup.find_all("h3", class_="headline headline_center headline_pink js-payment-balance")[0].getText()).replace("Твій баланс ", "").replace(" л", "") - - appendLog(f"Parsed {output} liters of water remaining (user: {str(filename)}, cardid: {cardid})") - + soup = BeautifulSoup(html_file, "html.parser") + + output = ( + ( + soup.find_all( + "h3", + class_="headline headline_center headline_pink js-payment-balance", + )[0].getText() + ) + .replace("Твій баланс ", "") + .replace(" л", "") + ) + + appendLog( + f"Parsed {output} liters of water remaining (user: {str(filename)}, cardid: {cardid})" + ) + except Exception as exp: - appendLog(f"Exception occured: {exp} (user: {str(filename)}, cardid: {cardid})") try: @@ -52,19 +73,23 @@ async def getWaterLeft(cardid, filename, app=None): except NameError: tmp_name = "N/A" appendLog(f"'html_file' is not defined so I won't gather any tmp data") - + if app != None: - await app.send_message(config["owner_id"], f"**Exception occured:**\n • User: `{str(filename)}`\n • Card: [{cardid}]({url})\n • Exception: `{exp}`\n • TMP UUID: `{tmp_name}`\n • Traceback: `{format_exc()}`", disable_web_page_preview=True) + await app.send_message( + config["owner_id"], + f"**Exception occured:**\n • User: `{str(filename)}`\n • Card: [{cardid}]({url})\n • Exception: `{exp}`\n • TMP UUID: `{tmp_name}`\n • Traceback: `{format_exc()}`", + disable_web_page_preview=True, + ) else: - appendLog(f'Exception occured and could not send to user: {exp}') - + appendLog(f"Exception occured and could not send to user: {exp}") + output = "Failure" - + return output - + + if __name__ == "__main__": - cardid = input("Enter card number: ") userid = input("Enter Telegram ID (optional): ") - + print(f"Card has {str(getWaterLeft(cardid, userid, app=None))} l. left") diff --git a/modules/colors.py b/modules/colors.py index 3a623b1..04642d9 100644 --- a/modules/colors.py +++ b/modules/colors.py @@ -1,22 +1,22 @@ -RESET = '\u001b[0m' +RESET = "\u001b[0m" -BLACK = '\u001b[30m' -RED = '\u001b[31m' -GREEN = '\u001b[32m' -YELLOW = '\u001b[33m' -BLUE = '\u001b[34m' -MAGENTA = '\u001b[35m' -CYAN = '\u001b[36m' -WHITE = '\u001b[37m' +BLACK = "\u001b[30m" +RED = "\u001b[31m" +GREEN = "\u001b[32m" +YELLOW = "\u001b[33m" +BLUE = "\u001b[34m" +MAGENTA = "\u001b[35m" +CYAN = "\u001b[36m" +WHITE = "\u001b[37m" -BBLACK = '\u001b[30;1m' -BRED = '\u001b[31;1m' -BGREEN = '\u001b[32;1m' -BYELLOW = '\u001b[33;1m' -BBLUE = '\u001b[34;1m' -BMAGENTA = '\u001b[35;1m' -BCYAN = '\u001b[36;1m' -BWHITE = '\u001b[37;1m' +BBLACK = "\u001b[30;1m" +BRED = "\u001b[31;1m" +BGREEN = "\u001b[32;1m" +BYELLOW = "\u001b[33;1m" +BBLUE = "\u001b[34;1m" +BMAGENTA = "\u001b[35;1m" +BCYAN = "\u001b[36;1m" +BWHITE = "\u001b[37;1m" -ULINE = '\u001b[4m' -REVERSE = '\u001b[7m' \ No newline at end of file +ULINE = "\u001b[4m" +REVERSE = "\u001b[7m"