diff --git a/zhenxun/plugins/alapi/__init__.py b/zhenxun/plugins/alapi/__init__.py new file mode 100644 index 00000000..3efe4113 --- /dev/null +++ b/zhenxun/plugins/alapi/__init__.py @@ -0,0 +1,14 @@ +from pathlib import Path + +import nonebot + +from zhenxun.configs.config import Config + +Config.add_plugin_config( + "alapi", + "ALAPI_TOKEN", + None, + help="在https://admin.alapi.cn/user/login登录后获取token", +) + +nonebot.load_plugins(str(Path(__file__).parent.resolve())) diff --git a/zhenxun/plugins/alapi/_data_source.py b/zhenxun/plugins/alapi/_data_source.py new file mode 100644 index 00000000..61037ab9 --- /dev/null +++ b/zhenxun/plugins/alapi/_data_source.py @@ -0,0 +1,29 @@ +from zhenxun.configs.config import Config +from zhenxun.utils.http_utils import AsyncHttpx + + +async def get_data(url: str, params: dict | None = None) -> tuple[dict | str, int]: + """获取ALAPI数据 + + 参数: + url: 请求链接 + params: 参数 + + 返回: + tuple[dict | str, int]: 返回信息 + """ + if not params: + params = {} + params["token"] = Config.get_config("alapi", "ALAPI_TOKEN") + try: + data = (await AsyncHttpx.get(url, params=params, timeout=5)).json() + if data["code"] == 200: + if not data["data"]: + return "没有搜索到...", 997 + return data, 200 + else: + if data["code"] == 101: + return "缺失ALAPI TOKEN,请在配置文件中填写!", 999 + return f'发生了错误...code:{data["code"]}', 999 + except TimeoutError: + return "超时了....", 998 diff --git a/zhenxun/plugins/alapi/comments_163.py b/zhenxun/plugins/alapi/comments_163.py new file mode 100644 index 00000000..5b29ab5c --- /dev/null +++ b/zhenxun/plugins/alapi/comments_163.py @@ -0,0 +1,60 @@ +from nonebot import on_regex +from nonebot.plugin import PluginMetadata +from nonebot_plugin_alconna import Alconna, Arparma, on_alconna +from nonebot_plugin_saa import Text +from nonebot_plugin_session import EventSession + +from zhenxun.configs.utils import PluginExtraData +from zhenxun.services.log import logger + +from ._data_source import get_data + +comments_163 = on_regex( + "^(网易云热评|网易云评论|到点了|12点了)$", priority=5, block=True +) + + +comments_163_url = "https://v2.alapi.cn/api/comment" + +__plugin_meta__ = PluginMetadata( + name="网易云热评", + description="生了个人,我很抱歉", + usage=""" + 到点了,还是防不了下塔 + 指令: + 网易云热评/到点了/12点了 + """.strip(), + extra=PluginExtraData( + author="HibiKier", + version="0.1", + ).dict(), +) + +_matcher = on_alconna( + Alconna("网易云热评"), + priority=5, + block=True, +) + +_matcher.shortcut( + "(到点了|12点了)", + command="网易云热评", + arguments=[], + prefix=True, +) + + +@comments_163.handle() +async def _(session: EventSession, arparma: Arparma): + data, code = await get_data(comments_163_url) + if code != 200 and isinstance(data, str): + await Text(data).finish(reply=True) + data = data["data"] # type: ignore + comment = data["comment_content"] # type: ignore + song_name = data["title"] # type: ignore + await Text(f"{comment}\n\t——《{song_name}》").send(reply=True) + logger.info( + f" 发送网易云热评: {comment} \n\t\t————{song_name}", + arparma.header_result, + session=session, + ) diff --git a/zhenxun/plugins/alapi/cover.py b/zhenxun/plugins/alapi/cover.py new file mode 100644 index 00000000..9a832bff --- /dev/null +++ b/zhenxun/plugins/alapi/cover.py @@ -0,0 +1,45 @@ +from nonebot.plugin import PluginMetadata +from nonebot_plugin_alconna import Alconna, Args, Arparma, on_alconna +from nonebot_plugin_saa import Image, MessageFactory, Text +from nonebot_plugin_session import EventSession + +from zhenxun.configs.utils import PluginExtraData +from zhenxun.services.log import logger + +from ._data_source import get_data + +cover_url = "https://v2.alapi.cn/api/bilibili/cover" + +__plugin_meta__ = PluginMetadata( + name="b封面", + description="快捷的b站视频封面获取方式", + usage=""" + b封面 [链接/av/bv/cv/直播id] + 示例:b封面 av86863038 + """.strip(), + extra=PluginExtraData( + author="HibiKier", + version="0.1", + ).dict(), +) + +_matcher = on_alconna( + Alconna("b封面", Args["url", str]), + priority=5, + block=True, +) + + +@_matcher.handle() +async def _(session: EventSession, arparma: Arparma, url: str): + params = {"c": url} + data, code = await get_data(cover_url, params) + if code != 200 and isinstance(data, str): + await Text(data).finish(reply=True) + data = data["data"] # type: ignore + title = data["title"] # type: ignore + img = data["cover"] # type: ignore + await MessageFactory([Text(f"title:{title}\n"), Image(img)]).send(reply=True) + logger.info( + f" 获取b站封面: {title} url:{img}", arparma.header_result, session=session + ) diff --git a/zhenxun/plugins/alapi/jitang.py b/zhenxun/plugins/alapi/jitang.py new file mode 100644 index 00000000..a0a29e5f --- /dev/null +++ b/zhenxun/plugins/alapi/jitang.py @@ -0,0 +1,48 @@ +from nonebot.plugin import PluginMetadata +from nonebot_plugin_alconna import Alconna, Arparma, on_alconna +from nonebot_plugin_saa import Text +from nonebot_plugin_session import EventSession + +from zhenxun.configs.utils import PluginExtraData +from zhenxun.services.log import logger + +from ._data_source import get_data + +url = "https://v2.alapi.cn/api/soul" + +__plugin_meta__ = PluginMetadata( + name="鸡汤", + description="喏,亲手为你煮的鸡汤", + usage=""" + 不喝点什么感觉有点不舒服 + 指令: + 鸡汤 + """.strip(), + extra=PluginExtraData( + author="HibiKier", + version="0.1", + ).dict(), +) + +_matcher = on_alconna( + Alconna("鸡汤"), + priority=5, + block=True, +) + + +@_matcher.handle() +async def _(session: EventSession, arparma: Arparma): + try: + data, code = await get_data(url) + if code != 200 and isinstance(data, str): + await Text(data).finish(reply=True) + await Text(data["data"]["content"]).send(reply=True) # type: ignore + logger.info( + f" 发送鸡汤:" + data["data"]["content"], # type:ignore + arparma.header_result, + session=session, + ) + except Exception as e: + await Text("鸡汤煮坏掉了...").send() + logger.error(f"鸡汤煮坏掉了", e=e) diff --git a/zhenxun/plugins/alapi/poetry.py b/zhenxun/plugins/alapi/poetry.py new file mode 100644 index 00000000..f315999f --- /dev/null +++ b/zhenxun/plugins/alapi/poetry.py @@ -0,0 +1,55 @@ +from nonebot.plugin import PluginMetadata +from nonebot_plugin_alconna import Alconna, Arparma, on_alconna +from nonebot_plugin_saa import Text +from nonebot_plugin_session import EventSession + +from zhenxun.configs.utils import PluginExtraData +from zhenxun.services.log import logger + +from ._data_source import get_data + +__plugin_meta__ = PluginMetadata( + name="古诗", + description="为什么突然文艺起来了!", + usage=""" + 平白无故念首诗 + 示例:念诗/来首诗/念首诗 + """.strip(), + extra=PluginExtraData( + author="HibiKier", + version="0.1", + ).dict(), +) + +_matcher = on_alconna( + Alconna("念诗"), + priority=5, + block=True, +) + +_matcher.shortcut( + "(来首诗|念首诗)", + command="念诗", + arguments=[], + prefix=True, +) + + +poetry_url = "https://v2.alapi.cn/api/shici" + + +@_matcher.handle() +async def _(session: EventSession, arparma: Arparma): + data, code = await get_data(poetry_url) + if code != 200 and isinstance(data, str): + await Text(data).finish(reply=True) + data = data["data"] # type: ignore + content = data["content"] # type: ignore + title = data["origin"] # type: ignore + author = data["author"] # type: ignore + await Text(f"{content}\n\t——{author}《{title}》").send(reply=True) + logger.info( + f" 发送古诗: f'{content}\n\t--{author}《{title}》'", + arparma.header_result, + session=session, + )