Exemple #1
0
def BCH(values):
    lock.acquire()
    message = "Неверные данные"
    text = values.item['text'].split()

    try:
        if len(text) == 2:
            v = text[1]
            message = 'Держи решение!\n'
            latex, _ = search_error(v)
            ID = values.item['from_id']
            document = getPreamble()
            document += latex
            document += getEnd()
            name = str(ID) + 'SpNetwork.pdf'
            createPDF(document, '/tmp', name)
            filepath = os.path.join('/tmp', name)
            if filepath is not None:
                file = upload_file(filepath, values.item['from_id'], values.item['text'] + '.pdf', values.vkApi)
                os.remove(filepath)
                return message, file, get_default_buttons(values)
    finally:
        lock.release()

    return message, None, get_default_buttons(values)
Exemple #2
0
def deleteQueue(values):
    message = 'Какую очередь удалить?'
    keyboard = get_queue_names_for_removing(values)

    if keyboard is None:
        message = 'Очередей для твоей группы пока нет'
        keyboard = get_default_buttons(values)

    return message, None, keyboard
Exemple #3
0
def kroukMenu(values):
    message = 'Доступные алгоритмы:\n'\
              '1) Решение сравнения вида x^2 = a (mod p)\n' \
              'Чтобы получить таблицу, отправь мне \"Крук (число a) (модуль)\"\n' \
              'Пример: Крук 14 193\n\n' \
              '2) Расширенный алгоритм Евклида для решения сравнения вида ax = b (mod m)\n' \
              'Чтобы получить решение, отправь \"РАЕ (число a) (число b) (модуль)\"\n' \
              'Пример: РАЕ 26 53 97'
    return message, None, get_default_buttons(values)
Exemple #4
0
def send_day_weather(vk):
    users = getAllUsers()
    message = 'Доброе утро) Рассылка погоды :)\n\n' + getWeather()
    for user in getSubscribedUsersWeather():
        vk.messages.send(user_id=user,
                         message=message,
                         attachment=None,
                         keyboard=get_default_buttons(Namespace(users=users),
                                                      users_id=user))
Exemple #5
0
def removeFromQueue(values):
    queue = ' '.join(values.message.split(' ')[1:])
    user_id = values.item['from_id']

    message = 'Ты вышел из этой очереди: ' + queue
    keyboard = get_default_buttons(values)
    queue = '\"' + queue + '\"'
    removeFromQueueInDB(queue, user_id)

    return message, None, keyboard
Exemple #6
0
def getFile(values):
    type_file = {1: 'doc', 4: 'photo', 6: 'video', 8: 'doc'}

    message = 'Нашёл) Держи:'
    file_name = values.message[values.message.find(' ') + 1:]
    doc = values.vkApi.docs.search(q=file_name, search_own=1, count=200)['items']
    if len(doc) == 0:
        send_sticker(values.vkApi.get_api(), values.item['user_id'], 8480)
        return 'Ошибочка вышла', None, None
    file = type_file[doc[0]['type']] + str(doc[0]['owner_id']) + '_' + str(doc[0]['id'])
    return message, file, get_default_buttons(values)
Exemple #7
0
def materialsMenu(values):
    message = 'Вот список предметов, по которым имеются материалы. ' \
              'Если у тебя есть что-то ещё и ты хочешь этим поделиться - напиши админу!)'
    keyboard = get_materials_actions_buttons(values)

    if keyboard is None:
        message = 'Бот запустился недавно, материалов пока нет =(\n' \
                  'Если хочешь внести свою лепту - напиши админу!)'
        keyboard = get_default_buttons(values)

    return message, None, keyboard
Exemple #8
0
def get_answer(values):
    if len(values.item['fwd_messages']) >= 1:
        return 'Я не знаю, для чего мне нужны пересланные сообщения, поэтому пока не умею ' \
               'их обрабатывать) Если хочешь научить меня чему-нибудь полезному, напиши админам )', None, None

    message = values.item['text']
    if 'payload' in values.item:
        message = values.item['payload'].replace("\"", "")
    body = message.lower().split()
    from_id = values.item['from_id']

    # Пользователь не зарегистрирован
    if (from_id not in values.users) and (body[0] != 'shownameslist') and (body[0] != 'endofregistration') \
            and (body[0] != 'erroringroupchoosing'):
        # Пользователь не участник группы
        if values.vkApi.groups.isMember(group_id=str(168330527),
                                        user_id=from_id) != 1:
            return 'Для общения с ботом вступи в группу!', None, None
        return 'Тебе нужно зарегистрироваться! Выбери свою группу:', None, get_choose_group_buttons(
        )

    # Сообщение от пользователя отправлено в рассылку ?
    dictWithMessageFromAdmin = getDictWithMessageFromAdmin(from_id)
    if dictWithMessageFromAdmin is not None:
        messageFromAdmin = ast.literal_eval(dictWithMessageFromAdmin)
        if (from_id in messageFromAdmin) and (body == [] or (body[0] not in [
                'infosendmessage', 'backtodefaultkeyboard', 'infobygroup'
        ])):

            messageFromAdmin[from_id]['message'] = values.item
            groups = messageFromAdmin[from_id]['groups']
            setDictWithMessageFromAdmin(from_id, str(messageFromAdmin))
            message = 'Сделать рассылку группам: ' + ' '.join(groups) + '?'
            return message, None, get_asking_if_send_message_buttons()

    # Обработка аудио/вложений
    if len(values.item['attachments']) > 0:
        message = 'Я не понимаю, чего ты от меня хочешь. Чтобы узнать, ' \
                  'что я умею, нажми на зелёную кнопку со знаком вопроса'
        if values.item['attachments'][0]['type'] == 'audio_message':
            url = values.item['attachments'][0]['audio_message']['link_ogg']
            message = voice_processing(url)

    # Обработка команд
    values.message = message
    body = message.lower().split()
    attachment = None
    key = get_default_buttons(values)
    for c in command_list:
        if body[0] in c.keys:
            message, attachment, key = c.process(values)
            break

    return message, attachment, key
Exemple #9
0
def appealToAdmin(values):
    user_id = values.item['from_id']
    name = values.users[user_id]['name'] + ' ' + values.users[user_id][
        'surname']

    msg_words = values.item['text'].split()[1:]
    msg = 'Сообщение для админа: \n\n' + \
          ' '.join(msg_words) + '\n\n' + name

    send_msg(values.vkApi, 38081883, msg, attachment=None, keyboard=None)

    return 'Сообщение отправлено администратору )', None, get_default_buttons(
        values)
Exemple #10
0
def feistelCipher(values):
    lock.acquire()
    message = "Неверные данные"
    text = values.item['text'].split()

    try:
        if len(text) == 6:
            ciphertext = text[1]
            keys = [int(text[2]), int(text[3]), int(text[4])]
            permutation = text[5]
            message = 'Держи решение!\n'
            filepath = decoderFeistelCipher(ciphertext, keys, permutation,
                                            values.item['from_id'])
            if filepath is not None:
                file = upload_file(filepath, values.item['from_id'],
                                   values.item['text'] + '.pdf', values.vkApi)
                os.remove(filepath)
                return message, file, get_default_buttons(values)
    finally:
        lock.release()

    return message, None, get_default_buttons(values)
Exemple #11
0
def removeQueue(values):
    name = ' '.join(values.message.split()[1:])
    name_ = '\"' + name + '\"'

    if name in getQueueNames():
        removeQueueInBD(name_)
        remove_from_asked_list(values.item['from_id'])

    for queue in getDateDeletedTables():
        if name == queue[0]:
            removeFromDateDeleted(name)

    message = 'Удалена очередь: ' + name
    keyboard = get_default_buttons(values)

    return message, None, keyboard
Exemple #12
0
def queueCreation(values):
    data_delete = ''
    subject = values.item['text']
    tail_of_queue_name = values.message.split()[1:]
    tail_of_queue_name_str = ' '.join(tail_of_queue_name)
    groups, date = tail_of_queue_name_str.split('_')

    queue_name = subject + '_' + groups + '_' + date
    if queue_name in getQueueNames():
        return 'Такая очередь уже есть!', None, get_default_buttons(values)

    date = date.split()[0]
    day, month = date.split('.')
    if month[0] == '0':
        month = month[1]

    now = datetime.now()
    for i in range(0, 5):
        day_str = str(now.timetuple()[2])
        month_str = str(now.timetuple()[1])

        if (day_str == day) and (month_str == month):
            now += timedelta(3)
            day_str = str(now.timetuple()[2])
            month_str = str(now.timetuple()[1])
            year_str = str(now.timetuple()[0])
            data_delete = day_str + '.' + month_str + '.' + year_str
            break
        now += timedelta(1)

    createQueueInBD('\"' + queue_name + '\"')
    addTableInDateDeleteTable(queue_name, data_delete, values.item['from_id'])

    message = 'Создана очередь: ' + queue_name

    for user in values.users:
        if (str(values.users[user]['group'])
                in groups.split()) and (user != values.item['from_id']):
            send_msg(values.vkApi,
                     user,
                     message,
                     attachment=None,
                     keyboard=get_queue_actions_buttons(queue_name, False))

    return message, None, get_queue_actions_buttons(queue_name, False)
Exemple #13
0
def rewriteQueueDelete(values):
    name = values.message.split()[1:]
    name = ' '.join(name)

    new_date = datetime.now() + timedelta(3)
    day = str(new_date.timetuple()[2])
    month = str(new_date.timetuple()[1])
    year = str(new_date.timetuple()[0])
    date = day + '.' + month + '.' + year

    message = 'Перенесена дата удаления очереди ' + name
    name = '\"' + name + '\"'

    updateDateInDateDeleted(name, date)
    remove_from_asked_list(values.item['from_id'])

    keyboard = get_default_buttons(values)

    return message, None, keyboard
Exemple #14
0
def endOfRegistration(values):
    fullname = values.item['text']
    surname, name = fullname.split()
    group = values.message.split()[1]
    user_id = values.item['from_id']

    setNameSelectedToGoogle(fullname, group)
    addPersonToDB(user_id, name, surname, int(group))

    message = 'Ты зарегистрирован как ' + fullname + '!) ' \
              'Если случайно нажал не туда - напиши администратору!\n\n' \
              'Я новый бот, созданный для облегчения жизни студентам 52 кафедры. ' \
              'Я буду учиться решать алгоритмы и задачи, чтоб помогать тебе на контрольных, ' \
              'хранить материалы и лабы, которыми поделятся твои однокурсники и ты. ' \
              'Я умею выстраивать электронную очередь, присылать расписание и оперативно помогать ' \
              'в учёбе при помощи википедии, вольфрама и переводчика.\n' \
              'Чтобы узнать, что я могу и как меня об этом попросить, нажми на знак вопроса )\n\n'

    return message, None, get_default_buttons(values)
def send_day_timetable(vk, timetable_dict):
    users = getAllUsers()

    is_upper = True if (dt.datetime.now().isocalendar()[1] % 2 == 0) else False

    week = ['Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота', 'Воскресенье']
    day_number = (dt.datetime.weekday(dt.datetime.now()) + 1) % 7

    if day_number == 0:
        is_upper = not is_upper

    for user in getSubscribedUsers():
        message = getTimetableByDay(timetable_dict, users[user]['group'],
                                    week[day_number], is_upper)
        if message == '':
            continue
        message = 'Расписание на завтра:\n\n' + message
        vk.messages.send(user_id=user, message=message, attachment=None,
                         keyboard=get_default_buttons(Namespace(users=users), users_id=user))
Exemple #16
0
def queuesMenu(values):
    message = 'В этом меню показаны все открытые очереди. ' \
              'Ты можешь встать в очередь, доступную для твоей группы, и выйти из неё. ' \
              'Если ты уже есть в очереди, бот предложит тебе встать в конец ' \
              '(допустим, ты уже прошёл и хочешь подойти снова). \n' \
              'Для выбора действия, нажми на кнопку с названием одной из очередей. ' \
              'Так же ты увидишь список людей, которые уже в неё записались.\n\n'

    keyboard = get_queue_names_buttons()

    if keyboard is None:
        message += 'Сейчас доступных очередей нет =( \n' \
                   'Обратись к старосте или разработчику для открытия новой!'
        keyboard = get_default_buttons(values)
    else:
        message += 'Если в списке ещё нет нужной очереди, обратись к старосте ' \
                   'или разработчику для её открытия)'

    return message, None, keyboard
Exemple #17
0
def help(values):
    message = 'Общение с ботом:\n' \
              '• Чтобы перейти к архиву лаб, нажми на кнопку \"Лабы и материалы\"\n' \
              '• Для открытия решебника задач нажми на кнопку \"Алгоритмы\"\n\n' \
              '• Нажми на кнопку \"Очередь\", чтобы перейти в меню доступных очередей,' \
              'встать в очередь или посмотреть списки уже имеющихся\n\n' \
              '• Чтобы воспользоваться переводчиком, ' \
              'напиши \"переведи\", далее через пробел в этом же сообщении пиши текст для перевода. ' \
              'Аналогично ты можешь найти что-то в Вольфраме (\"вольфрам текст запроса\")' \
              ' и Википедии (\"вики текст запроса\")\n' \
              '• Напиши боту \"погода\" и увидишь прогноз в Питере :)\n\n' \
              '• Бот понимает аудиосообщения, так что если нет возможности написать ' \
              '(или просто лень) - говори!)\n\n' \
              '• Кроме этого в боте доступны рассылки. Ты можешь подписаться и получать уведомление с краткой ' \
              'информацией ' \
              'и номером аудитории за 15 минут до каждой пары, а так же расписание на следующий день (в 21:00) и ' \
              'погоду на текущий (в 9:00). Ты сможешь отписаться в любой момент и подписаться снова в меню ' \
              'подписок)\n\n' \
              '• Если у тебя возникли проблемы или вопросы, отправь боту \"admin (сообщение)\" ' \
              'без скобок или обратись к разработчикам лично! Бот очень хочет развиваться, ' \
              'поэтому если у тебя есть предложения по оптимизации, идеи или пожелания - ' \
              'не сиди, вноси свою лепту, мы будем рады!)'

    return message, None, get_default_buttons(values)
def send_subject_notification(vk, subject, timetable_dict):
    users = getAllUsers()

    is_upper = True if (dt.datetime.now().isocalendar()[1] % 2 == 0) else False

    week = ['Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота', 'Воскресенье']
    day_number = dt.datetime.weekday(dt.datetime.now())

    for group in range(5621, 5624):
        if week[day_number] in timetable_dict[str(group)]:
            timetable = timetable_dict[str(group)][week[day_number]]
            if subject in timetable:
                for sub in timetable[subject]:
                    if sub['isUpper'] == is_upper or sub['isUpper'] is None:
                        message = '🕓 '
                        message += sub['type'] + ' ('
                        message += sub['lecture hall'] + ') ' + sub['name'] + ' '
                        message += '(' + sub['teacher'] + ')'
                        message += ' - начнётся через 15 минут'
                        for user in getSubscribedUsers():
                            if users[user]['group'] == group:
                                vk.messages.send(user_id=user, message=message, attachment=None,
                                                 keyboard=get_default_buttons(Namespace(users=users),
                                                                              users_id=user))
Exemple #19
0
def hello(values):
    message = 'Привет!\nЯ чат-бот 52 кафедры СПбГУАП. Чтобы узнать, что я могу, ' \
              'нажми на зелёную кнопку со знаком вопроса. Буду рад тебе помочь!'
    return message, None, get_default_buttons(values)
Exemple #20
0
def weather(values):
    return values.weather, None, get_default_buttons(values)
def backToDefaultKeyboard(values):
    deleteDictWithMessageFromAdmin(values.item['from_id'])

    return 'Главное меню', None, get_default_buttons(values)