From 1445d4c45e455eddee400c072e2a5b5851a269e4 Mon Sep 17 00:00:00 2001 From: Indent Date: Sat, 31 Oct 2026 08:35:43 +0000 Subject: [PATCH 1/2] Accept string numbers in emoji charmaps --- data_types.go | 26 ++++++++++++++++++++++++++ json.go | 2 +- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/data_types.go b/data_types.go index 12820f4..9edb1db 100644 --- a/data_types.go +++ b/data_types.go @@ -38,6 +38,32 @@ func (id *ID) UnmarshalJSON(data []byte) error { return json.Unmarshal(data, (*string)(id)) } +type IntPairs [][]int + +func (p *IntPairs) UnmarshalJSON(data []byte) error { + var raw [][]json.Number + if err := json.Unmarshal(data, &raw); err != nil { + return err + } + if raw == nil { + *p = nil + return nil + } + out := make(IntPairs, len(raw)) + for i, pair := range raw { + out[i] = make([]int, len(pair)) + for j, n := range pair { + v, err := n.Int64() + if err != nil { + return err + } + out[i][j] = int(v) + } + } + *p = out + return nil +} + // Timestamp is the number of seconds since the UNIX epoch type Timestamp uint64 diff --git a/json.go b/json.go index 9ae5140..87a494a 100755 --- a/json.go +++ b/json.go @@ -244,7 +244,7 @@ type Attachment struct { Latitude string `json:"lat,omitempty"` Longitude string `json:"lng,omitempty"` Placeholder string `json:"placeholder,omitempty"` - Charmap [][]int `json:"charmap,omitempty"` + Charmap IntPairs `json:"charmap,omitempty"` ReplyID ID `json:"reply_id,omitempty"` BaseReplyID ID `json:"base_reply_id,omitempty"` UserID ID `json:"user_id,omitempty"` From 62749e24d0727d1d34cb70a684cf9bab142ca78d Mon Sep 17 00:00:00 2001 From: Indent Date: Sat, 31 Oct 2026 08:40:29 +0000 Subject: [PATCH 2/2] Treat null charmap entries as zero --- data_types.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/data_types.go b/data_types.go index 9edb1db..7a81be4 100644 --- a/data_types.go +++ b/data_types.go @@ -53,6 +53,9 @@ func (p *IntPairs) UnmarshalJSON(data []byte) error { for i, pair := range raw { out[i] = make([]int, len(pair)) for j, n := range pair { + if n == "" { + continue + } v, err := n.Int64() if err != nil { return err