initial commit
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
import sys
|
||||
from asyncio import WindowsSelectorEventLoopPolicy, set_event_loop_policy
|
||||
from platform import system
|
||||
|
||||
from .logger import BotLogger, RequestLogger, ClientLogger
|
||||
from .main.handler import Handler
|
||||
|
||||
|
||||
class Bot:
|
||||
__slots__ = ('config', 'is_running', 'middlewares', 'tasks')
|
||||
|
||||
def __init__(self, config):
|
||||
BotLogger(config)
|
||||
RequestLogger(config)
|
||||
ClientLogger(config)
|
||||
self.config = config
|
||||
# Database(self.config)
|
||||
self.is_running = False
|
||||
self.middlewares = []
|
||||
self.tasks = []
|
||||
if sys.version_info >= (3, 8) and sys.platform.lower().startswith("win"):
|
||||
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()
|
||||
# if Database.db and not Database.db.is_closed():
|
||||
# Database.db.close()
|
||||
Reference in New Issue
Block a user