示例#1
0
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)
示例#2
0
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)
示例#3
0
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
示例#4
0
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)