目录保留消息上下文并增加直达链接

This commit is contained in:
2026-03-17 13:58:16 +08:00
parent 6686a43a35
commit 05fbeabcd0
5 changed files with 601 additions and 527 deletions

View File

@@ -1,51 +1,55 @@
package toc
import (
"fmt"
"html"
"strings"
)
func (m *Manager) Render() (string, error) {
categories, err := m.storage.ListCategories()
if err != nil {
return "", err
}
entriesByCategory, err := m.storage.GetEntriesByCategory()
if err != nil {
return "", err
}
var sb strings.Builder
sb.WriteString("📚 <b>频道目录</b>\n")
sb.WriteString("━━━━━━━━━━━━━━━\n\n")
if len(categories) == 0 {
sb.WriteString("<i>暂无分类</i>")
return sb.String(), nil
}
for _, cat := range categories {
entries := entriesByCategory[cat.Name]
sb.WriteString(fmt.Sprintf("📁 <b>%s</b>", html.EscapeString(cat.Name)))
if len(entries) > 0 {
sb.WriteString(fmt.Sprintf(" (%d)", len(entries)))
}
sb.WriteString("\n")
package toc
import (
"fmt"
"html"
"strings"
)
func (m *Manager) Render() (string, error) {
categories, err := m.storage.ListCategories()
if err != nil {
return "", err
}
entriesByCategory, err := m.storage.GetEntriesByCategory()
if err != nil {
return "", err
}
var sb strings.Builder
sb.WriteString("📚 <b>频道目录</b>\n")
sb.WriteString("━━━━━━━━━━━━━━━\n\n")
if len(categories) == 0 {
sb.WriteString("<i>暂无分类</i>")
return sb.String(), nil
}
for _, cat := range categories {
entries := entriesByCategory[cat.Name]
sb.WriteString(fmt.Sprintf("📁 <b>%s</b>", html.EscapeString(cat.Name)))
if len(entries) > 0 {
sb.WriteString(fmt.Sprintf(" (%d)", len(entries)))
}
sb.WriteString("\n")
if len(entries) == 0 {
sb.WriteString(" <i>暂无内容</i>\n")
} else {
for _, entry := range entries {
sb.WriteString(fmt.Sprintf(" • <a href=\"%s\">%s</a>\n", entry.Link, html.EscapeString(entry.Title)))
sb.WriteString(fmt.Sprintf(" • <a href=\"%s\">%s</a>", html.EscapeString(entry.MessageLink()), html.EscapeString(entry.Title)))
if entry.HasDirectLink() {
sb.WriteString(fmt.Sprintf(" <a href=\"%s\">[直达]</a>", html.EscapeString(entry.DirectLink)))
}
sb.WriteString("\n")
}
}
sb.WriteString("\n")
}
sb.WriteString("━━━━━━━━━━━━━━━\n")
return sb.String(), nil
}
sb.WriteString("\n")
}
sb.WriteString("━━━━━━━━━━━━━━━\n")
return sb.String(), nil
}