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.yaml
|
||||
bot_config.json
|
||||
*.env
|
||||
.env
|
||||
|
||||
# IDE
|
||||
.idea/
|
||||
|
|
|
|||
14
bot.py
14
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)
|
||||
|
||||
# Инициализация меню
|
||||
|
|
|
|||
97
run.sh
97
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..."
|
||||
|
|
|
|||
Loading…
Reference in New Issue