This commit is contained in:
jxxghp
2023-06-17 17:34:18 +08:00
parent f85e960fa9
commit acdec220f7
42 changed files with 423 additions and 253 deletions

82
app/chain/webhook.py Normal file
View File

@ -0,0 +1,82 @@
import time
from typing import Any
from app.chain import ChainBase
from app.utils.http import WebUtils
from app.schemas.types import EventType
class WebhookChain(ChainBase):
"""
响应Webhook事件
"""
def message(self, body: Any, form: Any, args: Any) -> None:
"""
处理Webhook报文并发送消息
"""
# 获取主体内容
event_info: dict = self.webhook_parser(body=body, form=form, args=args)
if not event_info:
return
# 广播事件
self.eventmanager.send_event(EventType.WebhookMessage, event_info)
# 拼装消息内容
_webhook_actions = {
"library.new": "新入库",
"system.webhooktest": "测试",
"playback.start": "开始播放",
"playback.stop": "停止播放",
"user.authenticated": "登录成功",
"user.authenticationfailed": "登录失败",
"media.play": "开始播放",
"media.stop": "停止播放",
"PlaybackStart": "开始播放",
"PlaybackStop": "停止播放",
"item.rate": "标记了"
}
_webhook_images = {
"emby": "https://emby.media/notificationicon.png",
"plex": "https://www.plex.tv/wp-content/uploads/2022/04/new-logo-process-lines-gray.png",
"jellyfin": "https://play-lh.googleusercontent.com/SCsUK3hCCRqkJbmLDctNYCfehLxsS4ggD1ZPHIFrrAN1Tn9yhjmGMPep2D9lMaaa9eQi"
}
if not _webhook_actions.get(event_info.get('event')):
return
# 消息标题
if event_info.get('item_type') in ["TV", "SHOW"]:
message_title = f"{_webhook_actions.get(event_info.get('event'))}剧集 {event_info.get('item_name')}"
elif event_info.get('item_type') == "MOV":
message_title = f"{_webhook_actions.get(event_info.get('event'))}电影 {event_info.get('item_name')}"
elif event_info.get('item_type') == "AUD":
message_title = f"{_webhook_actions.get(event_info.get('event'))}有声书 {event_info.get('item_name')}"
else:
message_title = f"{_webhook_actions.get(event_info.get('event'))}"
# 消息内容
message_texts = []
if event_info.get('user_name'):
message_texts.append(f"用户:{event_info.get('user_name')}")
if event_info.get('device_name'):
message_texts.append(f"设备:{event_info.get('client')} {event_info.get('device_name')}")
if event_info.get('ip'):
message_texts.append(f"IP地址{event_info.get('ip')} {WebUtils.get_location(event_info.get('ip'))}")
if event_info.get('percentage'):
percentage = round(float(event_info.get('percentage')), 2)
message_texts.append(f"进度:{percentage}%")
if event_info.get('overview'):
message_texts.append(f"剧情:{event_info.get('overview')}")
message_texts.append(f"时间:{time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))}")
# 消息图片
if not event_info.get("image_url"):
image_url = _webhook_images.get(event_info.get("channel"))
else:
image_url = event_info.get("image_url")
# 消息内容
message_content = "\n".join(message_texts)
# 发送消息
self.post_message(title=message_title, text=message_content, image=image_url)