-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbot_controller.py
More file actions
85 lines (70 loc) · 3.39 KB
/
bot_controller.py
File metadata and controls
85 lines (70 loc) · 3.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import telebot
from bot_model import NewsReceiver, NavigatorController
from bot_view import BotView
from telebot.types import ReplyKeyboardMarkup, Message
from wwntgbotlib.keyboard_button_names import KeyboardButtonsNames as kbn
from navigation_menu import Navigator
import logging
# Створення логера
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
# Створення обробника консолі
console_handler = logging.StreamHandler()
# Встановлення рівня логування для обробника консолі
console_handler.setLevel(logging.DEBUG)
# Створення об'єкта форматування
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# Встановлення форматування для обробника консолі
console_handler.setFormatter(formatter)
# Додавання обробника консолі до логера
logger.addHandler(console_handler)
class BotController:
def __init__(self, token: str):
self.__news_receiver = NewsReceiver(logger, token)
self.bot_view = BotView()
self.bot = telebot.TeleBot(self.__news_receiver.token, exception_handler=BotController.MyBotPollingException(logger))
self.navigator_controller = NavigatorController(self.__news_receiver)
class MyBotPollingException(telebot.ExceptionHandler):
def __init__(self, a_logger):
self.logger = a_logger
def handle(self, exception):
import traceback
traceback.print_exc()
return True
def handle_message(self, message: telebot.types.Message):
logger.debug("In handle_message method in BotController class")
# chat_id = message["chat"]["id"]
text = message["text"]
print("Message:", message)
if text == '/start':
navigator = self.navigator_controller.reset(message)
results = navigator.get_results_buffer()
print("Results:", results)
self.__send_welcome(navigator, message)
else:
navigator = self.navigator_controller.get_navigator(message)
self.__send_message(navigator, message)
self.navigator_controller.save_state(navigator, message)
logger.debug("End of the start() method in BotController class")
def __send_welcome(self, navigator: Navigator, message):
chat_id = message["chat"]["id"]
keyboard = navigator.get_keyboard()
item_name = navigator.get_item_name()
self.bot.send_message(
chat_id=chat_id,
text=f"Привіт, я бот для Telegram, який показує новини\n{item_name}",
reply_markup=keyboard)
def __send_message(self, navigator: Navigator, message: Message):
is_changed, results = navigator.goto(message)
answer = ""
for result in results:
answer += str(result) + '\n'
chat_id = message["chat"]["id"]
print("Is menu changed:", is_changed, "\nResults:", answer)
keyboard = navigator.get_keyboard()
if not answer:
answer = f"{message['text']}\n"
if is_changed:
self.bot.send_message(chat_id, answer, reply_markup=keyboard, parse_mode='MarkdownV2')
return
self.bot.send_message(chat_id, answer, reply_markup=keyboard, parse_mode='MarkdownV2')