-
Notifications
You must be signed in to change notification settings - Fork 12
/
completer.go
135 lines (126 loc) · 3.61 KB
/
completer.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
134
135
package main
import (
"github.com/c-bata/go-prompt"
)
var (
_COMMANDS []Command
)
type CommandFlag struct {
Name string
Description string
}
type Command struct {
Name string
Description string
Flags []CommandFlag
SubCommands []Command
}
func init() {
_COMMANDS = []Command{
{
"tg",
"Telegram Client",
[]CommandFlag{
{"--account", "Choose a name for this account (default: unknown)"},
{"--peerType", "Filter Peer Type"},
{"--peerAccessHash", "Access hash of the peer"},
{"--peerID", ""},
{"--limit", "Limite of the result"},
{"--minID", "MinID of the messages"},
{"--maxID", "MaxID of the messages"},
},
[]Command{
{
"login",
"Login to telegram using provided phone",
[]CommandFlag{
{"--phone", "The phone number you are trying to login"},
},
[]Command{},
},
{
"getUpdates",
"Get the last 'numberOfUpdates' updates",
[]CommandFlag{
{"--numberOfUpdates", "The number of last updates"},
{"--minutes", "Get updates from n minutes ago"},
},
[]Command{},
},
{
"getDialogs",
"Get dialogs of the logged in user",
[]CommandFlag{},
[]Command{},
},
{
"getHistory",
"Get History of the peer",
[]CommandFlag{},
[]Command{},
},
{
"readHistory",
"Read all the messages",
[]CommandFlag{},
[]Command{},
},
{
"send",
"Send Message to a peer",
[]CommandFlag{},
[]Command{},
},
},
},
}
}
func getCommandFlags(args []string, w string) []prompt.Suggest {
if len(args) < 1 {
return []prompt.Suggest{}
}
suggests := make([]prompt.Suggest, 0)
cmdList := _COMMANDS
for _, arg := range args {
found := false
for _, cmd := range cmdList {
if cmd.Name == arg {
cmdList = cmd.SubCommands
for _, flag := range cmd.Flags {
suggests = append(suggests, prompt.Suggest{
flag.Name, flag.Description,
})
}
found = true
break
}
}
if !found {
break
}
}
return prompt.FilterContains(suggests, w, true)
}
func getCommands(args []string, w string) []prompt.Suggest {
suggests := make([]prompt.Suggest, 0)
cmdList := _COMMANDS
for _, arg := range args {
found := false
for _, cmd := range cmdList {
if cmd.Name == arg {
cmdList = cmd.SubCommands
found = true
break
}
}
if !found {
break
}
}
for _, cmd := range cmdList {
suggests = append(suggests, prompt.Suggest{
cmd.Name, cmd.Description,
})
}
return prompt.FilterContains(suggests, w, true)
}