route/vendor/github.com/Xe/x/mastodon/almarid/main.go

110 lines
1.9 KiB
Go
Raw Normal View History

2017-10-06 15:29:20 +00:00
package main
import (
"bytes"
"crypto/rand"
"fmt"
"io/ioutil"
"math/big"
"os"
"strings"
"time"
"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"`
WordFile string `env:"WORD_FILE,required"`
}{}
func main() {
err := env.Parse(cfg)
if err != nil {
ln.Fatal(ln.F{"err": err, "action": "env.Parse"})
}
fin, err := os.Open(cfg.WordFile)
if err != nil {
ln.Fatal(ln.F{"err": err, "action": "os.Open(cfg.WordFile)"})
}
data, err := ioutil.ReadAll(fin)
if err != nil {
ln.Fatal(ln.F{"err": err, "action": "ioutil.ReadAll(fin)"})
}
c, err := madon.RestoreApp("almarid:", cfg.Instance, cfg.AppID, cfg.AppSecret, &madon.UserToken{AccessToken: cfg.Token})
if err != nil {
ln.Fatal(ln.F{"err": err, "action": "madon.RestoreApp"})
}
_ = c
lines := bytes.Split(data, []byte("\n"))
words := []string{}
for _, line := range lines {
if len(line) > 5 {
word := string(line)
if strings.HasPrefix(word, "'") {
word = word[1:]
}
words = append(words, word)
}
}
ln.Log(ln.F{"action": "words.loaded", "count": len(words)})
lenBig := big.NewInt(int64(len(words)))
first := true
for {
bi, err := rand.Int(rand.Reader, lenBig)
if err != nil {
ln.Log(ln.F{
"action": "big.Rand",
"err": err,
})
continue
}
i := int(bi.Int64())
if first {
first = false
} else {
time.Sleep(5 * time.Minute)
}
txt := fmt.Sprintf("%s is not doing, allah is doing", words[i])
st, err := c.PostStatus(txt, 0, nil, false, "", "public")
if err != nil {
ln.Log(ln.F{
"err": err,
"action": "c.PostStatus",
"text": txt,
})
continue
}
ln.Log(ln.F{
"action": "tooted",
"text": txt,
"id": st.ID,
"url": st.URL,
})
}
}