PaiGram/core/admin/services.py
洛水居室 f3786b19f4
🔥 Remove pymysql
2022-11-30 16:45:53 +08:00

61 lines
2.2 KiB
Python

from typing import List
from asyncmy.errors import IntegrityError
from telegram import Bot
from core.admin.cache import BotAdminCache, GroupAdminCache
from core.admin.repositories import BotAdminRepository
from core.config import config
from utils.log import logger
class BotAdminService:
def __init__(self, repository: BotAdminRepository, cache: BotAdminCache):
self._repository = repository
self._cache = cache
async def get_admin_list(self) -> List[int]:
admin_list = await self._cache.get_list()
if len(admin_list) == 0:
admin_list = await self._repository.get_all_user_id()
for config_admin in config.admins:
admin_list.append(config_admin.user_id)
await self._cache.set_list(admin_list)
return admin_list
async def add_admin(self, user_id: int) -> bool:
try:
await self._repository.add_by_user_id(user_id)
except IntegrityError:
logger.warning("用户 %s 已经存在 Admin 数据库", user_id)
admin_list = await self._repository.get_all_user_id()
for config_admin in config.admins:
admin_list.append(config_admin.user_id)
await self._cache.set_list(admin_list)
return True
async def delete_admin(self, user_id: int) -> bool:
try:
await self._repository.delete_by_user_id(user_id)
except ValueError:
return False
admin_list = await self._repository.get_all_user_id()
for config_admin in config.admins:
admin_list.append(config_admin.user_id)
await self._cache.set_list(admin_list)
return True
class GroupAdminService:
def __init__(self, cache: GroupAdminCache):
self._cache = cache
async def get_admins(self, bot: Bot, chat_id: int, extra_user: List[int]) -> List[int]:
admin_id_list = await self._cache.get_chat_admin(chat_id)
if len(admin_id_list) == 0:
admin_list = await bot.get_chat_administrators(chat_id)
admin_id_list = [admin.user.id for admin in admin_list]
await self._cache.set_chat_admin(chat_id, admin_id_list)
admin_id_list += extra_user
return admin_id_list