mirror of
https://github.com/suyiiyii/nonebot-bison.git
synced 2025-06-06 20:06:12 +08:00
174 lines
5.1 KiB
Python
174 lines
5.1 KiB
Python
import nonebot
|
|
from nonebot.adapters.onebot.v11.bot import Bot
|
|
|
|
from ..config import (
|
|
NoSuchSubscribeException,
|
|
NoSuchTargetException,
|
|
NoSuchUserException,
|
|
config,
|
|
)
|
|
from ..platform import check_sub_target, platform_manager
|
|
from ..types import Target as T_Target
|
|
from ..types import WeightConfig
|
|
from .jwt import pack_jwt
|
|
from .token_manager import token_manager
|
|
|
|
|
|
async def test():
|
|
return {"status": 200, "text": "test"}
|
|
|
|
|
|
async def get_global_conf():
|
|
res = {}
|
|
for platform_name, platform in platform_manager.items():
|
|
res[platform_name] = {
|
|
"platformName": platform_name,
|
|
"categories": platform.categories,
|
|
"enabledTag": platform.enable_tag,
|
|
"name": platform.name,
|
|
"hasTarget": getattr(platform, "has_target"),
|
|
}
|
|
return {"platformConf": res}
|
|
|
|
|
|
async def get_admin_groups(qq: int):
|
|
bot = nonebot.get_bot()
|
|
groups = await bot.call_api("get_group_list")
|
|
res = []
|
|
for group in groups:
|
|
group_id = group["group_id"]
|
|
users = await bot.call_api("get_group_member_list", group_id=group_id)
|
|
for user in users:
|
|
if user["user_id"] == qq and user["role"] in ("owner", "admin"):
|
|
res.append({"id": group_id, "name": group["group_name"]})
|
|
return res
|
|
|
|
|
|
async def auth(token: str):
|
|
if qq_tuple := token_manager.get_user(token):
|
|
qq, nickname = qq_tuple
|
|
bot = nonebot.get_bot()
|
|
assert isinstance(bot, Bot)
|
|
groups = await bot.call_api("get_group_list")
|
|
if str(qq) in nonebot.get_driver().config.superusers:
|
|
jwt_obj = {
|
|
"id": qq,
|
|
"type": "admin",
|
|
"groups": list(
|
|
map(
|
|
lambda info: {
|
|
"id": info["group_id"],
|
|
"name": info["group_name"],
|
|
},
|
|
groups,
|
|
)
|
|
),
|
|
}
|
|
ret_obj = {
|
|
"type": "admin",
|
|
"name": nickname,
|
|
"id": qq,
|
|
"token": pack_jwt(jwt_obj),
|
|
}
|
|
return {"status": 200, **ret_obj}
|
|
if admin_groups := await get_admin_groups(int(qq)):
|
|
jwt_obj = {"id": str(qq), "type": "user", "groups": admin_groups}
|
|
ret_obj = {
|
|
"type": "user",
|
|
"name": nickname,
|
|
"id": qq,
|
|
"token": pack_jwt(jwt_obj),
|
|
}
|
|
return {"status": 200, **ret_obj}
|
|
else:
|
|
return {"status": 400, "type": "", "name": "", "id": 0, "token": ""}
|
|
else:
|
|
return {"status": 400, "type": "", "name": "", "id": 0, "token": ""}
|
|
|
|
|
|
async def get_subs_info(jwt_obj: dict):
|
|
groups = jwt_obj["groups"]
|
|
res = {}
|
|
for group in groups:
|
|
group_id = group["id"]
|
|
raw_subs = await config.list_subscribe(group_id, "group")
|
|
subs = list(
|
|
map(
|
|
lambda sub: {
|
|
"platformName": sub.target.platform_name,
|
|
"targetName": sub.target.target_name,
|
|
"cats": sub.categories,
|
|
"tags": sub.tags,
|
|
"target": sub.target.target,
|
|
},
|
|
raw_subs,
|
|
)
|
|
)
|
|
res[group_id] = {"name": group["name"], "subscribes": subs}
|
|
return res
|
|
|
|
|
|
async def get_target_name(platform_name: str, target: str, jwt_obj: dict):
|
|
return {"targetName": await check_sub_target(platform_name, target)}
|
|
|
|
|
|
async def add_group_sub(
|
|
group_number: int,
|
|
platform_name: str,
|
|
target: str,
|
|
target_name: str,
|
|
cats: list[int],
|
|
tags: list[str],
|
|
):
|
|
await config.add_subscribe(
|
|
int(group_number),
|
|
"group",
|
|
T_Target(target),
|
|
target_name,
|
|
platform_name,
|
|
cats,
|
|
tags,
|
|
)
|
|
return {"status": 200, "msg": ""}
|
|
|
|
|
|
async def del_group_sub(group_number: int, platform_name: str, target: str):
|
|
try:
|
|
await config.del_subscribe(int(group_number), "group", target, platform_name)
|
|
except (NoSuchUserException, NoSuchSubscribeException):
|
|
return {"status": 400, "msg": "删除错误"}
|
|
return {"status": 200, "msg": ""}
|
|
|
|
|
|
async def update_group_sub(
|
|
group_number: int,
|
|
platform_name: str,
|
|
target: str,
|
|
target_name: str,
|
|
cats: list[int],
|
|
tags: list[str],
|
|
):
|
|
try:
|
|
await config.update_subscribe(
|
|
int(group_number), "group", target, target_name, platform_name, cats, tags
|
|
)
|
|
except (NoSuchUserException, NoSuchSubscribeException):
|
|
return {"status": 400, "msg": "更新错误"}
|
|
return {"status": 200, "msg": ""}
|
|
|
|
|
|
async def get_weight_config():
|
|
return await config.get_all_weight_config()
|
|
|
|
|
|
async def update_weigth_config(
|
|
platform_name: str, target: str, weight_config: WeightConfig
|
|
):
|
|
try:
|
|
await config.update_time_weight_config(
|
|
T_Target(target), platform_name, weight_config
|
|
)
|
|
except NoSuchTargetException:
|
|
return {"status": 400, "msg": "该订阅不存在"}
|
|
return {"status": 200, "msg": ""}
|