Initial commit
commit
1fa114b626
@ -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…
Reference in New Issue