49 lines
2.1 KiB
Python
49 lines
2.1 KiB
Python
import logging
|
|
|
|
from telegram.ext import Updater
|
|
|
|
from src.config import config
|
|
from src.redis_c import Redis
|
|
from src.handler.command_handler import CommandHandler
|
|
from src.handler.message_handler import MessageHandler
|
|
from src.handler.status_handler import StatusHandler
|
|
from src.service.chat_purge_queue import ChatPurgeQueue
|
|
from src.service.data_learner import DataLearner
|
|
from src.service.reply_generator import ReplyGenerator
|
|
from src.service.media_uniqueness_checker import MediaUniquenessChecker
|
|
from src.service.chance_manager import ChanceManager
|
|
|
|
|
|
class Bot:
|
|
def __init__(self):
|
|
self.updater = Updater(token=config['bot']['token'])
|
|
self.dispatcher = self.updater.dispatcher
|
|
|
|
def run(self):
|
|
logging.info("Bot started")
|
|
|
|
redis = Redis(config)
|
|
chance_manager = ChanceManager(redis)
|
|
|
|
self.dispatcher.add_handler(MessageHandler(data_learner=DataLearner(),
|
|
reply_generator=ReplyGenerator(),
|
|
media_checker=MediaUniquenessChecker(redis),
|
|
chance_manager=chance_manager))
|
|
self.dispatcher.add_handler(CommandHandler(chance_manager=chance_manager))
|
|
self.dispatcher.add_handler(StatusHandler(chat_purge_queue=ChatPurgeQueue(self.updater.job_queue, redis)))
|
|
|
|
if config['updates']['mode'] == 'polling':
|
|
self.updater.start_polling()
|
|
elif config['updates']['mode'] == 'webhook':
|
|
key = open(config['updates']['key'], 'rb') if config['updates']['key'] is not None else None
|
|
cert = open(config['updates']['cert'], 'rb') if config['updates']['cert'] is not None else None
|
|
|
|
self.updater.start_webhook(listen=config['updates']['host'],
|
|
port=config.getint('updates', 'port'),
|
|
url_path=config['bot']['token'],
|
|
key=key,
|
|
cert=cert,
|
|
webhook_url=config['updates']['url'])
|
|
|
|
self.updater.idle()
|