From fc8de3353758cba5897d0cfa5c83b1681edc397d Mon Sep 17 00:00:00 2001 From: ptrcnull Date: Sun, 3 Apr 2022 16:51:06 +0200 Subject: [PATCH] feat: Initial commit --- go.mod | 13 ++++++++++ go.sum | 12 +++++++++ main.go | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 101 insertions(+) create mode 100644 go.mod create mode 100644 go.sum create mode 100644 main.go diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..148e0a2 --- /dev/null +++ b/go.mod @@ -0,0 +1,13 @@ +module mqttg + +go 1.18 + +require ( + git.ddd.rip/ptrcnull/telegram v1.1.0 + github.com/eclipse/paho.mqtt.golang v1.3.5 +) + +require ( + github.com/gorilla/websocket v1.4.2 // indirect + golang.org/x/net v0.0.0-20200425230154-ff2c4b7c35a0 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..15c230a --- /dev/null +++ b/go.sum @@ -0,0 +1,12 @@ +git.ddd.rip/ptrcnull/telegram v1.1.0 h1:nLyQE9uR6CBK4kra9uN+v7rmf2uZ2HOpGZh4J+V0XqI= +git.ddd.rip/ptrcnull/telegram v1.1.0/go.mod h1:SSSKvfhw7mDx/8UPoLdtP9J74z2/pXccHnKzdi16nLA= +github.com/eclipse/paho.mqtt.golang v1.3.5 h1:sWtmgNxYM9P2sP+xEItMozsR3w0cqZFlqnNN1bdl41Y= +github.com/eclipse/paho.mqtt.golang v1.3.5/go.mod h1:eTzb4gxwwyWpqBUHGQZ4ABAV7+Jgm1PklsYT/eo8Hcc= +github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= +github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/net v0.0.0-20200425230154-ff2c4b7c35a0 h1:Jcxah/M+oLZ/R4/z5RzfPzGbPXnVDPkEDtf2JnuxN+U= +golang.org/x/net v0.0.0-20200425230154-ff2c4b7c35a0/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/main.go b/main.go new file mode 100644 index 0000000..af2aa04 --- /dev/null +++ b/main.go @@ -0,0 +1,76 @@ +package main + +import ( + "flag" + "git.ddd.rip/ptrcnull/telegram" + mqtt "github.com/eclipse/paho.mqtt.golang" + "log" + "net/url" + "os" +) + +func main() { + token := flag.String("token", "", "Telegram bot token") + chat := flag.String("chat", "", "Telegram chat ID") + broker := flag.String("broker", "", "MQTT broker address") + topic := flag.String("topic", "", "MQTT topic") + flag.Parse() + + if *token == "" || *chat == "" || *broker == "" || *topic == "" { + flag.Usage() + os.Exit(1) + } + + tg := telegram.Client{ + Token: *token, + PollTimeout: 120, + } + + brokerUrl, err := url.Parse(*broker) + if err != nil { + log.Fatalf("broker url: %s", err) + } + + opts := mqtt.NewClientOptions() + opts.AddBroker(*broker) + if brokerUrl.User != nil { + opts.SetUsername(brokerUrl.User.Username()) + if password, ok := brokerUrl.User.Password(); ok { + opts.SetUsername(password) + } + } + opts.SetDefaultPublishHandler(func(client mqtt.Client, message mqtt.Message) { + _, err := tg.SendMessage(*chat, string(message.Payload())) + if err != nil { + log.Fatalf("send message: %s", err) + } + }) + opts.OnConnect = func(client mqtt.Client) { + log.Println("connected!") + } + opts.OnConnectionLost = func(client mqtt.Client, err error) { + log.Printf("connection lost: %s\n", err) + } + opts.SetClientID("mqttg") + client := mqtt.NewClient(opts) + if token := client.Connect(); token.Wait() && token.Error() != nil { + log.Fatalf("mqtt connect: %s", token.Error()) + } + client.Subscribe(*topic + "/inbox", 1, nil) + + for { + res, err := tg.GetUpdates() + if err != nil { + log.Fatalf("telegram updates: %s", err) + } + if !res.Ok { + log.Fatalf("telegram updates: %s", res.Raw) + } + + for _, update := range res.Result { + if update.Message != nil { + client.Publish(*topic + "/outbox", 0, false, update.Message.Text) + } + } + } +}