Example #1
0
    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
Example #2
0
    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
Example #3
0
    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
Example #4
0
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)
Example #5
0
    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
Example #6
0
    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
Example #7
0
    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
Example #8
0
    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