This repository has been archived by the owner on Jan 29, 2019. It is now read-only.
/
player_commands.go
331 lines (276 loc) · 8.6 KB
/
player_commands.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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
package CommanD_Bot
import (
"errors"
"strconv"
"strings"
"time"
)
type PlayerCommands struct {
commands map[string]func(*Root)error
}
func (m *PlayerCommands) RunCommand(root *Root) error {
return m.commands[root.CommandType()](root)
}
// Set player command structure //
func LoadPlayerCommand() *PlayerCommands {
// Create player command structure //
p := PlayerCommands{}
// Create sub command map //
p.commands = make(map[string]func(*Root) error)
// Set kick sub command //
p.commands["-kick"] = KickMember
p.commands["-k"] = KickMember
// Set ban sub command //
p.commands["-ban"] = BanMember
p.commands["-b"] = BanMember
// TODO - Comment
p.commands["-mute"] = MuteUser
p.commands["-m"] = MuteUser
// TODO - Comment
p.commands["-unmute"] = UnMuteUser
p.commands["-um"] = UnMuteUser
// Return a reference to command structure //
return &p
}
// Create CommandInfo struct data //
func loadPlayerCommandInfo() *commandInfo {
// Create player command info structure //
p := commandInfo{}
// Set default info for player commands //
p.detail = "**!player** or **!pl** : All commands that pertain to manipulating players with in a server."
// Create sub command info map //
p.commands = make(map[string]string)
// Set kick sub command info //
p.commands["-kick"] = "**-kick** or **-k**.\n*" +
"*Info**: Kicks a given member from the server.\n" +
"**Arguments:**\n" +
" **<Member name>**: The member given will be kicked from the server. (only admins can use this command)."
// Set ban sub command info //
p.commands["-ban"] = "**-ban** or **-b**\n" +
"**Info**: Bans a given user from the server for a preset amount of time. (default is 30 days).\n" +
"**Arguments:**\n" +
" **<Member name>**: The member given will be baned from the server. (only admins can use this)."
// Return reference to command info structure //
return &p
}
// User kick function //
// - returns an error (nil if non)
// TODO - Fix kick with reason functionality
func KickMember(root *Root) error {
// Check if user is admin //
// - return an error if err is not nil
if admin, err := root.IsAdmin(); err != nil {
return err
} else if !admin {
// User was not an admin //
// - return an error (nil if non)
if err := root.MessageSend("You do not have the permission to kick someone."); err != nil {
return err
}
return root.DeleteMessage(root.ID)
}
// Gets the guild the messages was created in //
// - returns an error if err is not nil
if guild, err := root.GetGuild(); err != nil {
return err
} else {
// Find the user with in the guild //
for _, member := range guild.Members {
// Check if mention of user is the same as passed user mention //
if root.CommandArgs()[0] == member.User.Mention() {
if len(root.CommandArgs()) == 1 {
// Kick user with out reason //
if err := root.GuildMemberDelete(guild.ID, member.User.ID); err != nil {
return err
}
if err := root.MessageSend(root.CommandArgs()[0] + " was kicked"); err != nil {
return err
}
return root.DeleteMessage(root.ID)
} else if len(root.CommandArgs()) >= 2 {
// Kick user with reason //
if err := root.GuildMemberDeleteWithReason(guild.ID, member.User.ID, strings.Join(root.CommandArgs()[2:], " ")); err != nil {
return err
}
return root.DeleteMessage(root.ID)
} else {
// Could not find user with in guild //
// - returns an error (nil if non)
if err := root.MessageSend("You did not enter a user to kick. Type !help -kick for more info."); err != nil {
return err
}
return root.DeleteMessage(root.ID)
}
}
}
if err := root.MessageSend("given user mention was not found in server"); err != nil {
return err
}
// User was not found in server //
// - return an error for no user found
return root.DeleteMessage(root.ID)
}
}
// User ban function //
// - returns an error (nil if non)
// TODO - Fix Ban with reason functionality
func BanMember(root *Root) error {
// Check if user is an admin //
// - returns an error if err is not nil
if admin, err := root.IsAdmin(); err != nil {
return err
} else if !admin {
// User was not an admin //
// - return an error (nil if non)
if err := root.MessageSend( "You do not have the permission to kick someone."); err != nil {
return err
}
return root.DeleteMessage(root.ID)
}
// Gets the guild the messages was created in //
// - returns an error if err is not nil
if guild, err := root.GetGuild(); err != nil {
return err
} else {
// Get the ban time for a server //
// - returns an error if guild is not in server list
server, ok := serverList[guild.ID]
if !ok {
if err := root.DeleteMessage(root.ID); err != nil {
return err
}
return errors.New("guild did not exist in serverList")
}
if len(root.CommandArgs()) == 1 {
// Find the user to ban with in the guild //
for _, member := range guild.Members {
// Check if mention of user is equal to argument //
if root.CommandArgs()[0] == member.User.Mention() {
if err := root.DeleteMessage(root.ID); err != nil {
return err
}
// Ban the user for set server ban time //
// - returns an error (nil if non)
return root.GuildBanCreate(guild.ID, member.User.ID, int(server.BanTime))
}
}
// given user was found in guild //
// - return an error
return errors.New("no user was found")
} else if len(root.CommandArgs()) >= 2 {
// Find the user to ban with in the guild //
for _, member := range guild.Members {
// Check if mention of user is equal to argument //
if GetMention(member, root.CommandArgs()[0]) {
if err := root.DeleteMessage(root.ID); err != nil {
return err
}
// Ban user with given reason for set server ban time //
// - returns an error (nil if non)
return root.GuildBanCreateWithReason(guild.ID, member.User.ID, strings.Join(root.CommandArgs()[1:], " "), int(server.BanTime))
}
}
if err := root.MessageSend("given user mention was not found in server"); err != nil {
return err
}
// given user was found in guild //
// - return an error
return root.DeleteMessage(root.ID)
} else {
// Given arguments were not correct //
// - return an error (nil if non)
if err := root.MessageSend("Could not understand given arguments."); err != nil {
return err
}
return root.DeleteMessage(root.ID)
}
}
}
// TODO - Comment
func MuteUser(root *Root) error {
if len(root.CommandArgs()) < 2 {
return errors.New("to few args in muteUser")
}
if ok, err := root.IsAdmin(); err != nil {
return err
} else if !ok {
member, err := root.GetMember()
if err != nil {
return err
}
return root.MessageSend(member.User.Mention()+" You do not have permission to use that root.")
}
guild, err := root.GetGuild()
if err != nil {
return err
}
for _, member := range guild.Members {
if member.User.Mention() == root.CommandArgs()[0] {
var key time.Duration
d := root.CommandArgs()[1]
k := d[len(d)-1]
switch k {
case 's':
key = time.Second
case 'm':
key = time.Minute
case 'h':
key = time.Hour
default:
return errors.New("unknown time key " + string(d))
}
t, err := strconv.Atoi(root.CommandArgs()[1][:len(d)-1])
if err != nil {
return err
}
duration := time.Duration(t) * key
server, ok := serverList[guild.ID]
if !ok {
return errors.New("server did not exist in server list")
}
if err := server.Mute(member.User.ID, duration); err != nil {
return err
}
if err := root.MessageSend(root.CommandArgs()[0]+" has been muted for "+duration.Truncate(time.Second).String()); err != nil {
return err
}
return root.DeleteMessage(root.ID)
}
}
return errors.New("user was not found")
}
// TODO - Comment
func UnMuteUser(root *Root) error {
if len(root.CommandArgs()) < 1 {
return errors.New("to few args in muteUser")
}
if ok, err := root.IsAdmin(); err != nil {
return err
} else if !ok {
member, err := root.GetMember()
if err != nil {
return err
}
return root.MessageSend(member.User.Mention()+" You do not have permission to use that root.")
}
guild, err := root.GetGuild()
if err != nil {
return err
}
server, ok := serverList[guild.ID]
if !ok {
return errors.New("guild did not exist in serverList")
}
for _, member := range guild.Members {
if member.User.Mention() == root.CommandArgs()[0] {
if err := server.UnMute(member.User.ID); err != nil {
return err
}
if err := root.MessageSend(root.CommandArgs()[0]+" has been unmuted"); err != nil {
return err
}
return root.DeleteMessage(root.ID)
}
}
return errors.New("could not find user")
}