-
Notifications
You must be signed in to change notification settings - Fork 0
/
randomToot.go
43 lines (36 loc) · 1.09 KB
/
randomToot.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package mastobots
import (
"context"
"log"
"math/rand"
"time"
mastodon "github.com/hanage999/go-mastodon"
)
// randomTootは、ランダムにトゥートする。
func (bot *Persona) randomToot(ctx context.Context) {
bt := 24 * 60 / bot.RandomFrequency
ft := bt - bt*2/3 + rand.Intn(bt*4/3)
itvl := time.Duration(ft) * time.Minute
t := time.NewTimer(itvl)
defer t.Stop()
select {
case <-t.C:
idx := rand.Intn(len(bot.RandomToots))
msg := bot.RandomToots[idx]
if msg != "" {
msg = msg + nuance()
toot := mastodon.Toot{Status: msg}
if err := bot.post(ctx, toot); err != nil {
log.Printf("info: %s がランダムな呟きに失敗しました", bot.Name)
}
}
bot.randomToot(ctx)
case <-ctx.Done():
}
}
// nuance は、投稿にニュアンスを添えたり添えなかったりする。
func nuance() (s string) {
gb := [...]string{"", "?", "?!", "!?", "!", "!!", "!!!", "!!!!", "!!!!!", "…", "……", "………", "w", "www", "…?", "…!", "…?!", "…?!", "…w", "……w", "………w"}
s = gb[rand.Intn(len(gb))]
return
}