示例#1
0
def start_handler(message):
    """Обработчик команды /start."""
    logger.info(
        f"Command handler. Subscriber={message.chat.id} text={message.text}")
    save_message(message)
    answers = CommandService(message.chat.id, message.text)()
    answers.send()
示例#2
0
def handle_location(message):
    """Обравботка геолокации."""
    logger.info(f"Geo location handler.")
    save_message(message)
    answer = set_city_to_subscriber_by_location(
        (message.location.latitude, message.location.longitude),
        message.chat.id)
    send_answer(answer, message.chat.id)
示例#3
0
def text_handler(message):
    """Обработчик тестовых сообщений в т. ч. некоторых комманд."""
    logger.info(
        f"Text message handler. Subscriber={message.chat.id}, text={message.text}"
    )
    save_message(message)
    answer = text_message_service(message.chat.id, message.text,
                                  message.message_id)
    send_answer(answer, message.chat.id)
示例#4
0
def handle_query_service(text: str,
                         chat_id: int = None,
                         call_id: int = None,
                         message_id: int = None,
                         message_text: str = None):
    """Функция для обработки всех нажатий на инлайн кнопки"""
    if 'get_ayat' in text:
        answer = _get_ayat(text)
        return answer
    elif 'add_in_favourites' in text:
        text = _add_ayat_in_favourites(text, chat_id)
        tbot.answer_callback_query(call_id, show_alert=True, text=text)
    elif 'set_prayer_status_to_read' in text:
        keyboard = _change_prayer_status(chat_id, text, True)
        tbot.edit_message_text(
            text=message_text,
            chat_id=chat_id,
            message_id=message_id,
            reply_markup=keyboard,
        )
    elif 'set_prayer_status_to_unread' in text:
        keyboard = _change_prayer_status(chat_id, text, False)
        tbot.edit_message_text(
            text=message_text,
            chat_id=chat_id,
            message_id=message_id,
            reply_markup=keyboard,
        )
    elif 'unread_prayer_type_minus_one' in text:
        answer = _unread_prayer_type_minus_one(text)
        tbot.edit_message_text(
            text=answer.text,
            chat_id=chat_id,
            message_id=message_id,
            reply_markup=answer.keyboard,
        )
    elif "change_query_ayat" in text:
        query_text, offset = eval(re.search(r'\(.+\)', text).group(0))
        answer = find_ayat_by_text(query_text, offset)[0]
        tbot.edit_message_text(
            text=answer.text,
            reply_markup=answer.keyboard,
            message_id=message_id,
            chat_id=chat_id,
            parse_mode='HTML',
        )
    elif "accept_with_conditions" in text:
        text = AdminMessage.objects.get(key="print_instructions").text
        Answer(text=text).send(chat_id)
        document_file_id = File.objects.get(
            name="PDF_ramadan_dairy").tg_file_id
        message = tbot.send_document(chat_id, document_file_id)
        save_message(message)
示例#5
0
def _send_answer(answer: Answer,
                 chat_id: int):  # TODO где будет регистрация tbot
    """Отправляем сообщение пользователю."""
    try:
        if answer.tg_audio_id:
            msg = tbot.send_audio(chat_id, audio=answer.tg_audio_id)
        else:
            msg = tbot.send_message(chat_id,
                                    answer.text,
                                    reply_markup=answer.keyboard,
                                    parse_mode="HTML")
        message_instance = save_message(msg)
        return message_instance
    except ApiException as e:
        if "bot was blocked by the user" in str(
                e) or "user is deactivated" in str(
                    e) or "chat not found" in str(e):
            _subscriber_unsubscribed(chat_id)
        elif "message text is empty" in str(
                e
        ):  # TODO законченный контент отлавливается в рассылке сообщений
            send_message_to_admin("Закончился ежедневный контент")
            raise Exception("Закончился ежедневный контент")
        else:
            logger.error(e)
            send_message_to_admin(f"Непредвиденная ошибка\n\n{e}")
            raise e
示例#6
0
 def _send(self):
     from apps.bot_init.service import send_message_to_admin, _subscriber_unsubscribed
     from apps.bot_init.views import tbot
     try:
         if self.tg_audio_id:
             msg = tbot.send_audio(self.chat_id, audio=self.tg_audio_id)
         else:
             msg = tbot.send_message(self.chat_id,
                                     self.text,
                                     reply_markup=self.keyboard,
                                     parse_mode="HTML")
         message_instance = save_message(msg)
         return message_instance
     except ApiException as e:
         if "bot was blocked by the user" in str(
                 e) or "user is deactivated" in str(
                     e) or "chat not found" in str(e):
             _subscriber_unsubscribed(self.chat_id)
         elif "message text is empty" in str(
                 e
         ):  # TODO законченный контент отлавливается в рассылке сообщений
             send_message_to_admin("Закончился ежедневный контент")
             raise Exception("Закончился ежедневный контент")
         else:
             logger.error(e)
             send_message_to_admin(f"Непредвиденная ошибка\n\n{e}")
             raise e
示例#7
0
    def download_and_send_audio_file(self):
        logger.info(f"Download and send {self.title},\n"
                    f"{self.link_to_file=},\n"
                    f"{self.article_link=},")
        r = requests.get(self.link_to_file)
        file_size = sys.getsizeof(r.content)
        logger.info(f"file size={file_size / 1024 / 1024} MB")
        if file_size < 50 * 1024 * 1024:
            self.sending_audio_message_instance = self.send_audio_to_telegram(
                r.content, self.title)
            save_message(self.sending_audio_message_instance)

        is_sended = hasattr(self, "sending_audio_message_instance")
        del r

        self.audio_file = File.objects.create(
            link_to_file=self.link_to_file,
            tg_file_id=self.sending_audio_message_instance.audio.file_id
            if is_sended else None,
        )
        delattr(
            self, "sending_audio_message_instance"
        ) if is_sended else None  # Чтобы на следующей итерации если файл большой, то не присваивать File tg_file_id