2
0
mirror of https://github.com/Nick80835/microbot synced 2025-09-04 00:15:34 +00:00

rework startup

This commit is contained in:
Nick80835
2023-10-16 14:32:57 -04:00
parent dbd7a564c3
commit f588111344
7 changed files with 52 additions and 44 deletions

View File

@@ -1,3 +1,4 @@
import asyncio
import sys
from logging import INFO, basicConfig, getLogger
from time import time
@@ -18,29 +19,26 @@ if sys.version_info.major < 3 or (sys.version_info.major == 3 and sys.version_in
sys.exit(1)
startup_time = time()
loop = asyncio.get_event_loop()
logger = getLogger(__name__)
class MicroBot():
client = None
settings = Settings()
client = None
logger = None
loader = None
def __init__(self):
basicConfig(format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", level=INFO)
self.logger = getLogger(__name__)
self.start_client()
self.loader = Loader(self.client, self.logger, self.settings)
loop.run_until_complete(self._initialize_bot())
async def run_until_done(self):
self.loader.load_all_modules()
self.logger.info("Bot successfully started.")
await self.client.run_until_disconnected()
await self.stop_client(reason="Bot disconnected.")
async def _initialize_bot(self):
global ldr
global micro_bot
def start_client(self):
try:
self.client = telethon.TelegramClient(
self.client = await telethon.TelegramClient(
self.settings.get_config("session_name", "bot0") or "bot0",
self.settings.get_config("api_id"),
self.settings.get_config("api_hash"),
@@ -48,30 +46,37 @@ class MicroBot():
).start(
bot_token=self.settings.get_config("bot_token")
)
self.me = await self.client.get_me()
except (TokenInvalidError, AccessTokenExpiredError, AccessTokenInvalidError):
self.logger.error("The bot token provided is invalid, exiting.")
logger.error("The bot token provided is invalid, exiting.")
sys.exit(1)
self.me = await self.client.get_me()
self.loader = Loader(self)
ldr = self.loader
micro_bot = self
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):
if reason:
self.logger.info("Stopping bot for reason: %s", reason)
logger.info("Stopping bot for reason: %s", reason)
else:
self.logger.info("Stopping bot.")
logger.info("Stopping bot.")
await self.loader.aioclient.close()
if exit_code is not None:
self.logger.info("Exiting with exit code: %i", exit_code)
logger.info("Exiting with exit code: %i", exit_code)
sys.exit(exit_code)
else:
sys.exit(0)
telethon.events.NewMessage.Event = ExtendedEvent
micro_bot = MicroBot()
ldr = micro_bot.loader
client = micro_bot.client
logger = micro_bot.logger
client.loop.run_until_complete(micro_bot.run_until_done())
loop.run_until_complete(MicroBot().run_until_done())

View File

@@ -21,16 +21,16 @@ class CommandHandler():
inline_article_commands = []
callback_queries = []
def __init__(self, client, settings, loader, logger):
self.username = client.loop.run_until_complete(client.get_me()).username
self.settings = settings
def __init__(self, loader):
self.loader = loader
self.micro_bot = loader.micro_bot
self.settings = self.micro_bot.settings
self.logger = loader.logger
self.db = loader.db
self.logger = logger
self.hard_prefix = self.settings.get_list("hard_cmd_prefix") or ["/"]
client.add_event_handler(self.report_incoming_excepts, events.NewMessage(incoming=True, forwards=False, func=lambda e: e.raw_text))
client.add_event_handler(self.handle_inline, events.InlineQuery())
client.add_event_handler(self.handle_callback_query, events.CallbackQuery())
self.micro_bot.client.add_event_handler(self.report_incoming_excepts, events.NewMessage(incoming=True, forwards=False, func=lambda e: e.raw_text))
self.micro_bot.client.add_event_handler(self.handle_inline, events.InlineQuery())
self.micro_bot.client.add_event_handler(self.handle_callback_query, events.CallbackQuery())
async def report_incoming_excepts(self, event):
try:
@@ -54,7 +54,7 @@ class CommandHandler():
else:
prefix_list = self.hard_prefix + [chat_prefix]
pattern_match = search(self.pattern_template.format(f"({'|'.join([escape(i) for i in prefix_list])})", command.pattern + command.pattern_extra, self.username), event.raw_text, IGNORECASE|DOTALL)
pattern_match = search(self.pattern_template.format(f"({'|'.join([escape(i) for i in prefix_list])})", command.pattern + command.pattern_extra, self.micro_bot.me.username), event.raw_text, IGNORECASE|DOTALL)
if pattern_match:
if not (priv_resp := await self.check_privs(event, command, chat_db))[0]:

View File

@@ -23,11 +23,11 @@ class Loader():
loaded_modules = []
all_modules = []
def __init__(self, client, logger, settings):
self.client = client
self.logger = logger
self.settings = settings
self.command_handler = CommandHandler(client, settings, self, logger)
def __init__(self, micro_bot):
self.micro_bot = micro_bot
self.settings = micro_bot.settings
self.logger = micro_bot.logger
self.command_handler = CommandHandler(self)
def load_all_modules(self):
self._find_all_modules()
@@ -135,10 +135,10 @@ class Loader():
return [i for i in self.command_handler.callback_queries if i.function == func]
async def run_async(self, function, *args):
return await self.client.loop.run_in_executor(self.thread_pool, partial(function, *args))
return await self.micro_bot.client.loop.run_in_executor(self.thread_pool, partial(function, *args))
def prefix(self):
return ", ".join(self.settings.get_list("hard_cmd_prefix") or ["/"])
return ", ".join(self.micro_bot.settings.get_list("hard_cmd_prefix") or ["/"])
def _find_all_modules(self):
module_paths = glob.glob(dirname(__file__) + "/modules/*.py")

View File

@@ -13,7 +13,7 @@ import psutil
from telethon import version
from telethon.tl.types import Channel, Chat
from ubot import ldr, micro_bot, startup_time
from ubot import ldr, startup_time
@ldr.add("eval", owner=True, hide_help=True)
@@ -165,9 +165,9 @@ async def shutdown(event):
await event.reply("Goodbye…")
if event.other_args[0]:
await micro_bot.stop_client(reason="Shutdown command issued.", exit_code=1)
await ldr.micro_bot.stop_client(reason="Shutdown command issued.", exit_code=1)
else:
await micro_bot.stop_client(reason="Shutdown command issued.")
await ldr.micro_bot.stop_client(reason="Shutdown command issued.")
@ldr.add("blacklist", sudo=True, hide_help=True)

View File

@@ -1,5 +1,6 @@
from re import compile
from random import choice
from re import compile
from asyncbooru import Danbooru, Gelbooru, Konachan, Sankaku, Yandere
from telethon import Button

View File

@@ -2,6 +2,7 @@ import io
import re
from PIL import Image
from ubot import ldr

View File

@@ -1,6 +1,7 @@
from time import time_ns
from telethon import Button
from ubot import ldr