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
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"]} - о новых.'
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 = "У меня пока больше нет для вас контента. Напишите позднее, пожалуйста."
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} пользователям (кроме тех, которые заблокировали бота). '
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'), })
def ask_for_results(turn: PTurn): turn.response_text = 'Чтобы выгрузить результаты опросов, пожалуйста, назовите кодовое слово.' turn.next_stage = 'get_results'
def sendout_cancel(turn: PTurn): turn.next_stage = None turn.response_text = 'Окей, я не буду делать рассылку.'
def ask_sendout_codeword(turn: PTurn): turn.response_text = 'Кодовое слово принято! Теперь отправьте мне сообщение, которое вы хотите разослать ' \ 'ВСЕМ ПОДПИСЧИКАМ БОТА. Если вы передумали, скажите "нет".' turn.suggests.append('нет') turn.next_stage = 'sendout'
def ask_for_sendout(turn: PTurn): turn.response_text = 'Чтобы сделать массовую рассылку, пожалуйста, назовите кодовое слово.' turn.next_stage = 'ask_sendout_codeword'
def ask_for_reminders(turn: PTurn): turn.response_text = 'Чтобы разослать напоминания, пожалуйста, назовите кодовое слово.' turn.next_stage = 'send_reminders'
def forget_me(turn: PTurn): turn.response_text = 'Хорошо, я стёр вас из своей памяти. Можете начать заново.' turn.user_object = {}