예제 #1
0
def information_message(vk_user, inc_message):
    l_text = inc_message.get_text().lower()
    filter_expired = True
    since = None

    command = re.search(r'от (\d{4})-(\d{2})-(\d{2})', l_text)
    if command is not None:
        since = date(
            year = int(command.group(1)),
            month = int(command.group(2)),
            day = int(command.group(3))
        )
    if 'истекшее' in l_text:
        filter_expired = False

    if filter_expired:
        info_list = Information.get_unexpired(since=since)
    else:
        info_list = Information.get_all(since=since)

    if len(info_list) == 0:
        OutgoingMessage(
            to_id = vk_user.vk_id,
            text = 'Нет информации, подходящей под критерии'
        ).send()

    for info in info_list:
        OutgoingMessage(
            to_id = vk_user.vk_id,
            text = info.formatted_output()
        ).send()
예제 #2
0
def new_user_greeting(vk_user):
    vk_user.update_pd()
    name = vk_user.name
    text = 'Добро пожаловать, {}! Для вывода справки напишите "Справка"'.format(
        name)

    message = OutgoingMessage(to_id=vk_user.vk_id, text=text)
    result = message.send()
    if not result:
        logging.error('Failed to send message to user %s.', user_id)
예제 #3
0
def help_message(vk_user, inc_message):
    text = ('Это бот для расписаний и прочей информации. ' +
        'На текущий момент Вы можете использовать следующие команды: \n\n' +
        '— Справка: выводит текст данной справки \n\n' +
        '— STN [year-month-day]: выводит, какие группы на этой неделе идут в какой день. \n' +
        'Если указана дата, выводит то, какие группы идут в какой день на неделе, к которой относится дата \n\n' +
        '— Прак [year-month-day]: выводит, какие группы на этой неделе идут на практикум по аналитике \n' +
        'Если указана дата, выводит то, какие группы идут на неделе, к которой относится дата \n\n' +
        '— Уровни доступа: более подробная информация о системе с уровнями доступа \n\n' +
        '— Информация [истекшее] [от year-month-day]: выводит актуальные информационные сообщения \n' +
        'Если указан параметр "истекшее", то выводит в том числе и информацию с истёкшим сроком \n' +
        'Если указана дата, то выводит информацию, добавленную не ранее этой даты \n\n' +
        '— Расписание [день недели или дата] [группа *номер группы*]: выводит расписание \n' +
        'Если указан параметр [день недели или дата], то выводит расписание только на конкретный день (формат даты: year-month-day, пример: "2020-09-01"). День недели должен быть указан полностью (пример: "понедельник") \n' +
        'Если указан параметр [группа *номер группы*] (доступно только Модераторам и Администраторам), то выводит расписание произвольной группы \n\n' +
        '— Я: выводит доступную боту информацию о Вашей личности \n\n')
    moder_level = ('Далее перечислены функции, доступные только Модераторам и Администраторам \n\n' +
        '— Пользователи ВК: выводит список людей, которые писали боту и доступны для написания сообщений \n\n' +
        '— Пользователи БД: выводит список людей, зарегистрированных в базе \n\n')
    admin_level = ('Далее перечислены функции, доступные только Администраторам \n\n' +
        '— Изменить статус {login} на {access_level}')
    if vk_user.status in ACCESS_GROUP:
        text += moder_level
    if vk_user.status == STATUS_ADMIN:
        text += admin_level
    OutgoingMessage(
        to_id=vk_user.vk_id,
        text=text
    ).send()
예제 #4
0
def notify_admin_on_registration(user):
    admin = VKUser.get(status=STATUS_ADMIN)[0]
    OutgoingMessage(
        to_id=admin.vk_id,
        text=
        'Новый пользователь @id{vk_id} ({login}) зарегистрировался на сайте. \
            Чтобы изменить его уровень доступа, отправьте сообщение \
            "Задать уровень доступа *vk_id* как *уровень доступа*."'.format(
            vk_id=user.vk_id, login=user.login)).send()
예제 #5
0
def info_access_level(vk_user, inc_message):
    text = ('На текущий момент реализовано три уровня доступа \n' +
        '— Администратор (A): имеет право на внесение изменений в уровень доступа других людей, ' +
        'а также обладает другими правами, доступными остальным пользователям. \n' +
        '— Модератор (M): имеет право на просмотр списка зарегистрированных пользователей и на добавление информации \n' +
        '— Обычный пользователь (U): не имеет прав, кроме как писать боту')
    admin_level = ('\n\nВы являетесь администратором, '+
        'а потому можете изменять статус других людей ' +
        'при помощи команды "Задать уровень доступа {vk_id} как {status}"')
    self_status = '\n\nВаш статус — {}'
    if vk_user.status == STATUS_ADMIN:
        text += admin_level
    else:
        text += self_status.format(vk_user.format_status())
    OutgoingMessage(
        to_id=vk_user.vk_id,
        text=text
    ).send()
예제 #6
0
def user_list(vk_user, inc_message):
    if not validate_vk_user(vk_user):
        return 'Caller validation error'

    command = re.search(r'пользователи (\w+)', inc_message.get_text().lower())
    if command is None:
        error_message(vk_user.vk_id, 'Необходимо указать категорию пользователей (БД, ВК или все)')
        return 'Category not stated error'

    category = command.group(1)
    text = ''
    if category == 'бд' or category == 'все':
        bd_users = User.get_all()
        text += 'Пользователи базы: \n'
        for user in bd_users:
            if user.vk_user is None:
                status = 'нет связи с VKUser'
            else:
                status = user.vk_user.format_status()
            text += '— @id{vk_id} ({login}): уровень доступа — {access_level} \n'.format(
                vk_id = user.vk_id,
                login = user.login,
                access_level = status
            )
    if category == 'вк' or category == 'все':
        vk_users = VKUser.get_all()
        text += 'Пользователи ВК: \n'
        for user in vk_users:
            text += '— @id{vk_id} ({surname} {name}): уровень доступа — {access_level}, зарегистрирован {reg_date} \n'.format(
                vk_id = user.vk_id,
                surname = user.surname,
                name = user.name,
                access_level = user.format_status(),
                reg_date = user.format_reg_date()
            )
    if text == '':
        text = 'На текущий момент соответствующих пользователей нет'
    OutgoingMessage(
        to_id = vk_user.vk_id,
        text = text
    ).send()
예제 #7
0
def about_me(vk_user, inc_message):
    message = 'VK: \n'
    message += ('Фамилия: {surname} \n' +
        'Имя: {name} \n' +
        'Дата регистрации ботом: {reg_date} \n' +
        'Уровень доступа: {status}\n'
    ).format(
        surname = vk_user.surname,
        name = vk_user.name,
        reg_date = vk_user.format_reg_date(),
        status = vk_user.format_status()
    )
    if vk_user.birth_date is not None:
        message += 'Дата рождения: {}\n'.format(vk_user.format_birth_date())

    if vk_user.person is not None:
        person = vk_user.person
        message += '\nДобавлено вручную: \n'
        message += 'ФИО: {} \n'.format(person.full_name())
        if person.birth_date is not None:
            message += 'Дата рождения: {}\n'.format(person.get_birth_date())
        if person.phone_number is not None:
            message += 'Телефон: {}\n'.format(person.get_phone_number())
        if person.email is not None:
            message += 'Почта: {}\n\n'.format(person.email)
        if person.student is not None:
            message += 'Студент {edu_org}, факультет {department}, группа {group}\n\n'.format(
                edu_org = person.student.group.department.edu_org.name,
                department = person.student.group.department.name,
                group = person.student.group.format_name()
            )
        if person.teacher is not None:
            message += 'Преподаватель {edu_org}, подразделение {department}\n\n'.format(
                edu_org = person.teacher.department.edu_org.name,
                department = person.teacher.department.name
            )
    OutgoingMessage(
        to_id = vk_user.vk_id,
        text = message
    ).send()
예제 #8
0
def analytics_group(vk_user, inc_message):
    command = re.search(r'прак (\d{4})-(\d{2})-(\d{2})', inc_message.get_text().lower())
    if command is None:
        text = 'На этой неделе на аналитику идут группы {} и {}'
        if is_week_even():
            text = text.format(2, 4)
        else:
            text = text.format(1, 3)
    else:
        dt = date(
            year = int(command.group(1)),
            month = int(command.group(2)),
            day = int(command.group(3))
        )
        text = 'На неделе, соответствующей {}, на аналитику идут группы {} и {}'
        if is_week_even(dt):
            text = text.format(dt, 2, 1)
        else:
            text = text.format(dt, 1, 2)

    OutgoingMessage(
        to_id = vk_user.vk_id,
        text = text
    ).send()
예제 #9
0
def stn_groups(vk_user, inc_message):
    command = re.search(r'stn (\d{4})-(\d{2})-(\d{2})', inc_message.get_text().lower())
    if command is None:
        text = 'На этой неделе на STN во вторник идёт группа {group_tuesday}, а в пятницу группа {group_friday}'
        if is_week_even():
            text = text.format(group_tuesday=2, group_friday=1)
        else:
            text = text.format(group_tuesday=1, group_friday=2)
    else:
        dt = date(
            year = int(command.group(1)),
            month = int(command.group(2)),
            day = int(command.group(3))
        )
        text = 'На неделе, соответствующей {dt}, на STN во вторник идёт группа {group_tuesday}, а в пятницу группа {group_friday}'
        if is_week_even(dt):
            text = text.format(dt=dt, group_tuesday=2, group_friday=1)
        else:
            text = text.format(dt=dt, group_tuesday=1, group_friday=2)

    OutgoingMessage(
        to_id = vk_user.vk_id,
        text = text
    ).send()
예제 #10
0
def check_outgoing_message():
    out_message = OutgoingMessage(98626188, 'Привет, unwado!')
    print(out_message.send())
예제 #11
0
def schedule(vk_user, inc_message):
    l_text = inc_message.get_text().lower()
    week_day = None
    dt = None
    even_week = WEEK_EVEN[is_week_even()]

    person = vk_user.person
    if vk_user.status not in ACCESS_GROUP and (person is None or person.student is None):
        error_message(vk_user.vk_id, 'Вы не являетесь обучающимся')
        return 'Not student error'

    if person is not None and person.student is not None:
        group = person.student.group
    command = re.search(r'группа ([\S]+)', inc_message.get_text())
    if command is not None:
        if vk_user.status not in ACCESS_GROUP:
            error_message(vk_user.vk_id, 'Просматривать расписание с указанием группы могут только Модераторы и Администраторы')
            return 'Caller validation error'
        else:
            print(command.group(1))
            group = StudyGroup.get_by_name(command.group(1))
            if len(group) == 0:
                error_message(vk_user.vk_id, 'Указанная группа не существует')
                return 'Invalid group error'
            elif len(group) > 1:
                error_message(vk_user.vk_id, 'Существует несколько групп с таким названием')
                return 'More than one group error'
            else:
                group = group[0]
    command = re.search(r'(\d{4})-(\d{2})-(\d{2})', l_text)
    if command is not None:
        dt = date(
            year = int(command.group(1)),
            month = int(command.group(2)),
            day = int(command.group(3))
        )
        week_day = dt.weekday()
    else:
        for i in range(len(WEEK_DAYS)):
            if WEEK_DAYS[i] in l_text:
                week_day = i
                break

    if week_day is not None:
        message = 'Расписание на {}'.format(WEEK_DAYS[week_day])
        if dt is not None:
            message += ' {}: \n'.format(format_date(dt))
        else:
            ' этой недели: \n'
    else:
        message = 'Расписание на текущую неделю: \n'
    lessons = group.get_lessons(week_day=week_day, is_week_even=even_week)
    week_day = -1
    for lesson in lessons:
        if lesson.week_day > week_day:
            week_day = lesson.week_day
            message += '\n' + WEEK_DAYS[week_day].capitalize() + '\n'
        message += lesson.formatted_output() + '\n'
    OutgoingMessage(
        to_id = vk_user.vk_id,
        text = message
    ).send()
예제 #12
0
def error_message(vk_id, text):
    OutgoingMessage(
        to_id=vk_id,
        text='Ошибка при выполнении команды. \n {}'.format(text)).send()
예제 #13
0
def approval_message(vk_id, text):
    OutgoingMessage(
        to_id=vk_id,
        text='Запрошенная Вами команда выполнена успешно. \n {}'.format(
            text)).send()
예제 #14
0
def notify_on_status_change(vk_user):
    OutgoingMessage(to_id=vk_user.vk_id,
                    text='Ваш уровень доступа к боту изменён.\n \
            Текущий уровень доступа: {}'.format(
                        STATUS[vk_user.status])).send()