Initial commit

http_upload
Martin Dosch 6 years ago
commit 1fa114b626

17
.gitignore vendored

@ -0,0 +1,17 @@
config.json
.vscode
# Binaries for programs and plugins
*.exe
*.dll
*.so
*.dylib
# Test binary, build with `go test -c`
*.test
# Output of the go coverage tool, specifically when used with LiteIDE
*.out
# Project-local glide cache, RE: https://github.com/Masterminds/glide/issues/736
.glide/

@ -0,0 +1,62 @@
# go-sendxmpp
## about
A little tool to send messages to an XMPP contact or MUC inspired by (but not as powerful as)
[sendxmpp](https://sendxmpp.hostname.sk/).
## requirements
* [go](https://golang.org/)
## installation
If you have *[GOPATH](https://github.com/golang/go/wiki/SettingGOPATH)*
set just run this commands:
```bash
$ go get salsa.debian.org/mdosch-guest/go-sendxmpp
$ go install salsa.debian.org/mdosch-guest/go-sendxmpp
```
You will find the binary in `$GOPATH/bin` or, if set, `$GOBIN`.
## usage
The account details for logging into your XMPP account and at least `contact`
or `muc` must be specified.
If `-message` is not specified you can either pipe a programs output to
`go-sendxmpp` or write in your terminal (put ^D in a new line to finish).
If `-port` is not set, the standard port *5222* is used.
```bash
Usage of ./go-sendxmpp:
-contact string
Recipient of the message. (default "alice@example.com")
-message string
The message you want to send. (default "Hello World!")
-muc string
MUC to send the message to. (default "offtopic@conference.example.com")
-muc-nick string
The nickname the bot uses in the MUC. (default "go-sendxmpp")
-pass string
Password for XMPP account. (default "ChangeThis!")
-port string
XMPP server port. (default "5222")
-server string
XMPP server address. (default "example.com")
-user string
Username for XMPP account. (default "bob@example.com")
```
### examples
```bash
inxi -F | ./go-sendxmpp -pass 'ChangeThis!' -port '5222' -server 'example.com' -user 'bob@example.com' -muc 'test@conference.example.com'
```
```bash
./go-sendxmpp -pass 'ChangeThis!' -port '5222' -server 'example.com' -user 'bob@example.com' -muc 'test@conference.example.com' -message 'Hello World!'
```

Binary file not shown.

@ -0,0 +1,95 @@
package main
import (
"bufio"
"flag"
"io"
"log"
"os"
"time"
"github.com/mattn/go-xmpp"
)
func main() {
var (
err error
server = flag.String("server", "example.com", "XMPP server address.")
port = flag.String("port", "5222", "XMPP server port.")
user = flag.String("user", "bob@example.com", "Username for XMPP account.")
password = flag.String("pass", "ChangeThis!", "Password for XMPP account.")
contact = flag.String("contact", "alice@example.com", "Recipient of the message.")
muc = flag.String("muc", "offtopic@conference.example.com", "MUC to send the message to.")
mucNick = flag.String("muc-nick", "go-sendxmpp", "The nickname the bot uses in the MUC.")
messagePtr = flag.String("message", "Hello World!", "The message you want to send.")
)
flag.Parse()
message := *messagePtr
if *contact == "alice@example.com" && *muc == "offtopic@conference.example.com" {
log.Fatal("No target specified.")
}
options := xmpp.Options{
Host: *server + ":" + *port,
User: *user,
Password: *password,
NoTLS: true,
StartTLS: true,
Debug: false,
}
// Connect to server.
client, err := options.NewClient()
if err != nil {
log.Fatal(err)
}
if message == "Hello World!" {
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
if message == "Hello World!" {
message = string(scanner.Text())
} else {
message = message + "\n" + string(scanner.Text())
}
}
if err := scanner.Err(); err != nil {
if err != io.EOF {
log.Fatal(err)
}
}
}
if *muc != "offtopic@conference.example.com" {
// Join the MUC
mucStatus, err := client.JoinMUCNoHistory(*muc, *mucNick)
if err != nil {
log.Fatal(err)
}
// Exit if Status is > 300, see https://xmpp.org/registrar/mucstatus.html
if mucStatus > 300 {
log.Fatal("Couldn't join MUC. Status:", mucStatus)
}
_, err = client.Send(xmpp.Chat{Remote: *muc, Type: "groupchat", Text: message})
if err != nil {
log.Fatal(err)
}
}
if *contact != "alice@example.com" {
_, err = client.Send(xmpp.Chat{Remote: *contact, Type: "chat", Text: message})
if err != nil {
log.Fatal(err)
}
}
time.Sleep(1 * time.Second)
}
Loading…
Cancel
Save