Add token prompt and save to config on first run
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
parent
75abe7bcf8
commit
e2453cb60c
|
|
@ -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
14
bot.py
|
|
@ -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
97
run.sh
|
|
@ -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..."
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue