package service
import (
"fmt"
"strings"
)
func telegramShouldShowEventHeading(event NotifyEvent) bool {
if telegramMediaTag(event.Data) != "" {
return false
}
switch strings.TrimSpace(event.Type) {
case EventSubscriptionHit, EventDownloadComplete:
return false
default:
return true
}
}
func telegramEventTag(event NotifyEvent) string {
if tag := telegramMediaTag(event.Data); tag != "" {
return tag
}
switch strings.TrimSpace(event.Type) {
case EventSubscriptionHit:
return "#订阅"
case EventDownloadComplete:
return "#下载完成"
case EventScrapeFailed:
return "#刮削失败"
case EventSystemAlert:
return "#系统提醒"
case EventLibraryIngest:
return "#入库"
default:
title := strings.TrimSpace(strings.TrimPrefix(event.Title, "MediaStationGo "))
if title == "" {
return "#MediaStationGo"
}
return "#" + escapeHTML(strings.ReplaceAll(title, " ", ""))
}
}
func telegramEventHeading(event NotifyEvent) string {
title := strings.TrimSpace(event.Title)
title = strings.TrimSpace(strings.TrimPrefix(title, "MediaStationGo "))
if title == "" {
title = "MediaStationGo 通知"
}
icon := "🔔"
switch strings.TrimSpace(event.Type) {
case EventSubscriptionHit:
icon = "🎯"
case EventDownloadComplete:
icon = "✅"
case EventScrapeFailed:
icon = "⚠️"
case EventSystemAlert:
icon = "🚨"
case EventLibraryIngest:
icon = "📚"
}
return fmt.Sprintf("%s %s", icon, escapeHTML(title))
}
func formatTelegramBody(message string) string {
lines := strings.Split(message, "\n")
out := make([]string, 0, len(lines))
for _, line := range lines {
line = strings.TrimSpace(line)
if line == "" {
out = append(out, "")
continue
}
if strings.HasPrefix(line, "- ") {
out = append(out, "- "+escapeHTML(strings.TrimSpace(strings.TrimPrefix(line, "- "))))
continue
}
if key, ok := trimTelegramEmptyField(line); ok {
out = append(out, fmt.Sprintf("%s %s:", telegramFieldIcon(telegramFieldLabel(key)), escapeHTML(telegramFieldLabel(key))))
continue
}
if key, value, ok := splitTelegramField(line); ok {
out = append(out, formatTelegramField(key, value))
continue
}
out = append(out, escapeHTML(line))
}
return strings.TrimSpace(strings.Join(out, "\n"))
}
func trimTelegramEmptyField(line string) (string, bool) {
line = strings.TrimSpace(line)
for _, suffix := range []string{":", ":"} {
if strings.HasSuffix(line, suffix) {
key := strings.TrimSpace(strings.TrimSuffix(line, suffix))
if key != "" && len([]rune(key)) <= 16 {
return key, true
}
}
}
return "", false
}
func splitTelegramField(line string) (string, string, bool) {
idx := strings.Index(line, ":")
sepLen := len(":")
if idx < 0 {
idx = strings.Index(line, ":")
sepLen = len(":")
}
if idx <= 0 {
return "", "", false
}
key := strings.TrimSpace(line[:idx])
value := strings.TrimSpace(line[idx+sepLen:])
if key == "" || value == "" || len([]rune(key)) > 16 {
return "", "", false
}
return key, value, true
}
func formatTelegramField(key, value string) string {
key = telegramFieldLabel(key)
escapedValue := escapeHTML(strings.TrimSpace(value))
if telegramCodeField(key) {
escapedValue = "" + escapedValue + ""
}
return fmt.Sprintf("%s %s:%s", telegramFieldIcon(key), escapeHTML(key), escapedValue)
}
func telegramCodeField(key string) bool {
key = strings.ToLower(strings.TrimSpace(key))
return strings.Contains(key, "hash") ||
strings.Contains(key, "路径") ||
strings.Contains(key, "path") ||
strings.Contains(key, "id")
}
func telegramFieldIcon(key string) string {
switch strings.ToLower(strings.TrimSpace(key)) {
case "中文片名", "标题", "任务", "媒体", "资源":
return "📺"
case "原始片名":
return "🧿"
case "原始语言", "语言":
return "🌐"
case "发行年份", "年份":
return "📅"
case "类别", "分类", "媒体类型":
return "🐈⬛"
case "季集", "集数":
return "🫧"
case "大小", "质量", "规格":
return "🔎"
case "版本", "保存路径":
return "📁"
case "评分":
return "⭐️"
case "类型":
return "💎"
case "简介":
return "🪬"
case "订阅":
return "🎯"
case "新增资源":
return "✨"
case "Hash":
return "🧿"
case "错误":
return "⚠️"
default:
return "•"
}
}