fix webhook_parser

This commit is contained in:
jxxghp
2024-09-19 21:09:07 +08:00
parent 4016295696
commit 2486b9274c
9 changed files with 79 additions and 40 deletions
+18 -3
View File
@@ -1,7 +1,7 @@
from abc import abstractmethod, ABCMeta from abc import abstractmethod, ABCMeta
from typing import Tuple, Union, Dict, Any, Optional 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): class _ModuleBase(metaclass=ABCMeta):
@@ -66,13 +66,16 @@ class _MessageBase:
return None return None
return self._clients.get(name) 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: if not name:
return None 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: def checkMessage(self, message: Notification, source: str = None) -> bool:
""" """
@@ -118,9 +121,21 @@ class _MediaServerBase:
""" """
_servers: Dict[str, Any] = {} _servers: Dict[str, Any] = {}
_configs: Dict[str, MediaServerConf] = {}
def get_server(self, name: str) -> Optional[Any]: def get_server(self, name: str) -> Optional[Any]:
""" """
获取Plex服务器 获取Plex服务器
""" """
return self._servers.get(name) 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
+15 -4
View File
@@ -6,6 +6,7 @@ from app.helper.mediaserver import MediaServerHelper
from app.log import logger from app.log import logger
from app.modules import _ModuleBase, _MediaServerBase from app.modules import _ModuleBase, _MediaServerBase
from app.modules.emby.emby import Emby from app.modules.emby.emby import Emby
from app.schemas import MediaServerConf
from app.schemas.types import MediaType from app.schemas.types import MediaType
@@ -17,11 +18,13 @@ class EmbyModule(_ModuleBase, _MediaServerBase):
""" """
# 读取媒体服务器配置 # 读取媒体服务器配置
self._servers: Dict[str, Emby] = {} self._servers: Dict[str, Emby] = {}
self._configs: Dict[str, MediaServerConf] = {}
mediaservers = MediaServerHelper().get_mediaservers() mediaservers = MediaServerHelper().get_mediaservers()
if not mediaservers: if not mediaservers:
return return
for server in mediaservers: for server in mediaservers:
if server.type == "emby" and server.enabled: if server.type == "emby" and server.enabled:
self._configs[server.name] = server
self._servers[server.name] = Emby(**server.config, sync_libraries=server.sync_libraries) self._servers[server.name] = Emby(**server.config, sync_libraries=server.sync_libraries)
@staticmethod @staticmethod
@@ -81,14 +84,22 @@ class EmbyModule(_ModuleBase, _MediaServerBase):
""" """
source = args.get("source") source = args.get("source")
if source: if source:
server_config: MediaServerConf = self.get_config(source, 'emby')
if not server_config:
return None
server: Emby = self.get_server(source) server: Emby = self.get_server(source)
if not server: if not server:
return None return None
return server.get_webhook_message(form, args) return server.get_webhook_message(form, args)
for server in self._servers.values():
result = server.get_webhook_message(form, args) for conf in self._configs.values():
if result: if conf.type != "emby":
return result continue
server = self.get_server(conf.name)
if server:
result = server.get_webhook_message(form, args)
if result:
return result
return None return None
def media_exists(self, mediainfo: MediaInfo, itemid: str = None) -> Optional[schemas.ExistMediaInfo]: def media_exists(self, mediainfo: MediaInfo, itemid: str = None) -> Optional[schemas.ExistMediaInfo]:
+15 -4
View File
@@ -6,6 +6,7 @@ from app.helper.mediaserver import MediaServerHelper
from app.log import logger from app.log import logger
from app.modules import _ModuleBase, _MediaServerBase from app.modules import _ModuleBase, _MediaServerBase
from app.modules.jellyfin.jellyfin import Jellyfin from app.modules.jellyfin.jellyfin import Jellyfin
from app.schemas import MediaServerConf
from app.schemas.types import MediaType from app.schemas.types import MediaType
@@ -17,11 +18,13 @@ class JellyfinModule(_ModuleBase, _MediaServerBase):
""" """
# 读取媒体服务器配置 # 读取媒体服务器配置
self._servers: Dict[str, Jellyfin] = {} self._servers: Dict[str, Jellyfin] = {}
self._configs: Dict[str, MediaServerConf] = {}
mediaservers = MediaServerHelper().get_mediaservers() mediaservers = MediaServerHelper().get_mediaservers()
if not mediaservers: if not mediaservers:
return return
for server in mediaservers: for server in mediaservers:
if server.type == "jellyfin" and server.enabled: if server.type == "jellyfin" and server.enabled:
self._configs[server.name] = server
self._servers[server.name] = Jellyfin(**server.config, sync_libraries=server.sync_libraries) self._servers[server.name] = Jellyfin(**server.config, sync_libraries=server.sync_libraries)
@staticmethod @staticmethod
@@ -81,14 +84,22 @@ class JellyfinModule(_ModuleBase, _MediaServerBase):
""" """
source = args.get("source") source = args.get("source")
if source: if source:
server_config: MediaServerConf = self.get_config(source, 'jellyfin')
if not server_config:
return None
server: Jellyfin = self.get_server(source) server: Jellyfin = self.get_server(source)
if not server: if not server:
return None return None
return server.get_webhook_message(body) return server.get_webhook_message(body)
for server in self._servers.values():
result = server.get_webhook_message(body) for conf in self._configs.values():
if result: if conf.type != "jellyfin":
return result continue
server = self.get_server(conf.name)
if server:
result = server.get_webhook_message(body)
if result:
return result
return None return None
def media_exists(self, mediainfo: MediaInfo, itemid: str = None) -> Optional[schemas.ExistMediaInfo]: def media_exists(self, mediainfo: MediaInfo, itemid: str = None) -> Optional[schemas.ExistMediaInfo]:
+15 -4
View File
@@ -6,6 +6,7 @@ from app.helper.mediaserver import MediaServerHelper
from app.log import logger from app.log import logger
from app.modules import _ModuleBase, _MediaServerBase from app.modules import _ModuleBase, _MediaServerBase
from app.modules.plex.plex import Plex from app.modules.plex.plex import Plex
from app.schemas import MediaServerConf
from app.schemas.types import MediaType from app.schemas.types import MediaType
@@ -17,11 +18,13 @@ class PlexModule(_ModuleBase, _MediaServerBase):
""" """
# 读取媒体服务器配置 # 读取媒体服务器配置
self._servers: Dict[str, Plex] = {} self._servers: Dict[str, Plex] = {}
self._configs: Dict[str, MediaServerConf] = {}
mediaservers = MediaServerHelper().get_mediaservers() mediaservers = MediaServerHelper().get_mediaservers()
if not mediaservers: if not mediaservers:
return return
for server in mediaservers: for server in mediaservers:
if server.type == "plex" and server.enabled: if server.type == "plex" and server.enabled:
self._configs[server.name] = server
self._servers[server.name] = Plex(**server.config, sync_libraries=server.sync_libraries) self._servers[server.name] = Plex(**server.config, sync_libraries=server.sync_libraries)
@staticmethod @staticmethod
@@ -67,14 +70,22 @@ class PlexModule(_ModuleBase, _MediaServerBase):
""" """
source = args.get("source") source = args.get("source")
if source: if source:
server_config: MediaServerConf = self.get_config(source, 'plex')
if not server_config:
return None
server: Plex = self.get_server(source) server: Plex = self.get_server(source)
if not server: if not server:
return None return None
return server.get_webhook_message(body) return server.get_webhook_message(body)
for server in self._servers.values():
result = server.get_webhook_message(body) for conf in self._configs.values():
if result: if conf.type != "plex":
return result continue
server = self.get_server(conf.name)
if server:
result = server.get_webhook_message(body)
if result:
return result
return None return None
def media_exists(self, mediainfo: MediaInfo, itemid: str = None) -> Optional[schemas.ExistMediaInfo]: def media_exists(self, mediainfo: MediaInfo, itemid: str = None) -> Optional[schemas.ExistMediaInfo]:
+2 -3
View File
@@ -175,10 +175,9 @@ class SlackModule(_ModuleBase, _MessageBase):
] ]
} }
""" """
# 来源
# 获取客户端 # 获取客户端
client: Slack = self.get_client(source) client_config = self.get_config(source, 'slack')
if not client: if not client_config:
return None return None
# 校验token # 校验token
token = args.get("token") token = args.get("token")
+3 -2
View File
@@ -61,9 +61,10 @@ class SynologyChatModule(_ModuleBase, _MessageBase):
""" """
try: try:
# 来源 # 来源
client: SynologyChat = self.get_client(source) client_config = self.get_config(source, 'synologychat')
if not client: if not client_config:
return None return None
client: SynologyChat = self.get_client(source)
# 解析消息 # 解析消息
message: dict = form message: dict = form
if not message: if not message:
+6 -9
View File
@@ -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) client: Telegram = self.get_client(source)
if not client:
return None
# 获取配置
config = self.get_config(source)
if not config:
return None
# 校验token # 校验token
token = args.get("token") token = args.get("token")
if not token or token != settings.API_TOKEN: if not token or token != settings.API_TOKEN:
@@ -113,9 +110,9 @@ class TelegramModule(_ModuleBase, _MessageBase):
if text: if text:
logger.info(f"收到来自 {source} 的Telegram消息:userid={user_id}, username={user_name}, text={text}") logger.info(f"收到来自 {source} 的Telegram消息:userid={user_id}, username={user_name}, text={text}")
# 检查权限 # 检查权限
admin_users = config.config.get("TELEGRAM_ADMINS") admin_users = client_config.config.get("TELEGRAM_ADMINS")
user_list = config.config.get("TELEGRAM_USERS") user_list = client_config.config.get("TELEGRAM_USERS")
chat_id = config.config.get("TELEGRAM_CHAT_ID") chat_id = client_config.config.get("TELEGRAM_CHAT_ID")
if text.startswith("/"): if text.startswith("/"):
if admin_users \ if admin_users \
and str(user_id) not in admin_users.split(',') \ and str(user_id) not in admin_users.split(',') \
+3 -7
View File
@@ -78,12 +78,8 @@ class VoceChatModule(_ModuleBase, _MessageBase):
} }
""" """
# 获取渠道 # 获取渠道
client: VoceChat = self.get_client(source) client_config = self.get_config(source, 'vocechat')
if not client: if not client_config:
return None
# 获取配置
config = self.get_config(source)
if not config:
return None return None
# 报文体 # 报文体
msg_body = json.loads(body) msg_body = json.loads(body)
@@ -102,7 +98,7 @@ class VoceChatModule(_ModuleBase, _MessageBase):
content = msg_body.get("detail", {}).get("content") content = msg_body.get("detail", {}).get("content")
# 用户ID # 用户ID
gid = msg_body.get("target", {}).get("gid") 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): if gid and str(gid) == str(channel_id):
# 来自监听频道的消息 # 来自监听频道的消息
userid = f"GID#{gid}" userid = f"GID#{gid}"
+2 -4
View File
@@ -64,12 +64,10 @@ class WechatModule(_ModuleBase, _MessageBase):
""" """
try: try:
# 获取客户端 # 获取客户端
client: WeChat = self.get_client(source) client_config = self.get_config(source, 'wechat')
if not client:
return None
client_config = self.get_config(source)
if not client_config: if not client_config:
return None return None
client: WeChat = self.get_client(source)
# URL参数 # URL参数
sVerifyMsgSig = args.get("msg_signature") sVerifyMsgSig = args.get("msg_signature")
sVerifyTimeStamp = args.get("timestamp") sVerifyTimeStamp = args.get("timestamp")