Подготовка к релизу

This commit is contained in:
2025-10-30 18:28:26 +03:00
parent 69c0162c6b
commit 4981db90a0
191 changed files with 45557 additions and 3651 deletions
+140
View File
@@ -0,0 +1,140 @@
#!/usr/bin/env python3
"""
Скрипт миграции для внедрения системы ролей пользователей.
Добавляет таблицу roles и колонку role_id в таблицу users.
"""
import sqlite3
import json
import sys
import os
# Set UTF-8 encoding for Windows console
try:
if sys.platform == 'win32':
import codecs
sys.stdout = codecs.getwriter('utf-8')(sys.stdout.buffer, 'replace')
sys.stderr = codecs.getwriter('utf-8')(sys.stderr.buffer, 'replace')
except:
pass # Ignore if encoding setup fails
def migrate_roles():
"""Выполняет миграцию системы ролей"""
db_path = 'telegram_bot.db'
# Проверяем существование файла базы данных
if not os.path.exists(db_path):
print(f"❌ Файл базы данных {db_path} не найден!")
return False
print("🚀 Начинаем миграцию системы ролей...")
try:
# Подключаемся к базе данных
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
print("📋 Создаем таблицу ролей...")
# Создаем таблицу ролей
cursor.execute('''
CREATE TABLE IF NOT EXISTS roles (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT UNIQUE NOT NULL,
display_name TEXT NOT NULL,
description TEXT,
permissions TEXT,
is_active BOOLEAN DEFAULT 1,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
)
''')
print("✅ Таблица roles создана")
# Вставляем стандартные роли
roles_data = [
(1, 'user', 'Пользователь', 'Обычный пользователь чата', json.dumps({
"can_use_basic_commands": True,
"can_play_games": True
})),
(2, 'moderator', 'Модератор', 'Модератор чата с правами управления', json.dumps({
"can_use_basic_commands": True,
"can_play_games": True,
"can_moderate": True,
"can_warn_users": True
})),
(3, 'admin', 'Администратор', 'Администратор бота с полными правами', json.dumps({
"can_use_basic_commands": True,
"can_play_games": True,
"can_moderate": True,
"can_warn_users": True,
"can_manage_users": True,
"can_schedule_posts": True,
"can_export_data": True
}))
]
print("📝 Добавляем стандартные роли...")
for role_data in roles_data:
cursor.execute('''
INSERT OR IGNORE INTO roles (id, name, display_name, description, permissions)
VALUES (?, ?, ?, ?, ?)
''', role_data)
print("✅ Стандартные роли добавлены")
# Добавляем колонку role_id в таблицу users
print("🔧 Добавляем колонку role_id в таблицу users...")
try:
cursor.execute('ALTER TABLE users ADD COLUMN role_id INTEGER DEFAULT 1')
print("✅ Колонка role_id добавлена")
except sqlite3.OperationalError as e:
if 'duplicate column name' in str(e):
print("ℹ️ Колонка role_id уже существует")
else:
raise e
# Создаем индекс для быстрого поиска
cursor.execute('CREATE INDEX IF NOT EXISTS idx_users_role_id ON users(role_id)')
print("✅ Индекс idx_users_role_id создан")
# Проверяем результаты миграции
cursor.execute('SELECT COUNT(*) as count FROM roles')
roles_count = cursor.fetchone()[0]
cursor.execute('SELECT COUNT(*) as count FROM users')
users_count = cursor.fetchone()[0]
print("\n📊 Статистика после миграции:")
print(f" • Ролей: {roles_count}")
print(f" • Пользователей: {users_count}")
# Показываем созданные роли
cursor.execute('SELECT id, name, display_name FROM roles ORDER BY id')
roles = cursor.fetchall()
print("\n📋 Созданные роли:")
for role in roles:
print(f"{role[0]}: {role[1]} ({role[2]})")
# Подтверждаем изменения
conn.commit()
print("\n🎉 Миграция выполнена успешно!")
print("Теперь можно использовать систему разделения приветствий по ролям.")
return True
except Exception as e:
print(f"❌ Ошибка при миграции: {e}")
if 'conn' in locals():
conn.rollback()
return False
finally:
if 'conn' in locals():
conn.close()
if __name__ == "__main__":
success = migrate_roles()
sys.exit(0 if success else 1)