2023-10-16 14:32:57 -04:00
|
|
|
import asyncio
|
2020-09-13 13:50:36 -04:00
|
|
|
import sys
|
|
|
|
from logging import INFO, basicConfig, getLogger
|
2023-05-07 17:19:42 -04:00
|
|
|
from time import time
|
2020-09-13 13:50:36 -04:00
|
|
|
|
2021-02-13 12:06:21 -05:00
|
|
|
import telethon
|
2023-10-21 19:30:14 -04:00
|
|
|
from telethon import TelegramClient
|
2020-09-17 17:31:47 -04:00
|
|
|
from telethon.errors.rpcerrorlist import (AccessTokenExpiredError,
|
|
|
|
AccessTokenInvalidError,
|
|
|
|
TokenInvalidError)
|
2020-09-13 13:50:36 -04:00
|
|
|
from telethon.network.connection.tcpabridged import \
|
|
|
|
ConnectionTcpAbridged as CTA
|
|
|
|
|
2023-10-21 19:30:14 -04:00
|
|
|
from .custom import (ExtendedCallbackQuery, ExtendedInlineQuery,
|
|
|
|
ExtendedNewMessage)
|
2020-09-13 13:50:36 -04:00
|
|
|
from .loader import Loader
|
|
|
|
from .settings import Settings
|
|
|
|
|
2023-10-16 20:37:59 -04:00
|
|
|
if sys.version_info.major < 3 or (sys.version_info.major == 3 and sys.version_info.minor < 10):
|
|
|
|
print("This program requires at least Python 3.10.0 to work correctly, exiting.")
|
2020-09-13 13:50:36 -04:00
|
|
|
sys.exit(1)
|
|
|
|
|
2023-10-16 19:06:34 -04:00
|
|
|
basicConfig(format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", level=INFO)
|
|
|
|
logger = getLogger(__name__)
|
2023-05-07 17:19:42 -04:00
|
|
|
startup_time = time()
|
2023-10-16 14:32:57 -04:00
|
|
|
loop = asyncio.get_event_loop()
|
2023-05-07 17:19:42 -04:00
|
|
|
|
2023-10-22 18:51:36 -04:00
|
|
|
client: TelegramClient
|
|
|
|
ldr: Loader
|
|
|
|
|
2020-09-13 13:50:36 -04:00
|
|
|
|
|
|
|
class MicroBot():
|
|
|
|
settings = Settings()
|
2023-10-21 19:30:14 -04:00
|
|
|
logger = logger
|
|
|
|
client: TelegramClient
|
|
|
|
loader: Loader
|
2020-09-13 13:50:36 -04:00
|
|
|
|
|
|
|
def __init__(self):
|
2023-10-16 14:32:57 -04:00
|
|
|
loop.run_until_complete(self._initialize_bot())
|
2020-09-13 13:50:36 -04:00
|
|
|
|
2023-10-16 14:32:57 -04:00
|
|
|
async def _initialize_bot(self):
|
2023-10-22 18:51:36 -04:00
|
|
|
global client
|
2023-10-16 14:32:57 -04:00
|
|
|
global ldr
|
2020-09-13 13:50:36 -04:00
|
|
|
|
|
|
|
try:
|
2023-10-21 19:30:14 -04:00
|
|
|
self.client = await TelegramClient(
|
2023-06-08 08:05:57 -04:00
|
|
|
self.settings.get_config("session_name", "bot0") or "bot0",
|
|
|
|
self.settings.get_config("api_id"),
|
|
|
|
self.settings.get_config("api_hash"),
|
|
|
|
connection=CTA
|
2023-10-16 14:32:57 -04:00
|
|
|
).start(
|
|
|
|
bot_token=self.settings.get_config("bot_token")
|
|
|
|
)
|
2020-09-17 17:31:47 -04:00
|
|
|
except (TokenInvalidError, AccessTokenExpiredError, AccessTokenInvalidError):
|
2023-10-16 14:32:57 -04:00
|
|
|
logger.error("The bot token provided is invalid, exiting.")
|
2023-05-07 17:08:49 -04:00
|
|
|
sys.exit(1)
|
2020-09-13 13:50:36 -04:00
|
|
|
|
2023-10-16 14:32:57 -04:00
|
|
|
self.me = await self.client.get_me()
|
|
|
|
self.loader = Loader(self)
|
2024-08-02 19:38:55 -04:00
|
|
|
await self.loader._initialize_loader()
|
2023-10-22 18:51:36 -04:00
|
|
|
client = self.client
|
2023-10-16 14:32:57 -04:00
|
|
|
ldr = self.loader
|
|
|
|
self.loader.load_all_modules()
|
|
|
|
logger.info("Bot successfully started.")
|
|
|
|
|
|
|
|
async def run_until_done(self):
|
|
|
|
await self.client.run_until_disconnected()
|
|
|
|
await self.stop_client(reason="Bot disconnected.")
|
|
|
|
|
2023-05-07 17:08:49 -04:00
|
|
|
async def stop_client(self, reason=None, exit_code=None):
|
2020-09-13 13:50:36 -04:00
|
|
|
if reason:
|
2023-10-16 14:32:57 -04:00
|
|
|
logger.info("Stopping bot for reason: %s", reason)
|
2020-09-13 13:50:36 -04:00
|
|
|
else:
|
2023-10-16 14:32:57 -04:00
|
|
|
logger.info("Stopping bot.")
|
2020-09-13 13:50:36 -04:00
|
|
|
|
|
|
|
await self.loader.aioclient.close()
|
2025-03-06 12:21:08 -05:00
|
|
|
await client.disconnect()
|
2023-05-07 17:08:49 -04:00
|
|
|
|
|
|
|
if exit_code is not None:
|
2023-10-16 14:32:57 -04:00
|
|
|
logger.info("Exiting with exit code: %i", exit_code)
|
2023-05-07 17:08:49 -04:00
|
|
|
sys.exit(exit_code)
|
|
|
|
else:
|
|
|
|
sys.exit(0)
|
2020-09-13 13:50:36 -04:00
|
|
|
|
|
|
|
|
2023-10-21 19:30:14 -04:00
|
|
|
telethon.events.NewMessage.Event = ExtendedNewMessage
|
|
|
|
telethon.events.CallbackQuery.Event = ExtendedCallbackQuery
|
|
|
|
telethon.events.InlineQuery.Event = ExtendedInlineQuery
|
|
|
|
|
2023-10-16 18:40:25 -04:00
|
|
|
micro_bot = MicroBot()
|
|
|
|
|
|
|
|
try:
|
|
|
|
loop.run_until_complete(micro_bot.run_until_done())
|
|
|
|
except KeyboardInterrupt:
|
|
|
|
loop.run_until_complete(micro_bot.stop_client())
|