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())
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)
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()
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'
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()
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)
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'])
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()
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()