2
0
mirror of https://github.com/Nick80835/microbot synced 2025-08-22 10:09:40 +00:00
microbot/ubot/__init__.py

96 lines
3.0 KiB
Python
Raw Permalink Normal View History

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
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.")
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.")
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()
if exit_code is not None:
2023-10-16 14:32:57 -04:00
logger.info("Exiting with exit code: %i", exit_code)
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())