Как принимать заявку на вступление в канал через бота?

Я попытался реализовать такую логику но выскакивает ошибка, логируя ошибку получаю вот такой вывод: ERROR:root:Произошла ошибка при добавлении пользователя 6716****09 в канал: Telegram server says - Bad Request: HIDE_REQUESTER_MISSING. По сути задача достаточно базовая, но я не смог найти на неё решение.

@router.message(CommandStart())
    async def start(message: Message):
        bot_token = message.bot.token
        tg_id = message.from_user.id

        user_has_permission = await rq.get_user_and_bot(tg_id, bot_token) # получение статуса

        if user_has_permission:
            await message.answer(f"Привет, админ {message.from_user.first_name}!", reply_markup=main_client)
        else:
            keyboard = await request_join_keyboard()
            await message.answer("Чтобы подать заявку на вступление в канал, нажмите кнопку ниже.", reply_markup=keyboard)


    # Обработчик callback_query на кнопку "Подать заявку на вступление в канал"
    @router.callback_query(F.data == "request")
    async def handle_join_request(callback_query: CallbackQuery):
        # Получите ID вашего канала
        chat_id = await rq.get_group_id(callback_query.bot.token)  # Предполагается, что эта функция возвращает ID канала
        user_id = callback_query.from_user.id

        try:
            # Попытка одобрить заявку через ChatJoinRequest
            bot_member = await callback_query.bot.get_chat_member(chat_id, callback_query.bot.id)
            if bot_member.status == 'administrator':
                # Сообщаем пользователю, что заявка отправлена
                await callback_query.message.edit_text("Ваша заявка на вступление в канал отправлена. Ожидайте подтверждения.")
                
                # Отклонение колбэка для предотвращения ожидания в Telegram
                await callback_query.answer()

                # Вручную отправляем заявку на вступление (для каналов необходимо добавить пользователя вручную)
                await callback_query.bot.approve_chat_join_request(chat_id=chat_id, user_id=user_id)
                logging.info(f"Заявка одобрена для пользователя: {user_id}")

                # Отправка сообщения пользователю в личные сообщения
                await callback_query.bot.send_message(chat_id=user_id, text="Ваша заявка одобрена! Теперь вы получили доступ к каналу.")
            else:
                await callback_query.message.answer("Бот не является администратором канала и не может одобрить вашу заявку.")
        except Exception as e:
            logging.error(f"Произошла ошибка при добавлении пользователя {user_id} в канал: {e}")
            await callback_query.bot.send_message(chat_id=user_id, text="К сожалению, ваша заявка не была одобрена. Попробуйте позже.")

    # Обработчик заявок на вступление в канал
    @router.chat_join_request()
    async def handle_chat_join_request(update: ChatJoinRequest):
        try:
            # Одобрение запроса на вступление
            await update.approve()
            logging.info(f"Заявка одобрена для пользователя: {update.from_user.id}")

            # Отправка сообщения пользователю в личные сообщения
            await update.bot.send_message(chat_id=update.from_user.id, text="Ваша заявка одобрена! Теперь вы получили доступ к каналу.")
        except Exception as e:
            logging.error(f"Произошла ошибка при добавлении пользователя {update.from_user.id} в канал: {e}")
            await update.bot.send_message(chat_id=update.from_user.id, text="К сожалению, ваша заявка не была одобрена. Попробуйте позже.")

Использую библиотеку aiogram версии 3.13.1


Ответы (1 шт):

Автор решения: P1nkSunset

если был бы aiogram 2 то

   async def join_request(update: types.ChatJoinRequest):
       await update.approve() # прием
       #await update.decline() отказ
→ Ссылка