diff --git a/CHANGELOG.md b/CHANGELOG.md index d86e988..d1edab1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,3 +30,11 @@ ## [0.4.1] - 2021-11-31 - 加入了管理后台 + +## [0.4.2] +并没有做什么只是为了修复前端文件没有正确打包的问题开了个新的版本号 +推上pypi + +## [0.4.3] +- 使用playwright替换pypeteer(大概能修复渲染失败图片之后CPU跑满的问题) +- 增加了help插件`nonebot-plugin-help` diff --git a/bot.py b/bot.py index 87d0553..6819d73 100644 --- a/bot.py +++ b/bot.py @@ -8,6 +8,7 @@ driver = nonebot.get_driver() driver.register_adapter('cqhttp', CQHTTPBot) nonebot.load_builtin_plugins() +nonebot.load_plugin('nonebot_plugin_help') nonebot.load_plugins('src/plugins') if __name__ == "__main__": diff --git a/poetry.lock b/poetry.lock index 8adc460..b55ceb4 100644 --- a/poetry.lock +++ b/poetry.lock @@ -439,6 +439,18 @@ python-versions = ">=3.7.3,<4.0.0" httpx = ">=0.18.0,<1.0.0" nonebot2 = ">=2.0.0-alpha.14,<3.0.0" +[[package]] +name = "nonebot-plugin-help" +version = "0.1.5" +description = "A general help lister for nonebot2 plugins" +category = "main" +optional = false +python-versions = ">=3.7.3,<4.0.0" + +[package.dependencies] +nonebot-adapter-cqhttp = ">=2.0.0a16,<3.0.0" +nonebot2 = ">=2.0.0.a16,<3.0.0" + [[package]] name = "nonebot2" version = "2.0.0a16" @@ -939,7 +951,7 @@ dev = ["pytest (>=4.6.2)", "black (>=19.3b0)"] [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "a12ba453cb761ccbc97a694a0de4d3acf4e9c88bb4650203acbeaaf0d762b3c1" +content-hash = "6258435dbcdc3a69af258a1dc3dee54e55cc14dba81521aa33eb54236570d882" [metadata.files] aiofiles = [ @@ -1194,6 +1206,10 @@ nonebot-adapter-cqhttp = [ {file = "nonebot-adapter-cqhttp-2.0.0a16.tar.gz", hash = "sha256:9de270291b98c41a45e5b629c02f16e3b25cafb3867b8161851f49c84145d8aa"}, {file = "nonebot_adapter_cqhttp-2.0.0a16-py3-none-any.whl", hash = "sha256:831747c55c9c1a660215225f84784a4ca275a84bffa8d1312524367066b68bbe"}, ] +nonebot-plugin-help = [ + {file = "nonebot-plugin-help-0.1.5.tar.gz", hash = "sha256:2ef8c0f8b578c7941e364396532749cabb4d52872ddc4a0419db3cd103223e60"}, + {file = "nonebot_plugin_help-0.1.5-py3-none-any.whl", hash = "sha256:1c4bb626feb202515f47311e3ca9872ab6c0db5e935bc9561325fcc1a2591511"}, +] nonebot2 = [ {file = "nonebot2-2.0.0a16-py3-none-any.whl", hash = "sha256:88596c154143fc2203a50d224bacf4e2e5be1b4142fd92e645c40258e5819924"}, {file = "nonebot2-2.0.0a16.tar.gz", hash = "sha256:f70475e0a9525ed22cc082e35b06145b005412f919880a862e72059a84b0d2d0"}, diff --git a/pyproject.toml b/pyproject.toml index d60d4e8..0317c75 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -37,6 +37,7 @@ pyjwt = "^2.1.0" aiofiles = "^0.7.0" python-socketio = "^5.4.0" playwright = "^1.17.2" +nonebot-plugin-help = "^0.1.5" [tool.poetry.dev-dependencies] ipdb = "^0.13.4" diff --git a/src/plugins/nonebot_bison/__init__.py b/src/plugins/nonebot_bison/__init__.py index 0b4c4fa..73abbeb 100644 --- a/src/plugins/nonebot_bison/__init__.py +++ b/src/plugins/nonebot_bison/__init__.py @@ -9,3 +9,8 @@ from . import platform from . import types from . import utils from . import admin_page + +__help__version__ = '0.4.3' +__help__plugin__name__ = 'nonebot_bison' +__usage__ = ('本bot可以提供b站、微博等社交媒体的消息订阅,详情' + '请查看本bot文档,或者at本bot发送“添加订阅”订阅第一个帐号') diff --git a/src/plugins/nonebot_bison/admin_page/__init__.py b/src/plugins/nonebot_bison/admin_page/__init__.py index f880516..c579303 100644 --- a/src/plugins/nonebot_bison/admin_page/__init__.py +++ b/src/plugins/nonebot_bison/admin_page/__init__.py @@ -1,12 +1,10 @@ from dataclasses import dataclass -from pathlib import Path import os +from pathlib import Path from typing import Union from fastapi.staticfiles import StaticFiles -from fastapi.templating import Jinja2Templates from nonebot import get_driver, on_command -import nonebot from nonebot.adapters.cqhttp.bot import Bot from nonebot.adapters.cqhttp.event import GroupMessageEvent, PrivateMessageEvent from nonebot.drivers.fastapi import Driver @@ -14,14 +12,20 @@ from nonebot.log import logger from nonebot.rule import to_me from nonebot.typing import T_State import socketio -import functools -from starlette.requests import Request - -from .api import del_group_sub, test, get_global_conf, auth, get_subs_info, get_target_name, add_group_sub, update_group_sub -from .token_manager import token_manager as tm -from .jwt import load_jwt from ..plugin_config import plugin_config +from .api import ( + add_group_sub, + auth, + del_group_sub, + get_global_conf, + get_subs_info, + get_target_name, + test, + update_group_sub, +) +from .jwt import load_jwt +from .token_manager import token_manager as tm URL_BASE = '/bison/' GLOBAL_CONF_URL = f'{URL_BASE}api/global_conf' @@ -122,9 +126,11 @@ if (STATIC_PATH / 'index.html').exists(): get_token = on_command('后台管理', rule=to_me(), priority=5) @get_token.handle() - async def send_token(bot: "Bot", event: PrivateMessageEvent, state: T_State): - driver = nonebot.get_driver() + async def send_token(_: "Bot", event: PrivateMessageEvent, state: T_State): token = tm.get_user_token((event.get_user_id(), event.sender.nickname)) await get_token.finish(f'请访问: {plugin_config.bison_outer_url}auth/{token}') + get_token.__help__name__ = '获取后台管理地址' + get_token.__help__info__ = ('获取管理bot后台的地址,该地址会' + '在一段时间过后过期,请不要泄漏该地址') else: logger.warning("Frontend file not found, please compile it or use docker or pypi version") diff --git a/src/plugins/nonebot_bison/admin_page/api.py b/src/plugins/nonebot_bison/admin_page/api.py index e23a669..ff17d62 100644 --- a/src/plugins/nonebot_bison/admin_page/api.py +++ b/src/plugins/nonebot_bison/admin_page/api.py @@ -1,10 +1,11 @@ -from ..platform import platform_manager, check_sub_target -from .token_manager import token_manager -from .jwt import pack_jwt -from ..config import Config, NoSuchSubscribeException, NoSuchUserException import nonebot from nonebot.adapters.cqhttp.bot import Bot +from ..config import Config, NoSuchSubscribeException, NoSuchUserException +from ..platform import check_sub_target, platform_manager +from .jwt import pack_jwt +from .token_manager import token_manager + async def test(): return {"status": 200, "text": "test"} @@ -88,7 +89,7 @@ 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: str, platform_name: str, target: str, - target_name: str, cats: list[str], tags: list[str]): + target_name: str, cats: list[int], tags: list[str]): config = Config() config.add_subscribe(int(group_number), 'group', target, target_name, platform_name, cats, tags) return { 'status': 200, 'msg': '' } @@ -103,7 +104,7 @@ async def del_group_sub(group_number: str, platform_name: str, target: str): async def update_group_sub(group_number: str, platform_name: str, target: str, - target_name: str, cats: list[str], tags: list[str]): + target_name: str, cats: list[int], tags: list[str]): config = Config() try: config.update_subscribe(int(group_number), 'group', diff --git a/src/plugins/nonebot_bison/config_manager.py b/src/plugins/nonebot_bison/config_manager.py index 1ec5d1a..ed062d6 100644 --- a/src/plugins/nonebot_bison/config_manager.py +++ b/src/plugins/nonebot_bison/config_manager.py @@ -1,17 +1,20 @@ from typing import Type + from nonebot import logger, on_command +from nonebot.adapters._bot import Bot as AbstractBot +from nonebot.adapters._event import Event as AbstractEvent from nonebot.adapters.cqhttp import Bot, Event, GroupMessageEvent from nonebot.adapters.cqhttp.message import Message from nonebot.adapters.cqhttp.permission import GROUP_ADMIN, GROUP_MEMBER, GROUP_OWNER +from nonebot.matcher import Matcher from nonebot.permission import Permission, SUPERUSER from nonebot.rule import to_me from nonebot.typing import T_State -from nonebot.matcher import Matcher from .config import Config, NoSuchSubscribeException -from .platform import platform_manager, check_sub_target -from .utils import parse_text +from .platform import check_sub_target, platform_manager from .types import Target +from .utils import parse_text def _gen_prompt_template(prompt: str): if hasattr(Message, 'template'): @@ -38,7 +41,7 @@ def do_add_sub(add_sub: Type[Matcher]): for platform_name in common_platform]) + \ '要查看全部平台请输入:“全部”' - async def parse_platform(bot: Bot, event: Event, state: T_State) -> None: + async def parse_platform(bot: AbstractBot, event: AbstractEvent, state: T_State) -> None: platform = str(event.get_message()).strip() if platform == '全部': message = '全部平台\n' + \ @@ -59,7 +62,7 @@ def do_add_sub(add_sub: Type[Matcher]): state['id'] = 'default' state['name'] = await platform_manager[state['platform']].get_target_name(Target('')) - async def parse_id(bot: Bot, event: Event, state: T_State): + async def parse_id(bot: AbstractBot, event: AbstractEvent, state: T_State): target = str(event.get_message()).strip() name = await check_sub_target(state['platform'], target) if not name: @@ -76,7 +79,7 @@ def do_add_sub(add_sub: Type[Matcher]): state['_prompt'] = '请输入要订阅的类别,以空格分隔,支持的类别有:{}'.format( ' '.join(list(platform_manager[state['platform']].categories.values()))) - async def parser_cats(bot: Bot, event: Event, state: T_State): + async def parser_cats(bot: AbstractBot, event: AbstractEvent, state: T_State): res = [] for cat in str(event.get_message()).strip().split(): if cat not in platform_manager[state['platform']].reverse_category: @@ -92,7 +95,7 @@ def do_add_sub(add_sub: Type[Matcher]): return state['_prompt'] = '请输入要订阅的tag,订阅所有tag输入"全部标签"' - async def parser_tags(bot: Bot, event: Event, state: T_State): + async def parser_tags(bot: AbstractBot, event: AbstractEvent, state: T_State): if str(event.get_message()).strip() == '全部标签': state['tags'] = [] else: @@ -155,7 +158,7 @@ def do_del_sub(del_sub: Type[Matcher]): else: await del_sub.finish('删除成功') -async def parse_group_number(bot: Bot, event: Event, state: T_State): +async def parse_group_number(bot: AbstractBot, event: AbstractEvent, state: T_State): state[state["_current_key"]] = int(str(event.get_message())) diff --git a/src/plugins/nonebot_bison/platform/platform.py b/src/plugins/nonebot_bison/platform/platform.py index 0bc181f..b8afa72 100644 --- a/src/plugins/nonebot_bison/platform/platform.py +++ b/src/plugins/nonebot_bison/platform/platform.py @@ -1,7 +1,6 @@ from abc import abstractmethod, ABC from collections import defaultdict from dataclasses import dataclass -from functools import reduce import time from typing import Any, Collection, Optional, Literal