~ubuntu-branches/ubuntu/utopic/gozerbot/utopic

« back to all changes in this revision

Viewing changes to build/lib/gplugs/olddb/user.py

  • Committer: Package Import Robot
  • Author(s): Jeremy Malcolm
  • Date: 2012-04-03 21:58:28 UTC
  • mfrom: (3.1.11 sid)
  • Revision ID: package-import@ubuntu.com-20120403215828-6mik0tzug5na93la
Tags: 0.99.1-2
* Removes logfiles on purge (Closes: #668767)
* Reverted location of installed files back to /usr/lib/gozerbot.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# dbplugs/user.py
 
2
#
 
3
#
 
4
 
 
5
""" users related commands """
 
6
 
 
7
__copyright__ = 'this file is in the public domain'
 
8
 
 
9
from gozerbot.generic import getwho, stripident
 
10
from gozerbot.users import users
 
11
from gozerbot.commands import cmnds
 
12
from gozerbot.examples import examples
 
13
from gozerbot.aliases import aliases, aliasdel
 
14
from gozerbot.plughelp import plughelp
 
15
 
 
16
plughelp.add('user', 'manage users')
 
17
 
 
18
def handle_whoami(bot, ievent):
 
19
    """ user-whoami .. get your username """
 
20
    ievent.reply('%s' % users.getname(ievent.userhost))
 
21
 
 
22
cmnds.add('user-whoami', handle_whoami, 'USER')
 
23
examples.add('user-whoami', 'get your username', 'user-whoami')
 
24
aliases.data['whoami'] = 'user-whoami'
 
25
 
 
26
def handle_meet(bot, ievent):
 
27
    """ user-meet <nick> .. introduce a new user to the bot """
 
28
    try:
 
29
        nick = ievent.args[0].lower()
 
30
    except IndexError:
 
31
        ievent.missing('<nick>')
 
32
        return
 
33
    if users.exist(nick):
 
34
        ievent.reply('there is already a user with username %s' % nick)
 
35
        return
 
36
    userhost = getwho(bot, nick)
 
37
    if not userhost:
 
38
        ievent.reply("can't find userhost of %s" % nick)
 
39
        return
 
40
    username = users.getname(userhost)
 
41
    if username:
 
42
        ievent.reply('we already have a user with userhost %s (%s)' % \
 
43
(userhost, username))
 
44
        return
 
45
    result = 0
 
46
    try:
 
47
        result = users.add(nick.lower(), [userhost, ], ['USER', ])
 
48
    except Exception, ex:
 
49
        ievent.reply('ERROR: %s' % str(ex))
 
50
        return
 
51
    if result:
 
52
        ievent.reply('%s added to user database' % nick)
 
53
    else:
 
54
        ievent.reply('add failed')
 
55
 
 
56
cmnds.add('user-meet', handle_meet, ['OPER', 'MEET'])
 
57
examples.add('user-meet', 'user-meet <nick> .. introduce <nick> to the \
 
58
bot', 'user-meet dunker')
 
59
aliases.data['meet'] = 'user-meet'
 
60
 
 
61
def handle_adduser(bot, ievent):
 
62
    """ user-aadd <name> <userhost> .. introduce a new user to the bot """
 
63
    try:
 
64
        (name, userhost) = ievent.args
 
65
    except ValueError:
 
66
        ievent.missing('<name> <userhost>')
 
67
        return
 
68
    username = users.getname(userhost)
 
69
    if username:
 
70
        ievent.reply('we already have a user with userhost %s (%s)' % \
 
71
(userhost, username))
 
72
        return
 
73
    result = 0
 
74
    try:
 
75
        result = users.add(name.lower(), [userhost, ], ['USER', ])
 
76
    except Exception, ex:
 
77
        ievent.reply("ERROR: %s" % str(ex))
 
78
        return
 
79
    if result:
 
80
        ievent.reply('%s added to user database' % name)
 
81
    else:
 
82
        ievent.reply('add failed')
 
83
 
 
84
cmnds.add('user-add', handle_adduser, 'OPER')
 
85
examples.add('user-add', 'user-add <name> <userhost> .. add <name> with \
 
86
<userhost> to the bot', 'user-add dunker bart@localhost')
 
87
 
 
88
def handle_merge(bot, ievent):
 
89
    """ user-merge <name> <nick> .. merge the userhost into a already \
 
90
        existing user """
 
91
    if len(ievent.args) != 2:
 
92
        ievent.missing('<name> <nick>')
 
93
        return  
 
94
    name, nick = ievent.args
 
95
    name = name.lower()
 
96
    if users.gotperm(name, 'OPER') and not users.allowed(ievent.userhost, \
 
97
'OPER'):
 
98
        ievent.reply("only OPER perm can merge with OPER user")
 
99
        return
 
100
    if name == 'owner' and not bot.ownercheck(ievent, "can merge with owner \
 
101
user"):
 
102
         return 
 
103
    if not users.exist(name):
 
104
        ievent.reply("we have no user %s" % name)
 
105
        return
 
106
    userhost = getwho(bot, nick)
 
107
    if not userhost:
 
108
        ievent.reply("can't find userhost of %s" % nick)
 
109
        return
 
110
    username = users.getname(userhost)
 
111
    if username:
 
112
        ievent.reply('we already have a user with userhost %s (%s)' % \
 
113
(userhost, username))
 
114
        return
 
115
    result = 0
 
116
    try:
 
117
        result = users.merge(name, userhost)
 
118
    except Exception, ex:
 
119
        ievent.reply("ERROR: %s" % str(ex))
 
120
        return
 
121
    if result:
 
122
        ievent.reply('%s merged' % nick)
 
123
    else:
 
124
        ievent.reply('merge failed')
 
125
 
 
126
cmnds.add('user-merge', handle_merge, ['OPER', 'MEET'])
 
127
examples.add('user-merge', 'user-merge <name> <nick> .. merge record with \
 
128
<name> with userhost from <nick>', 'merge bart dunker')
 
129
aliases.data['merge'] = 'user-merge'
 
130
 
 
131
def handle_delete(bot, ievent):
 
132
    """ user-del <name> .. remove user """
 
133
    if len(ievent.args) == 0:
 
134
        ievent.missing('<name>')
 
135
        return
 
136
    name = ievent.args[0].lower()
 
137
    if name == 'owner':
 
138
        ievent.reply("can't delete owner")
 
139
        return
 
140
    result = 0
 
141
    try:
 
142
        result = users.delete(name)
 
143
    except Exception, ex:
 
144
        ievent.reply("ERROR: %s" % str(ex))
 
145
        return
 
146
    if result:
 
147
        ievent.reply('%s deleted' % name)
 
148
    else:
 
149
        ievent.reply('delete of %s failed' % name)
 
150
 
 
151
cmnds.add('user-del', handle_delete, 'OPER')
 
152
examples.add('user-del', 'user-del <name> .. delete user with <username>' , \
 
153
'user-del dunker')
 
154
aliases.data['delete'] = 'user-del'
 
155
 
 
156
def handle_userscan(bot, ievent):
 
157
    """ user-scan <txt> .. scan for user """
 
158
    try:
 
159
        name = ievent.args[0]
 
160
    except IndexError:
 
161
        ievent.missing('<txt>')
 
162
        return
 
163
    name = name.lower()
 
164
    names = users.names()
 
165
    result = []
 
166
    for i in names:
 
167
        if i.find(name) != -1:
 
168
            result.append(i)
 
169
    if result:
 
170
        ievent.reply("users matching %s: " % name, result, dot=True)
 
171
    else:
 
172
        ievent.reply('no users matched')
 
173
        return
 
174
 
 
175
cmnds.add('user-scan', handle_userscan, 'OPER')
 
176
examples.add('user-scan', 'user-scan <txt> .. search database for matching \
 
177
usernames', 'user-scan dunk')
 
178
aliases.data['us'] = 'user-scan'
 
179
 
 
180
def handle_names(bot, ievent):
 
181
    """ user-names .. show registered users """
 
182
    ievent.reply("usernames: ", users.names(), dot=True)
 
183
 
 
184
cmnds.add('user-names', handle_names, 'OPER')
 
185
examples.add('user-names', 'show names of registered users', 'user-names')
 
186
aliases.data['names'] = 'user-names'
 
187
 
 
188
def handle_name(bot, ievent):
 
189
    """ user-name .. show name of user giving the command """
 
190
    ievent.reply('your name is %s' % users.getname(ievent.userhost))
 
191
 
 
192
cmnds.add('user-name', handle_name, 'USER')
 
193
examples.add('user-name', 'show name of user giving the commands', \
 
194
'user-name')
 
195
aliases.data['name'] = 'user-name'
 
196
 
 
197
def handle_getname(bot, ievent):
 
198
    """ user-getname <nick> .. fetch name of nick """
 
199
    try:
 
200
        nick = ievent.args[0]
 
201
    except IndexError:
 
202
        ievent.missing("<nick>")
 
203
        return
 
204
    userhost = getwho(bot, nick)
 
205
    if not userhost:
 
206
        ievent.reply("can't find userhost of %s" % nick)
 
207
        return
 
208
    name = users.getname(userhost)
 
209
    if not name:
 
210
        ievent.reply("can't find user for %s" % userhost)
 
211
        return
 
212
    ievent.reply(name)
 
213
 
 
214
cmnds.add('user-getname', handle_getname, 'USER')
 
215
examples.add('user-getname', 'user-getname <nick> .. get the name of \
 
216
<nick>', 'user-getname dunker')
 
217
aliases.data['gn'] = 'user-getname'
 
218
aliases.data['getname'] = 'user-getname'
 
219
 
 
220
def handle_addperm(bot, ievent):
 
221
    """ user-addperm <name> <perm> .. add permission """
 
222
    if len(ievent.args) != 2:
 
223
        ievent.missing('<name> <perm>')
 
224
        return
 
225
    name, perm = ievent.args
 
226
    perm = perm.upper()
 
227
    name = name.lower()
 
228
    if not users.exist(name):
 
229
        ievent.reply("can't find user %s" % name)
 
230
        return
 
231
    result = 0
 
232
    if users.gotperm(name, perm):
 
233
        ievent.reply('%s already has permission %s' % (name, perm))
 
234
        return         
 
235
    try:
 
236
        result = users.db.execute(""" INSERT INTO perms(name, perm) \
 
237
values(%s,%s) """, (name, perm))
 
238
    except Exception, ex:
 
239
        ievent.reply("ERROR: %s" % str(ex))
 
240
        return
 
241
    if result:
 
242
        ievent.reply('%s perm added' % perm)
 
243
    else:
 
244
        ievent.reply('perm add failed')
 
245
 
 
246
cmnds.add('user-addperm', handle_addperm, 'OPER')
 
247
examples.add('user-addperm', 'user-addperm <name> <perm> .. add permissions \
 
248
to user <name>', 'user-addperm dunker rss')
 
249
aliases.data['setperms'] = 'user-addperm'
 
250
aliases.data['addperms'] = 'user-addperm'
 
251
 
 
252
def handle_getperms(bot, ievent):
 
253
    """ user-getperms <name> .. get permissions of name"""
 
254
    try:
 
255
        name = ievent.args[0]
 
256
    except IndexError:
 
257
        ievent.missing('<name>')
 
258
        return
 
259
    name = name.lower()
 
260
    if not users.exist(name):
 
261
        ievent.reply("can't find user %s" % name)
 
262
        return
 
263
    perms = users.db.execute(""" SELECT perm FROM perms WHERE \
 
264
name = %s """, name)
 
265
    if perms:
 
266
        permlist = []
 
267
        for i in perms:
 
268
            permlist.append(i[0])
 
269
        ievent.reply("permissions of %s: " % name, permlist, dot=True)
 
270
    else:
 
271
        ievent.reply('%s has no permissions set' % name)
 
272
 
 
273
cmnds.add('user-getperms', handle_getperms, 'OPER')
 
274
examples.add('user-getperms', 'user-getperms <name> .. get permissions of \
 
275
<name>', 'user-getperms dunker')
 
276
aliases.data['getperms'] = 'user-getperms'
 
277
 
 
278
def handle_perms(bot, ievent):
 
279
    """ user-perms .. get permission of the user given the command """
 
280
    if ievent.rest:
 
281
        ievent.reply("use getperms to get the permissions of somebody else")
 
282
        return
 
283
    name = users.getname(ievent.userhost)
 
284
    if not name:
 
285
         ievent.reply("can't find username for %s" % ievent.userhost)
 
286
         return
 
287
    perms = users.db.execute(""" SELECT perm FROM perms WHERE \
 
288
name = %s """, name)
 
289
    if perms:
 
290
        permlist = []
 
291
        for i in perms:
 
292
            permlist.append(i[0])
 
293
        ievent.reply("you have permissions: ", permlist, dot=True)
 
294
 
 
295
cmnds.add('user-perms', handle_perms, 'USER')
 
296
examples.add('user-perms', 'get permissions', 'user-perms')
 
297
aliases.data['perms'] = 'user-perms'
 
298
 
 
299
def handle_delperm(bot, ievent):
 
300
    """ user-delperm <name> <perm> .. delete permission of name """
 
301
    if len(ievent.args) != 2:
 
302
        ievent.missing('<name> <perm>')
 
303
        return
 
304
    name, perm = ievent.args
 
305
    perm = perm.upper()
 
306
    name = name.lower()
 
307
    if not users.exist(name):
 
308
        ievent.reply("can't find user %s" % name)
 
309
        return
 
310
    result = 0
 
311
    try:
 
312
        result = users.db.execute(""" DELETE FROM perms WHERE name = %s AND \
 
313
perm = %s """, (name, perm))
 
314
    except Exception, ex:
 
315
        ievent.reply("ERROR: %s" % str(ex))
 
316
        return
 
317
    if result:
 
318
        ievent.reply('%s perm removed' % perm)
 
319
    else:
 
320
        ievent.reply("%s has no %s permission" % (name, perm))
 
321
        return
 
322
 
 
323
cmnds.add('user-delperm', handle_delperm, 'OPER')
 
324
examples.add('user-delperms', 'delete from user <name> permission <perm>', \
 
325
'user-delperms dunker rss')
 
326
 
 
327
def handle_addstatus(bot, ievent):
 
328
    """ user-addstatus <name> <status> .. add status of name """
 
329
    if len(ievent.args) != 2:
 
330
        ievent.missing('<name> <status>')
 
331
        return
 
332
    name, status = ievent.args
 
333
    status = status.upper()
 
334
    name = name.lower()
 
335
    if not users.exist(name):
 
336
        ievent.reply("can't find user %s" % name)
 
337
        return
 
338
    result = 0
 
339
    if users.gotstatus(name, status):
 
340
        ievent.reply('%s already has status %s' % (name, status))
 
341
        return
 
342
    try:
 
343
        result = users.db.execute(""" INSERT INTO statuses(name, status) \
 
344
values(%s,%s) """, (name, status))
 
345
    except Exception, ex:
 
346
        ievent.reply("ERROR: %s" % str(ex))
 
347
        return
 
348
    if result:
 
349
        ievent.reply('%s status added' % status)
 
350
    else:
 
351
        ievent.reply('add failed')
 
352
 
 
353
cmnds.add('user-addstatus', handle_addstatus, 'OPER')
 
354
examples.add('user-addstatus', 'user-addstatus <name> <status>', \
 
355
'user-addstatus dunker #dunkbots')
 
356
aliases.data['setstatus'] = 'user-addstatus'
 
357
aliases.data['addstatus'] = 'user-addstatus'
 
358
 
 
359
def handle_getstatus(bot, ievent):
 
360
    """ user-getstatus <name> .. get status of name """
 
361
    try:
 
362
        name = ievent.args[0]
 
363
    except IndexError:
 
364
        ievent.missing('<name>')
 
365
        return
 
366
    name = name.lower()
 
367
    if not users.exist(name):
 
368
        ievent.reply("can't find user %s" % name)
 
369
        return
 
370
    status = users.db.execute(""" SELECT status FROM statuses WHERE \
 
371
name = %s """, name)
 
372
    if status:
 
373
        statuslist = []
 
374
        for i in status:
 
375
            statuslist.append(i[0])
 
376
        ievent.reply("status of %s: " % name, statuslist, dot=True)
 
377
    else:
 
378
        ievent.reply('%s has no status set' % name)
 
379
 
 
380
cmnds.add('user-getstatus', handle_getstatus, 'OPER')
 
381
examples.add('user-getstatus', 'user-getstatus <name> .. get status of \
 
382
<name>', 'user-getstatus dunker')
 
383
aliases.data['getstatus'] = 'user-getstatus'
 
384
 
 
385
def handle_status(bot, ievent):
 
386
    """ user-status .. get status of user given the command """
 
387
    name = users.getname(ievent.userhost)
 
388
    status = users.db.execute(""" SELECT status FROM statuses WHERE \
 
389
name = %s """, name)
 
390
    if status:
 
391
        statuslist = []
 
392
        for i in status:
 
393
            statuslist.append(i[0])
 
394
        ievent.reply("you have status: ", statuslist, dot=True)
 
395
    else:
 
396
        ievent.reply('you have no status set')
 
397
 
 
398
cmnds.add('user-status', handle_status, 'USER')
 
399
examples.add('user-status', 'get status', 'user-status')
 
400
aliases.data['status'] = 'user-status'
 
401
 
 
402
def handle_delstatus(bot, ievent):
 
403
    """ user-delstatus <name> <status> .. delete status of name """
 
404
    if len(ievent.args) != 2:
 
405
        ievent.missing('<name> <status>')
 
406
        return
 
407
    name, status = ievent.args
 
408
    status = status.upper()
 
409
    name = name.lower()
 
410
    if not users.exist(name):
 
411
        ievent.reply("can't find user %s" % name)
 
412
        return
 
413
    result = 0
 
414
    try:
 
415
        result = users.db.execute(""" DELETE FROM statuses WHERE \
 
416
name = %s AND status = %s """, (name, status))
 
417
    except Exception, ex:
 
418
        ievent.reply("ERROR: %s" % str(ex))
 
419
        return
 
420
    if result:
 
421
        ievent.reply('%s status deleted' % status)
 
422
    else:
 
423
        ievent.reply("%s has no %s status" % (name, status))
 
424
        return
 
425
 
 
426
cmnds.add('user-delstatus', handle_delstatus, 'OPER')
 
427
examples.add('user-delstatus', 'user-delstatus <name> <status>', \
 
428
'user-delstatus dunker #dunkbots')
 
429
aliases.data['delstatus'] = 'user-delstatus'
 
430
 
 
431
def handle_adduserhost(bot, ievent):
 
432
    """ user-adduserhost <name> <userhost> .. add to userhosts of name """ 
 
433
    if len(ievent.args) != 2:
 
434
        ievent.missing('<name> <userhost>')
 
435
        return
 
436
    name, userhost = ievent.args
 
437
    userhost = stripident(userhost)
 
438
    name = name.lower()
 
439
    if name == 'owner' and not bot.ownercheck(ievent, 'can adduserhost to \
 
440
owner'):
 
441
        return
 
442
    if not users.exist(name):
 
443
        ievent.reply("can't find user %s" % name)
 
444
        return
 
445
    if users.gotuserhost(name, userhost):
 
446
        ievent.reply('%s already has userhost %s' % (name, userhost))
 
447
        return
 
448
    result = 0
 
449
    try:
 
450
        result = users.db.execute(""" INSERT INTO userhosts(name, \
 
451
userhost) values(%s, %s) """, (name, userhost))
 
452
    except Exception, ex:
 
453
        ievent.reply("ERROR: %s" % str(ex))
 
454
        return
 
455
    if result:
 
456
        ievent.reply('userhost added')
 
457
    else:
 
458
        ievent.reply('add failed')
 
459
 
 
460
cmnds.add('user-adduserhost', handle_adduserhost, 'OPER')
 
461
examples.add('user-adduserhost', 'user-adduserhost <name> <userhost>', \
 
462
'user-adduserhost dunker bart@%.a2000.nl')
 
463
aliases.data['adduserhost'] = 'user-adduserhost'
 
464
aliases.data['adduserhosts'] = 'user-adduserhost'
 
465
 
 
466
def handle_deluserhost(bot, ievent):
 
467
    """ user-deluserhost <name> <userhost> .. remove from userhosts of name """
 
468
    if len(ievent.args) != 2:
 
469
        ievent.missing('<name> <userhost>')
 
470
        return
 
471
    name, userhost = ievent.args
 
472
    userhost = stripident(userhost)
 
473
    name = name.lower()
 
474
    if name == 'owner'  and not bot.ownercheck(ievent, 'can delete userhosts \
 
475
from owner'):
 
476
        return 
 
477
    if not users.exist(name):
 
478
        ievent.reply("can't find user %s" % name)
 
479
        return
 
480
    result = 0
 
481
    try:
 
482
        result = users.db.execute(""" DELETE FROM userhosts WHERE \
 
483
name = %s AND userhost = %s """, (name, userhost))
 
484
    except Exception, ex:
 
485
        ievent.reply("ERROR: %s" % str(ex))
 
486
        return
 
487
    if result:
 
488
        ievent.reply('userhost removed')
 
489
    else:
 
490
        ievent.reply("%s has no %s in userhost list" % (name, \
 
491
userhost))
 
492
        return  
 
493
 
 
494
cmnds.add('user-deluserhost', handle_deluserhost, 'OPER')
 
495
examples.add('user-deluserhost', 'user-deluserhost <name> <userhost> .. \
 
496
delete from usershosts of <name> userhost <userhost>','user-deluserhost \
 
497
dunker bart1@bla.a2000.nl')
 
498
aliases.data['deluserhost'] = 'user-deluserhost'
 
499
aliases.data['deluserhosts'] = 'user-deluserhost'
 
500
 
 
501
def handle_getuserhosts(bot, ievent):
 
502
    """ user-getuserhosts <name> .. get userhosts of name """
 
503
    try:
 
504
        who = ievent.args[0]
 
505
    except IndexError:
 
506
        ievent.missing('<name>')
 
507
        return
 
508
    who = who.lower()
 
509
    userhosts = users.db.execute(""" SELECT userhost FROM userhosts \
 
510
WHERE name = %s """, who)
 
511
    if userhosts:
 
512
        userhostlist = []
 
513
        for i in userhosts:
 
514
            userhostlist.append(i[0])
 
515
        ievent.reply("userhosts of %s: " % who, userhostlist, dot=True)
 
516
    else:
 
517
        ievent.reply("can't find user %s" % who)
 
518
 
 
519
cmnds.add('user-getuserhosts', handle_getuserhosts, 'OPER')
 
520
examples.add('user-getuserhosts', 'user-getuserhosts <name> .. get \
 
521
userhosts of <name>', 'getuserhosts dunker')
 
522
aliases.data['getuserhosts'] = 'user-getuserhosts'
 
523
 
 
524
def handle_userhosts(bot, ievent):
 
525
    """ user-userhosts .. get userhosts of user giving the command """
 
526
    name = users.getname(ievent.userhost)
 
527
    userhosts = users.db.execute(""" SELECT userhost FROM userhosts \
 
528
WHERE name = %s """, name)
 
529
    if userhosts:
 
530
        userhostlist = []
 
531
        for i in userhosts:
 
532
            userhostlist.append(i[0])
 
533
        ievent.reply("you have userhosts: ", userhostlist, dot=True)
 
534
 
 
535
cmnds.add('user-userhosts', handle_userhosts, 'USER')
 
536
examples.add('user-userhosts', 'get userhosts', 'user-userhosts')
 
537
aliases.data['userhosts'] = 'user-userhosts'
 
538
 
 
539
def handle_getemail(bot, ievent):
 
540
    """ user-getemail <name> .. get email of name """
 
541
    try:
 
542
        name = ievent.args[0]
 
543
    except IndexError:
 
544
        ievent.missing('<name>')
 
545
        return
 
546
    name = name.lower()
 
547
    if not users.exist(name):
 
548
        ievent.reply("can't find user %s" % name)
 
549
        return
 
550
    email = users.db.execute(""" SELECT email FROM email \
 
551
WHERE name = %s """, name)
 
552
    if email:
 
553
        ievent.reply(email[0][0])
 
554
    else:
 
555
        ievent.reply('no email set')
 
556
 
 
557
cmnds.add('user-getemail', handle_getemail, 'USER')
 
558
examples.add('user-getemail', 'user-getemail <name> .. get email from user \
 
559
<name>', 'user-getemail dunker')
 
560
aliases.data['getemail'] = 'user-getemail'
 
561
 
 
562
def handle_setemail(bot, ievent):
 
563
    """ user-setemail <name> .. set email of name """
 
564
    try:
 
565
        name, email = ievent.args
 
566
    except ValueError:
 
567
        ievent.missing('<name> <email>')
 
568
        return
 
569
    if not users.exist(name):
 
570
        ievent.reply("can't find user %s" % name)
 
571
        return
 
572
    users.setemail(name, email)
 
573
    ievent.reply('email set')
 
574
 
 
575
cmnds.add('user-setemail', handle_setemail, 'OPER')
 
576
examples.add('user-setemail', 'user-setemail <name> <email>.. set email of \
 
577
user <name>', 'user-setemail dunker bart@gozerbot.org')
 
578
aliases.data['setemail'] = 'user-setemail'
 
579
 
 
580
def handle_email(bot, ievent):
 
581
    """ user-email .. show email of user giving the command """
 
582
    if len(ievent.args) != 0:
 
583
        ievent.reply('use getemail to get the email address of an user .. \
 
584
email shows your own mail address')
 
585
        return
 
586
    name = users.getname(ievent.userhost)
 
587
    email = users.db.execute(""" SELECT email FROM email \
 
588
WHERE name = %s """, name)
 
589
    if email:
 
590
        ievent.reply(email[0][0])
 
591
    else:
 
592
        ievent.reply('no email set')
 
593
 
 
594
cmnds.add('user-email', handle_email, 'USER')
 
595
examples.add('user-email', 'get email', 'user-email')
 
596
aliases.data['email'] = 'user-email'
 
597
 
 
598
def handle_delemail(bot, ievent):
 
599
    """ user-delemail .. reset email of user giving the command """
 
600
    name = users.getname(ievent.userhost)
 
601
    if not name:
 
602
        ievent.reply("can't find user for %s" % ievent.userhost)
 
603
        return
 
604
    result = 0
 
605
    try:
 
606
        result = users.db.execute(""" DELETE FROM email WHERE \
 
607
name = %s """, name)
 
608
    except Exception, ex:
 
609
        ievent.reply("ERROR: %s" % str(ex))
 
610
        return
 
611
    if result:
 
612
        ievent.reply('email removed')
 
613
    else:
 
614
        ievent.reply('delete failed')
 
615
 
 
616
cmnds.add('user-delemail', handle_delemail, 'OPER')
 
617
examples.add('user-delemail', 'reset email', 'user-delemail')
 
618
aliases.data['delemail'] = 'user-delemail'
 
619
 
 
620
def handle_addpermit(bot, ievent):
 
621
    """ user-addpermit <name> <permit> .. add permit to permit list \
 
622
        of <name> """
 
623
    try:
 
624
        who, what = ievent.args
 
625
    except ValueError:
 
626
        ievent.missing("<name> <permit>")
 
627
        return
 
628
    if not users.exist(who):
 
629
        ievent.reply("can't find username of %s" % who)
 
630
        return
 
631
    name = users.getname(ievent.userhost)
 
632
    if users.gotpermit(name, (who, what)):
 
633
        ievent.reply('%s is already allowed to do %s' % (who, what))
 
634
        return
 
635
    result = 0
 
636
    try:
 
637
        result = users.db.execute(""" INSERT INTO permits(name, \
 
638
permit) values(%s,%s) """, (name, "%s %s" % (who, what)))
 
639
    except Exception, ex:
 
640
        ievent.reply("ERROR: %s" % str(ex))
 
641
        return
 
642
    if result:
 
643
        ievent.reply('permit added')
 
644
    else:
 
645
        ievent.reply('add failed')
 
646
 
 
647
cmnds.add('user-addpermit', handle_addpermit, 'USER')
 
648
examples.add('user-addpermit', 'user-addpermit <nick> <what> .. permit \
 
649
nick access to <what> .. use setperms to add permissions', \
 
650
'user-addpermit dunker todo')
 
651
aliasdel('allow')
 
652
 
 
653
def handle_permit(bot, ievent):
 
654
    """ user-permit .. get permit list of user giving the command """
 
655
    if ievent.rest:
 
656
        ievent.reply("use the allow command to allow somebody something .. \
 
657
use getname <nick> to get the username of somebody .. this command shows \
 
658
what permits you have")
 
659
        return
 
660
    name = users.getname(ievent.userhost)
 
661
    if not name:
 
662
        ievent.reply("can't find user for %s" % ievent.userhost)
 
663
        return
 
664
    permit = users.db.execute(""" SELECT permit FROM permits \
 
665
WHERE name = %s """, name)
 
666
    if permit:
 
667
        permitlist = []
 
668
        for i in permit:
 
669
            permitlist.append(i[0])
 
670
        ievent.reply("you permit the following: ", permitlist, dot=True)
 
671
    else:
 
672
        ievent.reply("you don't have any permits")
 
673
 
 
674
cmnds.add('user-permit', handle_permit, 'USER')
 
675
examples.add('user-permit', 'show permit of user giving the command', \
 
676
'user-permit')
 
677
aliases.data['permit'] = 'user-permit'
 
678
 
 
679
def handle_userdelpermit(bot, ievent):
 
680
    """ user-delpermit <name> <permit> .. remove (name, permit) from permit 
 
681
        list """
 
682
    try:
 
683
        who, what = ievent.args
 
684
    except ValueError:
 
685
        ievent.missing("<name> <what>")
 
686
        return
 
687
    if not users.exist(who):
 
688
        ievent.reply("can't find registered name of %s" % who)
 
689
        return
 
690
    name = users.getname(ievent.userhost)
 
691
    if not users.gotpermit(name, (who, what)):
 
692
        ievent.reply('%s is already not allowed to do %s' % (who, what))
 
693
        return
 
694
    result = 0
 
695
    try:
 
696
        result = users.db.execute(""" DELETE FROM permits WHERE \
 
697
name = %s AND permit = %s """, (name, "%s %s" % (who, what)))
 
698
    except Exception, ex:
 
699
        ievent.reply("ERROR: %s" % str(ex))
 
700
        return
 
701
    if result:
 
702
        ievent.reply('%s denied' % what)
 
703
    else:
 
704
        ievent.reply('delete failed')
 
705
 
 
706
cmnds.add('user-delpermit', handle_userdelpermit, 'USER')
 
707
examples.add('user-delpermit', 'user-delpermit <name> <permit>', \
 
708
'user-delpermit dunker todo')
 
709
aliasdel('deny')
 
710
 
 
711
def handle_check(bot, ievent):
 
712
    """ user-check <nick> .. get user data of <nick> """
 
713
    try:
 
714
        nick = ievent.args[0]
 
715
    except IndexError:
 
716
        ievent.missing('<nick>')
 
717
        return
 
718
    userhost = getwho(bot, nick)
 
719
    if not userhost:
 
720
        ievent.reply("can't find userhost of %s" % nick)
 
721
        return
 
722
    name = users.getname(userhost)
 
723
    if not name:
 
724
        ievent.reply("can't find user")
 
725
        return
 
726
    userhosts = users.db.execute(""" SELECT userhost FROM userhosts \
 
727
WHERE name = %s """, name)
 
728
    perms = users.db.execute(""" SELECT perm FROM perms \
 
729
WHERE name = %s """, name)
 
730
    email = users.db.execute(""" SELECT email FROM email \
 
731
WHERE name = %s """, name)
 
732
    permits = users.db.execute(""" SELECT permit FROM permits \
 
733
WHERE name = %s """, name)
 
734
    status = users.db.execute(""" SELECT status FROM statuses \
 
735
WHERE name = %s """, name)
 
736
    jarig = users.db.execute(""" SELECT birthday FROM birthday \
 
737
WHERE name = %s """, name)
 
738
    ievent.reply('userrecord of %s = userhosts: %s perms: %s email: %s \
 
739
permits: %s status: %s birthday: %s' % (name, str(userhosts), str(perms), \
 
740
str(email), str(permits), str(status),str(jarig)))
 
741
 
 
742
cmnds.add('user-check', handle_check, 'OPER')
 
743
examples.add('user-check', 'user-check <nick>', 'user-check dunker')
 
744
aliases.data['check'] = 'user-check'
 
745
 
 
746
def handle_show(bot, ievent):
 
747
    """ user-show <name> .. get data of <name> """
 
748
    try:
 
749
        name = ievent.args[0]
 
750
    except IndexError:
 
751
        ievent.missing('<name>')
 
752
        return
 
753
    name = name.lower()
 
754
    if not users.exist(name):
 
755
        ievent.reply("can't find user %s" % name)
 
756
        return
 
757
    userhosts = users.db.execute(""" SELECT userhost FROM userhosts \
 
758
WHERE name = %s """, name)
 
759
    perms = users.db.execute(""" SELECT perm FROM perms \
 
760
WHERE name = %s """, name)
 
761
    email = users.db.execute(""" SELECT email FROM email \
 
762
WHERE name = %s """, name)
 
763
    permits = users.db.execute(""" SELECT permit FROM permits \
 
764
WHERE name = %s """, name)
 
765
    status = users.db.execute(""" SELECT status FROM statuses \
 
766
WHERE name = %s """, name)
 
767
    jarig = users.db.execute(""" SELECT birthday FROM birthday \
 
768
WHERE name = %s """, name)
 
769
    ievent.reply('userrecord of %s = userhosts: %s perms: %s email: %s \
 
770
permits: %s status: %s birthday: %s' % (name, str(userhosts), str(perms), \
 
771
str(email), str(permits), str(status),str(jarig)))
 
772
 
 
773
cmnds.add('user-show', handle_show, 'OPER')
 
774
examples.add('user-show', 'user-show <name> .. show data of <name>', \
 
775
'user-show dunker')
 
776
 
 
777
def handle_match(bot, ievent):
 
778
    """ user-match <userhost> .. get data of <userhost> """
 
779
    try:
 
780
        userhost = ievent.args[0]
 
781
    except IndexError:
 
782
        ievent.missing('<userhost>')
 
783
        return
 
784
    name = users.getname(userhost)
 
785
    if not name:
 
786
        ievent.reply("can't find user with userhost %s" % userhost)
 
787
        return
 
788
    userhosts = users.db.execute(""" SELECT userhost FROM userhosts \
 
789
WHERE name = %s """, name)
 
790
    perms = users.db.execute(""" SELECT perm FROM perms \
 
791
WHERE name = %s """, name)
 
792
    email = users.db.execute(""" SELECT email FROM email \
 
793
WHERE name = %s """, name)
 
794
    permits = users.db.execute(""" SELECT permit FROM permits \
 
795
WHERE name = %s """, name)
 
796
    status = users.db.execute(""" SELECT status FROM statuses \
 
797
WHERE name = %s """, name)
 
798
    jarig = users.db.execute(""" SELECT birthday FROM birthday \
 
799
WHERE name = %s """, name)
 
800
    ievent.reply('userrecord of %s = userhosts: %s perms: %s email: %s \
 
801
permits: %s status: %s birthday: %s' % (name, str(userhosts), str(perms), \
 
802
str(email), str(permits), str(status),str(jarig)))
 
803
 
 
804
cmnds.add('user-match', handle_match, ['USER', 'OPER'])
 
805
examples.add('user-match', 'user-match <userhost>', 'user-match test@test')
 
806
aliases.data['match'] = 'user-match'
 
807
 
 
808
def handle_getuserstatus(bot, ievent):
 
809
    """ user-allstatus <status> .. list users with status <status> """
 
810
    try:
 
811
        status = ievent.args[0].upper()
 
812
    except IndexError:
 
813
        ievent.missing('<status>')
 
814
        return
 
815
    result = []
 
816
    userslist = users.db.execute(""" SELECT DISTINCT name FROM statuses \
 
817
WHERE status = %s """, status)
 
818
    if not userslist:
 
819
        ievent.reply("no users with %s status found" % status)
 
820
        return
 
821
    for i in userslist:
 
822
        result.append(i[0])
 
823
    if result:
 
824
        ievent.reply("users with %s status: " % status, result, dot=True)
 
825
    else:
 
826
        ievent.reply("no users with %s status found" % status)
 
827
 
 
828
cmnds.add('user-allstatus', handle_getuserstatus, 'OPER')
 
829
examples.add('user-allstatus', 'user-allstatus <status> .. get all users \
 
830
with <status> status', 'user-allstatus #dunkbots')
 
831
 
 
832
def handle_getuserperm(bot, ievent):
 
833
    """ user-allperm <perm> .. list users with permission <perm> """
 
834
    try:
 
835
        perm = ievent.args[0].upper()
 
836
    except IndexError:
 
837
        ievent.missing('<perm>')
 
838
        return
 
839
    result = []
 
840
    permusers = users.db.execute(""" SELECT DISTINCT name FROM perms \
 
841
WHERE perm = %s """, perm)
 
842
    if not permusers:
 
843
        ievent.reply("no users with %s permission found" % perm)
 
844
        return
 
845
    for i in permusers:
 
846
        result.append(i[0])
 
847
    if result:
 
848
        ievent.reply('users with %s permission: ' % perm, result, dot=True)
 
849
    else:
 
850
        ievent.reply("no users with %s permission found" % perm)
 
851
 
 
852
cmnds.add('user-allperm', handle_getuserperm, 'OPER')
 
853
examples.add('user-allperm', 'user-allperm <perm> .. get users with \
 
854
<perm> permission', 'user-allperm rss')
 
855
 
 
856
def handle_usersearch(bot, ievent):
 
857
    """ search for user matching given userhost """
 
858
    try:
 
859
        what = ievent.args[0]
 
860
    except IndexError:
 
861
        ievent.missing('<what>')
 
862
        return
 
863
    result = users.db.execute(""" SELECT name, userhost FROM userhosts \
 
864
WHERE userhost LIKE %s """, '%%%s%%' % what)
 
865
    if result:
 
866
        res = []
 
867
        for i in result:
 
868
            res.append("(%s) %s" % (i[0], i[1]))
 
869
        ievent.reply('users matching %s: ' % what, res, dot=True)
 
870
    else:
 
871
        ievent.reply('no userhost matching %s found' % what)
 
872
 
 
873
cmnds.add('user-search', handle_usersearch, 'OPER')
 
874
examples.add('user-search', 'search users userhosts', 'user-search gozerbot')
 
875
 
 
876
def handle_addpermall(bot, ievent):
 
877
    """ user-addpermall <perm> .. add permission to all users """
 
878
    try:
 
879
        perm = ievent.args[0].upper()
 
880
    except IndexError:
 
881
        ievent.missing('<perm>')
 
882
        return
 
883
    if perm == 'OPER':
 
884
        ievent.reply("can't add OPER permissions to all")
 
885
        return
 
886
    users.addpermall(perm)
 
887
    ievent.reply('%s perm added' % perm)
 
888
 
 
889
cmnds.add('user-addpermall', handle_addpermall, 'OPER')
 
890
examples.add('user-addpermall', 'user-addpermall <perm> .. add <permission> \
 
891
to all users', 'addpermsall USER')
 
892
 
 
893
def handle_delpermall(bot, ievent):
 
894
    """ user-delpermall <perm> .. delete permission from all users """
 
895
    try:
 
896
        perm = ievent.args[0].upper()
 
897
    except IndexError:
 
898
        ievent.missing('<perm>')
 
899
        return
 
900
    if perm == 'OPER':
 
901
        ievent.reply("can't delete OPER permissions from all")
 
902
        return
 
903
    users.delpermall(perm)
 
904
    ievent.reply('%s perm deleted' % perm)
 
905
 
 
906
cmnds.add('user-delpermall', handle_delpermall, 'OPER')
 
907
examples.add('user-delpermall', 'user-delpermall <perm> .. delete \
 
908
<permission> from all users', 'delpermsall BLA')