def get_basket(self, sender, **kwargs) -> List[Message]: provider = kwargs.get('provider') quick_replies_list = ['categories', 'payment', 'basket'] quick_replies_instance = quick_replies(quick_replies_list, provider) order = BotOrder.find_one({"user_id": sender, "provider": provider}) if order is None or not order.orders: return [Message(user_id=sender, message_type=TEXT, message_data='У вас нема продуктів у кошику.', quick_replies=quick_replies_instance)] messages = [] rearranged_products = transform(order.orders) for product_list in rearranged_products: messages.append(Message(user_id=sender, message_type=ATTACHMENT, message_data=generic_list_template(product_list, 'Видалити', **{'provider': provider, 'type': 'remove_product'}), quick_replies=quick_replies_instance)) return messages
def get_cafe(self, sender, **kwargs) -> List[Message]: provider = kwargs.get('id') quick_replies_list = ['categories', 'payment', 'basket', 'about_cafe'] quick_replies_instance = quick_replies(quick_replies_list, provider) kwargs['provider'] = provider adapter = self.adapters.get(provider) result = adapter.get_categories(**kwargs) rearranged_categories = transform(result) messages = [ Message(user_id=sender, message_type=TEXT, message_data='Чудовий вибір!🙂 ' 'Щоб обрати категорію меню - натисніть на її назву.😉', quick_replies=quick_replies_instance) ] for category_list in rearranged_categories: messages.append(Message(user_id=sender, message_type=ATTACHMENT, message_data=generic_list_template(category_list, **{'provider': provider, 'type': 'get_category'}), quick_replies=quick_replies_instance)) return messages
def get_category(self, sender, **kwargs) -> List[Message]: provider = kwargs.get('provider') adapter = self.adapters.get(provider) quick_replies_list = ['categories', 'payment', 'basket'] quick_replies_instance = quick_replies(quick_replies_list, provider) result = adapter.get_products(**kwargs) if not result: return [Message(user_id=sender, message_type=TEXT, message_data="У цій категорії нема продуктів.", quick_replies=quick_replies_instance)] rearranged_products = transform(result) messages = [ Message(user_id=sender, message_type=TEXT, message_data='Щоб додати позицію до кошику 🛒 - натисніть клавішу "Додати"', quick_replies=quick_replies_instance) ] for product_list in rearranged_products: messages.append(Message(user_id=sender, message_type=ATTACHMENT, message_data=generic_list_template(product_list, 'Додати', **{'provider': provider, 'type': 'add_product'}), quick_replies=quick_replies_instance)) return messages
def get_cafes(self, sender, **kwargs) -> List[Message]: quick_replies_list = ['cafes'] quick_replies_instance = quick_replies(quick_replies_list, None) result = rq.get(self.cafe_system_url + "bot/cafes/") cafes_list = json.loads(result.text).get("cafes") for cafe in cafes_list: cafe_model = Cafe(**cafe) adapter = GenericAdapter(cafe_model) self.adapters[cafe.get("provider_name")] = adapter cafes = [{'title': cafe_value.name, 'id': cafe_key, 'image_url': cafe_value.image_url} for cafe_key, cafe_value in self.adapters.items()] rearranged_cafes = transform(cafes) messages = [ Message(user_id=sender, message_type=TEXT, message_data="Щоб обрати заклад - натисніть на його назву.", quick_replies=quick_replies_instance), ] for cafe_list in rearranged_cafes: messages.append(Message(user_id=sender, message_type=ATTACHMENT, message_data=generic_list_template(cafe_list, **{'type': 'get_cafe'}), quick_replies=quick_replies_instance)) return messages
def checkout(self, sender, **kwargs) -> List[Message]: provider = kwargs.get('provider') quick_replies_list = ['categories', 'payment', 'basket'] quick_replies_instance = quick_replies(quick_replies_list, provider) adapter = self.adapters.get(provider) bot_order = BotOrder.find_one({"user_id": sender, "provider": provider}) if bot_order is None or not bot_order.orders: return [Message(user_id=sender, message_type=TEXT, message_data='У вас нема продуктів у кошику.', quick_replies=quick_replies_instance)] data_to_checkout = bot_order.dump() data_to_checkout.update({"user_id": sender}) result = adapter.checkout(**data_to_checkout) rework_checkout_data(result, **{"user_id": sender, "provider": provider, "bot_order": bot_order.pk}) cafe_order = CafeOrder(**result) cafe_order.commit() if adapter.cafe.testing: data_to_show = cafe_order.dump() data_to_show.update({"date": str(datetime.now().date()), "cafe_name": adapter.name}) messages = [ Message(user_id=sender, message_type=ATTACHMENT, message_data=receipt_template(**bot_order.dump()), quick_replies=quick_replies_instance), Message(user_id=sender, message_type=TEXT, message_data=REPLY_EXPLAIN(**data_to_show), quick_replies=quick_replies_instance), Message(user_id=sender, message_type=TEXT, message_data=REPLY_GIFT(**data_to_show), quick_replies=quick_replies_instance) ] cafe_order.delete() bot_order.orders = [] bot_order.commit() return messages url = '{url}/payments/{name}/{order_id}/' url = url.format(url=self.cafe_system_url, name=adapter.cafe.provider_name, order_id=result.get("order_id")) message = Message(user_id=sender, message_type=ATTACHMENT, message_data=generic_link_template(url, 'Будь ласка, здійсніть оплату.'), quick_replies=quick_replies_instance) return [message]
def something_hmm_else(self, sender, **kwargs) -> List[Message]: quick_replies_list = ['that_is_me', 'cafes'] quick_replies_instance = quick_replies(quick_replies_list, None) return [Message(user_id=sender, message_type=TEXT, message_data="Тільки чесно!", quick_replies=quick_replies_instance), Message(user_id=sender, message_type=TEXT, message_data="Проспорили другові бургер🍔 і ніяк не віддасте, бо нема часу зустрітись?😅", quick_replies=quick_replies_instance)]
def something_else(self, sender, **kwargs) -> List[Message]: quick_replies_list = ['yeah', 'half'] quick_replies_instance = quick_replies(quick_replies_list, None) return [Message(user_id=sender, message_type=TEXT, message_data="Ну дивіться", quick_replies=quick_replies_instance), Message(user_id=sender, message_type=TEXT, message_data="Буває так що у вашої половинки❤️ жахливий настрій☹️, а ви не поруч і не можете втішити чи допомогти?🤷", quick_replies=quick_replies_instance)]
def that_is_me(self, sender, **kwargs) -> List[Message]: quick_replies_list = ['cafes'] quick_replies_instance = quick_replies(quick_replies_list, None) return [Message(user_id=sender, message_type=TEXT, message_data="Ну то давайте прямо зараз оберемо якийсь смачнющий бургер🍔 і надішлемо йому!🙂", quick_replies=quick_replies_instance), Message(user_id=sender, message_type=TEXT, message_data="А він забере його коли буде час", quick_replies=quick_replies_instance), Message(user_id=sender, message_type=TEXT, message_data="Натискайте «Заклади» та обирайте потрібний😉", quick_replies=quick_replies_instance)]
def get_product(self, sender, **kwargs) -> List[Message]: quick_replies_instance = {} message = Message(user_id=sender, message_type="", message_data="", quick_replies=quick_replies_instance) return [message]
def yeah(self, sender, **kwargs) -> List[Message]: quick_replies_list = ['something_hmm_else'] quick_replies_instance = quick_replies(quick_replies_list, None) return [Message(user_id=sender, message_type=TEXT, message_data="То тепер ви знаєте, що завжди можете на відстані підняти настрій своїй половинці❤️", quick_replies=quick_replies_instance), Message(user_id=sender, message_type=TEXT, message_data="Чи то надіславши морозиво🍦, чи то тірамісу🍮 із кавою", quick_replies=quick_replies_instance), Message(user_id=sender, message_type=TEXT, message_data="Тисніть на «Заклади» і порадуєм вашу любов❤️ прямо зараз🙂", quick_replies=quick_replies_instance)]
def happens(self, sender, **kwargs) -> List[Message]: quick_replies_list = ['something_else', 'cafes'] quick_replies_instance = quick_replies(quick_replies_list, None) return [Message(user_id=sender, message_type=TEXT, message_data="Ну ось! А тепер можете з моєю допомогою купити щось смачне і надіслати тому, кого треба віддячити🙂", quick_replies=quick_replies_instance), Message(user_id=sender, message_type=TEXT, message_data="І людина сама забере ваш їстівний подарунок в зручний час і буде аж на сьомому небі від щастя😁", quick_replies=quick_replies_instance), Message(user_id=sender, message_type=TEXT, message_data="Натисніть на «Заклади» і зробимо це прямо зараз😉", quick_replies=quick_replies_instance)]
def why_bot(self, sender, **kwargs) -> List[Message]: quick_replies_list = ['happens', 'no_memory'] quick_replies_instance = quick_replies(quick_replies_list, None) return [Message(user_id=sender, message_type=TEXT, message_data="Буває, що комусь хочете зробити приємність чи віддячити", quick_replies=quick_replies_instance), Message(user_id=sender, message_type=TEXT, message_data="проте людина далеко і у вас нема часу із нею зустрітись?😬", quick_replies=quick_replies_instance), Message(user_id=sender, message_type=TEXT, message_data="(або бажання😄)", quick_replies=quick_replies_instance)]
def get_started(self, sender, **kwargs) -> List[Message]: quick_replies_list = ['cafes'] quick_replies_instance = quick_replies(quick_replies_list, kwargs.get('provider', 'unit')) message = Message(user_id=sender, message_type=TEXT, message_data='Зробіть замовлення.', quick_replies=quick_replies_instance) return [message]
def notify(self, **kwargs) -> List[Message]: cafe_order = CafeOrder.find_one({"order_id": kwargs.get('order_id'), "provider": kwargs.get("provider")}) if cafe_order is None: return [] ukraine = timezone(timedelta(hours=2)) provider = kwargs.get('provider') adapter = self.adapters.get(provider) order_time = (datetime.now(tz=ukraine) + timedelta(days=adapter.cafe.days_expire)).strftime("%d-%m-%Y") text_data = {"date": order_time, "cafe_name": adapter.cafe.name} sender = cafe_order.user_id bot_order = get_or_create_order(BotOrder, cafe_order.user_id, cafe_order.provider) quick_replies_list = ['categories', 'payment', 'basket'] quick_replies_instance = quick_replies(quick_replies_list, cafe_order.provider) cafe_order_data = cafe_order.dump() bot_order_data = bot_order.dump() cafe_order_data.update(text_data) bot_order_data.update(text_data) messages = [ Message(user_id=sender, message_type=ATTACHMENT, message_data=receipt_template(**bot_order_data), quick_replies=quick_replies_instance), Message(user_id=sender, message_type=TEXT, message_data=REPLY_EXPLAIN(**cafe_order_data), quick_replies=quick_replies_instance), Message(user_id=sender, message_type=TEXT, message_data=REPLY_GIFT(**cafe_order_data), quick_replies=quick_replies_instance) ] bot_order.orders = [] bot_order.commit() return messages
def half(self, sender, **kwargs) -> List[Message]: quick_replies_list = ['that_is_me', 'not_really'] quick_replies_instance = quick_replies(quick_replies_list, None) return [Message(user_id=sender, message_type=TEXT, message_data="Не зважайте😅", quick_replies=quick_replies_instance), Message(user_id=sender, message_type=TEXT, message_data="Тоді ось що", quick_replies=quick_replies_instance), Message(user_id=sender, message_type=TEXT, message_data="Тільки чесно!", quick_replies=quick_replies_instance), Message(user_id=sender, message_type=TEXT, message_data="Проспорили другові бургер🍔 і ніяк не віддасте, бо нема часу зустрітись?😅", quick_replies=quick_replies_instance)]
def add_product(self, sender, **kwargs) -> List[Message]: provider = kwargs.get('provider') adapter = self.adapters.get(provider) result = adapter.add_product(**kwargs) quick_replies_list = ['categories', 'payment', 'basket'] quick_replies_instance = quick_replies(quick_replies_list, provider) messages = [ Message(user_id=sender, message_type=TEXT, message_data=result, quick_replies=quick_replies_instance), Message(user_id=sender, message_type=TEXT, message_data=' Додайте щось іще або проведіть оплату💳, натиснувши клавішу "До оплати"', quick_replies=quick_replies_instance) ] return messages
def not_really(self, sender, **kwargs) -> List[Message]: quick_replies_list = ['cafes'] quick_replies_instance = quick_replies(quick_replies_list, None) return [Message(user_id=sender, message_type=TEXT, message_data="А ви точно з цієї планети?😂", quick_replies=quick_replies_instance), Message(user_id=sender, message_type=TEXT, message_data="Та я жартую)", quick_replies=quick_replies_instance), Message(user_id=sender, message_type=TEXT, message_data="Ну то давайте придбаємо щось цікаве для вашого знайомого, в якого був нещодавно день народження, а ви забули привітати😅", quick_replies=quick_replies_instance), Message(user_id=sender, message_type=TEXT, message_data="Нажміть на «Заклади» і обирайте щось смачне😋 і оригінальне😁", quick_replies=quick_replies_instance)]
def about_cafe(self, sender, **kwargs) -> List[Message]: provider = kwargs.get('provider') quick_replies_list = ['categories', 'payment', 'basket'] quick_replies_instance = quick_replies(quick_replies_list, provider) adapter = self.adapters.get(provider) return [Message(user_id=sender, message_type=TEXT, message_data=f"{adapter.cafe.name} - це чудовий заклад🍽 з " f"різноманітними стравами та напоями🍹", quick_replies=quick_replies_instance), Message(user_id=sender, message_type=TEXT, message_data=f"Для отримання інформації щодо часу⏳ " f"роботи та адреси закладу перегляньте сторінки {adapter.cafe.name} " f"у соцмережах {adapter.cafe.facebook_url}, {adapter.cafe.instagram_url}.", quick_replies=quick_replies_instance), Message(user_id=sender, message_type=TEXT, message_data="Щоб придбати подарунок🎁 у цьому закладі натисніть «Категорії»", quick_replies=quick_replies_instance)]
def pay_rejected(self, **kwargs) -> List[Message]: cafe_order = CafeOrder.find_one({"order_id": kwargs.get('order_id')}) if cafe_order is None: return [] sender = cafe_order.user_id quick_replies_list = ['cafes'] quick_replies_instance = quick_replies(quick_replies_list, cafe_order.provider) return [Message(user_id=sender, message_type=TEXT, message_data="Під час оплати сталася помилка. Спробуйте ще.", quick_replies=quick_replies_instance)]
def remove_product(self, sender, **kwargs) -> List[Message]: provider = kwargs.get('provider') adapter = self.adapters.get(provider) result = adapter.remove_product(**kwargs) quick_replies_list = ['categories', 'payment', 'basket'] quick_replies_instance = quick_replies(quick_replies_list, provider) message = Message(user_id=sender, message_type=TEXT, message_data=result, quick_replies=quick_replies_instance) return [message]
def get_instruction(self, sender, **kwargs) -> List[Message]: quick_replies_list = ['how_to_buy'] quick_replies_instance = quick_replies(quick_replies_list, None) texts = INSTRUCTION.get("initial") messages = [ Message(user_id=sender, message_type=TEXT, message_data=text, timeout=1, quick_replies=quick_replies_instance) for text in texts ] return messages
def how_details(self, sender, **kwargs) -> List[Message]: quick_replies_list = ['cafes'] quick_replies_instance = quick_replies(quick_replies_list, None) texts = INSTRUCTION.get("how_details") messages = [ Message(user_id=sender, message_type=TEXT, message_data=text, timeout=1, quick_replies=quick_replies_instance) for text in texts ] return messages
def greeting(self, sender, **kwargs) -> List[Message]: quick_replies_list = ['cafes'] quick_replies_instance = quick_replies(quick_replies_list, None) rq.post(url=self.cafe_system_url + "bot/users/", json={'user_id': sender, "network": "facebook"}) messages = [ Message(user_id=sender, message_type=TEXT, message_data=text, timeout=1, quick_replies=quick_replies_instance) for text in GREETING ] return messages