add alias support for mentions
This commit is contained in:
parent
fa0376bf3c
commit
164f3629ab
3 changed files with 53 additions and 7 deletions
|
@ -133,6 +133,13 @@ type TelegramRecord struct {
|
||||||
Message string `json:"message"`
|
Message string `json:"message"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Alias struct {
|
||||||
|
Target string `json:"target"`
|
||||||
|
Subject string `json:"subject"`
|
||||||
|
Error string `json:"error"`
|
||||||
|
Message string `json:"message"`
|
||||||
|
}
|
||||||
|
|
||||||
func (bluesky *Bluesky) CommitTelegramResponse(data *TelegramRecord, rkey string) *CommitResponse {
|
func (bluesky *Bluesky) CommitTelegramResponse(data *TelegramRecord, rkey string) *CommitResponse {
|
||||||
bluesky.CheckSessionValid()
|
bluesky.CheckSessionValid()
|
||||||
|
|
||||||
|
@ -225,3 +232,34 @@ func (bluesky *Bluesky) DeleteRecord(args []string) *CommitResponse {
|
||||||
Post("/xrpc/com.atproto.repo.deleteRecord").BodyJSON(params).Receive(resp, resp)
|
Post("/xrpc/com.atproto.repo.deleteRecord").BodyJSON(params).Receive(resp, resp)
|
||||||
return resp
|
return resp
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (bluesky *Bluesky) FetchAliases() []Records {
|
||||||
|
resp := new(AliasRecord)
|
||||||
|
params := struct {
|
||||||
|
Repo string `url:"repo"`
|
||||||
|
Collection string `url:"collection"`
|
||||||
|
}{
|
||||||
|
Repo: bluesky.Cfg.DID,
|
||||||
|
Collection: "blue.zio.bsky2tg.alias",
|
||||||
|
}
|
||||||
|
|
||||||
|
bluesky.sling.New().Get("/xrpc/com.atproto.repo.listRecords").QueryStruct(¶ms).Receive(resp, resp)
|
||||||
|
return resp.Records
|
||||||
|
}
|
||||||
|
|
||||||
|
type AliasRecord struct {
|
||||||
|
Records []Records `json:"records"`
|
||||||
|
Cursor string `json:"cursor"`
|
||||||
|
}
|
||||||
|
type Value struct {
|
||||||
|
Type string `json:"$type"`
|
||||||
|
Error string `json:"error"`
|
||||||
|
Target string `json:"target"`
|
||||||
|
Message string `json:"message"`
|
||||||
|
Subject string `json:"subject"`
|
||||||
|
}
|
||||||
|
type Records struct {
|
||||||
|
URI string `json:"uri"`
|
||||||
|
Cid string `json:"cid"`
|
||||||
|
Value Value `json:"value"`
|
||||||
|
}
|
||||||
|
|
|
@ -133,7 +133,7 @@ func (b *BSky) ParsePost(post []byte) (*Post, error) {
|
||||||
return p, nil
|
return p, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (post *Post) ProcessFacets() string {
|
func (post *Post) ProcessFacets(aliases []Records) string {
|
||||||
if post == nil {
|
if post == nil {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
@ -160,6 +160,14 @@ func (post *Post) ProcessFacets() string {
|
||||||
switch feature.Type {
|
switch feature.Type {
|
||||||
case "app.bsky.richtext.facet#mention":
|
case "app.bsky.richtext.facet#mention":
|
||||||
link := fmt.Sprintf(`<a href="https://bsky.app/profile/%s">%s</a>`, feature.Did, post.Text[start:end])
|
link := fmt.Sprintf(`<a href="https://bsky.app/profile/%s">%s</a>`, feature.Did, post.Text[start:end])
|
||||||
|
if aliases != nil {
|
||||||
|
for _, alias := range aliases {
|
||||||
|
if alias.Value.Subject == feature.Did {
|
||||||
|
link = fmt.Sprintf(`<a href="%s">%s</a>`,
|
||||||
|
strings.SplitN(alias.Value.Target, "#", 2)[0], strings.SplitN(alias.Value.Target, "#", 2)[1])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
result.WriteString(link)
|
result.WriteString(link)
|
||||||
case "app.bsky.richtext.facet#link":
|
case "app.bsky.richtext.facet#link":
|
||||||
link := fmt.Sprintf(`<a href="%s">%s</a>`, feature.URI, post.Text[start:end])
|
link := fmt.Sprintf(`<a href="%s">%s</a>`, feature.URI, post.Text[start:end])
|
||||||
|
|
12
main.go
12
main.go
|
@ -110,7 +110,7 @@ func main() {
|
||||||
// return
|
// return
|
||||||
// }
|
// }
|
||||||
// for _, post := range posts.Records {
|
// for _, post := range posts.Records {
|
||||||
// log.Printf("post: %s\n", post.Value.ProcessFacets())
|
// log.Printf("post: %s\n", post.Value.ProcessFacets(h.bsky.Bluesky.FetchAliases()))
|
||||||
// s, _ := json.Marshal(post.Value)
|
// s, _ := json.Marshal(post.Value)
|
||||||
// h.ProcessPost(&models.Event{Did: bskyClient.Bluesky.Cfg.DID, Commit: &models.Commit{
|
// h.ProcessPost(&models.Event{Did: bskyClient.Bluesky.Cfg.DID, Commit: &models.Commit{
|
||||||
// Record: s,
|
// Record: s,
|
||||||
|
@ -180,7 +180,7 @@ func (h *handler) ProcessPost(event *models.Event) error {
|
||||||
handle, _ := h.bsky.GetHandleFromDID(strings.Split(ps.Embed.Record.Record.URI, "/")[2])
|
handle, _ := h.bsky.GetHandleFromDID(strings.Split(ps.Embed.Record.Record.URI, "/")[2])
|
||||||
captionText = fmt.Sprintf(
|
captionText = fmt.Sprintf(
|
||||||
quotePostFormat,
|
quotePostFormat,
|
||||||
ps.ProcessFacets(),
|
ps.ProcessFacets(h.bsky.Bluesky.FetchAliases()),
|
||||||
strings.Split(ps.Embed.Record.Record.URI, "/")[2],
|
strings.Split(ps.Embed.Record.Record.URI, "/")[2],
|
||||||
strings.Split(ps.Embed.Record.Record.URI, "/")[4],
|
strings.Split(ps.Embed.Record.Record.URI, "/")[4],
|
||||||
handle,
|
handle,
|
||||||
|
@ -191,7 +191,7 @@ func (h *handler) ProcessPost(event *models.Event) error {
|
||||||
handle, _ := h.bsky.GetHandleFromDID(strings.Split(ps.Embed.Record.URI, "/")[2])
|
handle, _ := h.bsky.GetHandleFromDID(strings.Split(ps.Embed.Record.URI, "/")[2])
|
||||||
captionText = fmt.Sprintf(
|
captionText = fmt.Sprintf(
|
||||||
quotePostFormat,
|
quotePostFormat,
|
||||||
ps.ProcessFacets(),
|
ps.ProcessFacets(h.bsky.Bluesky.FetchAliases()),
|
||||||
strings.Split(ps.Embed.Record.URI, "/")[2],
|
strings.Split(ps.Embed.Record.URI, "/")[2],
|
||||||
strings.Split(ps.Embed.Record.URI, "/")[4],
|
strings.Split(ps.Embed.Record.URI, "/")[4],
|
||||||
handle,
|
handle,
|
||||||
|
@ -202,8 +202,8 @@ func (h *handler) ProcessPost(event *models.Event) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
if captionText == "" {
|
if captionText == "" {
|
||||||
if ps.ProcessFacets() != "" {
|
if ps.ProcessFacets(h.bsky.Bluesky.FetchAliases()) != "" {
|
||||||
captionText = fmt.Sprintf(postFormat, ps.ProcessFacets(), h.bsky.Bluesky.Cfg.DID, event.Commit.RKey, h.bsky.Bluesky.Cfg.Handle)
|
captionText = fmt.Sprintf(postFormat, ps.ProcessFacets(h.bsky.Bluesky.FetchAliases()), h.bsky.Bluesky.Cfg.DID, event.Commit.RKey, h.bsky.Bluesky.Cfg.Handle)
|
||||||
} else {
|
} else {
|
||||||
captionText = fmt.Sprintf("<a href=\"https://bsky.app/profile/%s/post/%s\">🦋 @%s</a>", h.bsky.Bluesky.Cfg.DID, event.Commit.RKey, h.bsky.Bluesky.Cfg.Handle)
|
captionText = fmt.Sprintf("<a href=\"https://bsky.app/profile/%s/post/%s\">🦋 @%s</a>", h.bsky.Bluesky.Cfg.DID, event.Commit.RKey, h.bsky.Bluesky.Cfg.Handle)
|
||||||
}
|
}
|
||||||
|
@ -276,7 +276,7 @@ func (h *handler) ProcessPost(event *models.Event) error {
|
||||||
} else {
|
} else {
|
||||||
m := tgbotapi.MessageConfig{}
|
m := tgbotapi.MessageConfig{}
|
||||||
if captionText == "" {
|
if captionText == "" {
|
||||||
m = tgbotapi.NewMessage(cid, fmt.Sprintf(postFormat, ps.ProcessFacets(), h.bsky.Bluesky.Cfg.DID, event.Commit.RKey, h.bsky.Bluesky.Cfg.Handle))
|
m = tgbotapi.NewMessage(cid, fmt.Sprintf(postFormat, ps.ProcessFacets(h.bsky.Bluesky.FetchAliases()), h.bsky.Bluesky.Cfg.DID, event.Commit.RKey, h.bsky.Bluesky.Cfg.Handle))
|
||||||
} else {
|
} else {
|
||||||
m = tgbotapi.NewMessage(cid, captionText)
|
m = tgbotapi.NewMessage(cid, captionText)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue