def botcmd_list_subscribe(data): channel = data.get('channelId', '') attachments = [] for task in list_subscriptions(data): plural = ukr_plural(task.found_total, 'декларацію', 'декларації', 'декларацій') # telegram fix if channel == 'telegram': query = task.id else: query = task.query or task.id att = { "contentType": "application/vnd.microsoft.card.hero", "content": { "title": "За запитом: {}".format(task.query), "subtitle": "Знайдено {} {}".format(task.found_total, plural), "text": "Щоб відписатись він наступних повідомлень по цьому запиту, оберіть:", "buttons": [{ "type": "imBack", "title": "Відписатись", "value": "відписатись {}".format(query) }] } } attachments.append(att) sbcount = len(attachments) splural = ukr_plural(sbcount, "підписка", "підписки", "підписок") message = "У вас {} {}".format(sbcount, splural) return chat_response(data, message, attachments=attachments)
def botcmd_list_newfound(data): cmd, args = data['text'].split(' ', 1) skip = 0 if '/' in args: args, skip = args.split('/', 1) skip = int(skip) notify = load_notify(data, args) if notify and skip < notify.found_new: count = settings.CHATBOT_SERP_COUNT data['text'] = notify.task.query found_new = notify.found_new plural = ukr_plural(found_new, 'нову декларацію', 'нові декларації', 'нових декларацій') message = 'За підпискою: {}'.format(notify.task.query_title) message += '\n\nЗнайдено {} {}'.format(found_new, plural) message += '\n\nПоказані {} починаючи з {}'.format(count, skip + 1) message = TABLE_LINE + "\n\n{}\n\n".format(message) + TABLE_LINE new_decl = load_declarations(notify.new_ids[skip:]) attachments = decl_list_to_chat_cards(new_decl, data, settings, notify.task.deepsearch, skip=skip, total=found_new, notify_id=notify.id) chat_response(data, message, attachments=attachments) else: message = 'Більше немає результатів.' chat_response(data, message)
def send_to_chat(notify, context): from chatbot.views import decl_list_to_chat_cards plural = ukr_plural(context['found_new'], 'нову декларацію', 'нові декларації', 'нових декларацій') message = 'За підпискою: {} '.format(context['query_title']) message += '\n\nЗнайдено {} {}'.format(context['found_new'], plural) if context['found_new'] > settings.CHATBOT_SERP_COUNT: message += '\n\nПоказані перші {}'.format(settings.CHATBOT_SERP_COUNT) message = TABLE_LINE + "\n\n{}\n\n".format(message) + TABLE_LINE data = json.loads(notify.task.chat_data) data['text'] = context['query'] deepsearch = 'on' if notify.task.deepsearch else '' attachments = decl_list_to_chat_cards(context['decl_list'], data, settings, deepsearch, total=notify.found_new, notify_id=notify.id) chat_response(data, message, attachments=attachments, auto_reply=True) return 1
def search_reply(data): if not data.get('text') or len(data['text']) > 100: return chat_response(data, 'Не зрозумів, уточніть запит.') text = data['text'].strip(' .,;:!-()\n').lower() for r, message in QUICK_ANSWERS: if r.match(text): if isinstance(message, (list, tuple, set)): message = choice(message) return chat_response(data, message) for r, handler in CHATBOT_COMMANDS: if r.match(text): return handler(data) # deepsearch switch deepsearch = False if ' /' in text: for deep in (' /deep', ' /всюди'): if deep in data['text']: deepsearch = True data['text'] = data['text'].replace(deep, '') # pagination in format query /skip skip = 0 count = settings.CHATBOT_SERP_COUNT if re.search(r' /\d+$', text): text, skip = data['text'].rsplit(' ', 1) data['text'] = text skip = int(skip[1:]) search = simple_search(data['text'], deepsearch=deepsearch) # it found nothing try again with deepsearch if search.found_total == 0 and not deepsearch: deepsearch = True search = simple_search(data['text'], deepsearch=deepsearch) found_total = search.found_total plural = ukr_plural(found_total, 'декларацію', 'декларації', 'декларацій') message = 'Знайдено {} {}'.format(found_total, plural) if found_total == 0: message = 'За запитом "{}" декларацій не знайдено.'.format( data['text']) message += '\n\n-\n\n' message += choice(NOT_FOUND_RESPONSES) elif found_total > skip + count: if skip: message += '\n\nПоказано {} починаючи з {}'.format(count, skip + 1) else: message += '\n\nПоказано перші {}'.format(count) if found_total > 0: message = TABLE_LINE + "\n\n{}\n\n".format(message) + TABLE_LINE if found_total > 0 and skip > 0: search = search[skip:] attachments = decl_list_to_chat_cards(search, data, settings, deepsearch, skip=skip, total=found_total) return chat_response(data, message, attachments=attachments)
def uk_plural(value, args): args = args.split(',') return utils.ukr_plural(value, *args)