1
# let gozerbot authenticate to NickServ
2
# Wijnand 'tehmaze' Modderman
5
__author__ = "Wijnand 'tehmaze' Modderman - http://tehmaze.com"
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
18
plughelp.add('nickserv', 'authenticate the bot through (nick)services')
22
self.registered = False
23
Pdod.__init__(self, os.path.join(datadir, 'nickserv'))
25
def add(self, bot, **kwargs):
27
'nickserv': 'NickServ',
28
'identify': 'IDENTIFY',
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])
36
def remove(self, bot):
37
if self.has_key(bot.name):
42
return self.has_key(bot.name)
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)
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)
58
for bot in self.data.keys():
59
all.append((bot, self.data[bot]['nickserv']))
62
def handle_001(self, bot, ievent):
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)
73
callbacks.add('001', nsauth.handle_001, threaded=True)
76
bot = fleet.byname('main')
79
passwd = config['nickservpass']
81
nsauth.add(bot, **{'password': passwd, 'nickservtxt': \
82
config['nickservtxt']})
84
def handle_nsadd(bot, ievent):
85
if len(ievent.args) < 1:
86
ievent.missing('<password> [<nickserv nick>] [<identify command>]')
89
ievent.reply('replacing previous configuration')
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)
100
cmnds.add('ns-add', handle_nsadd, 'OPER')
102
def handle_nsdel(bot, ievent):
103
if len(ievent.args) != 1:
104
ievent.missing('<fleet name>')
106
fbot = fleet.byname(ievent.args[0])
108
ievent.reply('fleet not found')
110
if not nsauth.has(fbot):
111
ievent.reply('nickserv not configured on %s' % fbot.name)
116
cmnds.add('ns-del', handle_nsdel, 'OPER')
118
def handle_nsauth(bot, ievent):
119
if len(ievent.args) != 1:
122
name = ievent.args[0]
123
fbot = fleet.byname(name)
125
ievent.reply('fleet not found')
127
if not nsauth.has(fbot):
128
ievent.reply('nickserv not configured on %s' % fbot.name)
130
nsauth.identify(fbot)
133
cmnds.add('ns-auth', handle_nsauth, 'OPER')
135
def handle_nslist(bot, ievent):
136
all = dict(nsauth.listbots())
138
for bot in all.keys():
139
rpl.append('%s: authenticating through %s' % (bot, all[bot]))
141
ievent.reply(' .. '.join(rpl))
143
cmnds.add('ns-list', handle_nslist, 'OPER')