/
TetroReks
/
GnomeBot2.0
Обзор
Документация
Войти
/
TetroReks
/
GnomeBot2.0
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
database.py
63 строки
2 KB
TetroReks
upload files
13 фев 2026, 00:55
Верифицирован
13 фев 2026, 00:55
fac4e6f
Код
Авторство
О чём код?
import aiosqlite from config import DATABASE_URL # Извлекаем путь к файлу из DATABASE_URL # Формат: sqlite+aiosqlite:///путь/к/файлу.db def _get_db_path(): if DATABASE_URL.startswith("sqlite"): # отрезаем 'sqlite+aiosqlite:///' return DATABASE_URL.replace("sqlite+aiosqlite:///", "") else: # fallback (если вдруг осталась старая переменная) return "/app/data/bot.db" async def init_db(): """Создаёт таблицы, если их нет""" db_path = _get_db_path() async with aiosqlite.connect(db_path) as db: await db.execute(''' CREATE TABLE IF NOT EXISTS characters ( user_id INTEGER PRIMARY KEY, name TEXT, strength INTEGER DEFAULT 10, dexterity INTEGER DEFAULT 10, constitution INTEGER DEFAULT 10, intelligence INTEGER DEFAULT 10, wisdom INTEGER DEFAULT 10, charisma INTEGER DEFAULT 10, level INTEGER DEFAULT 1 ) ''') await db.commit() async def get_character(user_id: int): db_path = _get_db_path() async with aiosqlite.connect(db_path) as db: db.row_factory = aiosqlite.Row # позволяет обращаться по имени столбца async with db.execute( 'SELECT * FROM characters WHERE user_id = ?', (user_id,) ) as cursor: row = await cursor.fetchone() return dict(row) if row else None async def save_character(user_id: int, **kwargs): db_path = _get_db_path() async with aiosqlite.connect(db_path) as db: # SQLite поддерживает INSERT OR REPLACE (работает как upsert) await db.execute(''' INSERT OR REPLACE INTO characters ( user_id, name, strength, dexterity, constitution, intelligence, wisdom, charisma, level ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) ''', ( user_id, kwargs.get('name'), kwargs.get('strength', 10), kwargs.get('dexterity', 10), kwargs.get('constitution', 10), kwargs.get('intelligence', 10), kwargs.get('wisdom', 10), kwargs.get('charisma', 10), kwargs.get('level', 1) )) await db.commit()