From e2453cb60cccf244b9de2e144d3caaa9957b64e1 Mon Sep 17 00:00:00 2001 From: mirivlad Date: Mon, 23 Feb 2026 15:48:15 +0800 Subject: [PATCH] Add token prompt and save to config on first run Co-authored-by: Qwen-Coder --- .gitignore | 2 ++ bot.py | 14 +++++++- run.sh | 97 +++++++++++++++++++++++++++++++++++++++++++++--------- 3 files changed, 96 insertions(+), 17 deletions(-) diff --git a/.gitignore b/.gitignore index a9a8db5..2f6da24 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,8 @@ ENV/ # Config config.yaml bot_config.json +*.env +.env # IDE .idea/ diff --git a/bot.py b/bot.py index 9315a4f..c8e7ec0 100644 --- a/bot.py +++ b/bot.py @@ -689,12 +689,24 @@ async def post_init(application: Application): def main(): """Точка входа.""" - # Проверка токена + # Проверка токена: сначала переменная окружения, потом конфиг token = os.getenv("TELEGRAM_BOT_TOKEN") + + if not token and CONFIG_FILE.exists(): + try: + with open(CONFIG_FILE, "r", encoding="utf-8") as f: + config_data = json.load(f) + token = config_data.get("bot_token") + if token: + logger.info("Токен получен из конфигурации") + except Exception as e: + logger.warning(f"Не удалось прочитать токен из конфига: {e}") + if not token: print("❌ Ошибка: не установлен TELEGRAM_BOT_TOKEN") print("Задайте переменную окружения:") print(" export TELEGRAM_BOT_TOKEN='your_token_here'") + print("Или запустите ./run.sh для интерактивной настройки") sys.exit(1) # Инициализация меню diff --git a/run.sh b/run.sh index 3ca2a2c..281af36 100755 --- a/run.sh +++ b/run.sh @@ -6,22 +6,24 @@ set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$SCRIPT_DIR" -# Проверка токена -if [ -z "$TELEGRAM_BOT_TOKEN" ]; then - echo "❌ Ошибка: не установлен TELEGRAM_BOT_TOKEN" - echo "" - echo "Задайте переменную окружения одним из способов:" - echo "" - echo "1. Экспорт в shell:" - echo " export TELEGRAM_BOT_TOKEN='your_token_here'" - echo "" - echo "2. Запуск с переменной:" - echo " TELEGRAM_BOT_TOKEN='your_token_here' ./run.sh" - echo "" - echo "3. Создание файла .env:" - echo " echo 'TELEGRAM_BOT_TOKEN=your_token_here' > .env" - exit 1 -fi +CONFIG_FILE="$SCRIPT_DIR/bot_config.json" + +# Функция для получения значения из JSON +get_json_value() { + python3 -c "import json; data=json.load(open('$CONFIG_FILE')); print(data.get('$1', ''))" 2>/dev/null || echo "" +} + +# Функция для установки значения в JSON +set_json_value() { + python3 -c " +import json +with open('$CONFIG_FILE', 'r') as f: + data = json.load(f) +data['$1'] = '$2' +with open('$CONFIG_FILE', 'w') as f: + json.dump(data, f, indent=2, ensure_ascii=False) +" +} # Проверка виртуального окружения if [ ! -d "venv" ]; then @@ -37,6 +39,69 @@ source venv/bin/activate echo "📦 Проверка зависимостей..." pip install -q -r requirements.txt +# Работа с токеном +TOKEN="" + +# 1. Проверяем переменную окружения +if [ -n "$TELEGRAM_BOT_TOKEN" ]; then + TOKEN="$TELEGRAM_BOT_TOKEN" + echo "✅ Токен получен из переменной окружения" +fi + +# 2. Если нет в переменной, проверяем конфиг +if [ -z "$TOKEN" ] && [ -f "$CONFIG_FILE" ]; then + TOKEN=$(get_json_value "bot_token") + if [ -n "$TOKEN" ]; then + echo "✅ Токен получен из конфигурации" + fi +fi + +# 3. Если токена нет нигде, запрашиваем у пользователя +if [ -z "$TOKEN" ]; then + echo "" + echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + echo "🔑 Настройка Telegram Bot" + echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + echo "" + echo "Для работы бота необходим токен от @BotFather" + echo "" + echo "Как получить токен:" + echo " 1. Откройте @BotFather в Telegram" + echo " 2. Отправьте команду /newbot" + echo " 3. Введите имя бота (например: My CLI Bot)" + echo " 4. Введите username бота (должен заканчиваться на 'bot')" + echo " 5. Скопируйте полученный токен" + echo "" + echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + echo "" + + # Запрос токена с подтверждением + while true; do + read -p "📋 Вставьте токен бота: " TOKEN + + # Проверка формата токена (примерно 46 символов, содержит : и _) + if [[ "$TOKEN" =~ ^[0-9]+:[A-Za-z0-9_-]+$ ]]; then + echo "" + read -p "💾 Сохранить токен в конфигурацию? (y/n): " SAVE + if [[ "$SAVE" =~ ^[Yy]$ ]]; then + # Создаём конфиг если нет + if [ ! -f "$CONFIG_FILE" ]; then + echo '{}' > "$CONFIG_FILE" + fi + set_json_value "bot_token" "$TOKEN" + echo "✅ Токен сохранён в $CONFIG_FILE" + fi + break + else + echo "❌ Неверный формат токена. Токен должен выглядеть как: 123456789:ABCdefGHIjklMNOpqrsTUVwxyz" + echo "" + fi + done +fi + +# Экспорт токена для бота +export TELEGRAM_BOT_TOKEN="$TOKEN" + # Запуск бота echo "" echo "🤖 Запуск Telegram CLI Bot..."