Files
AskaEth 093f38d986
CI / Backend (build / vet / test / cross-compile) (push) Has been cancelled
CI / Frontend (tsc + vite build) (push) Has been cancelled
docs(comments): 注释中文化 · internal/services/channelbridge(纯替换)
- 只翻注释/文档字符串:剥掉注释后代码行逐字节不变(机械校验只剩允许的行尾注释形态)
- 术语对齐既有译法(owner→主人、persona→角色、engage→参与度判定、quiet hours→安静时段、backoff→退避)
- 复核:go build 绿 + channelbridge 包测试绿;gofmt 干净
2026-10-04 13:33:06 +08:00

63 lines
1.8 KiB
Go

package channelbridge
import (
"strings"
"git.yeij.top/AskaEth/Cyrene_v2/internal/channel/adapter"
)
// 本文件承载桥接器各文件共用的小型包级辅助函数:
// 平台/账号命名、发送者标签,以及通用切片读取。
// basePlatform 返回(可能多账号的)适配器名称的裸平台名,
// 如 "telegram:conf0" → "telegram",使凭据闸门与
// 回复路由回退把同一平台的每个账号一视同仁。
func basePlatform(name string) string {
if base, _, ok := strings.Cut(name, ":"); ok {
return base
}
return name
}
// adapterName 返回接收消息的账号适配器注册名(如 "kook:3bef..."),
// a 为 nil 时返回 ""。单账号
// 便捷路径(process)以及没有已注册适配器的平台都可能传入 nil
// 适配器,因此持久化钩子容忍它,存空 adapter_id,而不是
// 解引用 nil 适配器。
func adapterName(a adapter.PlatformAdapter) string {
if a == nil {
return ""
}
return a.Name()
}
// senderDisplayName 返回用于标注第三方消息的
// 人类可读发送者名。它优先取已解析 actor 的显示名(由
// 渠道层依据渠道元数据 + 原始 SenderName 推导),回退到
// 消息自身的 SenderName,因此空的 SenderName 始终表示
// 「主人/未标注」,而不是解析不出结果的昵称。
func senderDisplayName(msg adapter.UnifiedMessage, actor adapter.Actor) string {
if actor.DisplayName != "" {
return actor.DisplayName
}
return msg.SenderName
}
// sliceContains 报告 s 是否存在于 list 中。
func sliceContains(list []string, s string) bool {
for _, v := range list {
if v == s {
return true
}
}
return false
}
// firstNonEmptyStr 在 a 非空时返回 a,否则返回 b。
func firstNonEmptyStr(a, b string) string {
if a != "" {
return a
}
return b
}