-
Notifications
You must be signed in to change notification settings - Fork 16
/
main.go
133 lines (119 loc) · 4.12 KB
/
main.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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
package main
import (
"flag"
"fmt"
"os"
"strconv"
"strings"
"sync"
"time"
"github.com/ThreeCatsLoveFish/medalhelper/service"
"github.com/ThreeCatsLoveFish/medalhelper/service/push"
"github.com/ThreeCatsLoveFish/medalhelper/util"
"github.com/robfig/cron"
)
var login = flag.Bool("login", false, "登录以获取 accesskey(先执行这个)")
var configPath = flag.String("config", "./users.yaml", "指定配置文件路径")
var startNow = flag.Bool("start", false, "无视定时任务立刻运行一次")
func logo() {
fmt.Print(`
__ __ __ __ __ __ __
| \ / \ | \ | \ | \ | \ | \
| ▓▓\ / ▓▓ ______ ____| ▓▓ ______ | ▓▓ | ▓▓ | ▓▓ ______ | ▓▓ ______ ______ ______
| ▓▓▓\ / ▓▓▓/ \ / ▓▓| \| ▓▓ | ▓▓__| ▓▓/ \| ▓▓/ \ / \ / \
| ▓▓▓▓\ ▓▓▓▓ ▓▓▓▓▓▓\ ▓▓▓▓▓▓▓ \▓▓▓▓▓▓\ ▓▓ | ▓▓ ▓▓ ▓▓▓▓▓▓\ ▓▓ ▓▓▓▓▓▓\ ▓▓▓▓▓▓\ ▓▓▓▓▓▓\
| ▓▓\▓▓ ▓▓ ▓▓ ▓▓ ▓▓ ▓▓ | ▓▓/ ▓▓ ▓▓ | ▓▓▓▓▓▓▓▓ ▓▓ ▓▓ ▓▓ ▓▓ | ▓▓ ▓▓ ▓▓ ▓▓ \▓▓
| ▓▓ \▓▓▓| ▓▓ ▓▓▓▓▓▓▓▓ ▓▓__| ▓▓ ▓▓▓▓▓▓▓ ▓▓ | ▓▓ | ▓▓ ▓▓▓▓▓▓▓▓ ▓▓ ▓▓__/ ▓▓ ▓▓▓▓▓▓▓▓ ▓▓
| ▓▓ \▓ | ▓▓\▓▓ \\▓▓ ▓▓\▓▓ ▓▓ ▓▓ | ▓▓ | ▓▓\▓▓ \ ▓▓ ▓▓ ▓▓\▓▓ \ ▓▓
\▓▓ \▓▓ \▓▓▓▓▓▓▓ \▓▓▓▓▓▓▓ \▓▓▓▓▓▓▓\▓▓ \▓▓ \▓▓ \▓▓▓▓▓▓▓\▓▓ ▓▓▓▓▓▓▓ \▓▓▓▓▓▓▓\▓▓
| ▓▓
| ▓▓
\▓▓
`)
}
func Usage() {
fmt.Println("Usage of: ", os.Args[0])
flag.PrintDefaults()
}
func initUsers() []service.User {
users := make([]service.User, 0, 1)
for _, userInfo := range util.GlobalConfig.UserList {
if len(userInfo.AccessKey) == 0 {
continue
}
banId := make([]int, 0)
if userInfo.BannedUid != "" {
banIdStr := strings.Split(userInfo.BannedUid, ",")
for _, str := range banIdStr {
id, err := strconv.ParseInt(str, 10, 64)
if err != nil {
continue
}
banId = append(banId, int(id))
}
}
allowId := make([]int, 0)
if userInfo.AllowedUid != "" {
allowIdStr := strings.Split(userInfo.AllowedUid, ",")
for _, str := range allowIdStr {
id, err := strconv.ParseInt(str, 10, 64)
if err != nil {
continue
}
allowId = append(allowId, int(id))
}
}
users = append(users, service.NewUser(
userInfo.AccessKey,
userInfo.PushName,
allowId,
banId,
))
}
return users
}
func exec() {
users := initUsers()
wg := sync.WaitGroup{}
for _, user := range users {
wg.Add(1)
go func(user service.User, wg *sync.WaitGroup) {
if status := user.Init(); status {
user.Start(wg)
}
}(user, &wg)
}
wg.Wait()
util.Info(" 今日任务已完成")
}
func main() {
flag.Parse()
// Init config file
util.LoadConfig(*configPath)
push.InitPush()
// Tool for login
if *login {
util.LoginBili()
return
}
logo()
// Start right now
if *startNow {
exec()
}
// Start main block
if len(util.GlobalConfig.Cron) == 0 {
util.Info(" 外部调用,开启任务")
exec()
} else {
c := cron.New()
err := c.AddFunc(util.GlobalConfig.Cron, exec)
if err != nil {
panic(err)
}
entry := c.Entries()
timeNext := entry[0].Schedule.Next(time.Now()).Format(time.RFC3339)
util.Info(" 使用内置定时器,开启定时任务,下次执行时间为%s", timeNext)
c.Run()
}
}