Задать вопрос
@DVoropaev
Ставлю + к карме на хабре за ответы на вопросы

Как через телеграм бот отправить .ovpn файл, чтобы он открылся на телефоне?

Я пишу телеграм-бота, который генерирует .ovpn файлы и рассылает пользователям.
У меня есть такой код:
async def generate_certificate(update: Update, context: ContextTypes.DEFAULT_TYPE) -> int:
    """Генерация сертификата и отправка файла пользователю."""
    username = update.message.text.strip()

    # Команда для генерации сертификата
    command = f"/root/VPN-TIME/src/scripts/ovpn-gen.sh /root/easy-rsa-master/easyrsa3 /root/OVPNS /root/user-conf.ovpn {username}"

    try:
        # Выполнение команды bash
        result = subprocess.run(command, shell=True, capture_output=True, text=True, check=True)

        # Получаем путь к сгенерированному файлу
        generated_file_path = result.stdout.strip()

        if generated_file_path:
            # Отправляем файл пользователю
            with open(generated_file_path, 'rb') as file:
                await context.bot.send_document(chat_id=update.effective_chat.id, document=file)

            await update.message.reply_text(f"Сертификат для пользователя {username} успешно сгенерирован и отправлен.")
        else:
            await update.message.reply_text("Ошибка при генерации сертификата.")
    except subprocess.CalledProcessError as e:
        await update.message.reply_text(f"Произошла ошибка при запуске скрипта: {e}")
    except FileNotFoundError:
        await update.message.reply_text(f"Файл не найден: {generated_file_path}")
    except Exception as e:
        await update.message.reply_text(f"Ошибка: {e}")

    return ConversationHandler.END


Генерация проходит успешно, я получаю корректный .ovpn файл. И его содержимое и его имя корректны. У меня даже получается успешно подключиться к OpenVPN с помощью него
но есть одна проблема:

Когда я сам себе отправляю этот файл (вручную), захожу в телеграм с телефона и нажимаю на файл, то он сразу открывается в openvpn connect. Однако если мне этот файл пришел через бота, то при нажатии на файл он не открывается в openvpn connect (смотри скрин)
678c2d6086b3b757840967.jpeg
ChatGPT мне предлагал решить проблему указанием mime-типа:
mime_type="application/x-openvpn-profile"
Однако я получаю ошибку:
ExtBot.send_document() got an unexpected keyword argument 'mime_type'

ChatGPT предложил мне проверить файл .ovpn на валидность (а он валидный, проверял) и принудительно перед отправкой добавлять к файлу расширение ".onvpn", а оно и так стоит
  • Вопрос задан
  • 80 просмотров
Подписаться 1 Средний 2 комментария
Пригласить эксперта
Ответы на вопрос 1
@rPman
Попробуй добавить disable_content_type_detection =True в context.bot.send_document
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы