Я пишу телеграм-бота, который генерирует .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 (смотри скрин)
ChatGPT мне предлагал решить проблему указанием mime-типа:
mime_type="application/x-openvpn-profile"
Однако я получаю ошибку:
ExtBot.send_document() got an unexpected keyword argument 'mime_type'
ChatGPT предложил мне проверить файл .ovpn на валидность (а он валидный, проверял) и принудительно перед отправкой добавлять к файлу расширение ".onvpn", а оно и так стоит