From 2486b9274c8572314761cc6aed4696dea59d0b03 Mon Sep 17 00:00:00 2001 From: jxxghp Date: Thu, 19 Sep 2024 21:09:07 +0800 Subject: [PATCH] fix webhook_parser --- app/modules/__init__.py | 21 ++++++++++++++++++--- app/modules/emby/__init__.py | 19 +++++++++++++++---- app/modules/jellyfin/__init__.py | 19 +++++++++++++++---- app/modules/plex/__init__.py | 19 +++++++++++++++---- app/modules/slack/__init__.py | 5 ++--- app/modules/synologychat/__init__.py | 5 +++-- app/modules/telegram/__init__.py | 15 ++++++--------- app/modules/vocechat/__init__.py | 10 +++------- app/modules/wechat/__init__.py | 6 ++---- 9 files changed, 79 insertions(+), 40 deletions(-) diff --git a/app/modules/__init__.py b/app/modules/__init__.py index 4b512606..6b723e46 100644 --- a/app/modules/__init__.py +++ b/app/modules/__init__.py @@ -1,7 +1,7 @@ from abc import abstractmethod, ABCMeta from typing import Tuple, Union, Dict, Any, Optional -from app.schemas import Notification, MessageChannel, NotificationConf +from app.schemas import Notification, MessageChannel, NotificationConf, MediaServerConf class _ModuleBase(metaclass=ABCMeta): @@ -66,13 +66,16 @@ class _MessageBase: return None return self._clients.get(name) - def get_config(self, name: str) -> Optional[NotificationConf]: + def get_config(self, name: str, ctype: str = None) -> Optional[NotificationConf]: """ 获取配置 """ if not name: return None - return self._configs.get(name) + conf = self._configs.get(name) + if not ctype: + return conf + return conf if conf.type == ctype else None def checkMessage(self, message: Notification, source: str = None) -> bool: """ @@ -118,9 +121,21 @@ class _MediaServerBase: """ _servers: Dict[str, Any] = {} + _configs: Dict[str, MediaServerConf] = {} def get_server(self, name: str) -> Optional[Any]: """ 获取Plex服务器 """ return self._servers.get(name) + + def get_config(self, name: str, mtype: str = None) -> Optional[MediaServerConf]: + """ + 获取配置 + """ + if not name: + return None + conf = self._configs.get(name) + if not mtype: + return conf + return conf if conf.type == mtype else None diff --git a/app/modules/emby/__init__.py b/app/modules/emby/__init__.py index 9d863cd2..32397b87 100644 --- a/app/modules/emby/__init__.py +++ b/app/modules/emby/__init__.py @@ -6,6 +6,7 @@ from app.helper.mediaserver import MediaServerHelper from app.log import logger from app.modules import _ModuleBase, _MediaServerBase from app.modules.emby.emby import Emby +from app.schemas import MediaServerConf from app.schemas.types import MediaType @@ -17,11 +18,13 @@ class EmbyModule(_ModuleBase, _MediaServerBase): """ # 读取媒体服务器配置 self._servers: Dict[str, Emby] = {} + self._configs: Dict[str, MediaServerConf] = {} mediaservers = MediaServerHelper().get_mediaservers() if not mediaservers: return for server in mediaservers: if server.type == "emby" and server.enabled: + self._configs[server.name] = server self._servers[server.name] = Emby(**server.config, sync_libraries=server.sync_libraries) @staticmethod @@ -81,14 +84,22 @@ class EmbyModule(_ModuleBase, _MediaServerBase): """ source = args.get("source") if source: + server_config: MediaServerConf = self.get_config(source, 'emby') + if not server_config: + return None server: Emby = self.get_server(source) if not server: return None return server.get_webhook_message(form, args) - for server in self._servers.values(): - result = server.get_webhook_message(form, args) - if result: - return result + + for conf in self._configs.values(): + if conf.type != "emby": + continue + server = self.get_server(conf.name) + if server: + result = server.get_webhook_message(form, args) + if result: + return result return None def media_exists(self, mediainfo: MediaInfo, itemid: str = None) -> Optional[schemas.ExistMediaInfo]: diff --git a/app/modules/jellyfin/__init__.py b/app/modules/jellyfin/__init__.py index a2080b57..e9e41461 100644 --- a/app/modules/jellyfin/__init__.py +++ b/app/modules/jellyfin/__init__.py @@ -6,6 +6,7 @@ from app.helper.mediaserver import MediaServerHelper from app.log import logger from app.modules import _ModuleBase, _MediaServerBase from app.modules.jellyfin.jellyfin import Jellyfin +from app.schemas import MediaServerConf from app.schemas.types import MediaType @@ -17,11 +18,13 @@ class JellyfinModule(_ModuleBase, _MediaServerBase): """ # 读取媒体服务器配置 self._servers: Dict[str, Jellyfin] = {} + self._configs: Dict[str, MediaServerConf] = {} mediaservers = MediaServerHelper().get_mediaservers() if not mediaservers: return for server in mediaservers: if server.type == "jellyfin" and server.enabled: + self._configs[server.name] = server self._servers[server.name] = Jellyfin(**server.config, sync_libraries=server.sync_libraries) @staticmethod @@ -81,14 +84,22 @@ class JellyfinModule(_ModuleBase, _MediaServerBase): """ source = args.get("source") if source: + server_config: MediaServerConf = self.get_config(source, 'jellyfin') + if not server_config: + return None server: Jellyfin = self.get_server(source) if not server: return None return server.get_webhook_message(body) - for server in self._servers.values(): - result = server.get_webhook_message(body) - if result: - return result + + for conf in self._configs.values(): + if conf.type != "jellyfin": + continue + server = self.get_server(conf.name) + if server: + result = server.get_webhook_message(body) + if result: + return result return None def media_exists(self, mediainfo: MediaInfo, itemid: str = None) -> Optional[schemas.ExistMediaInfo]: diff --git a/app/modules/plex/__init__.py b/app/modules/plex/__init__.py index fbc15c34..5573bfc1 100644 --- a/app/modules/plex/__init__.py +++ b/app/modules/plex/__init__.py @@ -6,6 +6,7 @@ from app.helper.mediaserver import MediaServerHelper from app.log import logger from app.modules import _ModuleBase, _MediaServerBase from app.modules.plex.plex import Plex +from app.schemas import MediaServerConf from app.schemas.types import MediaType @@ -17,11 +18,13 @@ class PlexModule(_ModuleBase, _MediaServerBase): """ # 读取媒体服务器配置 self._servers: Dict[str, Plex] = {} + self._configs: Dict[str, MediaServerConf] = {} mediaservers = MediaServerHelper().get_mediaservers() if not mediaservers: return for server in mediaservers: if server.type == "plex" and server.enabled: + self._configs[server.name] = server self._servers[server.name] = Plex(**server.config, sync_libraries=server.sync_libraries) @staticmethod @@ -67,14 +70,22 @@ class PlexModule(_ModuleBase, _MediaServerBase): """ source = args.get("source") if source: + server_config: MediaServerConf = self.get_config(source, 'plex') + if not server_config: + return None server: Plex = self.get_server(source) if not server: return None return server.get_webhook_message(body) - for server in self._servers.values(): - result = server.get_webhook_message(body) - if result: - return result + + for conf in self._configs.values(): + if conf.type != "plex": + continue + server = self.get_server(conf.name) + if server: + result = server.get_webhook_message(body) + if result: + return result return None def media_exists(self, mediainfo: MediaInfo, itemid: str = None) -> Optional[schemas.ExistMediaInfo]: diff --git a/app/modules/slack/__init__.py b/app/modules/slack/__init__.py index efd8e4a2..7d129aad 100644 --- a/app/modules/slack/__init__.py +++ b/app/modules/slack/__init__.py @@ -175,10 +175,9 @@ class SlackModule(_ModuleBase, _MessageBase): ] } """ - # 来源 # 获取客户端 - client: Slack = self.get_client(source) - if not client: + client_config = self.get_config(source, 'slack') + if not client_config: return None # 校验token token = args.get("token") diff --git a/app/modules/synologychat/__init__.py b/app/modules/synologychat/__init__.py index 6000b375..e0247bcb 100644 --- a/app/modules/synologychat/__init__.py +++ b/app/modules/synologychat/__init__.py @@ -61,9 +61,10 @@ class SynologyChatModule(_ModuleBase, _MessageBase): """ try: # 来源 - client: SynologyChat = self.get_client(source) - if not client: + client_config = self.get_config(source, 'synologychat') + if not client_config: return None + client: SynologyChat = self.get_client(source) # 解析消息 message: dict = form if not message: diff --git a/app/modules/telegram/__init__.py b/app/modules/telegram/__init__.py index ca44bdb1..b4421f2f 100644 --- a/app/modules/telegram/__init__.py +++ b/app/modules/telegram/__init__.py @@ -89,13 +89,10 @@ class TelegramModule(_ModuleBase, _MessageBase): } """ # 获取渠道 + client_config = self.get_config(source, 'telegram') + if not client_config: + return None client: Telegram = self.get_client(source) - if not client: - return None - # 获取配置 - config = self.get_config(source) - if not config: - return None # 校验token token = args.get("token") if not token or token != settings.API_TOKEN: @@ -113,9 +110,9 @@ class TelegramModule(_ModuleBase, _MessageBase): if text: logger.info(f"收到来自 {source} 的Telegram消息:userid={user_id}, username={user_name}, text={text}") # 检查权限 - admin_users = config.config.get("TELEGRAM_ADMINS") - user_list = config.config.get("TELEGRAM_USERS") - chat_id = config.config.get("TELEGRAM_CHAT_ID") + admin_users = client_config.config.get("TELEGRAM_ADMINS") + user_list = client_config.config.get("TELEGRAM_USERS") + chat_id = client_config.config.get("TELEGRAM_CHAT_ID") if text.startswith("/"): if admin_users \ and str(user_id) not in admin_users.split(',') \ diff --git a/app/modules/vocechat/__init__.py b/app/modules/vocechat/__init__.py index 5ce9ce03..031da1b6 100644 --- a/app/modules/vocechat/__init__.py +++ b/app/modules/vocechat/__init__.py @@ -78,12 +78,8 @@ class VoceChatModule(_ModuleBase, _MessageBase): } """ # 获取渠道 - client: VoceChat = self.get_client(source) - if not client: - return None - # 获取配置 - config = self.get_config(source) - if not config: + client_config = self.get_config(source, 'vocechat') + if not client_config: return None # 报文体 msg_body = json.loads(body) @@ -102,7 +98,7 @@ class VoceChatModule(_ModuleBase, _MessageBase): content = msg_body.get("detail", {}).get("content") # 用户ID gid = msg_body.get("target", {}).get("gid") - channel_id = config.config.get("channel_id") + channel_id = client_config.config.get("channel_id") if gid and str(gid) == str(channel_id): # 来自监听频道的消息 userid = f"GID#{gid}" diff --git a/app/modules/wechat/__init__.py b/app/modules/wechat/__init__.py index baf358ce..690a77e6 100644 --- a/app/modules/wechat/__init__.py +++ b/app/modules/wechat/__init__.py @@ -64,12 +64,10 @@ class WechatModule(_ModuleBase, _MessageBase): """ try: # 获取客户端 - client: WeChat = self.get_client(source) - if not client: - return None - client_config = self.get_config(source) + client_config = self.get_config(source, 'wechat') if not client_config: return None + client: WeChat = self.get_client(source) # URL参数 sVerifyMsgSig = args.get("msg_signature") sVerifyTimeStamp = args.get("timestamp")