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 }