mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-04-13 09:49:42 +08:00
fix webhook_parser
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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]:
|
||||
|
||||
@@ -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]:
|
||||
|
||||
@@ -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]:
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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(',') \
|
||||
|
||||
@@ -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}"
|
||||
|
||||
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user