From a98865c52937cbb2e21ab2811db0f72287b945f8 Mon Sep 17 00:00:00 2001 From: ekzyis Date: Mon, 26 Feb 2024 15:43:34 +0100 Subject: [PATCH] Parse nostr links --- main.go | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/main.go b/main.go index 2ca400c..c4d9692 100644 --- a/main.go +++ b/main.go @@ -10,6 +10,11 @@ import ( "github.com/ekzyis/sn-goapi" ) +type NostrClient struct { + Url string + Name string +} + var ( TwitterUrlRegexp = regexp.MustCompile(`^(?:https?:\/\/)?((www\.)?(twitter|x)\.com)\/`) // references: @@ -18,6 +23,24 @@ var ( NitterClearnetUrls = []string{ "nitter.privacydev.net", } + + // since v0.4.0, bot also replaces nostr links with nostr.com so users can pick their client + NostrUrlRegexp = regexp.MustCompile( + `^(?:https?:\/\/)?(?:www\.)?` + + `(?:` + + `primal.net\/(?:e\/)?|snort.social\/(?:e\/)?` + + `)((note|nevent)[a-zA-Z0-9]+)$`) + NostrClients = []NostrClient{ + // list from nostr.com + NostrClient{"https://primal.net/e/", "primal.net"}, + NostrClient{"https://snort.social/e/", "snort.social"}, + NostrClient{"https://nostrudel.ninja/#/n/", "nostrudel.ninja"}, + NostrClient{"https://satellite.earth/thread/", "satellite.earth"}, + NostrClient{"https://coracle.social/", "coracle.social"}, + NostrClient{"https://nostter.app/", "nostter.app"}, + NostrClient{"https://highlighter.com/a/", "highlighter.com"}, + NostrClient{"https://iris.to/", "iris.to"}, + } ) func WaitUntilNext(d time.Duration) { @@ -95,6 +118,29 @@ func main() { } else { log.Printf("item %d is not twitter link\n", item.Id) } + if m := NostrUrlRegexp.FindStringSubmatch(item.Url); m != nil { + log.Printf("item %d is nostr link\n", item.Id) + if ItemHasComment(item.Id) { + log.Printf("item %d already has nostr links comment\n", item.Id) + continue + } + noteId := m[1] + comment := "**Nostr Client Picker**\n\n" + for _, client := range NostrClients { + comment += fmt.Sprintf("[%s](%s) | ", client.Name, client.Url+noteId) + } + comment = strings.TrimRight(comment, "| ") + cId, err := sn.CreateComment(item.Id, comment) + if err != nil { + log.Println(err) + SendToNostr(fmt.Sprint(err)) + continue + } + log.Printf("created comment %d\n", cId) + SaveComment(&sn.Comment{Id: cId, Text: comment, ParentId: item.Id}) + } else { + log.Printf("item %d is not nostr link\n", item.Id) + } } WaitUntilNext(time.Minute)