from os import sep, remove, getpid from shutil import move from sys import exit from argparse import ArgumentParser from modules.logger import logWrite from modules.scheduler import scheduler from modules.utils import configGet, jsonLoad, jsonSave, killProc, locale # Args ===================================================================================================================================== parser = ArgumentParser( prog = "Telegram Poster", description = "Bot for posting some of your stuff and also receiving submissions." ) parser.add_argument("-m", "--move-sent", action="store_true") parser.add_argument("-c", "--cleanup", action="store_true") parser.add_argument("--confirm", action="store_true") parser.add_argument("-i", "--cleanup-index", action="store_true") parser.add_argument("-n", "--norun", action="store_true") args = parser.parse_args() if args.move_sent: for entry in jsonLoad(configGet("index", "locations"))["sent"]: try: move(configGet("queue", "locations")+sep+entry, configGet("sent", "locations")+sep+entry) except FileNotFoundError: logWrite(locale("move_sent_doesnt_exist", "console", locale=configGet("locale")).format(entry)) except Exception as exp: logWrite(locale("move_sent_doesnt_exception", "console", locale=configGet("locale")).format(entry, exp)) logWrite(locale("move_sent_completed", "console", locale=configGet("locale"))) if args.cleanup: if args.confirm: index = jsonLoad(configGet("index", "locations")) for entry in index["sent"]: try: try: remove(configGet("queue", "locations")+sep+entry) except FileNotFoundError: pass try: remove(configGet("sent", "locations")+sep+entry) except FileNotFoundError: pass except Exception as exp: logWrite(locale("cleanup_exception", "console", locale=configGet("locale")).format(entry, exp)) jsonSave(index, jsonLoad(configGet("index", "locations"))) logWrite(locale("cleanup_completed", "console", locale=configGet("locale"))) else: logWrite(locale("cleanup_unathorized", "console", locale=configGet("locale"))) if args.cleanup_index: if args.confirm: index = jsonLoad(configGet("index", "locations")) index["sent"] = [] jsonSave(index, jsonLoad(configGet("index", "locations"))) logWrite(locale("cleanup_index_completed", "console", locale=configGet("locale"))) else: logWrite(locale("cleanup_index_unathorized", "console", locale=configGet("locale"))) if args.norun: logWrite(locale("passed_norun", "console", locale=configGet("locale_log"))) exit() #=========================================================================================================================================== # Import =================================================================================================================================== try: from modules.app import app from pyrogram.sync import idle from requests import get, post except ModuleNotFoundError: print(locale("deps_missing", "console", locale=configGet("locale")), flush=True) exit() #=========================================================================================================================================== pid = getpid() # Work in progress # def check_forwards(app): # try: # index = jsonLoad(configGet("index", "locations")) # channel = app.get_chat(configGet("channel", "posting")) # peer = app.resolve_peer(configGet("channel", "posting")) # print(peer, flush=True) # posts_list = [i for i in range(index["last_id"]-100,index["last_id"])] # last_posts = app.get_messages(configGet("channel", "posting"), message_ids=posts_list) # for post in last_posts: # post_forwards = GetMessagePublicForwards(channel=peer, msg_id=post.id, offset_peer=peer, offset_rate=0, offset_id=0, limit=100) # print(post_forwards, flush=True) # for forward in post_forwards: # print(forward, flush=True) # except Exception as exp: # logWrite("Could not get last posts forwards due to {0} with traceback {1}".format(str(exp), traceback.format_exc()), debug=True) # if configGet("error", "reports"): # app.send_message(configGet("admin"), traceback.format_exc()) # pass # Work in progress # @app.on_message(~ filters.scheduled & filters.command(["forwards"], prefixes="/")) # def cmd_forwards(app, msg): # check_forwards(app) # Imports ================================================================================================================================== from plugins.commands.general import * if configGet("submit", "mode"): from plugins.callbacks.nothing import * from plugins.callbacks.submission import * from plugins.commands.mode_submit import * from plugins.handlers.submission import * if configGet("api_based", "mode"): from modules.api_client import authorize #=========================================================================================================================================== # Work in progress # Handle new forwards # @app.on_raw_update() # def fwd_got(app, update, users, chats): # if isinstance(update, UpdateChannelMessageForwards): # logWrite(f'Forward count increased to {update["forwards"]} on post {update["id"]} in channel {update["channel_id"]}') # logWrite(str(users), debug=True) # logWrite(str(chats), debug=True) # # else: # # logWrite(f"Got raw update of type {type(update)} with contents {update}", debug=True) # async def main(): # await app.start() # logWrite(locale("startup", "console", locale=configGet("locale")).format(str(pid))) # if configGet("startup", "reports"): # await app.send_message(configGet("admin"), locale("startup", "message", locale=configGet("locale")).format(str(pid))) # if configGet("post", "mode"): # scheduler.start() # if configGet("api_based", "mode"): # token = authorize() # if len(get(f'{configGet("address", "posting", "api")}/albums?q={configGet("queue", "posting", "api", "albums")}', headers={"Authorization": f"Bearer {token}"}).json()["results"]) == 0: # post(f'{configGet("address", "posting", "api")}/albums?name={configGet("queue", "posting", "api", "albums")}&title={configGet("queue", "posting", "api", "albums")}', headers={"Authorization": f"Bearer {token}"}) # await idle() # await app.send_message(configGet("admin"), locale("shutdown", "message", locale=configGet("locale")).format(str(pid))) # logWrite(locale("shutdown", "console", locale=configGet("locale")).format(str(pid))) # killProc(pid) # if __name__ == "__main__": # if find_spec("uvloop") is not None: # uvloop.install() # asyncio.run(main()) if __name__ == "__main__": logWrite(locale("startup", "console", locale=configGet("locale")).format(str(pid))) app.start() if configGet("startup", "reports"): app.send_message(app.owner, locale("startup", "message", locale=configGet("locale")).format(str(pid))) if configGet("post", "mode"): scheduler.start() if configGet("api_based", "mode"): token = authorize() if len(get(f'{configGet("address", "posting", "api")}/albums?q={configGet("queue", "posting", "api", "albums")}', headers={"Authorization": f"Bearer {token}"}).json()["results"]) == 0: post(f'{configGet("address", "posting", "api")}/albums?name={configGet("queue", "posting", "api", "albums")}&title={configGet("queue", "posting", "api", "albums")}', headers={"Authorization": f"Bearer {token}"}) idle() app.send_message(app.owner, locale("shutdown", "message", locale=configGet("locale")).format(str(pid))) logWrite(locale("shutdown", "console", locale=configGet("locale")).format(str(pid))) killProc(pid)