X-Git-Url: http://git.giacomolli.uk/onechat/blobdiff_plain/a345df4e4bbf9dbaf3da1ce548896eef8f515de3..f80b058ae0550a56b4e62f8e65c2a74349b970e4:/botapi.go diff --git a/botapi.go b/botapi.go index d02aff0..f48465c 100644 --- a/botapi.go +++ b/botapi.go @@ -87,6 +87,17 @@ type botChat struct { Type string `json:"type"` } +// botEntity is a message entity of sendMessage: a part of the text with a +// format, such as bold or a link. Offset and Length count UTF-16 code units. +// URL is the target of a text_link, and Language the language of a pre. +type botEntity struct { + Type string `json:"type"` + Offset int `json:"offset"` + Length int `json:"length"` + URL string `json:"url,omitempty"` + Language string `json:"language,omitempty"` +} + // botUser is the sender of a message. type botUser struct { ID int64 `json:"id"` @@ -119,16 +130,23 @@ func (b *botAPI) GetUpdates(ctx context.Context, offset int64) ([]botUpdate, err return updates, err } -// SendMessage sends text to chat as plain text, with no parse mode. A call that -// takes longer than sendTimeout fails with errBotNetwork. -func (b *botAPI) SendMessage(ctx context.Context, chat int64, text string) error { +// SendMessage sends text to chat with the format of entities, with no parse +// mode, so the text needs no escaping. With no entities, the text is plain. A +// call that takes longer than sendTimeout fails with errBotNetwork. +func (b *botAPI) SendMessage(ctx context.Context, chat int64, text string, entities []botEntity) error { ctx, cancel := context.WithTimeout(ctx, b.sendTimeout) defer cancel() - return b.call(ctx, "sendMessage", map[string]any{ + params := map[string]any{ "chat_id": chat, "text": text, - }, nil) + } + + if len(entities) > 0 { + params["entities"] = entities + } + + return b.call(ctx, "sendMessage", params, nil) } // SendTyping shows the typing action in chat for about five seconds. A call