(telegram|matrix)fmt: mention formatting
Signed-off-by: Sumner Evans <sumner.evans@automattic.com>
This commit is contained in:
@@ -29,11 +29,15 @@ import (
|
||||
func toTelegramEntity(br telegramfmt.BodyRange) tg.MessageEntityClass {
|
||||
switch val := br.Value.(type) {
|
||||
case telegramfmt.Mention:
|
||||
userID, _ := ids.ParseUserID(val.UserID)
|
||||
return &tg.MessageEntityMentionName{
|
||||
Offset: br.Start,
|
||||
Length: br.Length,
|
||||
UserID: userID,
|
||||
if val.Username != "" {
|
||||
return &tg.MessageEntityMention{Offset: br.Start, Length: br.Length}
|
||||
} else {
|
||||
userID, _ := ids.ParseUserID(val.UserID)
|
||||
return &tg.InputMessageEntityMentionName{
|
||||
Offset: br.Start,
|
||||
Length: br.Length,
|
||||
UserID: &tg.InputUser{UserID: userID, AccessHash: val.AccessHash},
|
||||
}
|
||||
}
|
||||
case telegramfmt.Style:
|
||||
switch val.Type {
|
||||
@@ -92,12 +96,12 @@ func Parse(ctx context.Context, parser *HTMLParser, content *event.MessageEventC
|
||||
if parsed == nil {
|
||||
return "", nil
|
||||
}
|
||||
var bodyRanges []tg.MessageEntityClass
|
||||
var entities []tg.MessageEntityClass
|
||||
if len(parsed.Entities) > 0 {
|
||||
bodyRanges = make([]tg.MessageEntityClass, len(parsed.Entities))
|
||||
entities = make([]tg.MessageEntityClass, len(parsed.Entities))
|
||||
for i, ent := range parsed.Entities {
|
||||
bodyRanges[i] = toTelegramEntity(ent)
|
||||
entities[i] = toTelegramEntity(ent)
|
||||
}
|
||||
}
|
||||
return parsed.String.String(), bodyRanges
|
||||
return parsed.String.String(), entities
|
||||
}
|
||||
|
||||
@@ -243,7 +243,7 @@ func (ctx Context) WithWhitespace() Context {
|
||||
|
||||
// HTMLParser is a somewhat customizable Matrix HTML parser.
|
||||
type HTMLParser struct {
|
||||
ParseGhostMXID func(id.UserID) (networkid.UserID, bool)
|
||||
GetGhostDetails func(context.Context, id.UserID) (networkid.UserID, string, int64, bool)
|
||||
}
|
||||
|
||||
// TaggedString is a string that also contains a HTML tag.
|
||||
@@ -367,11 +367,14 @@ func (parser *HTMLParser) linkToString(node *html.Node, ctx Context) *EntityStri
|
||||
// Mention not allowed, use name as-is
|
||||
return str
|
||||
}
|
||||
userID, ok := parser.ParseGhostMXID(mxid)
|
||||
userID, username, accessHash, ok := parser.GetGhostDetails(ctx.Ctx, mxid)
|
||||
if !ok {
|
||||
return str
|
||||
} else if username == "" {
|
||||
return ent.Format(telegramfmt.Mention{UserID: userID, AccessHash: accessHash})
|
||||
} else {
|
||||
return NewEntityString("@" + username).Format(telegramfmt.Mention{UserID: userID, Username: username})
|
||||
}
|
||||
return ent.Format(telegramfmt.Mention{UserID: userID})
|
||||
}
|
||||
if str.String.String() == href {
|
||||
return ent.Format(telegramfmt.Style{Type: telegramfmt.StyleURL, URL: href})
|
||||
|
||||
Reference in New Issue
Block a user