75 lines
1.6 KiB
Go
75 lines
1.6 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"github.com/McKael/madon"
|
||
|
"github.com/Xe/ln"
|
||
|
"github.com/caarlos0/env"
|
||
|
_ "github.com/joho/godotenv/autoload"
|
||
|
)
|
||
|
|
||
|
var cfg = &struct {
|
||
|
Instance string `env:"INSTANCE,required"`
|
||
|
AppID string `env:"APP_ID,required"`
|
||
|
AppSecret string `env:"APP_SECRET,required"`
|
||
|
Token string `env:"TOKEN,required"`
|
||
|
Hashtag string `env:"HASHTAG,required"`
|
||
|
}{}
|
||
|
|
||
|
var scopes = []string{"read", "write", "follow"}
|
||
|
|
||
|
func main() {
|
||
|
err := env.Parse(cfg)
|
||
|
if err != nil {
|
||
|
ln.Fatal(ln.F{"err": err, "action": "startup"})
|
||
|
}
|
||
|
|
||
|
c, err := madon.RestoreApp("furry boostbot", cfg.Instance, cfg.AppID, cfg.AppSecret, &madon.UserToken{AccessToken: cfg.Token})
|
||
|
if err != nil {
|
||
|
ln.Fatal(ln.F{"err": err, "action": "madon.RestoreApp"})
|
||
|
}
|
||
|
|
||
|
evChan := make(chan madon.StreamEvent, 10)
|
||
|
stop := make(chan bool)
|
||
|
done := make(chan bool)
|
||
|
|
||
|
err = c.StreamListener("public", "", evChan, stop, done)
|
||
|
if err != nil {
|
||
|
ln.Fatal(ln.F{"err": err, "action": "c.StreamListener"})
|
||
|
}
|
||
|
|
||
|
ln.Log(ln.F{
|
||
|
"action": "streaming.toots",
|
||
|
})
|
||
|
|
||
|
for {
|
||
|
select {
|
||
|
case _, ok := <-done:
|
||
|
if !ok {
|
||
|
ln.Fatal(ln.F{"action": "stream.dead"})
|
||
|
}
|
||
|
|
||
|
case ev := <-evChan:
|
||
|
switch ev.Event {
|
||
|
case "error":
|
||
|
ln.Fatal(ln.F{"err": ev.Error, "action": "processing.event"})
|
||
|
case "update":
|
||
|
s := ev.Data.(madon.Status)
|
||
|
|
||
|
for _, tag := range s.Tags {
|
||
|
if tag.Name == cfg.Hashtag {
|
||
|
err = c.ReblogStatus(s.ID)
|
||
|
if err != nil {
|
||
|
ln.Fatal(ln.F{"err": err, "action": "c.ReblogStatus", "id": s.ID})
|
||
|
}
|
||
|
|
||
|
ln.Log(ln.F{
|
||
|
"action": "reblogged",
|
||
|
"id": s.ID,
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|