def _form_message(self, payload: EventCommandToSend) -> OkOutgoingMessage: msg = MessageDirector().create_ok_message(payload) msg.Schema().validate(msg.Schema().dump(msg)) logger.debug(msg) return msg
def form_order_confirmation(self, event: EventCommandReceived) -> EventCommandToSend: """Формирует данные для сообщения с предложением выбрать платёжную систему для оплаты.""" product = Product.objects.get_product_by_id(self.callback.id) text = DialogPhrases.ORDER_CONFIRM.value.format( name=product["name"], price=product["price"] ) # todo где-то нужна метаинформация по списку систем button_data: List[Dict[str, Any]] = [ { 'title': DialogButtons.PAYPAL_OPTION.value, 'id': self.callback.id, 'type': CallbackType.PAYPAL, }, { 'title': DialogButtons.STRIPE_OPTION.value, 'id': self.callback.id, 'type': CallbackType.STRIPE, }, ] msg = MessageDirector().create_ects( bot_id=event.bot_id, chat_id_in_messenger=event.chat_id_in_messenger, text=text, button_data=button_data, ) self.logger.debug(f'"BUTTONS: {button_data}"') return msg
def form_product_desc(self, event: EventCommandReceived) -> EventCommandToSend: """Формирует данные для описания выбранного товара с кнопкой 'Заказать'.""" product = Product.objects.get_product_by_id(self.callback.id) text = DialogPhrases.ORDER_PRODUCT.value.format( name=product['name'], desc=product['description'][:400], price=product['price'], ) button_data: List[Dict[str, Any]] = [ { 'title': DialogButtons.ORDER_PRODUCT.value, 'id': self.callback.id, 'type': CallbackType.ORDER, }] msg = MessageDirector().create_ects( bot_id=event.bot_id, chat_id_in_messenger=event.chat_id_in_messenger, text=text, button_data=button_data, ) self.logger.debug(f'"BUTTONS: {button_data}"') return msg
def send_payment_completed(checkout: 'Checkout') -> None: """Формирует сообщение об удачной оплате и посылает его через соответствующий клиент.""" bot_type = checkout.order.chat.bot.bot_type command = MessageDirector().create_ects( bot_id=checkout.order.chat.bot.id, chat_id_in_messenger=checkout.order.chat.id_in_messenger, text=NotifyPhrases.PAYMENT_SUCCESS.value.format( name=checkout.order.product.name), ) message = Message.objects.save_message( bot_id=command.bot_id, chat_id_in_messenger=command.chat_id_in_messenger, chat_type=ChatType.PRIVATE, message_direction=command.payload.direction, message_content_type=command.content_type, messenger_user_id=checkout.order.chat.bot_user.messenger_user_id, user_name=checkout.order.chat.bot_user.name, message_text=command.payload.text, ) command.message_id = message.pk client = PlatformClientFactory.create(bot_type) client.send_message(command)
def form_category_list(self, event: EventCommandReceived) -> EventCommandToSend: """Собирает список категорий в виде данных для сообщения с соответствующими кнопками.""" button_data: List[Dict[str, Any]] = [ { 'title': category['name'], 'id': category['id'], 'type': CallbackType.CATEGORY, } for category in Category.objects.get_categories()][:10] msg = MessageDirector().create_ects( bot_id=event.bot_id, chat_id_in_messenger=event.chat_id_in_messenger, text=DialogPhrases.CHOOSE_CATEGORY.value, button_data=button_data, ) self.logger.debug(f'"BUTTONS: {button_data}"') return msg
def make_order(self, event: EventCommandReceived) -> EventCommandToSend: """Формирует заказ и готовит данные для сообщения со ссылкой для произведения оплаты пользователем.""" order = Order.objects.make_order( event.chat_id_in_messenger, event.bot_id, self.callback.id, ) payment_client = PaymentClientFactory.create(self.callback.type.value) approve_link = payment_client.check_out(order.pk, self.callback.id) text = DialogPhrases.PAYMENT_LINK.value.format(link=approve_link) msg = MessageDirector().create_ects( bot_id=event.bot_id, chat_id_in_messenger=event.chat_id_in_messenger, text=text, ) return msg
def form_product_list(self, event: EventCommandReceived) -> EventCommandToSend: """Собирает список продуктов категории в виде данных для сообщения с соответствующими кнопками.""" category = Category.objects.get_category_by_id(self.callback.id) button_data: List[Dict[str, Any]] = [ { 'title': product['name'], 'id': product['id'], 'type': CallbackType.PRODUCT, } for product in Product.objects.get_products(self.callback.id)][:10] msg = MessageDirector().create_ects( bot_id=event.bot_id, chat_id_in_messenger=event.chat_id_in_messenger, text=DialogPhrases.CHOOSE_PRODUCT.value.format( category=category['name'] ), button_data=button_data, ) self.logger.debug(f'"BUTTONS: {button_data}"') return msg
def _form_greeting(self, event: EventCommandReceived) -> EventCommandToSend: """Формирует приветствие пользователя при написании произвольного сообщения.""" button_data: List[Dict[str, Any]] = [ { 'title': DialogButtons.START_SESSION.value, 'id': 0, 'type': CallbackType.GREETING, }] greeting = DialogPhrases.SESSION_GREETING.value if event.user_name_in_messenger: greeting = greeting.format(alias=f', {event.user_name_in_messenger}') else: greeting = greeting.format(alias='') msg = MessageDirector().create_ects( bot_id=event.bot_id, chat_id_in_messenger=event.chat_id_in_messenger, text=greeting, button_data=button_data, ) return msg