Add token prompt and save to config on first run

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
mirivlad 2026-02-23 15:48:15 +08:00
parent 75abe7bcf8
commit e2453cb60c
3 changed files with 96 additions and 17 deletions

2
.gitignore vendored
View File

@ -11,6 +11,8 @@ ENV/
# Config # Config
config.yaml config.yaml
bot_config.json bot_config.json
*.env
.env
# IDE # IDE
.idea/ .idea/

14
bot.py
View File

@ -689,12 +689,24 @@ async def post_init(application: Application):
def main(): def main():
"""Точка входа.""" """Точка входа."""
# Проверка токена # Проверка токена: сначала переменная окружения, потом конфиг
token = os.getenv("TELEGRAM_BOT_TOKEN") 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: if not token:
print("❌ Ошибка: не установлен TELEGRAM_BOT_TOKEN") print("❌ Ошибка: не установлен TELEGRAM_BOT_TOKEN")
print("Задайте переменную окружения:") print("Задайте переменную окружения:")
print(" export TELEGRAM_BOT_TOKEN='your_token_here'") print(" export TELEGRAM_BOT_TOKEN='your_token_here'")
print("Или запустите ./run.sh для интерактивной настройки")
sys.exit(1) sys.exit(1)
# Инициализация меню # Инициализация меню

97
run.sh
View File

@ -6,22 +6,24 @@ set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR" cd "$SCRIPT_DIR"
# Проверка токена CONFIG_FILE="$SCRIPT_DIR/bot_config.json"
if [ -z "$TELEGRAM_BOT_TOKEN" ]; then
echo "❌ Ошибка: не установлен TELEGRAM_BOT_TOKEN" # Функция для получения значения из JSON
echo "" get_json_value() {
echo "Задайте переменную окружения одним из способов:" python3 -c "import json; data=json.load(open('$CONFIG_FILE')); print(data.get('$1', ''))" 2>/dev/null || echo ""
echo "" }
echo "1. Экспорт в shell:"
echo " export TELEGRAM_BOT_TOKEN='your_token_here'" # Функция для установки значения в JSON
echo "" set_json_value() {
echo "2. Запуск с переменной:" python3 -c "
echo " TELEGRAM_BOT_TOKEN='your_token_here' ./run.sh" import json
echo "" with open('$CONFIG_FILE', 'r') as f:
echo "3. Создание файла .env:" data = json.load(f)
echo " echo 'TELEGRAM_BOT_TOKEN=your_token_here' > .env" data['$1'] = '$2'
exit 1 with open('$CONFIG_FILE', 'w') as f:
fi json.dump(data, f, indent=2, ensure_ascii=False)
"
}
# Проверка виртуального окружения # Проверка виртуального окружения
if [ ! -d "venv" ]; then if [ ! -d "venv" ]; then
@ -37,6 +39,69 @@ source venv/bin/activate
echo "📦 Проверка зависимостей..." echo "📦 Проверка зависимостей..."
pip install -q -r requirements.txt 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 ""
echo "🤖 Запуск Telegram CLI Bot..." echo "🤖 Запуск Telegram CLI Bot..."