KuroCore/kurocore/bot.py

63 lines
2.0 KiB
Python
Raw Permalink Normal View History

2024-01-02 00:25:23 +03:00
import sys
2024-03-24 04:05:54 +03:00
from asyncio import set_event_loop_policy
2024-01-02 00:25:23 +03:00
from platform import system
from .logger import BotLogger, RequestLogger, ClientLogger
from .main.handler import Handler
2024-03-24 04:05:54 +03:00
from kurocore.database import Database
2024-01-02 00:25:23 +03:00
class Bot:
__slots__ = ('config', 'is_running', 'middlewares', 'tasks')
2024-03-24 04:05:54 +03:00
def __init__(self, config, load_db=False):
2024-01-02 00:25:23 +03:00
BotLogger(config)
RequestLogger(config)
ClientLogger(config)
self.config = config
2024-03-24 04:05:54 +03:00
if load_db:
Database(self.config)
2024-01-02 00:25:23 +03:00
self.is_running = False
self.middlewares = []
self.tasks = []
if sys.version_info >= (3, 8) and sys.platform.lower().startswith("win"):
2024-03-24 04:05:54 +03:00
from asyncio import WindowsSelectorEventLoopPolicy
2024-01-02 00:25:23 +03:00
set_event_loop_policy(WindowsSelectorEventLoopPolicy())
def add_plugin(self, plugin):
if self.is_running:
BotLogger.log.error('Bot already running!')
self.config.plugins.append(plugin)
def add_prefix(self, prefix):
if self.is_running:
BotLogger.log.error('Bot already running!')
self.config.prefixes.append(prefix)
def add_middleware(self, middleware):
if self.is_running:
BotLogger.log.error('Bot already running!')
self.middlewares.append(middleware)
def add_task(self, task):
if self.is_running:
BotLogger.log.error('Bot already running!')
if system == 'Windows':
BotLogger.log.warning('Windows don\'t support tasks')
return
self.tasks.append(task)
def run(self):
handler = Handler(self.config, self.middlewares)
handler.init()
try:
for task in self.tasks:
BotLogger.log.debug(f'registered task: {task}')
handler.loop.create_task(task())
self.is_running = True
handler.run()
except KeyboardInterrupt:
handler.shutdown()
2024-03-24 04:05:54 +03:00
if Database.db and not Database.db.is_closed():
Database.db.close()