Как принимать заявку на вступление в канал через бота?
Я попытался реализовать такую логику но выскакивает ошибка, логируя ошибку получаю вот такой вывод: 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() отказ