-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathcmd_help.go
109 lines (87 loc) · 2.47 KB
/
cmd_help.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
package main
import (
"fmt"
"log"
tb "gopkg.in/tucnak/telebot.v2"
)
func (u *urlTester) argsToString(payload []payloadPart) (message string) {
for _, p := range payload {
message = fmt.Sprintf("%s <%s>", message, p.arg)
}
return
}
func (u *urlTester) help(m *tb.Message, returns []interface{}) {
var (
anonMessage string
usersMessage string
adminsMessage string
message string
cmdString string
cmd command
)
switch len(returns) {
case 1:
cmdString = returns[0].(string)
cmd = u.commands[cmdString]
// one command help
message = fmt.Sprintf("%s %s\n\n%s", cmdString, u.argsToString(cmd.payload), cmd.helpLong)
if len(cmd.payload) > 0 {
message = fmt.Sprintf("%s\n\n*Options*:\n", message)
}
for _, payloadPart := range cmd.payload {
message = fmt.Sprintf("%s*<%s:%s>* - %s\n", message, payloadPart.arg, payloadPart.typ, payloadPart.help)
if len(payloadPart.valid) > 0 {
message = fmt.Sprintf("%sAllowed:", message)
for i, p := range payloadPart.valid {
if i == 0 {
message = fmt.Sprintf("%s %s", message, p)
} else {
message = fmt.Sprintf("%s,%s", message, p)
}
}
message = fmt.Sprintf("%s\n", message)
}
}
if _, err := u.bot.Send(m.Sender, message, tb.ModeMarkdown); err != nil {
log.Println(err)
}
return
default:
// build all commands message
for key, value := range u.commands {
if !value.noHelp {
if !value.forUsers && !value.forAdmins {
anonMessage = fmt.Sprintf("%s%s %s - %s\n", anonMessage, key, u.argsToString(value.payload), value.helpShort)
}
if value.forUsers && !value.forAdmins {
usersMessage = fmt.Sprintf("%s%s %s - %s\n", usersMessage, key, u.argsToString(value.payload), value.helpShort)
}
if value.forAdmins {
adminsMessage = fmt.Sprintf("%s%s %s - %s\n", adminsMessage, key, u.argsToString(value.payload), value.helpShort)
}
}
}
// anonymous commands
message = fmt.Sprintf(`*HELP*
%s
`, anonMessage)
// users commands
if u.accessGranted(m.Sender) {
message = fmt.Sprintf(`%s*USER COMMANDS*
%s
`, message, usersMessage)
}
// admins commands
if u.isUserAdmin(m.Sender.ID) {
message = fmt.Sprintf(`%s*ADMIN COMMANDS*
%s
`, message, adminsMessage)
}
message = fmt.Sprintf("%s\n\nFor a longer explanation of a command, use:\n/command help\n", message)
if _, err := u.bot.Send(m.Sender, message, tb.ModeMarkdown); err != nil {
log.Println(err)
}
return
}
// one command help
}