~ubuntu-branches/ubuntu/precise/gozerbot/precise

« back to all changes in this revision

Viewing changes to build/lib/gozerplugs/plugs/nickserv.py

  • Committer: Bazaar Package Importer
  • Author(s): Jeremy Malcolm
  • Date: 2008-06-02 19:26:39 UTC
  • mfrom: (1.1.3 upstream) (3.1.1 lenny)
  • Revision ID: james.westby@ubuntu.com-20080602192639-3rn65nx4q1sgd6sy
Tags: 0.8.1-1
New upstream release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# let gozerbot authenticate to NickServ
2
 
# Wijnand 'tehmaze' Modderman
3
 
# BSD License
4
 
 
5
 
__author__ = "Wijnand 'tehmaze' Modderman - http://tehmaze.com"
6
 
__license__ ='BSD'
7
 
 
8
 
from gozerbot.callbacks import callbacks
9
 
from gozerbot.commands import cmnds
10
 
from gozerbot.datadir import datadir
11
 
from gozerbot.fleet import fleet
12
 
from gozerbot.pdod import Pdod
13
 
from gozerbot.plughelp import plughelp
14
 
from gozerbot.generic import rlog
15
 
from gozerbot.config import config
16
 
import os, time
17
 
 
18
 
plughelp.add('nickserv', 'authenticate the bot through (nick)services')
19
 
 
20
 
class NSAuth(Pdod):
21
 
    def __init__(self):
22
 
        self.registered = False
23
 
        Pdod.__init__(self, os.path.join(datadir, 'nickserv'))
24
 
 
25
 
    def add(self, bot, **kwargs):
26
 
        options = {
27
 
            'nickserv': 'NickServ',
28
 
            'identify': 'IDENTIFY',
29
 
        }
30
 
        options.update(kwargs)
31
 
        assert options.has_key('password'), 'A password must be set'
32
 
        for key in options.keys():
33
 
            Pdod.set(self, bot.name, key, options[key])
34
 
        self.save()
35
 
 
36
 
    def remove(self, bot):
37
 
        if self.has_key(bot.name):
38
 
            del self[bot.name]
39
 
            self.save()
40
 
 
41
 
    def has(self, bot):
42
 
        return self.has_key(bot.name)
43
 
 
44
 
    def register(self, bot, passwd):
45
 
        if self.has_key(bot.name) and self.has_key2(bot.name, 'nickserv'):
46
 
            bot.sendraw('PRIVMSG %s :%s %s' % (self.get(bot.name, \
47
 
'nickserv'),  'REGISTER', passwd))
48
 
            rlog(10, 'nickserv', 'register sent on %s' % bot.server)
49
 
 
50
 
    def identify(self, bot):
51
 
        if self.has_key(bot.name) and self.has_key2(bot.name, 'nickserv'):
52
 
            bot.sendraw('PRIVMSG %s :%s %s' % (self.get(bot.name, \
53
 
'nickserv'),  self.get(bot.name, 'identify'), self.get(bot.name, 'password')))
54
 
            rlog(10, 'nickserv', 'identify sent on %s' % bot.server)
55
 
 
56
 
    def listbots(self): 
57
 
        all = []
58
 
        for bot in self.data.keys():
59
 
            all.append((bot, self.data[bot]['nickserv']))
60
 
        return all
61
 
 
62
 
    def handle_001(self, bot, ievent):
63
 
        self.identify(bot)
64
 
        try:
65
 
            for i in self.data[bot.name]['nickservtxt']:
66
 
                bot.say(self.get(bot.name, 'nickserv'), i)
67
 
                rlog(10, 'nickserv', 'sent %s' % i)
68
 
        except:
69
 
            pass
70
 
 
71
 
nsauth = NSAuth()
72
 
 
73
 
callbacks.add('001', nsauth.handle_001, threaded=True)
74
 
 
75
 
def init():
76
 
    bot = fleet.byname('main')
77
 
    if bot.jabber:
78
 
        return
79
 
    passwd = config['nickservpass']
80
 
    if passwd:
81
 
        nsauth.add(bot, **{'password': passwd, 'nickservtxt': \
82
 
config['nickservtxt']})
83
 
 
84
 
def handle_nsadd(bot, ievent):
85
 
    if len(ievent.args) < 1:
86
 
        ievent.missing('<password> [<nickserv nick>] [<identify command>]')
87
 
        return
88
 
    if nsauth.has(bot):
89
 
        ievent.reply('replacing previous configuration')
90
 
    options = {}
91
 
    if len(ievent.args) >= 1:
92
 
        options.update({'password': ievent.args[0]})
93
 
    if len(ievent.args) >= 2:
94
 
        options.update({'nickserv': ievent.args[1]})
95
 
    if len(ievent.args) >= 3:
96
 
        options.update({'identify': ' '.join(ievent.args[2:])})
97
 
    nsauth.add(bot, **options)
98
 
    ievent.reply('ok')
99
 
 
100
 
cmnds.add('ns-add', handle_nsadd, 'OPER')
101
 
 
102
 
def handle_nsdel(bot, ievent):
103
 
    if len(ievent.args) != 1:
104
 
        ievent.missing('<fleet name>')
105
 
        return
106
 
    fbot = fleet.byname(ievent.args[0])
107
 
    if not fbot:
108
 
        ievent.reply('fleet not found')
109
 
        return
110
 
    if not nsauth.has(fbot):
111
 
        ievent.reply('nickserv not configured on %s' % fbot.name)
112
 
        return
113
 
    nsauth.remove(fbot)
114
 
    ievent.reply('ok')
115
 
 
116
 
cmnds.add('ns-del', handle_nsdel, 'OPER')
117
 
 
118
 
def handle_nsauth(bot, ievent):
119
 
    if len(ievent.args) != 1:
120
 
        name = bot.name
121
 
    else:
122
 
        name = ievent.args[0]
123
 
    fbot = fleet.byname(name)
124
 
    if not fbot:
125
 
        ievent.reply('fleet not found')
126
 
        return
127
 
    if not nsauth.has(fbot):
128
 
        ievent.reply('nickserv not configured on %s' % fbot.name)
129
 
        return
130
 
    nsauth.identify(fbot)
131
 
    ievent.reply('ok')
132
 
 
133
 
cmnds.add('ns-auth', handle_nsauth, 'OPER')
134
 
 
135
 
def handle_nslist(bot, ievent):
136
 
    all = dict(nsauth.listbots())
137
 
    rpl = []
138
 
    for bot in all.keys():
139
 
        rpl.append('%s: authenticating through %s' % (bot, all[bot]))
140
 
    rpl.sort()
141
 
    ievent.reply(' .. '.join(rpl))
142
 
 
143
 
cmnds.add('ns-list', handle_nslist, 'OPER')