Files
larksuite-cli/shortcuts/event/helpers.go
梁硕 83dfb068ad feat: open-source lark-cli — the official CLI for Lark/Feishu
Change-Id: I113d9cdb5403cec347efe4595415e34a18b7decf
2026-03-28 10:36:25 +08:00

51 lines
1.5 KiB
Go

// Copyright (c) 2026 Lark Technologies Pte. Ltd.
// SPDX-License-Identifier: MIT
package event
// ── Shared helpers for IM event processors ──────────────────────────────────
// These functions are used across multiple processor files to extract common
// fields from Lark event payloads (operator_id, user_ids, base compact fields).
// openID extracts open_id from a nested {"open_id":"ou_xxx"} structure.
// Lark events represent user IDs as objects; this unwraps the outer layer.
func openID(v interface{}) string {
m, ok := v.(map[string]interface{})
if !ok {
return ""
}
s, _ := m["open_id"].(string)
return s
}
// extractUserIDs extracts open_ids from a users array:
// [{"user_id":{"open_id":"ou_xxx"},"name":"..."},...]
func extractUserIDs(users []interface{}) []string {
var ids []string
for _, u := range users {
um, ok := u.(map[string]interface{})
if !ok {
continue
}
if id := openID(um["user_id"]); id != "" {
ids = append(ids, id)
}
}
return ids
}
// compactBase builds the common compact output fields shared by all IM event processors.
// Every compact output includes: type (event_type), event_id, and timestamp (header create_time).
func compactBase(raw *RawEvent) map[string]interface{} {
out := map[string]interface{}{
"type": raw.Header.EventType,
}
if raw.Header.EventID != "" {
out["event_id"] = raw.Header.EventID
}
if raw.Header.CreateTime != "" {
out["timestamp"] = raw.Header.CreateTime
}
return out
}