Spaces:
Running
Running
| import sys | |
| import asyncio | |
| import logging | |
| import traceback | |
| from aiohttp import web | |
| from pyrogram import idle | |
| import logging.handlers as handlers | |
| # ------------------Local Imports----------------------# | |
| from FileStream.bot import FileStream | |
| from FileStream.Tools import Time_ISTKolNow | |
| from FileStream.config import Telegram, Server | |
| from FileStream.bot.clients import initialize_clients | |
| from FileStream.server import web_server, clear_inactive_clients | |
| # Configure logging | |
| logging.basicConfig( | |
| level=logging.INFO, | |
| datefmt="%d/%m/%Y %H:%M:%S", | |
| format='[%(asctime)s] {%(pathname)s:%(lineno)d} %(levelname)s - %(message)s', | |
| handlers=[ | |
| logging.StreamHandler(stream=sys.stdout), | |
| handlers.RotatingFileHandler("streambot.log", mode="a", maxBytes=104857600, backupCount=2, encoding="utf-8") | |
| ], | |
| ) | |
| logging.getLogger("aiohttp").setLevel(logging.ERROR) | |
| logging.getLogger("pyrogram").setLevel(logging.ERROR) | |
| logging.getLogger("aiohttp.web").setLevel(logging.ERROR) | |
| server = web.AppRunner(web_server()) # Initialize the app runner | |
| loop = asyncio.get_event_loop() # Ensure the event loop is retrieved correctly | |
| async def start_services(): | |
| print( | |
| "****\n" | |
| + ( | |
| "------------------ Starting as Secondary Server ------------------" | |
| if Telegram.SECONDARY | |
| else "------------------- Starting as Primary Server -------------------" | |
| ) | |
| + "\n****\n-------------------- Initializing Telegram Bot --------------------" | |
| ) | |
| await FileStream.start() | |
| bot_info = await FileStream.get_me() | |
| FileStream.id = bot_info.id | |
| FileStream.username = bot_info.username | |
| FileStream.fname = bot_info.first_name | |
| #[ await FileStream.get_chat(int(chat_id)) for chat_id in Telegram.DATA_SOURCES + [Telegram.FLOG_CHANNEL] ] | |
| #await FileStream.get_users(Telegram.DATA_SOURCES + [Telegram.FLOG_CHANNEL]) | |
| print("------------------------------ DONE ------------------------------\n") | |
| print("---------------------- Initializing Clients ----------------------") | |
| await initialize_clients() | |
| print("------------------------------ DONE ------------------------------\n\n") | |
| print("--------------------- Initializing Web Server ---------------------") | |
| await server.setup() # Setup the web server | |
| await web.TCPSite(server, Server.BIND_ADDRESS, Server.PORT).start() | |
| print("------------------------------ DONE ------------------------------\n\n") | |
| # Start the background task to clear inactive clients after web server setup | |
| #asyncio.create_task(clear_inactive_clients()) # Now this works as event loop is running | |
| print( | |
| f"------------------------- Service Started -------------------------\n" | |
| f"Bot =>> {bot_info.first_name}\n" + | |
| (f"DC ID =>> {bot_info.dc_id}\n" if bot_info.dc_id else "") + | |
| f"URL =>> {Server.URL}\n" | |
| "------------------------------------------------------------------" | |
| ) | |
| await idle() # Keep the bot alive | |
| async def cleanup(): | |
| await server.cleanup() | |
| await FileStream.stop() | |
| if __name__ == "__main__": | |
| try: | |
| loop.run_until_complete(start_services()) # Run the services asynchronously | |
| except KeyboardInterrupt: | |
| print("\n------------------ Stopping Services KeyBoard Interrupt -----------------") | |
| except Exception as err: | |
| logging.error(traceback.format_exc()) | |
| finally: | |
| loop.run_until_complete(cleanup()) | |
| loop.stop() | |
| print("------------------------ Stopped Services ------------------------") | |