mirror of
https://github.com/sipeed/picoclaw.git
synced 2026-05-25 16:00:35 +00:00
82 lines
2.2 KiB
Go
82 lines
2.2 KiB
Go
package bus
|
|
|
|
import "strings"
|
|
|
|
// NormalizeInboundMessage ensures the inbound context is normalized and keeps
|
|
// convenience mirrors in sync for runtime consumers.
|
|
func NormalizeInboundMessage(msg InboundMessage) InboundMessage {
|
|
if msg.Context.Channel == "" {
|
|
msg.Context.Channel = msg.Channel
|
|
}
|
|
if msg.Context.ChatID == "" {
|
|
msg.Context.ChatID = msg.ChatID
|
|
}
|
|
if msg.Context.SenderID == "" {
|
|
msg.Context.SenderID = msg.SenderID
|
|
}
|
|
if msg.Context.MessageID == "" {
|
|
msg.Context.MessageID = msg.MessageID
|
|
}
|
|
msg.Context = normalizeInboundContext(msg.Context)
|
|
msg.Channel = msg.Context.Channel
|
|
msg.SenderID = msg.Context.SenderID
|
|
msg.ChatID = msg.Context.ChatID
|
|
if msg.MessageID == "" {
|
|
msg.MessageID = msg.Context.MessageID
|
|
}
|
|
if msg.Context.MessageID == "" {
|
|
msg.Context.MessageID = msg.MessageID
|
|
}
|
|
return msg
|
|
}
|
|
|
|
func (ctx InboundContext) isZero() bool {
|
|
return ctx.Channel == "" &&
|
|
ctx.Account == "" &&
|
|
ctx.ChatID == "" &&
|
|
ctx.ChatType == "" &&
|
|
ctx.TopicID == "" &&
|
|
ctx.SpaceID == "" &&
|
|
ctx.SpaceType == "" &&
|
|
ctx.SenderID == "" &&
|
|
ctx.MessageID == "" &&
|
|
!ctx.Mentioned &&
|
|
ctx.ReplyToMessageID == "" &&
|
|
ctx.ReplyToSenderID == "" &&
|
|
len(ctx.ReplyHandles) == 0 &&
|
|
len(ctx.Raw) == 0
|
|
}
|
|
|
|
func normalizeInboundContext(ctx InboundContext) InboundContext {
|
|
ctx.Channel = strings.TrimSpace(ctx.Channel)
|
|
ctx.Account = strings.TrimSpace(ctx.Account)
|
|
ctx.ChatID = strings.TrimSpace(ctx.ChatID)
|
|
ctx.ChatType = normalizeKind(ctx.ChatType)
|
|
ctx.TopicID = strings.TrimSpace(ctx.TopicID)
|
|
ctx.SpaceID = strings.TrimSpace(ctx.SpaceID)
|
|
ctx.SpaceType = normalizeKind(ctx.SpaceType)
|
|
ctx.SenderID = strings.TrimSpace(ctx.SenderID)
|
|
ctx.MessageID = strings.TrimSpace(ctx.MessageID)
|
|
ctx.ReplyToMessageID = strings.TrimSpace(ctx.ReplyToMessageID)
|
|
ctx.ReplyToSenderID = strings.TrimSpace(ctx.ReplyToSenderID)
|
|
ctx.ReplyHandles = cloneStringMap(ctx.ReplyHandles)
|
|
ctx.Raw = cloneStringMap(ctx.Raw)
|
|
return ctx
|
|
}
|
|
|
|
func cloneStringMap(src map[string]string) map[string]string {
|
|
if len(src) == 0 {
|
|
return nil
|
|
}
|
|
|
|
dst := make(map[string]string, len(src))
|
|
for k, v := range src {
|
|
dst[k] = v
|
|
}
|
|
return dst
|
|
}
|
|
|
|
func normalizeKind(kind string) string {
|
|
return strings.ToLower(strings.TrimSpace(kind))
|
|
}
|