Добавлены методы для работы с настройками авто-модерации, включая получение и установку значений, а также переключение состояний авто-публикации и авто-отклонения. Обновлены соответствующие репозитории и обработчики для интеграции новых функций в админ-панели.
Some checks are pending
CI pipeline / Test & Code Quality (push) Waiting to run
Some checks are pending
CI pipeline / Test & Code Quality (push) Waiting to run
This commit is contained in:
@@ -10,12 +10,14 @@
|
||||
- admin_repository: работа с администраторами
|
||||
- audio_repository: работа с аудио
|
||||
- migration_repository: работа с миграциями БД
|
||||
- bot_settings_repository: работа с настройками бота
|
||||
"""
|
||||
|
||||
from .admin_repository import AdminRepository
|
||||
from .audio_repository import AudioRepository
|
||||
from .blacklist_history_repository import BlacklistHistoryRepository
|
||||
from .blacklist_repository import BlacklistRepository
|
||||
from .bot_settings_repository import BotSettingsRepository
|
||||
from .message_repository import MessageRepository
|
||||
from .migration_repository import MigrationRepository
|
||||
from .post_repository import PostRepository
|
||||
@@ -30,4 +32,5 @@ __all__ = [
|
||||
"AdminRepository",
|
||||
"AudioRepository",
|
||||
"MigrationRepository",
|
||||
"BotSettingsRepository",
|
||||
]
|
||||
|
||||
160
database/repositories/bot_settings_repository.py
Normal file
160
database/repositories/bot_settings_repository.py
Normal file
@@ -0,0 +1,160 @@
|
||||
"""Репозиторий для работы с настройками бота."""
|
||||
|
||||
from typing import Dict, Optional
|
||||
|
||||
from database.base import DatabaseConnection
|
||||
|
||||
|
||||
class BotSettingsRepository(DatabaseConnection):
|
||||
"""Репозиторий для управления настройками бота в таблице bot_settings."""
|
||||
|
||||
async def create_table(self) -> None:
|
||||
"""Создает таблицу bot_settings, если она не существует."""
|
||||
query = """
|
||||
CREATE TABLE IF NOT EXISTS 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'))
|
||||
)
|
||||
"""
|
||||
await self._execute_query(query)
|
||||
self.logger.info("Таблица bot_settings создана или уже существует")
|
||||
|
||||
async def get_setting(self, key: str) -> Optional[str]:
|
||||
"""
|
||||
Получает значение настройки по ключу.
|
||||
|
||||
Args:
|
||||
key: Ключ настройки
|
||||
|
||||
Returns:
|
||||
Значение настройки или None, если не найдено
|
||||
"""
|
||||
query = "SELECT value FROM bot_settings WHERE key = ?"
|
||||
rows = await self._execute_query_with_result(query, (key,))
|
||||
if rows and len(rows) > 0:
|
||||
return rows[0][0]
|
||||
return None
|
||||
|
||||
async def set_setting(self, key: str, value: str) -> None:
|
||||
"""
|
||||
Устанавливает значение настройки.
|
||||
|
||||
Args:
|
||||
key: Ключ настройки
|
||||
value: Значение настройки
|
||||
"""
|
||||
query = """
|
||||
INSERT INTO bot_settings (key, value, updated_at)
|
||||
VALUES (?, ?, strftime('%s', 'now'))
|
||||
ON CONFLICT(key) DO UPDATE SET
|
||||
value = excluded.value,
|
||||
updated_at = strftime('%s', 'now')
|
||||
"""
|
||||
await self._execute_query(query, (key, value))
|
||||
self.logger.debug(f"Настройка {key} установлена: {value}")
|
||||
|
||||
async def get_bool_setting(self, key: str, default: bool = False) -> bool:
|
||||
"""
|
||||
Получает булево значение настройки.
|
||||
|
||||
Args:
|
||||
key: Ключ настройки
|
||||
default: Значение по умолчанию
|
||||
|
||||
Returns:
|
||||
True если значение 'true', иначе False
|
||||
"""
|
||||
value = await self.get_setting(key)
|
||||
if value is None:
|
||||
return default
|
||||
return value.lower() == "true"
|
||||
|
||||
async def set_bool_setting(self, key: str, value: bool) -> None:
|
||||
"""
|
||||
Устанавливает булево значение настройки.
|
||||
|
||||
Args:
|
||||
key: Ключ настройки
|
||||
value: Булево значение
|
||||
"""
|
||||
await self.set_setting(key, "true" if value else "false")
|
||||
|
||||
async def get_float_setting(self, key: str, default: float = 0.0) -> float:
|
||||
"""
|
||||
Получает числовое значение настройки.
|
||||
|
||||
Args:
|
||||
key: Ключ настройки
|
||||
default: Значение по умолчанию
|
||||
|
||||
Returns:
|
||||
Числовое значение или default
|
||||
"""
|
||||
value = await self.get_setting(key)
|
||||
if value is None:
|
||||
return default
|
||||
try:
|
||||
return float(value)
|
||||
except ValueError:
|
||||
self.logger.warning(
|
||||
f"Невозможно преобразовать значение '{value}' в float для ключа '{key}'"
|
||||
)
|
||||
return default
|
||||
|
||||
async def set_float_setting(self, key: str, value: float) -> None:
|
||||
"""
|
||||
Устанавливает числовое значение настройки.
|
||||
|
||||
Args:
|
||||
key: Ключ настройки
|
||||
value: Числовое значение
|
||||
"""
|
||||
await self.set_setting(key, str(value))
|
||||
|
||||
async def get_auto_moderation_settings(self) -> Dict[str, any]:
|
||||
"""
|
||||
Получает все настройки авто-модерации.
|
||||
|
||||
Returns:
|
||||
Словарь с настройками авто-модерации
|
||||
"""
|
||||
return {
|
||||
"auto_publish_enabled": await self.get_bool_setting(
|
||||
"auto_publish_enabled", False
|
||||
),
|
||||
"auto_decline_enabled": await self.get_bool_setting(
|
||||
"auto_decline_enabled", False
|
||||
),
|
||||
"auto_publish_threshold": await self.get_float_setting(
|
||||
"auto_publish_threshold", 0.8
|
||||
),
|
||||
"auto_decline_threshold": await self.get_float_setting(
|
||||
"auto_decline_threshold", 0.4
|
||||
),
|
||||
}
|
||||
|
||||
async def toggle_auto_publish(self) -> bool:
|
||||
"""
|
||||
Переключает состояние авто-публикации.
|
||||
|
||||
Returns:
|
||||
Новое состояние (True/False)
|
||||
"""
|
||||
current = await self.get_bool_setting("auto_publish_enabled", False)
|
||||
new_value = not current
|
||||
await self.set_bool_setting("auto_publish_enabled", new_value)
|
||||
return new_value
|
||||
|
||||
async def toggle_auto_decline(self) -> bool:
|
||||
"""
|
||||
Переключает состояние авто-отклонения.
|
||||
|
||||
Returns:
|
||||
Новое состояние (True/False)
|
||||
"""
|
||||
current = await self.get_bool_setting("auto_decline_enabled", False)
|
||||
new_value = not current
|
||||
await self.set_bool_setting("auto_decline_enabled", new_value)
|
||||
return new_value
|
||||
Reference in New Issue
Block a user