Example #1
0
def check_vk_user_creation():
    id = get_numeric_id('unwado')
    vk_user = VKUser.get(vk_id=id)
    if vk_user is None:
        vk_user = VKUser(vk_id=id, status='a')
        vk_user.save()
    print(vk_user.jsonify())
    vk_user.update_pd()
    print(vk_user.jsonify())
Example #2
0
def change_status(vk_user, inc_message):
    if not validate_vk_user(vk_user):
        return 'Caller validation error'

    command = re.search(r'изменить статус (\w+) на (\w+)', inc_message.get_text().lower())
    if command is None:
        error_message(vk_user.vk_id, 'Некорректный формат команды. Необходимо указать id пользователя ВКонтакте и новый статус')
        return 'Invalid input format error'

    subject = VKUser.get(vk_id=get_numeric_id(command.group(1)))
    if subject is None:
        error_message(vk_user.vk_id, 'Пользователь {} не зарегистрирован'.format(command.group(1)))
        return 'User not signed up error'
    if subject.status == STATUS_ADMIN:
        error_message(vk_user.vk_id, 'Изменять статус администраторов возможно только через сервер')
        return 'User is admin error'
    status = command.group(2).lower()
    if status == STATUS_ADMIN and vk_user.status != STATUS_ADMIN:
        error_message(vk_user.vk_id, 'Некорректное указание статуса. Возможные варианты — u, m, a')
        return 'User is not admin error'
    if status not in [STATUS_ADMIN, STATUS_MODERATOR, STATUS_UNKNOWN]:
        error_message(vk_user.vk_id, 'Некорректное указание статуса. Возможные варианты — u, m, a')
        return 'Invalid status'
    subject.set_status(status)

    approval_message(
        vk_user.vk_id,
        'Пользователь @id{subj_id} ({subj_name} {subj_surname}) теперь имеет уровень доступа {status}'.format(
            subj_id = subject.vk_id,
            subj_name = subject.name,
            subj_surname = subject.surname,
            status = subject.format_status()
        )
    )
    notify_on_status_change(subject)
Example #3
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()
Example #4
0
def on_new_message(data):
    inc_message = IncomingMessage()
    inc_message.save(data['object']['message'])

    l_text = inc_message.get_text().lower()
    vk_user = inc_message.vk_user

    if vk_user is None:
        vk_user = VKUser(vk_id=inc_message.from_id)
        vk_user.save()
        new_user_greeting(vk_user)
        return 'ok'

    for command in COMMANDS.keys():
        if l_text.startswith(command):
            COMMANDS[command](vk_user, inc_message)
            return 'ok'
    print(l_text)
    error_message(vk_user.vk_id, 'Команда не распознана. Для вывода справки напишите "Справка"')
    return 'ok'
Example #5
0
def update_user_pd(vk_id):
    user = cur_user()
    if user is None or user.get_status() == STATUS_UNREGISTERED:
        return 'Not allowed', 403
    if user.vk_id != vk_id and user.get_status() not in ACCESS_GROUP:
        return 'Not allowed', 403
    vk_user = VKUser.get(vk_id=vk_id)
    if vk_user is None:
        return 'No such user', 404
    vk_user.update_pd()
    return vk_user.jsonify()
Example #6
0
def users_list():
    user = cur_user()
    if user is None or user.get_status() not in ACCESS_GROUP:
        return redirect(
            url_for('low_access_level', req_access=STATUS_MODERATOR))
    vk_users = VKUser.get_all()
    users = User.get_all()
    return render_template('users_list.html',
                           user=user,
                           title='Список пользователей',
                           vk_users=vk_users,
                           users=users)
Example #7
0
def user_page(vk_id):
    user = cur_user()
    if user is None or user.get_status() == STATUS_UNREGISTERED:
        return redirect(url_for('low_access_level', req_access='m'))
    if user.vk_id != vk_id and user.get_status() not in ACCESS_GROUP:
        return redirect(url_for('low_access_level', req_access='m'))
    vk_user = VKUser.get(vk_id=vk_id)
    if vk_user is None:
        return render_template('errors/404.html', title='404', user=user), 404
    return render_template('user_page.html',
                           title='Пользователь',
                           user=user,
                           vk_user=vk_user,
                           load_js=['update_pd'])
Example #8
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()
Example #9
0
from web import db
from web.models import VKUser, STATUS_ADMIN


db.reflect()
db.drop_all()
db.create_all()
db.session.commit()

superuser = VKUser(98626188, status=STATUS_ADMIN)
superuser.update_pd()
superuser.save()