/
main.go
132 lines (117 loc) · 2.67 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
package main
import (
"log"
"strings"
"github.com/bang88/gojenkins"
"github.com/go-telegram-bot-api/telegram-bot-api"
)
// Commands supported commands
type Commands struct {
Admin string
Project string
Help string
}
// Operators Operators
type Operators struct {
List string
Add string
Remove string
Build string
}
// App bot app
type App struct {
conf Conf
commands Commands
operators Operators
bot *tgbotapi.BotAPI
jenkins *gojenkins.Jenkins
}
// create jenkins instance
func (app *App) getJenkinsInstance() *gojenkins.Jenkins {
var conf = app.conf
jenkins, err := gojenkins.CreateJenkins(nil, conf.Jenkins.Server, conf.Jenkins.Username, conf.Jenkins.Password).Init()
if err != nil {
log.Fatalf("can not create jenkins instance %s", err)
}
return jenkins
}
func (app *App) start() {
user := User{
Name: app.conf.SuperAdmin,
IsAdmin: true,
}
app.init(user)
}
func (app *App) handleHelp(message *tgbotapi.Message) {
var data = [][]string{
[]string{"/" + app.commands.Help, "🆘"},
[]string{"/" + app.commands.Admin, "List all administrators"},
[]string{"/" + app.commands.Project, "List all projects"},
}
var str = app.makeTable(data, []string{"Command", "Desc"})
msg := tgbotapi.NewMessage(message.Chat.ID, str)
msg.ParseMode = tgbotapi.ModeMarkdown
msg.ReplyToMessageID = message.MessageID
app.bot.Send(msg)
}
// start bot routine
func (app *App) startBot() {
bot, err := tgbotapi.NewBotAPI(app.conf.BotToken)
if err != nil {
log.Panic(err)
}
// app bot
app.bot = bot
bot.Debug = true
log.Printf("Authorized on account %s", bot.Self.UserName)
u := tgbotapi.NewUpdate(0)
u.Timeout = 60
updates, err := bot.GetUpdatesChan(u)
for update := range updates {
log.Printf("[%s] %s", update.Message.From.UserName, update.Message.Text)
if update.Message == nil {
continue
}
if !update.Message.IsCommand() {
continue
}
user := app.findUser(update.Message.Chat.UserName)
if !user.IsAdmin {
continue
}
// handle command
command := strings.ToLower(update.Message.Command())
switch command {
case app.commands.Admin:
app.handleAdmin(update.Message)
case "start":
app.handleHelp(update.Message)
case app.commands.Help:
app.handleHelp(update.Message)
case app.commands.Project:
app.handleProject(update.Message)
}
}
}
// runnnn
func main() {
var commands = Commands{
Admin: "admin",
Help: "help",
Project: "project",
}
var operators = Operators{
List: "ls",
Add: "add",
Remove: "rm",
Build: "build",
}
var app = App{
conf: GetConf(),
commands: commands,
operators: operators,
}
app.jenkins = app.getJenkinsInstance()
app.start()
app.startBot()
}