One giant string sent to stdin
package main import ( "fmt" "github.com/nbd-wtf/go-nostr" "io/ioutil" "log" ) func main() { // Generate a new private key sk = "private key" // Derive the public key from the private key pk, _ := nostr.DerivePublicKey(sk) // Encode the private key into NIP-19 format nsec, _ := nostr.EncodePrivateKey(sk) // Encode the public key into NIP-19 format npub, _ := nostr.EncodePublicKey(pk) filePath := "path/to/your/file.txt" // Read the file into a byte slice content, err := ioutil.ReadFile(filePath) if err!= nil { log.Fatalf("Failed to read file: %v", err) } // Convert the byte slice to a string dmcontent := string(content) // Create a new event to represent the DM event := &nostr.Event{ Type: "dm", Payload: map[string]interface{}{ "recipient": npub, "content": dmcontent, }, Timestamp: nostr.Now(), Signature: sk.Sign([]byte(fmt.Sprintf("%s %s", nsec, npub))), } // Publish the event to a relay relayURL := "wss://your-relay-url-here" err = nostr.Publish(event, relayURL) if err!= nil { fmt.Println("Error publishing event:", err) return } fmt.Println("Direct message sent successfully!") }
Fixed a few bugs that the AI made. Replace the private key, file, and relay vars with your stuff, compile with "go build", and it should work
TY . Will try now. I am on a mini family vacation
No rush. Enjoy. If it doesn't compile, ask the AI to fix it. Probably about err :=
how do you compile it? I checked out that GO repo, put a file called logger.go with your code
You got the compiler installed?
Yes
Make a folder like /home/verita84/go/src/nostrlogger then run "go mod init" inside. Then "go build logger.go". It may ask to run go get If all is well, it should create a binary file named logger which you can put in your bin folder
root@nas:~/go/src/nostrlogger# go run nostrlogger.go # command-line-arguments ./nostrlogger.go:14:2: undefined: sk ./nostrlogger.go:16:17: undefined: nostr.DerivePublicKey ./nostrlogger.go:16:33: undefined: sk ./nostrlogger.go:18:19: undefined: nostr.EncodePrivateKey ./nostrlogger.go:18:36: undefined: sk ./nostrlogger.go:20:19: undefined: nostr.EncodePublicKey ./nostrlogger.go:34:3: unknown field Type in struct literal of type nostr.Event ./nostrlogger.go:35:3: unknown field Payload in struct literal of type nostr.Event ./nostrlogger.go:39:3: unknown field Timestamp in struct literal of type nostr.Event ./nostrlogger.go:40:14: undefined: sk ./nostrlogger.go:40:14: too many errors
Oops. Change to sk := := is declaration, = is just assignment
That solved that error. # command-line-arguments ./nostrlogger.go:16:17: undefined: nostr.DerivePublicKey ./nostrlogger.go:18:19: undefined: nostr.EncodePrivateKey ./nostrlogger.go:20:19: undefined: nostr.EncodePublicKey ./nostrlogger.go:34:3: unknown field Type in struct literal of type nostr.Event ./nostrlogger.go:35:3: unknown field Payload in struct literal of type nostr.Event ./nostrlogger.go:39:3: unknown field Timestamp in struct literal of type nostr.Event ./nostrlogger.go:40:3: unknown field Signature in struct literal of type nostr.Event ./nostrlogger.go:40:17: sk.Sign undefined (type string has no field or method Sign) ./nostrlogger.go:45:14: undefined: nostr.Publish
Did you run go get github.com/nbd-wtf/go-nostr ?
Yes undefined: nostr.DerivePublicKey nostr is never defined anywhere
import ... go-nostr should define it. 🤔 Let me try to compile it in termux
Looks like your nsec section shoud be like this? pk, _ := nostr.GetPublicKey(sk) nsec, _ := nip19.EncodePrivateKey(sk) npub, _ := nip19.EncodePublicKey(pk)
Does this compile?
It moves on Looks like the entite event section is wrong too. Nothing like the sample
Need to read the code for .Publish() to see how to construct the event struct for DM
It's KindEncryptedDirectMessage. This is the struct. nip4.go has encryption functions ev := nostr.Event{ PubKey: pub, CreatedAt: nostr.Now(), Kind: KindEncryptedDirectMessage, Tags: nil, Content: need to encrypt this, }