mirror of
https://github.com/crazy-max/diun.git
synced 2026-01-01 02:27:26 +01:00
Bumps [github.com/PaulSonOfLars/gotgbot/v2](https://github.com/PaulSonOfLars/gotgbot) from 2.0.0-rc.30 to 2.0.0-rc.32. - [Release notes](https://github.com/PaulSonOfLars/gotgbot/releases) - [Commits](https://github.com/PaulSonOfLars/gotgbot/compare/v2.0.0-rc.30...v2.0.0-rc.32) --- updated-dependencies: - dependency-name: github.com/PaulSonOfLars/gotgbot/v2 dependency-version: 2.0.0-rc.32 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com>
76 lines
2.7 KiB
Go
76 lines
2.7 KiB
Go
package gotgbot
|
|
|
|
import "unicode/utf16"
|
|
|
|
type ParsedMessageEntity struct {
|
|
MessageEntity
|
|
Text string `json:"text"`
|
|
}
|
|
|
|
// ParseEntity parses a single MessageEntity into a ParsedMessageEntity.
|
|
func ParseEntity(text string, entity MessageEntity) ParsedMessageEntity {
|
|
return parseEntity(entity, utf16.Encode([]rune(text)))
|
|
}
|
|
|
|
// ParseEntities parses all MessageEntity items into a list of ParsedMessageEntity.
|
|
func ParseEntities(text string, entities []MessageEntity) (out []ParsedMessageEntity) {
|
|
return ParseEntityTypes(text, entities, nil)
|
|
}
|
|
|
|
// ParseEntityTypes parses a subset of MessageEntity items into a list of ParsedMessageEntity.
|
|
func ParseEntityTypes(text string, entities []MessageEntity, accepted map[string]struct{}) (out []ParsedMessageEntity) {
|
|
utf16Text := utf16.Encode([]rune(text))
|
|
for _, ent := range entities {
|
|
if _, ok := accepted[ent.Type]; ok || accepted == nil {
|
|
out = append(out, parseEntity(ent, utf16Text))
|
|
}
|
|
}
|
|
return out
|
|
}
|
|
|
|
// ParseEntities parses all message text entities into a list of ParsedMessageEntity.
|
|
func (m Message) ParseEntities() (out []ParsedMessageEntity) {
|
|
return m.ParseEntityTypes(nil)
|
|
}
|
|
|
|
// ParseCaptionEntities parses all message caption entities into a list of ParsedMessageEntity.
|
|
func (m Message) ParseCaptionEntities() (out []ParsedMessageEntity) {
|
|
return m.ParseCaptionEntityTypes(nil)
|
|
}
|
|
|
|
// ParseEntityTypes parses a subset of message text entities into a list of ParsedMessageEntity.
|
|
func (m Message) ParseEntityTypes(accepted map[string]struct{}) (out []ParsedMessageEntity) {
|
|
return ParseEntityTypes(m.Text, m.Entities, accepted)
|
|
}
|
|
|
|
// ParseCaptionEntityTypes parses a subset of message caption entities into a list of ParsedMessageEntity.
|
|
func (m Message) ParseCaptionEntityTypes(accepted map[string]struct{}) (out []ParsedMessageEntity) {
|
|
return ParseEntityTypes(m.Caption, m.CaptionEntities, accepted)
|
|
}
|
|
|
|
// ParseEntity parses a single message text entity to populate text contents, URL, and offsets in UTF8.
|
|
func (m Message) ParseEntity(entity MessageEntity) ParsedMessageEntity {
|
|
return ParseEntity(m.Text, entity)
|
|
}
|
|
|
|
// ParseCaptionEntity parses a single message caption entity to populate text contents, URL, and offsets in UTF8.
|
|
func (m Message) ParseCaptionEntity(entity MessageEntity) ParsedMessageEntity {
|
|
return ParseEntity(m.Caption, entity)
|
|
}
|
|
|
|
func parseEntity(entity MessageEntity, utf16Text []uint16) ParsedMessageEntity {
|
|
text := string(utf16.Decode(utf16Text[entity.Offset : entity.Offset+entity.Length]))
|
|
|
|
if entity.Type == "url" {
|
|
entity.Url = text
|
|
}
|
|
|
|
entity.Offset = int64(len(string(utf16.Decode(utf16Text[:entity.Offset]))))
|
|
entity.Length = int64(len(text))
|
|
|
|
return ParsedMessageEntity{
|
|
MessageEntity: entity,
|
|
Text: text,
|
|
}
|
|
}
|