Added tell to Infobot.

This commit is contained in:
Jeremy Fincher 2004-07-31 06:46:19 +00:00
parent 98b7917ffc
commit 750d6c5e5b
2 changed files with 49 additions and 15 deletions

View File

@ -159,6 +159,9 @@ class InfobotDB(object):
def getResponseCount(self):
return self._responses
class Dunno(Exception):
pass
class Infobot(callbacks.PrivmsgCommandAndRegexp):
regexps = ['doForget', 'doFactoid', 'doUnknown']
def __init__(self):
@ -188,8 +191,8 @@ class Infobot(callbacks.PrivmsgCommandAndRegexp):
assert self.msg is not None
msg = self.msg
self.replied = True
irc.reply(plugins.standardSubstitute(irc, msg, s), prefixName=False,
action=action)
irc.reply(plugins.standardSubstitute(irc, msg, s),
prefixName=False, action=action, msg=msg)
def confirm(self, irc=None, msg=None):
if self.registryValue('personality'):
@ -204,7 +207,7 @@ class Infobot(callbacks.PrivmsgCommandAndRegexp):
else:
self.reply(self.registryValue('boringDunno'), irc=irc, msg=msg)
def factoid(self, key, irc=None, msg=None):
def factoid(self, key, irc=None, msg=None, dunno=True):
if irc is None:
assert self.irc is not None
irc = self.irc
@ -220,17 +223,21 @@ class Infobot(callbacks.PrivmsgCommandAndRegexp):
value = self.db.getAre(key)
if isAre is None:
if self.addressed:
if dunno:
self.dunno(irc=irc, msg=msg)
else:
# XXX
raise Dunno
else:
value = random.choice(value.split('|'))
if value.startswith('<reply>'):
self.reply('%s' % value[7:].strip(), irc=irc, msg=msg)
self.reply(value[7:].strip(),
irc=irc, msg=msg)
elif value.startswith('<action>'):
self.reply('%s' % value[8:].strip(), irc=irc, msg=msg,
action=True)
self.reply(value[8:].strip(),
irc=irc, msg=msg, action=True)
else:
self.reply('%s %s %s, $who.' % (key,isAre,value), irc=irc, msg=msg)
self.reply('%s %s %s, $who.' % (key,isAre,value),
irc=irc, msg=msg)
def normalize(self, s):
s = ircutils.stripFormatting(s)
@ -368,6 +375,28 @@ class Infobot(callbacks.PrivmsgCommandAndRegexp):
(utils.nItems('request', self.db.getChangeCount()),
utils.nItems('change', self.db.getResponseCount())))
def tell(self, irc, msg, args):
"""<nick> [about] <factoid>
Tells <nick> about <factoid>.
"""
if len(args) < 2:
raise callbacks.ArgumentError
if args[1] == 'about':
del args[1]
(nick, factoid) = privmsgs.getArgs(args, required=2)
try:
hostmask = irc.state.nickToHostmask(nick)
except KeyError:
irc.error('I haven\'t seen %s, I\'ll let you do the telling.')
return
newmsg = ircmsgs.privmsg(irc.nick, factoid+'?', prefix=hostmask)
try:
self.factoid(factoid, msg=newmsg)
except Dunno:
self.dunno()
Class = Infobot

View File

@ -569,7 +569,7 @@ class IrcObjectProxy(RichReplyMethods):
self._callCommand(name, command, cb)
def reply(self, s, noLengthCheck=False, prefixName=True,
action=False, private=False, notice=False, to=None):
action=False, private=False, notice=False, to=None, msg=None):
"""reply(s) -> replies to msg with s
Keyword arguments:
@ -589,6 +589,7 @@ class IrcObjectProxy(RichReplyMethods):
# False use or.
assert not isinstance(s, ircmsgs.IrcMsg), \
'Old code alert: there is no longer a "msg" argument to reply.'
if msg is None:
msg = self.msg
self.action = action or self.action
self.notice = notice or self.notice
@ -943,13 +944,17 @@ class IrcObjectProxyRegexp(RichReplyMethods):
self.irc = irc
self.msg = msg
def error(self, s, **kwargs):
self.irc.queueMsg(error(self.msg, s, **kwargs))
def error(self, s, msg=None, **kwargs):
if msg is None:
msg = self.msg
self.irc.queueMsg(error(msg, s, **kwargs))
def reply(self, s, **kwargs):
def reply(self, s, msg=None, **kwargs):
if msg is None:
msg = self.msg
assert not isinstance(s, ircmsgs.IrcMsg), \
'Old code alert: there is no longer a "msg" argument to reply.'
self.irc.queueMsg(reply(self.msg, s, **kwargs))
self.irc.queueMsg(reply(msg, s, **kwargs))
def __getattr__(self, attr):
return getattr(self.irc, attr)