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

« back to all changes in this revision

Viewing changes to build/lib/gplugs/identify.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
# rudimentary authentication trough nickserv
 
2
# Wijnand 'tehmaze' Modderman - http://tehmaze.com
 
3
# BSD License
 
4
 
 
5
from gozerbot.utils.generic import convertpickle
 
6
from gozerbot.callbacks import callbacks
 
7
from gozerbot.commands import cmnds
 
8
from gozerbot.datadir import datadir
 
9
from gozerbot.fleet import fleet
 
10
from gozerbot.users import users
 
11
from gozerbot.persist.pdod import Pdod
 
12
from gozerbot.plughelp import plughelp
 
13
from gozerbot.tests import tests
 
14
 
 
15
import os
 
16
 
 
17
plughelp.add('identify', 'auto-merges identified users')
 
18
 
 
19
##3 UPGRADE PART
 
20
 
 
21
def upgrade():
 
22
    convertpickle(datadir + os.sep + 'old' + os.sep + 'identify', \
 
23
datadir + os.sep + 'plugs' + os.sep + 'identify' + os.sep + 'identify')
 
24
 
 
25
## END UPGRADE PART
 
26
 
 
27
class IdManager(Pdod):
 
28
    def __init__(self):
 
29
        Pdod.__init__(self, os.path.join(datadir, 'identify'))
 
30
        self.setup()
 
31
 
 
32
    def setup(self):
 
33
        for bot in fleet.bots:
 
34
            self.check(bot)
 
35
 
 
36
    def check(self, bot):
 
37
        if not self.data.has_key(bot.name):
 
38
            self.data[bot.name] = {}
 
39
 
 
40
    def add(self, bot, nick, user):
 
41
        self.check(bot)
 
42
        self.data[bot.name][nick] = user
 
43
        self.save()
 
44
 
 
45
    def get(self, bot, nick):
 
46
        if not self.data.has_key(bot.name):
 
47
            return None
 
48
        if not self.data[bot.name].has_key(nick):
 
49
            return None
 
50
        return self.data[bot.name][nick]
 
51
 
 
52
    def lookup(self, bot, nick, userhost):
 
53
        user = self.get(bot, nick)
 
54
        if user:
 
55
            users.adduserhost(user, userhost)
 
56
            return True
 
57
        return False
 
58
 
 
59
    def remove(self, bot, nick):
 
60
        if not self.data.has_key(bot.name):
 
61
            return False
 
62
        if not self.data[bot.name].has_key(nick):
 
63
            return False
 
64
        del self.data[bot.name][nick]
 
65
        self.save()
 
66
        return True
 
67
 
 
68
idmanager = IdManager()
 
69
if not idmanager.data:
 
70
    idmanager = IdManager()
 
71
 
 
72
def handle_id(bot, ievent):
 
73
    if not ievent.args:
 
74
        ievent.missing('<nick>')
 
75
        return
 
76
    ievent.reply('requesting userinfo for %s' % ievent.args[0])
 
77
    bot.sendraw('WHOIS %s' % ievent.args[0])
 
78
 
 
79
cmnds.add('id', handle_id, ['OPER'])
 
80
tests.add('id exec')
 
81
 
 
82
def handle_idadd(bot, ievent):
 
83
    if len(ievent.args) != 2:
 
84
        ievent.missing('<nick> <user>')
 
85
        return
 
86
    if idmanager.get(bot, ievent.args[0]):
 
87
        ievent.reply('%s is already known on %s' % (ievent.args[0], bot.name))
 
88
        return
 
89
    if not users.exist(ievent.args[1].lower()):
 
90
        ievent.reply('user %s unknown' % ievent.args[1].lower())
 
91
        return
 
92
    else:
 
93
        idmanager.add(bot, ievent.args[0], ievent.args[1].lower())
 
94
        ievent.reply('ok')
 
95
   
 
96
cmnds.add('id-add', handle_idadd, 'OPER')
 
97
tests.add('id-add')
 
98
 
 
99
def handle_idlist(bot, ievent):
 
100
    ievent.reply(str(idmanager.data))
 
101
 
 
102
cmnds.add('id-list', handle_idlist, 'OPER')
 
103
tests.add('id-list')
 
104
 
 
105
def handle_JOIN(bot, ievent):
 
106
    user = users.getname(ievent.userhost)
 
107
    if not user:
 
108
        user = idmanager.lookup(bot, ievent.nick, ievent.userhost)
 
109
    if not user:
 
110
        bot.sendraw('WHOIS %s' % ievent.nick)
 
111
 
 
112
callbacks.add('JOIN', handle_JOIN)
 
113
 
 
114
def handle_320_330(bot, ievent):
 
115
    text = ' '.join(ievent.arguments[2:])
 
116
    #bot.sendraw('PRIVMSG #dunkbots :%s' % str(ievent))
 
117
    # IRC protocol sucks, no generic code for identified users :-(
 
118
    # so,
 
119
    if ievent.cmnd == '320' and 'is identified to services' in text:
 
120
        # Freenode
 
121
        nick = ievent.arguments[1]
 
122
        userhost = bot.userhosts.data[nick]
 
123
        idmanager.lookup(bot, nick, userhost) 
 
124
        #bot.sendraw('PRIVMSG #dunkbots :%s is identified (320/freenode)' % nick)
 
125
    elif ievent.cmnd == '330' and 'is logged in as' in text:
 
126
        # Undernet
 
127
        nick = ievent.arguments[1]
 
128
        userhost = bot.userhosts.data[nick]
 
129
        idmanager.lookup(bot, nick, userhost)
 
130
        #bot.sendraw('PRIVMSG #dunkbots :%s is identified (330/undernet)' % nick)
 
131
 
 
132
callbacks.add('320', handle_320_330)
 
133
callbacks.add('330', handle_320_330)
 
134