✅ Регистрация и верификация жильцов ✅ Рейтинг активности (уровни) ✅ Детект шпионов (Score 0-100) ✅ Анти-мат система (3 предупреждения → бан) ✅ Админ-панель с рассылкой ✅ Учёт квартир (несколько жильцов) ✅ Телефоны экстренных служб и мастеров ✅ Еженедельный экспорт JSON ✅ Прокси (socks5) для обхода РКН Бекап: backups/versions/v1.0_mvp_2026-02-26/ Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
83 lines
4.1 KiB
Python
83 lines
4.1 KiB
Python
#!/usr/bin/env python3
|
||
"""
|
||
Скрипт инициализации базы данных
|
||
Запускается один раз при первом запуске бота
|
||
"""
|
||
import asyncio
|
||
import sys
|
||
sys.path.insert(0, '/home/matrixhasyou/domovoy_bot')
|
||
|
||
from database.db import init_db, AsyncSessionLocal
|
||
from database.models import User, Service, Announcement
|
||
from sqlalchemy import select
|
||
from datetime import datetime
|
||
|
||
|
||
async def fill_initial_data():
|
||
"""Заполнение начальными данными"""
|
||
async with AsyncSessionLocal() as session:
|
||
# Проверяем, есть ли уже данные
|
||
stmt = select(Service)
|
||
result = await session.execute(stmt)
|
||
services = list(result.scalars().all())
|
||
|
||
if services:
|
||
print('ℹ️ Данные уже есть в БД, пропускаем заполнение')
|
||
return
|
||
|
||
# Телефоны экстренных служб (заглушки, заменишь на свои)
|
||
emergency_services = [
|
||
{'name': 'Скорая помощь', 'category': 'emergency', 'phone': '103', 'description': 'Экстренная медицинская помощь'},
|
||
{'name': 'Пожарная охрана', 'category': 'emergency', 'phone': '101', 'description': 'Пожарная служба'},
|
||
{'name': 'Полиция', 'category': 'emergency', 'phone': '102', 'description': 'Экстренная служба полиции'},
|
||
{'name': 'Газовая служба', 'category': 'emergency', 'phone': '104', 'description': 'Аварийная газовая служба'},
|
||
{'name': 'Единая служба спасения', 'category': 'emergency', 'phone': '112', 'description': 'Работает с мобильного'},
|
||
{'name': 'Диспетчер УК', 'category': 'utility', 'phone': '+7 (XXX) XXX-XX-XX', 'description': 'Круглосуточно', 'verified_by_admin': True},
|
||
{'name': 'Аварийная водоканал', 'category': 'utility', 'phone': '+7 (XXX) XXX-XX-XX', 'description': 'Протечки, засоры'},
|
||
{'name': 'Аварийная электросети', 'category': 'utility', 'phone': '+7 (XXX) XXX-XX-XX', 'description': 'Проблемы с электричеством'},
|
||
{'name': 'Участковый', 'category': 'police', 'phone': '+7 (XXX) XXX-XX-XX', 'description': 'Приёмные часы: Вт, Чт 18:00-20:00'},
|
||
]
|
||
|
||
for svc_data in emergency_services:
|
||
service = Service(**svc_data)
|
||
session.add(service)
|
||
|
||
# Приветственное объявление
|
||
announcement = Announcement(
|
||
title='🏠 Добро пожаловать в чат дома!',
|
||
text='''Уважаемые жильцы!
|
||
|
||
Этот бот создан для помощи всем жителям нашего дома.
|
||
|
||
📞 Что он умеет:
|
||
• Показать телефоны экстренных служб
|
||
• Вызвать сантехника/электрика
|
||
• Сообщить о проблемах
|
||
• Получить юридическую консультацию
|
||
|
||
❗ Важно: Для полного доступа пройдите верификацию — укажите номер квартиры.
|
||
|
||
С уважением, администрация чата''',
|
||
category='general',
|
||
is_pinned=True
|
||
)
|
||
session.add(announcement)
|
||
|
||
await session.commit()
|
||
print('✅ Начальные данные добавлены')
|
||
|
||
|
||
async def main():
|
||
print('🔄 Инициализация базы данных...')
|
||
await init_db()
|
||
print('✅ Таблицы созданы')
|
||
|
||
print('🔄 Заполнение начальными данными...')
|
||
await fill_initial_data()
|
||
|
||
print('\n✅ База данных готова к работе!')
|
||
print('📍 Путь: ./database/domovoy.db')
|
||
|
||
|
||
if __name__ == '__main__':
|
||
asyncio.run(main())
|