From 60093b562b330e03dae910c6d4bf5e4c396b70ed Mon Sep 17 00:00:00 2001 From: Snowykami Date: Tue, 18 Feb 2025 06:42:42 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20=E7=A7=BB=E9=99=A4=20Gotify=20?= =?UTF-8?q?=E6=8F=92=E4=BB=B6=E5=8F=8A=E7=9B=B8=E5=85=B3=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=EF=BC=8C=E6=9B=B4=E6=96=B0=E4=BE=9D=E8=B5=96=E9=A1=B9=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- liteyuki/config.py | 4 +- pyproject.toml | 3 +- scripts/install-deps.sh | 3 + .../nonebot_plugin_gotify/__init__.py | 109 ------------------ .../nonebot_plugin_gotify/adapter_ctx.py | 12 -- .../nonebot_plugin_gotify/config.py | 22 ---- .../nonebot_plugin_gotify/gotify.py | 20 ---- 7 files changed, 6 insertions(+), 167 deletions(-) create mode 100644 scripts/install-deps.sh delete mode 100755 src/liteyuki_plugins/nonebot/nonebot_plugins/nonebot_plugin_gotify/__init__.py delete mode 100755 src/liteyuki_plugins/nonebot/nonebot_plugins/nonebot_plugin_gotify/adapter_ctx.py delete mode 100755 src/liteyuki_plugins/nonebot/nonebot_plugins/nonebot_plugin_gotify/config.py delete mode 100755 src/liteyuki_plugins/nonebot/nonebot_plugins/nonebot_plugin_gotify/gotify.py diff --git a/liteyuki/config.py b/liteyuki/config.py index 718bad7e..9a9d8e8e 100755 --- a/liteyuki/config.py +++ b/liteyuki/config.py @@ -11,8 +11,8 @@ import os import json import copy -import toml -import yaml +import toml # type: ignore +import yaml # type: ignore from typing import Any diff --git a/pyproject.toml b/pyproject.toml index f7e11efb..725c84a9 100755 --- a/pyproject.toml +++ b/pyproject.toml @@ -20,8 +20,8 @@ dependencies = [ "toml>=0.10.2", "watchdog>=4.0.1", "pdm-backend>=2.3.3", - "magicoca>=1.0.6", "croterline>=1.0.9", + "magicoca>=1.0.8", ] [project.urls] @@ -37,7 +37,6 @@ build-backend = "pdm.backend" [tool.pdm.build] includes = ["liteyuki/", "LICENSE", "README.md"] excludes = ["tests/", "docs/", "src/"] -fallback_version = "0.1.0" [tool.pdm.version] source = "scm" diff --git a/scripts/install-deps.sh b/scripts/install-deps.sh new file mode 100644 index 00000000..36b61e96 --- /dev/null +++ b/scripts/install-deps.sh @@ -0,0 +1,3 @@ +python -m pip install pdm +python -m pdm install +python -m pip install -r requirements.txt \ No newline at end of file diff --git a/src/liteyuki_plugins/nonebot/nonebot_plugins/nonebot_plugin_gotify/__init__.py b/src/liteyuki_plugins/nonebot/nonebot_plugins/nonebot_plugin_gotify/__init__.py deleted file mode 100755 index 46d5f0e3..00000000 --- a/src/liteyuki_plugins/nonebot/nonebot_plugins/nonebot_plugin_gotify/__init__.py +++ /dev/null @@ -1,109 +0,0 @@ -import asyncio -import aiohttp -from nonebot import logger, on_message, Bot -from nonebot.internal.adapter import Event -from nonebot.plugin import PluginMetadata -from nonebot import get_driver - -from .adapter_ctx import Context -from .config import plugin_config, Config, NOTICE, MESSAGE -from .gotify import Message, msg_chan, fetch_msg - -__plugin_meta__ = PluginMetadata( - name="Gotify", - description="使用Gotify API发送消息", - usage="后台服务插件,无需用户交互", -) - -# on plugin load -driver = get_driver() - -async def push_thread(): - async with aiohttp.ClientSession() as session: - while True: - msg = await fetch_msg() - try: - logger.debug(f"Pushing message: {msg}") - async with session.post( - url=plugin_config.gotify_url + "/message", - params={"token": plugin_config.gotify_token}, - data={ - "title": msg.title, - "message": msg.message, - "priority": msg.priority, - }, - ) as resp: - if resp.status != 200: - logger.error( - f"Push message to server failed: {await resp.text()}" - ) - else: - logger.info(f"Push message to server success: {msg}") - except Exception as e: - logger.error(f"Push message to server failed: {e}") - -@driver.on_startup -async def start_push_thread(): - asyncio.create_task(push_thread()) - logger.info( - f"Gotify plugin loaded, server: {plugin_config.gotify_url}, token: {plugin_config.gotify_token}" - ) - -if MESSAGE in plugin_config.gotify_includes: - @on_message(block=False, priority=100).handle() - async def _(event: Event): - ctx = Context( - user_id=event.get_user_id(), - nickname="", - message=event.get_plaintext(), - message_type=event.get_type(), - ) - ctx.handle(event) - - msg_chan << Message( - title=plugin_config.gotify_title.format(**ctx.model_dump()), - message=plugin_config.gotify_message.format(**ctx.model_dump()), - ) - -if NOTICE in plugin_config.gotify_includes: - @driver.on_startup - async def startup(): - if NOTICE in plugin_config.gotify_includes: - msg_chan << Message( - title=plugin_config.gotify_nickname, - message="Bot started", - priority=plugin_config.gotify_priority, - ) - - - @driver.on_shutdown - async def shutdown(): - if NOTICE in plugin_config.gotify_includes: - msg_chan << Message( - title=plugin_config.gotify_nickname, - message="Bot stopped", - priority=plugin_config.gotify_priority, - ) - - - @driver.on_bot_connect - async def bot_connect(bot: Bot): - if NOTICE in plugin_config.gotify_includes: - msg_chan << Message( - title=plugin_config.gotify_nickname, - message=f"Bot connected: {bot.self_id}", - priority=plugin_config.gotify_priority, - ) - - - @driver.on_bot_disconnect - async def bot_disconnect(bot: Bot): - if NOTICE in plugin_config.gotify_includes: - msg_chan << Message( - title=plugin_config.gotify_nickname, - message=f"Bot disconnected: {bot.self_id}", - priority=plugin_config.gotify_priority, - ) - - - diff --git a/src/liteyuki_plugins/nonebot/nonebot_plugins/nonebot_plugin_gotify/adapter_ctx.py b/src/liteyuki_plugins/nonebot/nonebot_plugins/nonebot_plugin_gotify/adapter_ctx.py deleted file mode 100755 index 59e71e67..00000000 --- a/src/liteyuki_plugins/nonebot/nonebot_plugins/nonebot_plugin_gotify/adapter_ctx.py +++ /dev/null @@ -1,12 +0,0 @@ -from pydantic import BaseModel - - -class Context(BaseModel): - user_id: str - nickname: str - message: str - message_type: str | None = None - - def handle(self, event): - pass - diff --git a/src/liteyuki_plugins/nonebot/nonebot_plugins/nonebot_plugin_gotify/config.py b/src/liteyuki_plugins/nonebot/nonebot_plugins/nonebot_plugin_gotify/config.py deleted file mode 100755 index 31c08c4b..00000000 --- a/src/liteyuki_plugins/nonebot/nonebot_plugins/nonebot_plugin_gotify/config.py +++ /dev/null @@ -1,22 +0,0 @@ -from nonebot import get_plugin_config -from pydantic import BaseModel - -NOTICE = "notice" -MESSAGE = "message" - -class Config(BaseModel): - # required fields - gotify_token: str - - # optional fields - gotify_url: str = "http://127.0.0.1:40266" - gotify_priority: int = 5 - gotify_nickname: str = "NoneBot" - gotify_title: str = "{message_type}: {nickname}({user_id})" - gotify_message: str = "{message}" - gotify_includes: list[str, ...] = [NOTICE, MESSAGE] - - -plugin_config = get_plugin_config(Config) -if plugin_config.gotify_url.endswith("/"): - plugin_config.gotify_url = plugin_config.gotify_url[:-1] diff --git a/src/liteyuki_plugins/nonebot/nonebot_plugins/nonebot_plugin_gotify/gotify.py b/src/liteyuki_plugins/nonebot/nonebot_plugins/nonebot_plugin_gotify/gotify.py deleted file mode 100755 index d6bd1213..00000000 --- a/src/liteyuki_plugins/nonebot/nonebot_plugins/nonebot_plugin_gotify/gotify.py +++ /dev/null @@ -1,20 +0,0 @@ -import asyncio -from asyncio import Future -from typing import Any - -from magicoca import Chan -from pydantic import BaseModel - -from .config import plugin_config - -msg_chan = Chan["Message"]() - - -class Message(BaseModel): - title: str - message: str - priority: int = plugin_config.gotify_priority - - -def fetch_msg() -> Future[Any]: - return asyncio.get_event_loop().run_in_executor(func=msg_chan.recv, executor=None)