Skip to content

Commit 6a131d2

Browse files
committed
feat: add date time message entity
1 parent 3466ee3 commit 6a131d2

4 files changed

Lines changed: 62 additions & 7 deletions

File tree

codec_misc.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,16 @@ func (s *MessageEntity) Encode(e *jx.Encoder) {
3232
e.Str(s.CustomEmojiID)
3333
}
3434

35+
if s.UnixTime != 0 {
36+
e.FieldStart("unix_time")
37+
e.Int(s.UnixTime)
38+
}
39+
40+
if s.DateTimeFormat != "" {
41+
e.FieldStart("date_time_format")
42+
e.Str(s.DateTimeFormat)
43+
}
44+
3545
e.ObjEnd()
3646
}
3747

@@ -88,6 +98,20 @@ func (s *MessageEntity) Decode(d *jx.Decoder) error {
8898
}
8999

90100
s.CustomEmojiID = v
101+
case "unix_time":
102+
v, err := d.Int()
103+
if err != nil {
104+
return err
105+
}
106+
107+
s.UnixTime = v
108+
case "date_time_format":
109+
v, err := d.Str()
110+
if err != nil {
111+
return err
112+
}
113+
114+
s.DateTimeFormat = v
91115
default:
92116
return d.Skip()
93117
}

entities.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package botapi
22

33
import (
44
"strconv"
5+
"strings"
56

67
"github.com/gotd/td/tg"
78
)
@@ -130,6 +131,33 @@ func entitiesFromTg(entities []tg.MessageEntityClass) []MessageEntity {
130131
case *tg.MessageEntityCustomEmoji:
131132
me.Type = EntityCustomEmoji
132133
me.CustomEmojiID = strconv.FormatInt(e.DocumentID, 10)
134+
case *tg.MessageEntityFormattedDate:
135+
me.Type = EntityDateTime
136+
me.UnixTime = e.Date
137+
138+
if e.Relative {
139+
me.DateTimeFormat = "r"
140+
} else {
141+
var dateTimeFormat strings.Builder
142+
143+
if e.DayOfWeek {
144+
dateTimeFormat.WriteString("w")
145+
}
146+
147+
if e.ShortDate {
148+
dateTimeFormat.WriteString("d")
149+
} else if e.LongDate {
150+
dateTimeFormat.WriteString("D")
151+
}
152+
153+
if e.ShortTime {
154+
dateTimeFormat.WriteString("t")
155+
} else if e.LongTime {
156+
dateTimeFormat.WriteString("T")
157+
}
158+
159+
me.DateTimeFormat = dateTimeFormat.String()
160+
}
133161
default:
134162
// Unknown or bot-irrelevant entity (e.g. unknown future types): skip.
135163
continue

enums.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ const (
7373
EntityTextLink MessageEntityType = "text_link"
7474
EntityTextMention MessageEntityType = "text_mention"
7575
EntityCustomEmoji MessageEntityType = "custom_emoji"
76+
EntityDateTime MessageEntityType = "date_time"
7677
)
7778

7879
// ChatMemberStatus is a member's status in a chat.

types_message.go

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,15 @@ import "github.com/gotd/td/tg"
55
// MessageEntity represents one special entity in a text message (e.g. a
66
// hashtag, link, or formatted run).
77
type MessageEntity struct {
8-
Type MessageEntityType `json:"type"`
9-
Offset int `json:"offset"`
10-
Length int `json:"length"`
11-
URL string `json:"url,omitempty"`
12-
User *User `json:"user,omitempty"`
13-
Language string `json:"language,omitempty"`
14-
CustomEmojiID string `json:"custom_emoji_id,omitempty"`
8+
Type MessageEntityType `json:"type"`
9+
Offset int `json:"offset"`
10+
Length int `json:"length"`
11+
URL string `json:"url,omitempty"`
12+
User *User `json:"user,omitempty"`
13+
Language string `json:"language,omitempty"`
14+
CustomEmojiID string `json:"custom_emoji_id,omitempty"`
15+
UnixTime int `json:"unix_time,omitempty"`
16+
DateTimeFormat string `json:"date_time_format,omitempty"`
1517
}
1618

1719
// Contact represents a phone contact.

0 commit comments

Comments
 (0)