feat: Tái cấu trúc bot sang kiến trúc cog, thêm hỗ trợ đa máy chủ, giới thiệu tính năng đăng ký bóng đá, giao diện web và quản lý cấu hình.
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
from typing import List, Optional
|
||||
from sqlalchemy import select
|
||||
from models.feature_toggle import FeatureToggle
|
||||
from infra.db import postgres
|
||||
|
||||
class FeatureToggleRepository:
|
||||
def __init__(self):
|
||||
self.Session = postgres.get_sessionmaker()
|
||||
|
||||
async def get(self, guild_id: int, feature_name: str) -> bool:
|
||||
"""Check if feature is enabled for guild"""
|
||||
try:
|
||||
async with self.Session() as session:
|
||||
stmt = select(FeatureToggle).where(
|
||||
FeatureToggle.guild_id == guild_id,
|
||||
FeatureToggle.feature_name == feature_name
|
||||
)
|
||||
result = await session.execute(stmt)
|
||||
toggle = result.scalar_one_or_none()
|
||||
return toggle.is_enabled if toggle else False # Default Disabled
|
||||
except Exception as e:
|
||||
print(f"Error getting feature {feature_name} for guild {guild_id}: {e}")
|
||||
return False
|
||||
|
||||
async def set(self, guild_id: int, feature_name: str, is_enabled: bool) -> Optional[FeatureToggle]:
|
||||
try:
|
||||
async with self.Session() as session:
|
||||
stmt = select(FeatureToggle).where(
|
||||
FeatureToggle.guild_id == guild_id,
|
||||
FeatureToggle.feature_name == feature_name
|
||||
)
|
||||
result = await session.execute(stmt)
|
||||
toggle = result.scalar_one_or_none()
|
||||
|
||||
if toggle:
|
||||
toggle.is_enabled = is_enabled
|
||||
else:
|
||||
toggle = FeatureToggle(guild_id=guild_id, feature_name=feature_name, is_enabled=is_enabled)
|
||||
session.add(toggle)
|
||||
|
||||
await session.commit()
|
||||
await session.refresh(toggle)
|
||||
return toggle
|
||||
except Exception as e:
|
||||
print(f"Error setting feature {feature_name} for guild {guild_id}: {e}")
|
||||
return None
|
||||
|
||||
async def get_all_for_guild(self, guild_id: int) -> List[FeatureToggle]:
|
||||
try:
|
||||
async with self.Session() as session:
|
||||
stmt = select(FeatureToggle).where(FeatureToggle.guild_id == guild_id)
|
||||
result = await session.execute(stmt)
|
||||
return list(result.scalars().all())
|
||||
except Exception as e:
|
||||
print(f"Error getting all features for guild {guild_id}: {e}")
|
||||
return []
|
||||
Reference in New Issue
Block a user