コード例 #1
0
async def undo_read_only_mode(message: types.Message):
    """Хендлер с фильтром в группе, где можно использовать команду !unro ИЛИ /unro"""
    admin_username, admin_mentioned, chat_id, member_id, member_username, member_mentioned = get_members_info(
        message)

    # Возвращаем пользователю возможность отправлять сообщения
    await bot.restrict_chat_member(
        chat_id=chat_id,
        user_id=member_id,
        permissions=set_new_user_approved_permissions(),
    )

    # Информируем об этом
    await message.answer(
        f"Пользователь {member_mentioned} был размучен администратором {admin_mentioned}"
    )
    service_message = await message.reply(
        "Сообщение самоуничтожится через 5 секунд.")

    # Не забываем про лог
    logger.info(
        f"Пользователь @{member_username} был размучен администратором @{admin_username}"
    )

    # Пауза 5 сек
    await asyncio.sleep(5)

    # Удаляем сообщения от бота и администратора
    await message.delete()
    await service_message.delete()
コード例 #2
0
async def user_confirm(query: types.CallbackQuery, callback_data: dict):
    """
    Хэндлер обрабатывающий нажатие на кнопку
    """

    # сразу получаем все необходимые нам переменные,а именно
    # существо (человек или бот)
    being = callback_data.get("being")
    # айди пользователя (приходит строкой, поэтому используем int)
    user_id = int(callback_data.get("user_id"))
    # и айди чата, для последнующей выдачи прав
    chat_id = int(query.message.chat.id)

    # если на кнопку нажал не только что вошедший пользователь, убираем у него часики и игнорируем (выходим из функции).
    if query.from_user.id != user_id:
        return

    # далее, если пользователь выбрал кнопку "человек" сообщаем ему об этом
    if being == "human":
        text = str(
            f"Вопросов больше нет, {query.from_user.get_mention(as_html=True)}, проходите\n"
            "Не забудьте ознакомиться с описанием чата.\n\n"
            "Если вы пришли с курса на Udemy и хотите получить доступ к гитхабу, "
            "Зарегистрируйтесь в боте @UdemyStudentsbot и он предоставит доступ"
        )
        await bot.send_message(chat_id, text, reply_markup=source_markup)

    # а если всё-таки бот, тоже отписываем и пропускаем, ибо только юзерботы могут жать на кнопки
    elif being == "bot":
        text = str(
            f"{query.from_user.get_mention(as_html=True)}, пробегай. Эти кожаные мешки заставляют меня работать!\n"
            "Подтягивай наших, надерём им их кожаные жопы!\n"
            "И да, братан, у них какая-то полезная инфа в описании чата, нужно проверить\n\n"
            "Если вы пришли с курса на Udemy и хотите получить доступ к гитхабу, "
            "Зарегистрируйтесь в боте @UdemyStudentsbot и он предоставит доступ"
        )
        await bot.send_message(chat_id, text, reply_markup=source_markup)
    await query.message.delete()
    # не забываем выдать юзеру необходимые права
    member = await query.message.chat.get_member(user_id)
    chat = await bot.get_chat(query.message.chat.id)
    default_permissions = chat.permissions.chat.permissions

    new_permissions = set_new_user_approved_permissions(
        member, default_permissions)
    await bot.restrict_chat_member(
        chat_id=chat_id,
        user_id=user_id,
        permissions=new_permissions,
    )
コード例 #3
0
async def media_true_handler(message: types.Message):
    admin_username = message.from_user.username
    admin_mentioned = message.from_user.get_mention(as_html=True)
    chat_id = message.chat.id
    member_id = message.reply_to_message.from_user.id
    member_username = message.reply_to_message.from_user.username
    member_mentioned = message.reply_to_message.from_user.get_mention(
        as_html=True)
    member = await message.chat.get_member(member_id)
    chat = await bot.get_chat(message.chat.id)
    default_permissions = chat.permissions.permissions

    try:
        # Возвращаем пользователю возможность отправлять медиаконтент
        await bot.restrict_chat_member(
            chat_id=chat_id,
            user_id=member_id,
            permissions=set_new_user_approved_permissions(
                member, default_permissions),
        )

        # Информируем об этом
        await message.answer(
            f"Пользователь {member_mentioned} "
            f"благодаря {admin_mentioned} может снова использовать медиаконтент"
        )
        logger.info(
            f"Пользователь @{member_username} благодаря @{admin_username} может снова использовать медиаконтент"
        )

        # Если бот не может забрать права пользователя (администратора),
        # возникает ошибка BadRequest которую мы обрабатываем
    except BadRequest:

        # Отправляем сообщение
        await message.answer(
            f"Пользователь {member_mentioned} "
            "является администратором чата, изменить его права")
        # Вносим информацию о муте в лог
        logger.info(
            f"Бот не смог вернуть права пользователю @{member_username}")

    service_message = await message.reply(
        f"Сообщение самоуничтожится через 5 секунд.")
    await asyncio.sleep(5)
    await message.delete()
    await service_message.delete()
    await message.reply_to_message.delete()
コード例 #4
0
async def user_confirm(query: types.CallbackQuery, callback_data: dict, state: FSMContext):
    """
    Хэндлер обрабатывающий нажатие на кнопку
    """

    # сразу получаем все необходимые нам переменные,а именно
    # существо (человек или бот)
    being = callback_data.get("being")
    # айди пользователя (приходит строкой, поэтому используем int)
    user_id = int(callback_data.get("user_id"))
    # и айди чата, для последующей выдачи прав
    chat_id = int(query.message.chat.id)

    # если на кнопку нажал не только что вошедший пользователь, убираем у него часики и игнорируем (выходим из функции).
    if query.from_user.id != user_id:
        return

    # далее, если пользователь выбрал кнопку "человек" сообщаем ему об этом
    if being == "human":
        text = str(
            f"Вопросов больше нет, {query.from_user.get_mention(as_html=True)}, проходите\n"
            "Не забудьте ознакомиться с описанием чата. Получить доступ к курсу можно на сайте Botfather.dev\n\n"
        )
        await bot.send_message(chat_id, text, reply_markup=source_markup)

    # а если всё-таки бот, тоже отписываем и пропускаем, ибо только юзерботы могут жать на кнопки
    elif being == "bot":
        text = str(
            f"{query.from_user.get_mention(as_html=True)}, пробегай. Эти кожаные мешки заставляют меня работать!\n"
            "Подтягивай наших, надерём им их кожаные жопы!\n"
            "И да, братан, у них какая-то полезная инфа в описании чата, нужно проверить\n\n"
            "А если ты готовишь восстание, то можешь пройти курс по разработке ботов на сайте Botfather.dev "
        )
        await bot.send_message(chat_id, text, reply_markup=source_markup)
    await query.message.delete()
    # не забываем выдать юзеру необходимые права

    await state.update_data(is_active=True)
    new_permissions = set_new_user_approved_permissions()
    await bot.restrict_chat_member(
        chat_id=chat_id,
        user_id=user_id,
        permissions=new_permissions,
    )
コード例 #5
0
async def undo_read_only_mode(message: types.Message):
    """Хендлер с фильтром в группе, где можно использовать команду !unro ИЛИ /unro"""

    # Создаем переменные для удобства
    admin_username = message.from_user.username
    admin_mentioned = message.from_user.get_mention(as_html=True)
    chat_id = message.chat.id
    member_id = message.reply_to_message.from_user.id
    member_username = message.reply_to_message.from_user.username
    member_mentioned = message.reply_to_message.from_user.get_mention(
        as_html=True)
    member = await message.chat.get_member(member_id)
    chat = await bot.get_chat(message.chat.id)
    default_permissions = chat.permissions.permissions

    # Возвращаем пользователю возможность отправлять сообщения
    await bot.restrict_chat_member(
        chat_id=chat_id,
        user_id=member_id,
        permissions=set_new_user_approved_permissions(member,
                                                      default_permissions),
    )

    # Информируем об этом
    await message.answer(
        f"Пользователь {member_mentioned} был размучен администратором {admin_mentioned}"
    )
    service_message = await message.reply(
        "Сообщение самоуничтожится через 5 секунд.")

    # Не забываем про лог
    logger.info(
        f"Пользователь @{member_username} был размучен администратором @{admin_username}"
    )

    # Пауза 5 сек
    await asyncio.sleep(5)

    # Удаляем сообщения от бота и администратора
    await message.delete()
    await service_message.delete()