Exemple #1
0
def get_results(turn: PTurn):
    coll = turn.forms_collection
    if not coll:
        turn.response_text = 'Таблица для сбора данных не настроена, простите.'
        return
    forms = list(coll.find({}))
    fn = 'forms.xlsx'
    forms2excel(forms, fn)
    turn.response_text = 'Отправляю вам файл с результатами!'
    turn.upload_filename = fn
Exemple #2
0
def send_reminders(turn: PTurn):
    if not REMINDER.bot:
        turn.response_text = 'У ремайндера не настроен бот, к сожалению.'
        return
    if not REMINDER.users_collection:
        turn.response_text = 'У ремайндера не настроена база данных, к сожалению.'
        return
    result = REMINDER.iterate_users()
    turn.response_text = f'Разослал уведомления! ' \
                         f'{result["half_forms"]} - о незавершенных анкетах, {result["new_forms"]} - о новых.'
Exemple #3
0
def fallback(turn: PTurn):
    if not turn.user_object.get('forms', {}).get('form1_informal'):
        turn.response_text = INTRO_MESSAGE
        turn.suggests.append('знакомство')
    elif not turn.user_object.get('forms', {}).get('form2'):
        turn.response_text = 'Привет! У меня есть ещё одна анкета - про навыки, которые вам нужны. ' \
                             'Если вы её готовы пройти, жмите "навыки"!'
        turn.suggests.append('навыки')
    else:
        turn.response_text = "У меня пока больше нет для вас контента. Напишите позднее, пожалуйста."
Exemple #4
0
def sendout(turn: PTurn):
    turn.next_stage = None
    if not REMINDER.bot:
        turn.response_text = 'У ремайндера не настроен бот, к сожалению.'
        return
    if not REMINDER.users_collection:
        turn.response_text = 'У ремайндера не настроена база данных, к сожалению.'
        return
    result = REMINDER.send_to_everyone(text=turn.text)
    turn.response_text = f'Разослал ваше сообщение! ' \
                         f'Оно было отправлено всем {result} пользователям (кроме тех, которые заблокировали бота). '
Exemple #5
0
def log_polylog(turn: PTurn):
    if turn.ctx.source != SOURCES.VK:
        return
    m: VKMessage = turn.ctx.raw_message
    if not isinstance(m, VKMessage):
        return
    # we are interested only in group chats
    if m.peer_id == m.user_id or not m.peer_id:
        return

    bot_id = os.environ.get('VK_GROUP_ID', '203824813')

    need_to_respond = False
    # if m.action and m.action.get('type') == 'chat_invite_user':
    #    need_to_respond = True
    if f'[club{bot_id}|' in m.text:
        # send the message if the bot was explicitly tagged
        need_to_respond = True
    elif turn.polylogs_collection:
        # send the message if the chat is unfamiliar to the bot
        one = turn.polylogs_collection.find_one({'peer_id': m.peer_id})
        if one is None:
            need_to_respond = True

    if need_to_respond:
        turn.response_text = 'Привет! Я бот Плеяд. ' \
                             'Я отслеживаю активность в беседе, но по-хорошем отвечаю только в личке. ' \
                             'Чтобы заполнить анкеты, напишите мне в личку. ' \
                             'Чтобы я мог учитывать статистику сообщений в беседе, ' \
                             'выберите меня в списке участников беседы, нажмите на галочку, ' \
                             'и выберите "Дать доступ ко всей переписке".'
    else:
        turn.response_text = 'Это сообщение вы не должны были увидеть. Если оно пришло, Давид посадил багу.'
        turn.no_response = True

    if turn.polylogs_collection:
        mdata = m.data or {}
        turn.polylogs_collection.insert_one({
            'peer_id':
            m.peer_id,
            'user_id':
            m.user_id,
            'time':
            datetime.now(),
            'text':
            m.text,
            'reply_message':
            mdata.get('reply_message'),
            'id':
            mdata.get('id'),
        })
Exemple #6
0
def ask_for_results(turn: PTurn):
    turn.response_text = 'Чтобы выгрузить результаты опросов, пожалуйста, назовите кодовое слово.'
    turn.next_stage = 'get_results'
Exemple #7
0
def sendout_cancel(turn: PTurn):
    turn.next_stage = None
    turn.response_text = 'Окей, я не буду делать рассылку.'
Exemple #8
0
def ask_sendout_codeword(turn: PTurn):
    turn.response_text = 'Кодовое слово принято! Теперь отправьте мне сообщение, которое вы хотите разослать ' \
                         'ВСЕМ ПОДПИСЧИКАМ БОТА. Если вы передумали, скажите "нет".'
    turn.suggests.append('нет')
    turn.next_stage = 'sendout'
Exemple #9
0
def ask_for_sendout(turn: PTurn):
    turn.response_text = 'Чтобы сделать массовую рассылку, пожалуйста, назовите кодовое слово.'
    turn.next_stage = 'ask_sendout_codeword'
Exemple #10
0
def ask_for_reminders(turn: PTurn):
    turn.response_text = 'Чтобы разослать напоминания, пожалуйста, назовите кодовое слово.'
    turn.next_stage = 'send_reminders'
Exemple #11
0
def forget_me(turn: PTurn):
    turn.response_text = 'Хорошо, я стёр вас из своей памяти. Можете начать заново.'
    turn.user_object = {}