110 lines
1.9 KiB
Go
110 lines
1.9 KiB
Go
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,
|
|
})
|
|
}
|
|
}
|