예제 #1
0
async def callback_user_door_edit(callback_query: CallbackQuery, **kwargs):
    logger.info(f'callback data: {callback_query.data}')
    if 'finished' in callback_query.data:
        return await callback_user_door_edit_finished(callback_query, **kwargs)

    chat_id, door_id, state = callback_query.data.replace('user_door_',
                                                          '').split('_')
    door = await Door.get(id=get_int(door_id))
    user = await User.get(chat_id=get_int(chat_id))

    if state == '0':
        await user.doors.remove(door)
    else:
        await user.doors.add(door)

    markup = await get_user_doors_markup(user.chat_id, user)
    await edit_message_reply_markup(callback_query.message.chat.id,
                                    callback_query.message.message_id,
                                    callback_query.inline_message_id, markup)
예제 #2
0
async def callback_door_skip(callback_query: CallbackQuery, **kwargs):
    logger.info(f'callback data: {callback_query.data}')
    door_id = get_int(callback_query.data.replace('door_skip_', ''))
    perco = dp['perco']
    await perco.open_door(door_id)
    await answer_callback_query(
        callback_query.id,
        'Дверь открыта, через 8 сек закроется автоматически')
    await sleep(8)
    await perco.close_door(door_id)
예제 #3
0
async def callback_door_close(callback_query: CallbackQuery, **kwargs):
    logger.info(f'callback data: {callback_query.data}')
    door_id = get_int(callback_query.data.replace('door_close_', ''))
    perco = dp['perco']
    await perco.close_door(door_id)
    is_closed = await perco.door_is_closed(door_id)
    if is_closed is None:
        message = 'Не удалось подключиться к Perco-WEB'
    elif is_closed:
        message = 'Дверь закрыта'
    else:
        message = 'Не удалось закрыть'
    await answer_callback_query(callback_query.id, message)
예제 #4
0
async def callback_user_door_edit_finished(callback_query: CallbackQuery,
                                           **kwargs):
    chat_id = get_int(callback_query.data.replace('user_door_finished_', ''))
    user = await User.get_or_none(chat_id=chat_id)

    if user and user.updated_at and datetime.utcnow(
    ) - user.updated_at.replace(tzinfo=None) < timedelta(minutes=5):
        await send_message(chat_id,
                           'Поздравляю, ваша учетная запись активирована!')

    await send_available_doors(chat_id, dp['perco'])
    return await delete_message(callback_query.message.chat.id,
                                callback_query.message.message_id)
예제 #5
0
async def callback_user_activate(callback_query: CallbackQuery, **kwargs):
    logger.info(f'callback data: {callback_query.data}')
    chat_id, activate = callback_query.data.replace('user_activate_',
                                                    '').split('_')
    user = await User.get_or_none(chat_id=get_int(chat_id))
    if not user:
        logger.warning(f'bad callback data: {callback_query.data}')
        return
    user.is_active = activate == '1'
    await user.save(update_fields=['is_active'])
    await delete_message(callback_query.message.chat.id,
                         callback_query.message.message_id)

    if user.is_active:
        markup = await get_user_doors_markup(user.chat_id, user)
        await send_message(
            callback_query.message.chat.id,
            f'Какие двери доступны для пользователя {user.full_name}?',
            reply_markup=markup)
예제 #6
0
async def callback_user_edit(callback_query: CallbackQuery, **kwargs):
    await delete_message(callback_query.message.chat.id,
                         callback_query.message.message_id)
    chat_id = get_int(callback_query.data.replace('user_edit_', ''))
    user = await User.get(chat_id=chat_id)
    await send_user_edit_message(user, settings.ADMIN_CHAT_ID)