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()
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)
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)
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)
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
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
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