Files
telegram-helper-bot/scripts/create_bot_settings_table.py
Andrey 3d6b4353f9
All checks were successful
CI pipeline / Test & Code Quality (push) Successful in 34s
Refactor imports across multiple files to improve code organization and readability.
2026-02-28 23:24:25 +03:00

116 lines
4.1 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
"""
Миграция: Создание таблицы bot_settings для хранения настроек бота.
Создает таблицу с ключ-значение для хранения:
- auto_publish_enabled: Включена ли авто-публикация (default: false)
- auto_decline_enabled: Включено ли авто-отклонение (default: false)
- auto_publish_threshold: Порог для авто-публикации (default: 0.8)
- auto_decline_threshold: Порог для авто-отклонения (default: 0.4)
"""
import argparse
import asyncio
import os
import sys
from pathlib import Path
project_root = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(project_root))
import aiosqlite
try:
from logs.custom_logger import logger
except ImportError:
import logging
logging.basicConfig(
level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s"
)
logger = logging.getLogger(__name__)
DEFAULT_DB_PATH = "database/tg-bot-database.db"
DEFAULT_SETTINGS = [
("auto_publish_enabled", "false"),
("auto_decline_enabled", "false"),
("auto_publish_threshold", "0.8"),
("auto_decline_threshold", "0.4"),
]
async def table_exists(conn: aiosqlite.Connection, table_name: str) -> bool:
"""Проверяет существование таблицы."""
cursor = await conn.execute(
"SELECT name FROM sqlite_master WHERE type='table' AND name=?",
(table_name,),
)
result = await cursor.fetchone()
return result is not None
async def main(db_path: str) -> None:
"""
Основная функция миграции.
Создает таблицу bot_settings и добавляет дефолтные настройки.
Миграция идемпотентна - можно запускать повторно без ошибок.
"""
db_path = os.path.abspath(db_path)
if not os.path.exists(db_path):
logger.error(f"База данных не найдена: {db_path}")
return
async with aiosqlite.connect(db_path) as conn:
await conn.execute("PRAGMA foreign_keys = ON")
if not await table_exists(conn, "bot_settings"):
await conn.execute("""
CREATE TABLE bot_settings (
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
key TEXT NOT NULL UNIQUE,
value TEXT NOT NULL,
updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
)
""")
logger.info("Таблица bot_settings создана")
for key, value in DEFAULT_SETTINGS:
await conn.execute(
"INSERT INTO bot_settings (key, value) VALUES (?, ?)",
(key, value),
)
logger.info(f"Добавлена настройка: {key} = {value}")
else:
logger.info("Таблица bot_settings уже существует")
for key, value in DEFAULT_SETTINGS:
cursor = await conn.execute(
"SELECT COUNT(*) FROM bot_settings WHERE key = ?", (key,)
)
row = await cursor.fetchone()
if row[0] == 0:
await conn.execute(
"INSERT INTO bot_settings (key, value) VALUES (?, ?)",
(key, value),
)
logger.info(f"Добавлена отсутствующая настройка: {key} = {value}")
await conn.commit()
logger.info("Миграция create_bot_settings_table завершена успешно")
if __name__ == "__main__":
parser = argparse.ArgumentParser(
description="Создание таблицы bot_settings для настроек авто-модерации"
)
parser.add_argument(
"--db",
default=os.environ.get("DATABASE_PATH", DEFAULT_DB_PATH),
help="Путь к БД",
)
args = parser.parse_args()
asyncio.run(main(args.db))