76 lines
2.6 KiB
Python
76 lines
2.6 KiB
Python
import logging
|
|
|
|
from telegram.ext import MessageHandler as ParentHandler, Filters
|
|
|
|
from src.domain.message import Message
|
|
from src.entity.pair import Pair
|
|
from src.entity.chat import Chat
|
|
|
|
|
|
class MessageHandler(ParentHandler):
|
|
def __init__(self):
|
|
super(MessageHandler, self).__init__(
|
|
Filters.text | Filters.sticker,
|
|
self.handle)
|
|
|
|
def handle(self, bot, update):
|
|
chat = Chat.get_chat(update.message)
|
|
message = Message(chat=chat, message=update.message)
|
|
|
|
if message.has_text():
|
|
logging.debug("[Chat %s %s bare_text] %s" %
|
|
(message.chat.chat_type,
|
|
message.chat.telegram_id,
|
|
message.text))
|
|
|
|
if message.has_text() and not message.is_editing():
|
|
return self.__process_message(bot, message)
|
|
elif message.is_sticker():
|
|
return self.__process_sticker(bot, message)
|
|
|
|
def __process_message(self, bot, message):
|
|
Pair.learn(message)
|
|
|
|
if message.has_anchors() \
|
|
or message.is_private() \
|
|
or message.is_reply_to_bot() \
|
|
or message.is_random_answer():
|
|
|
|
reply = Pair.generate(message)
|
|
if reply != '':
|
|
self.__answer(bot, message, reply)
|
|
|
|
def __process_sticker(self, bot, message):
|
|
if message.has_anchors() \
|
|
or message.is_private() \
|
|
or message.is_reply_to_bot() \
|
|
or message.is_random_answer():
|
|
|
|
self.__send_sticker(bot, message, "BQADAgADSAIAAkcGQwU-G-9SZUDTWAI")
|
|
|
|
def __answer(self, bot, message, reply):
|
|
logging.debug("[Chat %s %s answer] %s" %
|
|
(message.chat.chat_type,
|
|
message.chat.telegram_id,
|
|
reply))
|
|
|
|
bot.sendMessage(chat_id=message.chat.telegram_id, text=reply)
|
|
|
|
def __reply(self, bot, message, reply):
|
|
logging.debug("[Chat %s %s reply] %s" %
|
|
(message.chat.chat_type,
|
|
message.chat.telegram_id,
|
|
reply))
|
|
|
|
bot.sendMessage(chat_id=message.chat.telegram_id,
|
|
reply_to_message_id=message.message.message_id,
|
|
text=reply)
|
|
|
|
def __send_sticker(self, bot, message, sticker_id):
|
|
logging.debug("[Chat %s %s send_sticker]" %
|
|
(message.chat.chat_type, message.chat.telegram_id))
|
|
|
|
bot.sendSticker(chat_id=message.chat.telegram_id,
|
|
reply_to_message_id=message.message.message_id,
|
|
sticker=sticker_id)
|