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()
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, )
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()
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, )
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()