PamGram/core/admin/services.py

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

61 lines
2.2 KiB
Python
Raw Normal View History

2022-07-26 10:07:31 +00:00
from typing import List
2022-11-30 08:45:53 +00:00
from asyncmy.errors import IntegrityError
2022-07-26 10:07:31 +00:00
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
2022-07-26 10:07:31 +00:00
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)
2022-07-26 10:07:31 +00:00
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)
2022-11-30 08:45:53 +00:00
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)
2022-07-26 10:07:31 +00:00
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)
2022-07-26 10:07:31 +00:00
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