Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

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