diff --git a/app/api/endpoints/webhook.py b/app/api/endpoints/webhook.py index b1daf0ca..a5379aba 100644 --- a/app/api/endpoints/webhook.py +++ b/app/api/endpoints/webhook.py @@ -29,3 +29,16 @@ async def webhook_message(background_tasks: BackgroundTasks, args = request.query_params background_tasks.add_task(start_webhook_chain, body, form, args) return schemas.Response(success=True) + + +@router.get("/", summary="Webhook消息响应", response_model=schemas.Response) +async def webhook_message(background_tasks: BackgroundTasks, + token: str, request: Request) -> Any: + """ + Webhook响应 + """ + if token != settings.API_TOKEN: + return schemas.Response(success=False, message="token认证不通过") + args = request.query_params + background_tasks.add_task(start_webhook_chain, None, None, args) + return schemas.Response(success=True) diff --git a/app/modules/emby/__init__.py b/app/modules/emby/__init__.py index 4e8e66cc..07a3d0b8 100644 --- a/app/modules/emby/__init__.py +++ b/app/modules/emby/__init__.py @@ -1,3 +1,4 @@ +import json from pathlib import Path from typing import Optional, Tuple, Union, Any, List, Generator @@ -40,7 +41,11 @@ class EmbyModule(_ModuleBase): :param args: 请求参数 :return: 字典,解析为消息时需要包含:title、text、image """ - return self.emby.get_webhook_message(form.get("data")) + if form and form.get("data"): + result = form.get("data") + else: + result = json.dumps(dict(args)) + return self.emby.get_webhook_message(result) def media_exists(self, mediainfo: MediaInfo, itemid: str = None) -> Optional[ExistMediaInfo]: """ diff --git a/app/modules/emby/emby.py b/app/modules/emby/emby.py index d43edb2b..6ea1423d 100644 --- a/app/modules/emby/emby.py +++ b/app/modules/emby/emby.py @@ -591,6 +591,14 @@ class Emby(metaclass=Singleton): eventItem.client = message.get('Session').get('Client') if message.get("User"): eventItem.user_name = message.get("User").get('Name') + if message.get("item_isvirtual"): + eventItem.item_isvirtual = message.get("item_isvirtual") + eventItem.item_type = message.get("item_type") + eventItem.item_name = message.get("item_name") + eventItem.item_path = message.get("item_path") + eventItem.tmdb_id = message.get("tmdb_id") + eventItem.season_id = message.get("season_id") + eventItem.episode_id = message.get("episode_id") # 获取消息图片 if eventItem.item_id: diff --git a/app/plugins/mediasyncdel/__init__.py b/app/plugins/mediasyncdel/__init__.py index bd5838f4..a01297e2 100644 --- a/app/plugins/mediasyncdel/__init__.py +++ b/app/plugins/mediasyncdel/__init__.py @@ -391,12 +391,12 @@ class MediaSyncDel(_PluginBase): if not self._enabled: return event_data = event.event_data - event_type = event_data.get("event_type") + event_type = event_data.event if not event_type or str(event_type) != 'media_del': return # 是否虚拟标识 - item_isvirtual = event_data.get("item_isvirtual") + item_isvirtual = event_data.item_isvirtual if not item_isvirtual: logger.error("item_isvirtual参数未配置,为防止误删除,暂停插件运行") self.update_config({ @@ -417,24 +417,24 @@ class MediaSyncDel(_PluginBase): history = self.get_data('history') or [] # 媒体类型 - media_type = event_data.get("media_type") + media_type = event_data.item_type # 媒体名称 - media_name = event_data.get("media_name") + media_name = event_data.item_name # 媒体路径 - media_path = event_data.get("media_path") + media_path = event_data.item_path # tmdb_id - tmdb_id = event_data.get("tmdb_id") + tmdb_id = event_data.tmdb_id # 季数 - season_num = event_data.get("season_num") + season_num = event_data.season_id if season_num and str(season_num).isdigit() and int(season_num) < 10: season_num = f'S0{season_num}' - else: + elif season_num: season_num = f'S{season_num}' # 集数 - episode_num = event_data.get("episode_num") + episode_num = event_data.episode_id if episode_num and str(episode_num).isdigit() and int(episode_num) < 10: episode_num = f'E0{episode_num}' - else: + elif episode_num: episode_num = f'E{episode_num}' if not media_type: diff --git a/app/schemas/mediaserver.py b/app/schemas/mediaserver.py index fa45d8cc..0f8ff8a4 100644 --- a/app/schemas/mediaserver.py +++ b/app/schemas/mediaserver.py @@ -133,3 +133,4 @@ class WebhookEventInfo(BaseModel): image_url: Optional[str] = None item_favorite: Optional[bool] = None save_reason: Optional[str] = None + item_isvirtual: Optional[bool] = None