[Pybot-commits] CVS: pybot/pybot/modules __init__.py,1.1.1.1,1.2 appwatch.py,1.1.1.1,1.2 ctcp.py,1.1
Brought to you by:
niemeyer
Update of /cvsroot/pybot/pybot/pybot/modules
In directory usw-pr-cvs1:/tmp/cvs-serv32496/pybot/modules
Modified Files:
__init__.py appwatch.py ctcp.py eval.py forward.py
freshmeat.py help.py ignore.py infopack.py messages.py
modulecontrol.py notes.py options.py permission.py plock.py
pong.py randnum.py repeat.py soap.py social.py
threadedexample.py timer.py uptime.py userdata.py
Log Message:
- Implemented new startup system.
- Converted tabs to spaces so people using other editors feel
confortable as well (suggested by John Thingstad).
Index: __init__.py
===================================================================
RCS file: /cvsroot/pybot/pybot/pybot/modules/__init__.py,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** __init__.py 2001/11/02 17:20:26 1.1.1.1
--- __init__.py 2001/12/04 00:57:38 1.2
***************
*** 18,19 ****
--- 18,20 ----
+ # vim:ts=4:sw=4:et
Index: appwatch.py
===================================================================
RCS file: /cvsroot/pybot/pybot/pybot/modules/appwatch.py,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** appwatch.py 2001/11/02 17:20:23 1.1.1.1
--- appwatch.py 2001/12/04 00:57:38 1.2
***************
*** 28,127 ****
class AppWatch:
! def __init__(self, bot):
! self.newslast = options.gethard("AppWatch.newslast", [None])
! self.newstargets = options.gethard("AppWatch.newstargets", [])
! self.newstargets_lock = thread.allocate_lock()
! self.fetch_lock = thread.allocate_lock()
! hooks.register("Message", self.message)
! mm.hooktimer(0, FETCHINTERVAL*60, self.checknews, ())
! # Match '[don[']t|do not] show appwatch news (to|on|at|for) [channel|user] <target> [[on|at] server <server>] [!|.]'
! self.re1 = re.compile(r"(?P<dont>don'?t\s+|do\s+not\s+)?show\s+appwatch\s+news(?:(?:to|on|at|for)(?:\s+channel|\s+user)?\s+(?P<target>\S+)(?:(?:\s+on|\s+at)?\s+server\s+(?P<server>\S+?))?)?\s*[!.]*", re.I)
!
! def unload(self):
! hooks.unregister("Message", self.message)
! mm.unhooktimer(0, FETCHINTERVAL*60, self.checknews, ())
!
! def shownews(self, newslist):
! first = 1
! newsmsg = ""
! for news in newslist:
! if not first:
! newsmsg = newsmsg+", "
! else:
! first = 0
! newsmsg = newsmsg+news[0]
! self.newstargets_lock.acquire()
! for target in self.newstargets:
! server = servers.get(target[0])
! if server:
! server.sendmsg(target[1], None, "AppWatch news:", newsmsg, notice=1)
! self.newstargets_lock.release()
!
! def fetchnews(self):
! urlopener = urllib.URLopener()
! urlopener.proxies.update(PROXY)
! try:
! url = urlopener.open(URL)
! except:
! pass
! else:
! newslist = []
! while 1:
! news_name = string.rstrip(url.readline())
! news_url = string.rstrip(url.readline())
! url.readline() # Discard "---"
! news_tuple = (news_name, news_url)
! if not (news_name and news_url) or news_tuple == self.newslast[0]:
! break
! newslist.append(news_tuple)
! url.close()
! if newslist:
! self.newslast[0] = newslist[0]
! newslist.reverse()
! self.shownews(newslist)
! self.fetch_lock.release()
!
! def checknews(self):
! if self.newstargets and self.fetch_lock.acquire(0):
! thread.start_new_thread(self.fetchnews, ())
!
! def message(self, msg):
! if msg.forme:
! m = self.re1.match(msg.line)
! if m:
! if mm.hasperm(0, msg.server.servername, msg.target, msg.user, "appwatchnews"):
! target = m.group("target") or msg.target
! servername = m.group("server") or msg.server.servername
! tuple = (servername, target)
! if not m.group("dont"):
! try:
! self.newstargets.index(tuple)
! except ValueError:
! self.newstargets.append(tuple)
! msg.answer("%:", ["Sure", "I'll show", "Of course"], ["!", ", sir!"])
! else:
! msg.answer("%:", ["Oops!", "Sorry!", "Nope."], "I'm already showing news for this target", ["!", "."])
! else:
! self.newstargets_lock.acquire()
! try:
! self.newstargets.remove(tuple)
! except ValueError:
! msg.answer("%:", ["Oops!", "Sorry!", "Nope."], "I'm not showing news for this target", ["!", "."])
! else:
! msg.answer("%:", ["Sure", "I won't show", "Of course"], ["!", "."])
! self.newstargets_lock.release()
! else:
! msg.answer("%:", ["You can't", "You're not allowed to", "You're not good enough to"], ["do this", "You can't change freshmeat news settings"], ["!", "."])
! return 0
!
def __loadmodule__(bot):
! global appwatch
! appwatch = AppWatch(bot)
def __unloadmodule__(bot):
! global appwatch
! appwatch.unload()
! del appwatch
! # vim:ts=4:sw=4
--- 28,127 ----
class AppWatch:
! def __init__(self, bot):
! self.newslast = options.gethard("AppWatch.newslast", [None])
! self.newstargets = options.gethard("AppWatch.newstargets", [])
! self.newstargets_lock = thread.allocate_lock()
! self.fetch_lock = thread.allocate_lock()
! hooks.register("Message", self.message)
! mm.hooktimer(0, FETCHINTERVAL*60, self.checknews, ())
! # Match '[don[']t|do not] show appwatch news (to|on|at|for) [channel|user] <target> [[on|at] server <server>] [!|.]'
! self.re1 = re.compile(r"(?P<dont>don'?t\s+|do\s+not\s+)?show\s+appwatch\s+news(?:(?:to|on|at|for)(?:\s+channel|\s+user)?\s+(?P<target>\S+)(?:(?:\s+on|\s+at)?\s+server\s+(?P<server>\S+?))?)?\s*[!.]*", re.I)
!
! def unload(self):
! hooks.unregister("Message", self.message)
! mm.unhooktimer(0, FETCHINTERVAL*60, self.checknews, ())
!
! def shownews(self, newslist):
! first = 1
! newsmsg = ""
! for news in newslist:
! if not first:
! newsmsg = newsmsg+", "
! else:
! first = 0
! newsmsg = newsmsg+news[0]
! self.newstargets_lock.acquire()
! for target in self.newstargets:
! server = servers.get(target[0])
! if server:
! server.sendmsg(target[1], None, "AppWatch news:", newsmsg, notice=1)
! self.newstargets_lock.release()
!
! def fetchnews(self):
! urlopener = urllib.URLopener()
! urlopener.proxies.update(PROXY)
! try:
! url = urlopener.open(URL)
! except:
! pass
! else:
! newslist = []
! while 1:
! news_name = string.rstrip(url.readline())
! news_url = string.rstrip(url.readline())
! url.readline() # Discard "---"
! news_tuple = (news_name, news_url)
! if not (news_name and news_url) or news_tuple == self.newslast[0]:
! break
! newslist.append(news_tuple)
! url.close()
! if newslist:
! self.newslast[0] = newslist[0]
! newslist.reverse()
! self.shownews(newslist)
! self.fetch_lock.release()
!
! def checknews(self):
! if self.newstargets and self.fetch_lock.acquire(0):
! thread.start_new_thread(self.fetchnews, ())
!
! def message(self, msg):
! if msg.forme:
! m = self.re1.match(msg.line)
! if m:
! if mm.hasperm(0, msg.server.servername, msg.target, msg.user, "appwatchnews"):
! target = m.group("target") or msg.target
! servername = m.group("server") or msg.server.servername
! tuple = (servername, target)
! if not m.group("dont"):
! try:
! self.newstargets.index(tuple)
! except ValueError:
! self.newstargets.append(tuple)
! msg.answer("%:", ["Sure", "I'll show", "Of course"], ["!", ", sir!"])
! else:
! msg.answer("%:", ["Oops!", "Sorry!", "Nope."], "I'm already showing news for this target", ["!", "."])
! else:
! self.newstargets_lock.acquire()
! try:
! self.newstargets.remove(tuple)
! except ValueError:
! msg.answer("%:", ["Oops!", "Sorry!", "Nope."], "I'm not showing news for this target", ["!", "."])
! else:
! msg.answer("%:", ["Sure", "I won't show", "Of course"], ["!", "."])
! self.newstargets_lock.release()
! else:
! msg.answer("%:", ["You can't", "You're not allowed to", "You're not good enough to"], ["do this", "You can't change freshmeat news settings"], ["!", "."])
! return 0
!
def __loadmodule__(bot):
! global appwatch
! appwatch = AppWatch(bot)
def __unloadmodule__(bot):
! global appwatch
! appwatch.unload()
! del appwatch
! # vim:ts=4:sw=4:et
Index: ctcp.py
===================================================================
RCS file: /cvsroot/pybot/pybot/pybot/modules/ctcp.py,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** ctcp.py 2001/11/02 17:20:23 1.1.1.1
--- ctcp.py 2001/12/04 00:57:38 1.2
***************
*** 21,110 ****
class CTCP:
! def __init__(self, bot):
! hook.register("Message", self.message, 80)
! hook.register("Notice", self.notice, 80)
! mm.register("sendctcp", self.mm_sendctcp)
! mm.register("answerctcp", self.mm_answerctcp)
! mm.register("answermsgctcp", self.mm_answermsgctcp)
! mm.register("answernotctcp", self.mm_answernotctcp)
!
! def unload(self):
! hook.unregister("Message", self.message, 80)
! hook.unregister("Notice", self.notice, 80)
! mm.unregister("sendctcp")
! mm.unregister("answerctcp")
! mm.unregister("answermsgctcp")
! mm.unregister("answernotctcp")
!
! def message(self, msg):
! var = []
! if msg.msg[0] and msg.msg[0][0]=="\01":
! msg.ctcpcmd = msg.msg[0][1:]
! msg.msg[-1] = msg.msg[-1][:-1]
! del msg.msg[0]
! del msg.rawmsg[0]
! msg.rawmsg[-1] = msg.rawmsg[-1][:-1]
! hook.call("CTCP", msg)
! return -1
!
! def notice(self, msg):
! var = []
! if msg.msg and msg.msg[0][0]=="\01":
! msg.ctcpcmd = msg.msg[0][1:]
! msg.msg[-1] = msg.msg[-1][:-1]
! del msg.msg[0]
! hook.call("CTCPReply", msg)
! return -1
! def handlectcpout(self, server, line):
! msg = message()
! msg.setline(server, line)
! hook.call("OutCommand", msg)
! msg.ctcpcmd = msg.msg[0][1:]
! msg.msg[-1] = msg.msg[-1][:-1]
! del msg.msg[0]
! msg.rawmsg[-1] = msg.rawmsg[-1][:-1]
! del msg.rawmsg[0]
! msg.user = server.user
! if msg.cmd == "PRIVMSG":
! hook.call("OutCTCP", msg)
! else:
! hook.call("OutCTCPReply", msg)
! def mm_sendctcp(self, defret, server, cmd, ctcpcmd, target, nick, params, out=1):
! if type(params) == ListType:
! line = cmd+" "+target+" :\01"+ctcpcmd+" "+buildanswer(params, target, nick)+"\01"
! else:
! line = cmd+" "+target+" :\01"+ctcpcmd+" "+params+"\01"
! server.sendline(line)
! if out: self.handlectcpout(server,line)
! def mm_answerctcp(self, defret, msg, cmd, ctcpcmd, params, outhooks=1):
! if msg.direct:
! target = msg.user.nick
! else:
! target = msg.target
! if type(params) == ListType:
! line = cmd+" "+target+" :\01"+ctcpcmd+" "+buildanswer(params, target, msg.user.nick)+"\01"
! else:
! line = cmd+" "+target+" :\01"+ctcpcmd+" "+params+"\01"
! msg.server.sendline(line)
! if out: self.handlectcpout(msg.server,line)
!
! def mm_answermsgctcp(self, defret, msg, ctcpcmd, params, outhooks=1):
! self.mm_answerctcp(msg, "PRIVMSG", ctcpcmd, params, outhooks)
! def mm_answernotctcp(self, defret, msg, ctcpcmd, params, outhooks=1):
! self.mm_answerctcp(msg, "NOTICE", ctcpcmd, params, outhooks)
def __loadmodule__(bot):
! global ctcp
! ctcp = CTCP(bot)
def __unloadmodule__(bot):
! global ctcp
! ctcp.unload()
! del ctcp
! # vim:ts=4:sw=4
--- 21,110 ----
class CTCP:
! def __init__(self, bot):
! hook.register("Message", self.message, 80)
! hook.register("Notice", self.notice, 80)
! mm.register("sendctcp", self.mm_sendctcp)
! mm.register("answerctcp", self.mm_answerctcp)
! mm.register("answermsgctcp", self.mm_answermsgctcp)
! mm.register("answernotctcp", self.mm_answernotctcp)
!
! def unload(self):
! hook.unregister("Message", self.message, 80)
! hook.unregister("Notice", self.notice, 80)
! mm.unregister("sendctcp")
! mm.unregister("answerctcp")
! mm.unregister("answermsgctcp")
! mm.unregister("answernotctcp")
!
! def message(self, msg):
! var = []
! if msg.msg[0] and msg.msg[0][0]=="\01":
! msg.ctcpcmd = msg.msg[0][1:]
! msg.msg[-1] = msg.msg[-1][:-1]
! del msg.msg[0]
! del msg.rawmsg[0]
! msg.rawmsg[-1] = msg.rawmsg[-1][:-1]
! hook.call("CTCP", msg)
! return -1
!
! def notice(self, msg):
! var = []
! if msg.msg and msg.msg[0][0]=="\01":
! msg.ctcpcmd = msg.msg[0][1:]
! msg.msg[-1] = msg.msg[-1][:-1]
! del msg.msg[0]
! hook.call("CTCPReply", msg)
! return -1
! def handlectcpout(self, server, line):
! msg = message()
! msg.setline(server, line)
! hook.call("OutCommand", msg)
! msg.ctcpcmd = msg.msg[0][1:]
! msg.msg[-1] = msg.msg[-1][:-1]
! del msg.msg[0]
! msg.rawmsg[-1] = msg.rawmsg[-1][:-1]
! del msg.rawmsg[0]
! msg.user = server.user
! if msg.cmd == "PRIVMSG":
! hook.call("OutCTCP", msg)
! else:
! hook.call("OutCTCPReply", msg)
! def mm_sendctcp(self, defret, server, cmd, ctcpcmd, target, nick, params, out=1):
! if type(params) == ListType:
! line = cmd+" "+target+" :\01"+ctcpcmd+" "+buildanswer(params, target, nick)+"\01"
! else:
! line = cmd+" "+target+" :\01"+ctcpcmd+" "+params+"\01"
! server.sendline(line)
! if out: self.handlectcpout(server,line)
! def mm_answerctcp(self, defret, msg, cmd, ctcpcmd, params, outhooks=1):
! if msg.direct:
! target = msg.user.nick
! else:
! target = msg.target
! if type(params) == ListType:
! line = cmd+" "+target+" :\01"+ctcpcmd+" "+buildanswer(params, target, msg.user.nick)+"\01"
! else:
! line = cmd+" "+target+" :\01"+ctcpcmd+" "+params+"\01"
! msg.server.sendline(line)
! if out: self.handlectcpout(msg.server,line)
!
! def mm_answermsgctcp(self, defret, msg, ctcpcmd, params, outhooks=1):
! self.mm_answerctcp(msg, "PRIVMSG", ctcpcmd, params, outhooks)
! def mm_answernotctcp(self, defret, msg, ctcpcmd, params, outhooks=1):
! self.mm_answerctcp(msg, "NOTICE", ctcpcmd, params, outhooks)
def __loadmodule__(bot):
! global ctcp
! ctcp = CTCP(bot)
def __unloadmodule__(bot):
! global ctcp
! ctcp.unload()
! del ctcp
! # vim:ts=4:sw=4:et
Index: eval.py
===================================================================
RCS file: /cvsroot/pybot/pybot/pybot/modules/eval.py,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** eval.py 2001/11/02 17:20:23 1.1.1.1
--- eval.py 2001/12/04 00:57:38 1.2
***************
*** 22,86 ****
class Eval:
! def __init__(self, bot):
! hooks.register("Message", self.message)
! self.dict = {}
! self.dict["__builtins__"] = {}
! self.dict.update(math.__dict__)
! del self.dict["__doc__"]
! del self.dict["__file__"]
! del self.dict["__name__"]
! self.dict["map"] = map
! self.dict["zip"] = zip
! self.dict["len"] = len
! self.dict["min"] = min
! self.dict["max"] = max
! self.dict["chr"] = chr
! self.dict["ord"] = ord
! self.dict["abs"] = abs
! self.dict["hex"] = hex
! self.dict["int"] = int
! self.dict["oct"] = oct
! self.dict["list"] = list
! self.dict["long"] = long
! self.dict["float"] = float
! self.dict["round"] = round
! self.dict["tuple"] = tuple
! self.dict["reduce"] = reduce
! self.dict["filter"] = filter
! self.dict["coerce"] = coerce
! # Match 'eval <expr>[!|.]'
! self.re1 = re.compile(r"eval\s+(?P<expr>.*?)[!.]*$")
!
! def unload(self):
! hooks.unregister("Message", self.message)
!
! def message(self, msg):
! var = []
! if msg.forme:
! m = self.re1.match(msg.line)
! if m:
! if mm.hasperm(0, msg.server.servername, msg.target, msg.user, "eval"):
! try:
! answer = eval(m.group("expr"), self.dict)
! except:
! msg.answer("%:", ["Can't evaluate this", "There's something wrong with this expression"], [".", "!"])
! else:
! if len(answer) > 255:
! msg.answer("%:", "Sorry, your answer is too long...")
! else:
! msg.answer("%:", str(answer))
! else:
! msg.answer("%:", ["Sorry...", "Oops!", "Heh!"], "You don't have this power", [".", "!"])
! return 0
def __loadmodule__(bot):
! global _eval
! _eval = Eval(bot)
def __unloadmodule__(bot):
! global _eval
! _eval.unload()
! del _eval
! # vim:ts=4:sw=4:nowrap
--- 22,86 ----
class Eval:
! def __init__(self, bot):
! hooks.register("Message", self.message)
! self.dict = {}
! self.dict["__builtins__"] = {}
! self.dict.update(math.__dict__)
! del self.dict["__doc__"]
! del self.dict["__file__"]
! del self.dict["__name__"]
! self.dict["map"] = map
! self.dict["zip"] = zip
! self.dict["len"] = len
! self.dict["min"] = min
! self.dict["max"] = max
! self.dict["chr"] = chr
! self.dict["ord"] = ord
! self.dict["abs"] = abs
! self.dict["hex"] = hex
! self.dict["int"] = int
! self.dict["oct"] = oct
! self.dict["list"] = list
! self.dict["long"] = long
! self.dict["float"] = float
! self.dict["round"] = round
! self.dict["tuple"] = tuple
! self.dict["reduce"] = reduce
! self.dict["filter"] = filter
! self.dict["coerce"] = coerce
! # Match 'eval <expr>[!|.]'
! self.re1 = re.compile(r"eval\s+(?P<expr>.*?)[!.]*$")
!
! def unload(self):
! hooks.unregister("Message", self.message)
!
! def message(self, msg):
! var = []
! if msg.forme:
! m = self.re1.match(msg.line)
! if m:
! if mm.hasperm(0, msg.server.servername, msg.target, msg.user, "eval"):
! try:
! answer = eval(m.group("expr"), self.dict)
! except:
! msg.answer("%:", ["Can't evaluate this", "There's something wrong with this expression"], [".", "!"])
! else:
! if len(answer) > 255:
! msg.answer("%:", "Sorry, your answer is too long...")
! else:
! msg.answer("%:", str(answer))
! else:
! msg.answer("%:", ["Sorry...", "Oops!", "Heh!"], "You don't have this power", [".", "!"])
! return 0
def __loadmodule__(bot):
! global _eval
! _eval = Eval(bot)
def __unloadmodule__(bot):
! global _eval
! _eval.unload()
! del _eval
! # vim:ts=4:sw=4:et
Index: forward.py
===================================================================
RCS file: /cvsroot/pybot/pybot/pybot/modules/forward.py,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** forward.py 2001/11/02 17:20:23 1.1.1.1
--- forward.py 2001/12/04 00:57:38 1.2
***************
*** 22,159 ****
class Forward:
! def __init__(self, bot):
! self.data = options.gethard("Forward.data", [])
! hooks.register("Message", self.message_forward, 90)
! hooks.register("OutMessage", self.message_forward, 90)
! hooks.register("Notice", self.notice_forward, 90)
! hooks.register("OutNotice", self.notice_forward, 90)
! hooks.register("CTCP", self.ctcp_forward, 90)
! hooks.register("OutCTCP", self.ctcp_forward, 90)
! hooks.register("UserJoined", self.joined_forward, 90)
! hooks.register("UserParted", self.parted_forward, 90)
! hooks.register("Message", self.message)
! # Match 'forward messages [[(from|on|at) server <fromserver1>] | for you | [(from|on|at) [user|channel] <fromtarget>] [(from|on|at) server <fromserver2>]] to [user|channel] <totarget> [(on|at) server <toserver>] [with (server|channel [and server]|<withstring>)] [!|.]'
! self.re1 = re.compile(r"(?P<dont>do\s+not\s+|don't\s+)?forward\s+messages\s+(?:(?:(?:from\s+|on\s+|at\s+)server\s+(?P<fromserver1>\S+)\s+)|(?:(?P<foryou>for\s+you\s+)?(?:(?:from\s+|on\s+|at\s+)(?:channel\s+|user\s+)?(?P<fromtarget>\S+)\s+)?(?:(?:from\s+|on\s+|at\s+)(?:server\s+)?(?P<fromserver2>\S+)\s+)?))?to\s+(?:user\s+|channel\s+)?(?P<totarget>\S+)(?:\s+(?:on\s+|at\s+)server\s+(?P<toserver>\S+))?(?:\s+with(?:(?P<withserver1>\s+server)|(?P<withchannel>\s+channel)(?:\s+and\s+(?P<withserver2>server))?|(?P<withstring>\S+)))?\s*[!.]*$", re.I)
! # Match 'what['re| are] you forwarding [?]'
! self.re2 = re.compile(r"what(?:'re|\s+are)\s+you\s+forwarding\s*\?*$", re.I)
!
! def unload(self):
! hooks.unregister("Message", self.message_forward, 90)
! hooks.unregister("OutMessage", self.message_forward, 90)
! hooks.unregister("Notice", self.notice_forward, 90)
! hooks.unregister("OutNotice", self.notice_forward, 90)
! hooks.unregister("CTCP", self.ctcp_forward, 90)
! hooks.unregister("OutCTCP", self.ctcp_forward, 90)
! hooks.unregister("UserJoined", self.joined_forward, 90)
! hooks.unregister("UserParted", self.parted_forward, 90)
! hooks.unregister("Message", self.message)
!
! def do_forward(self, server, target, nick, forme, before, after):
! for tuple in self.data:
! if (tuple[0]==None or tuple[0]==server.servername) and \
! (tuple[1]==None or tuple[1]==target) and \
! (not tuple[2] or forme):
! fwdserver = servers.get(tuple[3])
! if fwdserver:
! s = nick
! if tuple[6]:
! s = s+"@"+tuple[6]
! else:
! with = tuple[5]
! if with&1:
! s = s+"@"+target
! if with&2:
! s = s+","+server.servername
! elif with&2:
! s = s+"@"+server.servername
! fwdserver.sendmsg(tuple[4], None, before+s+after, outhooks=0)
!
! def message_forward(self, msg):
! self.do_forward(msg.server, msg.target, msg.user.nick, msg.forme, "<", "> "+msg.rawline)
!
! def notice_forward(self, msg):
! self.do_forward(msg.server, msg.target, msg.user.nick, msg.forme, "-", "- "+msg.rawline)
!
! def ctcp_forward(self, msg):
! if msg.ctcp == "ACTION":
! self.do_forward(msg.server, msg.target, msg.user.nick, msg.forme, "* ", " "+msg.rawline)
!
! def joined_forward(self, server, target, user):
! self.do_forward(server, target, user.nick, 0, "--> ", " has joined")
! def parted_forward(self, server, target, user, reason):
! if reason:
! self.do_forward(server, target, user.nick, 0, "--> ", " has leaved: "+reason)
! else:
! self.do_forward(server, target, user.nick, 0, "--> ", " has leaved")
!
! def message(self, msg):
! var = []
! if msg.forme:
! m = self.re1.match(msg.line)
! if m:
! if mm.hasperm(0, msg.server.servername, msg.target, msg.user, "forward"):
! foryou = m.group("foryou") != None
! fromtarget = m.group("fromtarget")
! fromserver = m.group("fromserver1") or m.group("fromserver2")
! totarget = m.group("totarget")
! toserver = m.group("toserver") or msg.server.servername
! with = 0
! if m.group("withchannel"):
! with = with|1
! if m.group("withserver1") or m.group("withserver2"):
! with = with|2
! withstring = m.group("withstring")
! if m.group("dont"):
! try:
! self.data.remove((fromserver, fromtarget, foryou, toserver, totarget, with, withstring))
! msg.answer("%:", ["Sure", "I'll not forward", "Of course", "No problems"], ["!", "."])
! except ValueError:
! msg.answer("%:", ["Sorry, but", "Oops! I think", None], "I'm not forwarding any messages like this", [".", "!"])
! else:
! self.data.append((fromserver, fromtarget, foryou, toserver, totarget, with, withstring))
! msg.answer("%:", ["Sure", "I'll forward", "Right now", "Of course"], ["!", "."])
! return 0
!
! m = self.re2.match(msg.line)
! if m:
! if mm.hasperm(0, msg.server.servername, msg.target, msg.user, "listforward"):
! if self.data:
! for tuple in self.data:
! str = "I'm forwarding messages"
! if tuple[2]:
! str = str+" for me"
! if tuple[0] and tuple[1] and tuple[1] != msg.server.servername:
! str = str+" from "+tuple[1]+" at "+tuple[0]
! elif tuple[1]:
! str = str+" from "+tuple[1]
! elif tuple[0]:
! str = str+" from server "+tuple[0]
! str = str+" to "+tuple[4]
! if tuple[3] and tuple[3] != msg.server.servername:
! str = str+" at "+tuple[3]
! if tuple[5]==3:
! str = str+" with channel and server"
! elif tuple[5]&1:
! str = str+" with channel"
! elif tuple[5]&2:
! str = str+" with server"
! elif tuple[6]:
! str = str+" with "+tuple[6]
! msg.answer("%:", str, [".", "!"])
! else:
! msg.answer("%:", ["Sir,", None], "I'm not forwarding anything", ["!", "."])
! return 0
!
def __loadmodule__(bot):
! global forward
! forward = Forward(bot)
def __unloadmodule__(bot):
! global forward
! forward.unload()
! del forward
! # vim:ts=4:sw=4
--- 22,159 ----
class Forward:
! def __init__(self, bot):
! self.data = options.gethard("Forward.data", [])
! hooks.register("Message", self.message_forward, 90)
! hooks.register("OutMessage", self.message_forward, 90)
! hooks.register("Notice", self.notice_forward, 90)
! hooks.register("OutNotice", self.notice_forward, 90)
! hooks.register("CTCP", self.ctcp_forward, 90)
! hooks.register("OutCTCP", self.ctcp_forward, 90)
! hooks.register("UserJoined", self.joined_forward, 90)
! hooks.register("UserParted", self.parted_forward, 90)
! hooks.register("Message", self.message)
! # Match 'forward messages [[(from|on|at) server <fromserver1>] | for you | [(from|on|at) [user|channel] <fromtarget>] [(from|on|at) server <fromserver2>]] to [user|channel] <totarget> [(on|at) server <toserver>] [with (server|channel [and server]|<withstring>)] [!|.]'
! self.re1 = re.compile(r"(?P<dont>do\s+not\s+|don't\s+)?forward\s+messages\s+(?:(?:(?:from\s+|on\s+|at\s+)server\s+(?P<fromserver1>\S+)\s+)|(?:(?P<foryou>for\s+you\s+)?(?:(?:from\s+|on\s+|at\s+)(?:channel\s+|user\s+)?(?P<fromtarget>\S+)\s+)?(?:(?:from\s+|on\s+|at\s+)(?:server\s+)?(?P<fromserver2>\S+)\s+)?))?to\s+(?:user\s+|channel\s+)?(?P<totarget>\S+)(?:\s+(?:on\s+|at\s+)server\s+(?P<toserver>\S+))?(?:\s+with(?:(?P<withserver1>\s+server)|(?P<withchannel>\s+channel)(?:\s+and\s+(?P<withserver2>server))?|(?P<withstring>\S+)))?\s*[!.]*$", re.I)
! # Match 'what['re| are] you forwarding [?]'
! self.re2 = re.compile(r"what(?:'re|\s+are)\s+you\s+forwarding\s*\?*$", re.I)
!
! def unload(self):
! hooks.unregister("Message", self.message_forward, 90)
! hooks.unregister("OutMessage", self.message_forward, 90)
! hooks.unregister("Notice", self.notice_forward, 90)
! hooks.unregister("OutNotice", self.notice_forward, 90)
! hooks.unregister("CTCP", self.ctcp_forward, 90)
! hooks.unregister("OutCTCP", self.ctcp_forward, 90)
! hooks.unregister("UserJoined", self.joined_forward, 90)
! hooks.unregister("UserParted", self.parted_forward, 90)
! hooks.unregister("Message", self.message)
!
! def do_forward(self, server, target, nick, forme, before, after):
! for tuple in self.data:
! if (tuple[0]==None or tuple[0]==server.servername) and \
! (tuple[1]==None or tuple[1]==target) and \
! (not tuple[2] or forme):
! fwdserver = servers.get(tuple[3])
! if fwdserver:
! s = nick
! if tuple[6]:
! s = s+"@"+tuple[6]
! else:
! with = tuple[5]
! if with&1:
! s = s+"@"+target
! if with&2:
! s = s+","+server.servername
! elif with&2:
! s = s+"@"+server.servername
! fwdserver.sendmsg(tuple[4], None, before+s+after, outhooks=0)
!
! def message_forward(self, msg):
! self.do_forward(msg.server, msg.target, msg.user.nick, msg.forme, "<", "> "+msg.rawline)
!
! def notice_forward(self, msg):
! self.do_forward(msg.server, msg.target, msg.user.nick, msg.forme, "-", "- "+msg.rawline)
!
! def ctcp_forward(self, msg):
! if msg.ctcp == "ACTION":
! self.do_forward(msg.server, msg.target, msg.user.nick, msg.forme, "* ", " "+msg.rawline)
!
! def joined_forward(self, server, target, user):
! self.do_forward(server, target, user.nick, 0, "--> ", " has joined")
! def parted_forward(self, server, target, user, reason):
! if reason:
! self.do_forward(server, target, user.nick, 0, "--> ", " has leaved: "+reason)
! else:
! self.do_forward(server, target, user.nick, 0, "--> ", " has leaved")
!
! def message(self, msg):
! var = []
! if msg.forme:
! m = self.re1.match(msg.line)
! if m:
! if mm.hasperm(0, msg.server.servername, msg.target, msg.user, "forward"):
! foryou = m.group("foryou") != None
! fromtarget = m.group("fromtarget")
! fromserver = m.group("fromserver1") or m.group("fromserver2")
! totarget = m.group("totarget")
! toserver = m.group("toserver") or msg.server.servername
! with = 0
! if m.group("withchannel"):
! with = with|1
! if m.group("withserver1") or m.group("withserver2"):
! with = with|2
! withstring = m.group("withstring")
! if m.group("dont"):
! try:
! self.data.remove((fromserver, fromtarget, foryou, toserver, totarget, with, withstring))
! msg.answer("%:", ["Sure", "I'll not forward", "Of course", "No problems"], ["!", "."])
! except ValueError:
! msg.answer("%:", ["Sorry, but", "Oops! I think", None], "I'm not forwarding any messages like this", [".", "!"])
! else:
! self.data.append((fromserver, fromtarget, foryou, toserver, totarget, with, withstring))
! msg.answer("%:", ["Sure", "I'll forward", "Right now", "Of course"], ["!", "."])
! return 0
!
! m = self.re2.match(msg.line)
! if m:
! if mm.hasperm(0, msg.server.servername, msg.target, msg.user, "listforward"):
! if self.data:
! for tuple in self.data:
! str = "I'm forwarding messages"
! if tuple[2]:
! str = str+" for me"
! if tuple[0] and tuple[1] and tuple[1] != msg.server.servername:
! str = str+" from "+tuple[1]+" at "+tuple[0]
! elif tuple[1]:
! str = str+" from "+tuple[1]
! elif tuple[0]:
! str = str+" from server "+tuple[0]
! str = str+" to "+tuple[4]
! if tuple[3] and tuple[3] != msg.server.servername:
! str = str+" at "+tuple[3]
! if tuple[5]==3:
! str = str+" with channel and server"
! elif tuple[5]&1:
! str = str+" with channel"
! elif tuple[5]&2:
! str = str+" with server"
! elif tuple[6]:
! str = str+" with "+tuple[6]
! msg.answer("%:", str, [".", "!"])
! else:
! msg.answer("%:", ["Sir,", None], "I'm not forwarding anything", ["!", "."])
! return 0
!
def __loadmodule__(bot):
! global forward
! forward = Forward(bot)
def __unloadmodule__(bot):
! global forward
! forward.unload()
! del forward
! # vim:ts=4:sw=4:et
Index: freshmeat.py
===================================================================
RCS file: /cvsroot/pybot/pybot/pybot/modules/freshmeat.py,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** freshmeat.py 2001/11/02 17:20:22 1.1.1.1
--- freshmeat.py 2001/12/04 00:57:38 1.2
***************
*** 28,131 ****
class Freshmeat:
! def __init__(self, bot):
! self.newslast = options.gethard("Freshmeat.newslast", [None])
! self.newstargets = options.gethard("Freshmeat.newstargets", [])
! self.newstargets_lock = thread.allocate_lock()
! self.fetch_lock = thread.allocate_lock()
! hooks.register("Message", self.message)
! mm.hooktimer(0, FETCHINTERVAL*60, self.checknews, ())
!
! # Match '[don[']t|do not] show freshmeat news (to|on|at|for) [channel|user] <target> [[on|at] server <server>] [!|.]'
! self.re1 = re.compile(r"(?P<dont>don'?t\s+|do\s+not\s+)?show\s+freshmeat\s+news(?:(?:to|on|at|for)(?:\s+channel|\s+user)?\s+(?P<target>\S+)(?:(?:\s+on|\s+at)?\s+server\s+(?P<server>\S+?))?)?\s*[!.]*$", re.I)
!
! def unload(self):
! hooks.unregister("Message", self.message)
! mm.unhooktimer(0, FETCHINTERVAL*60, self.checknews, ())
!
! def shownews(self, newslist):
! first = 1
! newsmsg = ""
! for news in newslist:
! if not first:
! newsmsg = newsmsg+", "
! else:
! first = 0
! newsmsg = newsmsg+news[0]
! self.newstargets_lock.acquire()
! for target in self.newstargets:
! server = servers.get(target[0])
! if server:
! server.sendmsg(target[1], None, "Freshmeat news:", newsmsg, notice=1)
! self.newstargets_lock.release()
!
! def fetchnews(self):
! urlopener = urllib.URLopener()
! urlopener.proxies.update(PROXY)
! try:
! url = urlopener.open(URL)
! except:
! pass
! else:
! newslist = []
! while 1:
! news_name = string.rstrip(url.readline())
! news_time = string.rstrip(url.readline())
! news_url = string.rstrip(url.readline())
! defstr = ' (Default)'
! defstrlen = len(defstr)
! if news_name[-defstrlen:] == defstr:
! news_name = news_name[:-defstrlen]
! news_tuple = (news_name, news_time, news_url)
! if not (news_name and news_time and news_url) or news_tuple == self.newslast[0]:
! break
! newslist.append(news_tuple)
! url.close()
! if newslist:
! self.newslast[0] = newslist[0]
! newslist.reverse()
! self.shownews(newslist)
! self.fetch_lock.release()
!
! def checknews(self):
! if self.newstargets and self.fetch_lock.acquire(0):
! thread.start_new_thread(self.fetchnews, ())
!
! def message(self, msg):
! if msg.forme:
! m = self.re1.match(msg.line)
! if m:
! if mm.hasperm(0, msg.server.servername, msg.target, msg.user, "freshmeatnews"):
! target = m.group("target") or msg.target
! servername = m.group("server") or msg.server.servername
! tuple = (servername, target)
! if not m.group("dont"):
! try:
! self.newstargets.index(tuple)
! except ValueError:
! self.newstargets.append(tuple)
! msg.answer("%:", ["Sure", "I'll show", "Of course"], ["!", ", sir!"])
! else:
! msg.answer("%:", ["Oops!", "Sorry!", "Nope."], "I'm already showing news for this target", ["!", "."])
! else:
! self.newstargets_lock.acquire()
! try:
! self.newstargets.remove(tuple)
! except ValueError:
! msg.answer("%:", ["Oops!", "Sorry!", "Nope."], "I'm not showing news for this target", ["!", "."])
! else:
! msg.answer("%:", ["Sure", "I won't show", "Of course"], ["!", "."])
! self.newstargets_lock.release()
! else:
! msg.answer("%:", ["You can't", "You're not allowed to", "You're not good enough to"], ["do this", "You can't change freshmeat news settings"], ["!", "."])
! return 0
!
def __loadmodule__(bot):
! global freshmeat
! freshmeat = Freshmeat(bot)
def __unloadmodule__(bot):
! global freshmeat
! freshmeat.unload()
! del freshmeat
! # vim:ts=4:sw=4
--- 28,131 ----
class Freshmeat:
! def __init__(self, bot):
! self.newslast = options.gethard("Freshmeat.newslast", [None])
! self.newstargets = options.gethard("Freshmeat.newstargets", [])
! self.newstargets_lock = thread.allocate_lock()
! self.fetch_lock = thread.allocate_lock()
! hooks.register("Message", self.message)
! mm.hooktimer(0, FETCHINTERVAL*60, self.checknews, ())
!
! # Match '[don[']t|do not] show freshmeat news (to|on|at|for) [channel|user] <target> [[on|at] server <server>] [!|.]'
! self.re1 = re.compile(r"(?P<dont>don'?t\s+|do\s+not\s+)?show\s+freshmeat\s+news(?:(?:to|on|at|for)(?:\s+channel|\s+user)?\s+(?P<target>\S+)(?:(?:\s+on|\s+at)?\s+server\s+(?P<server>\S+?))?)?\s*[!.]*$", re.I)
!
! def unload(self):
! hooks.unregister("Message", self.message)
! mm.unhooktimer(0, FETCHINTERVAL*60, self.checknews, ())
!
! def shownews(self, newslist):
! first = 1
! newsmsg = ""
! for news in newslist:
! if not first:
! newsmsg = newsmsg+", "
! else:
! first = 0
! newsmsg = newsmsg+news[0]
! self.newstargets_lock.acquire()
! for target in self.newstargets:
! server = servers.get(target[0])
! if server:
! server.sendmsg(target[1], None, "Freshmeat news:", newsmsg, notice=1)
! self.newstargets_lock.release()
!
! def fetchnews(self):
! urlopener = urllib.URLopener()
! urlopener.proxies.update(PROXY)
! try:
! url = urlopener.open(URL)
! except:
! pass
! else:
! newslist = []
! while 1:
! news_name = string.rstrip(url.readline())
! news_time = string.rstrip(url.readline())
! news_url = string.rstrip(url.readline())
! defstr = ' (Default)'
! defstrlen = len(defstr)
! if news_name[-defstrlen:] == defstr:
! news_name = news_name[:-defstrlen]
! news_tuple = (news_name, news_time, news_url)
! if not (news_name and news_time and news_url) or news_tuple == self.newslast[0]:
! break
! newslist.append(news_tuple)
! url.close()
! if newslist:
! self.newslast[0] = newslist[0]
! newslist.reverse()
! self.shownews(newslist)
! self.fetch_lock.release()
!
! def checknews(self):
! if self.newstargets and self.fetch_lock.acquire(0):
! thread.start_new_thread(self.fetchnews, ())
!
! def message(self, msg):
! if msg.forme:
! m = self.re1.match(msg.line)
! if m:
! if mm.hasperm(0, msg.server.servername, msg.target, msg.user, "freshmeatnews"):
! target = m.group("target") or msg.target
! servername = m.group("server") or msg.server.servername
! tuple = (servername, target)
! if not m.group("dont"):
! try:
! self.newstargets.index(tuple)
! except ValueError:
! self.newstargets.append(tuple)
! msg.answer("%:", ["Sure", "I'll show", "Of course"], ["!", ", sir!"])
! else:
! msg.answer("%:", ["Oops!", "Sorry!", "Nope."], "I'm already showing news for this target", ["!", "."])
! else:
! self.newstargets_lock.acquire()
! try:
! self.newstargets.remove(tuple)
! except ValueError:
! msg.answer("%:", ["Oops!", "Sorry!", "Nope."], "I'm not showing news for this target", ["!", "."])
! else:
! msg.answer("%:", ["Sure", "I won't show", "Of course"], ["!", "."])
! self.newstargets_lock.release()
! else:
! msg.answer("%:", ["You can't", "You're not allowed to", "You're not good enough to"], ["do this", "You can't change freshmeat news settings"], ["!", "."])
! return 0
!
def __loadmodule__(bot):
! global freshmeat
! freshmeat = Freshmeat(bot)
def __unloadmodule__(bot):
! global freshmeat
! freshmeat.unload()
! del freshmeat
! # vim:ts=4:sw=4:et
Index: help.py
===================================================================
RCS file: /cvsroot/pybot/pybot/pybot/modules/help.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** help.py 2001/11/14 15:28:41 1.2
--- help.py 2001/12/04 00:57:38 1.3
***************
*** 27,74 ****
class Help:
! def __init__(self, bot):
! self.data = options.getsoft("Help.data", [])
! mm.register("register_help", self.mm_register_help)
! mm.register("unregister_help", self.mm_unregister_help)
! hooks.register("Message", self.message)
!
! # [show] help [about] <keyword>
! self.re1 = re.compile(r"(?:show\s+)?help(?:\s+about)?(?:\s+(?P<something>.+?))?\s*[.!]*$", re.I)
!
! def unload(self):
! hooks.unregister("Message", self.message)
! mm.unregister("register_help")
! mm.unregister("unregister_help")
!
! def message(self, msg):
! if msg.forme:
! m = self.re1.match(msg.line)
! if m:
! if mm.hasperm(0, msg.server.servername, msg.target, msg.user, "help"):
! something = m.group("something")
! if something:
! found = 0
! for pattern, text in self.data:
! if pattern.match(something):
! found = 1
! for line in text:
! msg.answer("%:", *line)
! else:
! found = 1
! for line in HELP:
! msg.answer("%:", *line)
! if not found:
! msg.answer("%:", ["No", "Sorry, no", "Sorry, but there's no"], "help about that", [".", "!"])
! else:
! msg.answer("%:", ["Sorry, you", "You"], ["can't", "are not allowed to"], "ask for help", [".", "!"])
! return 0
!
! def mm_register_help(self, defret, pattern, text):
! self.data.append((re.compile(pattern, re.I), text))
! def mm_unregister_help(self, defret, text):
! for i in range(len(self.data)-1,-1,-1):
! if self.data[i][1] == text:
! del self.data[i]
--- 27,74 ----
class Help:
! def __init__(self, bot):
! self.data = options.getsoft("Help.data", [])
! mm.register("register_help", self.mm_register_help)
! mm.register("unregister_help", self.mm_unregister_help)
! hooks.register("Message", self.message)
!
! # [show] help [about] <keyword>
! self.re1 = re.compile(r"(?:show\s+)?help(?:\s+about)?(?:\s+(?P<something>.+?))?\s*[.!]*$", re.I)
!
! def unload(self):
! hooks.unregister("Message", self.message)
! mm.unregister("register_help")
! mm.unregister("unregister_help")
!
! def message(self, msg):
! if msg.forme:
! m = self.re1.match(msg.line)
! if m:
! if mm.hasperm(0, msg.server.servername, msg.target, msg.user, "help"):
! something = m.group("something")
! if something:
! found = 0
! for pattern, text in self.data:
! if pattern.match(something):
! found = 1
! for line in text:
! msg.answer("%:", *line)
! else:
! found = 1
! for line in HELP:
! msg.answer("%:", *line)
! if not found:
! msg.answer("%:", ["No", "Sorry, no", "Sorry, but there's no"], "help about that", [".", "!"])
! else:
! msg.answer("%:", ["Sorry, you", "You"], ["can't", "are not allowed to"], "ask for help", [".", "!"])
! return 0
!
! def mm_register_help(self, defret, pattern, text):
! self.data.append((re.compile(pattern, re.I), text))
! def mm_unregister_help(self, defret, text):
! for i in range(len(self.data)-1,-1,-1):
! if self.data[i][1] == text:
! del self.data[i]
***************
*** 79,89 ****
def __loadmodule__(bot):
! global help
! help = Help(bot)
def __unloadmodule__(bot):
! global help
! help.unload()
! del help
! # vim:ts=4:sw=4:nowrap
--- 79,89 ----
def __loadmodule__(bot):
! global help
! help = Help(bot)
def __unloadmodule__(bot):
! global help
! help.unload()
! del help
! # vim:ts=4:sw=4:et
Index: ignore.py
===================================================================
RCS file: /cvsroot/pybot/pybot/pybot/modules/ignore.py,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** ignore.py 2001/11/02 17:20:24 1.1.1.1
--- ignore.py 2001/12/04 00:57:38 1.2
***************
*** 21,111 ****
class Ignore:
! def __init__(self, bot):
! self.ignoredata = options.gethard("Ignore.ignore", [])
! hooks.register("Message", self.message_ignore, 100)
! hooks.register("Message", self.message)
!
! def unload(self):
! hooks.unregister("Message", self.message_ignore, 100)
! hooks.unregister("Message", self.message)
! def message_ignore(self, msg):
! if self.isignored(msg.server.servername, msg.target, msg.user) and \
! not mm.hasperm(0, msg.server.servername, msg.target, msg.user, None):
! return -1
! def message(self, msg):
! var = []
! if msg.match(var, 5, "%", "ignore", [("user", 0, "~"), None], [(["on", "at", None], [(1, "~this", "channel"), ("channel", 2, "^[#&+!][^,^G]+$")]), None], [(["on", "at", None], [(3, "~this", "server"), ("server", 4, "~")]), None], ["!", ".", None]):
! if mm.hasperm(0, msg.server.servername, msg.target, msg.user, "ignore"):
! if var[0] or var[1] or var[2] or var[3] or var[4]:
! if var[1]:
! channel = msg.target
! server = msg.server.servername
! else:
! channel = var[2]
! if var[3]:
! server = msg.server.servername
! else:
! server = var[4]
! if var[0]:
! user = User()
! user.setstring(var[0])
! else:
! user = None
! self.ignore(server,channel,user)
! msg.answer("%:", ["Done!", "Ignored!", "No problems, sir!", "Ok, sir!"])
! else:
! msg.answer("%:", ["Sorry, you", "Sir, you", "You"], ["can't ignore.", "don't have this power."])
! return 0
! if msg.match(var, 5, "%", "don't", "ignore", [("user", 0, "~"), None], [(["on", "at", None], [(1, "~this", "channel"), ("channel", 2, "^[#&+!][^,^G]+$")]), None], [(["on", "at", None], [(3, "~this", "server"), ("server", 4, "~")]), None], ["!", ".", None]):
! if mm.hasperm(0, msg.server.servername, msg.target, msg.user, "ignore"):
! if var[0] or var[1] or var[2] or var[3] or var[4]:
! if var[1]:
! channel = msg.target
! server = msg.server.servername
! else:
! channel = var[2]
! if var[3]:
! server = msg.server.servername
! else:
! server = var[4]
! if var[0]:
! user = User()
! user.setstring(var[0])
! else:
! user = None
! self.dontignore(server,channel,user)
! msg.answer("%:", ["Done, sir!", "No problems!", "Ok!", "Right now!", "Right now, sir!"])
! else:
! msg.answer("%:", ["Sorry, you", "Sir, you", "You"], "don't have this power.")
! return 0
! def ignore(self, server, channel, user):
! self.ignoredata.append((server,channel,user))
!
! def dontignore(self, server, channel, user):
! for tup in self.ignoredata:
! if (tup[0] == None or tup[0] == server) and \
! (tup[1] == None or tup[1] == channel) and \
! (tup[2] == None or user.match(tup[2].nick, tup[2].username, tup[2].host)):
! self.ignoredata.remove(tup)
! return 1
!
! def isignored(self, server, channel, user):
! for tup in self.ignoredata:
! if (tup[0] == None or tup[0] == server) and \
! (tup[1] == None or tup[1] == channel) and \
! (tup[2] == None or user.match(tup[2].nick, tup[2].username, tup[2].host)):
! return 1
def __loadmodule__(bot):
! global ignore
! ignore = Ignore(bot)
def __unloadmodule__(bot):
! global ignore
! ignore.unload()
! del ignore
! # vim:ts=4:sw=4
--- 21,111 ----
class Ignore:
! def __init__(self, bot):
! self.ignoredata = options.gethard("Ignore.ignore", [])
! hooks.register("Message", self.message_ignore, 100)
! hooks.register("Message", self.message)
!
! def unload(self):
! hooks.unregister("Message", self.message_ignore, 100)
! hooks.unregister("Message", self.message)
! def message_ignore(self, msg):
! if self.isignored(msg.server.servername, msg.target, msg.user) and \
! not mm.hasperm(0, msg.server.servername, msg.target, msg.user, None):
! return -1
! def message(self, msg):
! var = []
! if msg.match(var, 5, "%", "ignore", [("user", 0, "~"), None], [(["on", "at", None], [(1, "~this", "channel"), ("channel", 2, "^[#&+!][^,^G]+$")]), None], [(["on", "at", None], [(3, "~this", "server"), ("server", 4, "~")]), None], ["!", ".", None]):
! if mm.hasperm(0, msg.server.servername, msg.target, msg.user, "ignore"):
! if var[0] or var[1] or var[2] or var[3] or var[4]:
! if var[1]:
! channel = msg.target
! server = msg.server.servername
! else:
! channel = var[2]
! if var[3]:
! server = msg.server.servername
! else:
! server = var[4]
! if var[0]:
! user = User()
! user.setstring(var[0])
! else:
! user = None
! self.ignore(server,channel,user)
! msg.answer("%:", ["Done!", "Ignored!", "No problems, sir!", "Ok, sir!"])
! else:
! msg.answer("%:", ["Sorry, you", "Sir, you", "You"], ["can't ignore.", "don't have this power."])
! return 0
! if msg.match(var, 5, "%", "don't", "ignore", [("user", 0, "~"), None], [(["on", "at", None], [(1, "~this", "channel"), ("channel", 2, "^[#&+!][^,^G]+$")]), None], [(["on", "at", None], [(3, "~this", "server"), ("server", 4, "~")]), None], ["!", ".", None]):
! if mm.hasperm(0, msg.server.servername, msg.target, msg.user, "ignore"):
! if var[0] or var[1] or var[2] or var[3] or var[4]:
! if var[1]:
! channel = msg.target
! server = msg.server.servername
! else:
! channel = var[2]
! if var[3]:
! server = msg.server.servername
! else:
! server = var[4]
! if var[0]:
! user = User()
! user.setstring(var[0])
! else:
! user = None
! self.dontignore(server,channel,user)
! msg.answer("%:", ["Done, sir!", "No problems!", "Ok!", "Right now!", "Right now, sir!"])
! else:
! msg.answer("%:", ["Sorry, you", "Sir, you", "You"], "don't have this power.")
! return 0
! def ignore(self, server, channel, user):
! self.ignoredata.append((server,channel,user))
!
! def dontignore(self, server, channel, user):
! for tup in self.ignoredata:
! if (tup[0] == None or tup[0] == server) and \
! (tup[1] == None or tup[1] == channel) and \
! (tup[2] == None or user.match(tup[2].nick, tup[2].username, tup[2].host)):
! self.ignoredata.remove(tup)
! return 1
!
! def isignored(self, server, channel, user):
! for tup in self.ignoredata:
! if (tup[0] == None or tup[0] == server) and \
! (tup[1] == None or tup[1] == channel) and \
! (tup[2] == None or user.match(tup[2].nick, tup[2].username, tup[2].host)):
! return 1
def __loadmodule__(bot):
! global ignore
! ignore = Ignore(bot)
def __unloadmodule__(bot):
! global ignore
! ignore.unload()
! del ignore
! # vim:ts=4:sw=4:et
Index: infopack.py
===================================================================
RCS file: /cvsroot/pybot/pybot/pybot/modules/infopack.py,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -d -r1.1.1.1 -r1.2
*** infopack.py 2001/11/02 17:20:24 1.1.1.1
--- infopack.py 2001/12/04 00:57:38 1.2
***************
*** 23,254 ****
class Info:
! def __init__(self, phrase="", action=0, notice=0, tonick=0):
! self.phrase = phrase
! self.action = action
! self.notice = notice
! self.tonick = tonick
class Infopack:
! def __init__(self, filename):
! self.__filename = filename
! self.__info = {}
! self.__triggers = []
! self.__masks = []
! self.__defaults = []
!
! def load(self):
! self.__info = {}
! self.__triggers = []
! self.__masks = []
! values = []
! file = open(self.__filename)
! for line in file.xreadlines():
! if line and line[0] != "#":
! if line[0] == "K":
! if values != []:
! values = []
! self.__info[line[2:].rstrip()] = values
! elif line[0] == "V":
! value = line[2:].split(":", 1)
! value[1] = value[1].rstrip()
! values.append(value)
! elif line[0] == "T":
! pattern = re.compile(line[2:].rstrip())
! self.__triggers.append(pattern)
! elif line[0] == "M":
! self.__masks.append(line[2:].rstrip())
! elif line[0] == "D":
! value = line[2:].split(":", 1)
! value[1] = value[1].rstrip()
! self.__defaults.append(value)
! file.close()
!
! def loadcore(self):
! self.__info = {}
! self.__triggers = []
! self.__masks = []
! values = []
! file = open(self.__filename)
! for line in file.xreadlines():
! if line and line[0] != "#":
! if line[0] == "T":
! pattern = re.compile(line[2:].rstrip())
! self.__triggers.append(pattern)
! elif line[0] == "M":
! self.__masks.append(line[2:].rstrip())
! elif line[0] == "D":
! value = line[2:].split(":", 1)
! value[1] = value[1].rstrip()
! self.__defaults.append(value)
! else:
! break
! file.close()
!
! def unload(self):
! self.__info = {}
! self.__triggers = []
! self.__phrases = []
!
! def reload(self):
! hasinfo = self.__info != {}
! self.unload()
! if hasinfo:
! self.load()
! else:
! self.loadcore()
!
! def getinfo(self, findkey):
! values = []
! found = 0
! file = open(self.__filename)
! for line in file.xreadlines():
! if line and line[0] != "#":
! if not found:
! if line[0] == "K":
! key = line[2:].rstrip()
! if key == findkey:
! found = 1
! foundvalue = 0
! else:
! if line[0] == "V":
! foundvalue = 1
! value = line[2:].split(":", 1)
! value[1] = value[1].rstrip()
! values.append(value)
! elif foundvalue:
! break
! file.close()
! return values
!
!
! def get(self, line):
! for trigger in self.__triggers:
! m = trigger.match(line)
! if m:
! key = m.group(1).lower()
! if self.__info:
! values = self.__info.get(key)
! else:
! values = self.getinfo(key)
! if values:
! value = values[randrange(len(values))]
! elif self.__defaults:
! value = self.__defaults[randrange(len(self.__defaults))]
! else:
! break
! flags = value[0]
! info = Info()
! info.action = "a" in flags
! info.notice = "n" in flags
! info.tonick = "t" in flags
! if "m" in flags:
! mask = self.__masks[randrange(len(self.__masks))]
! info.phrase = mask%value[1]
! else:
! info.phrase = value[1]
! return info
class InfopackModule:
! def __init__(self):
! self.loadpacks = options.gethard("Infopack.loadpacks", [])
! self.packs = {}
! hooks.register("Message", self.message)
! # Load infopacks
! for (name, inmemory) in self.loadpacks:
! infopackdir = config.get("infopack", "infopackdir")
! packname = "%s/%s.info" % (infopackdir, name)
! if os.path.isfile(packname):
! pack = Infopack(packname)
! self.packs[name] = pack
! if inmemory:
! pack.load()
! else:
! pack.loadcore()
!
! # Match '[load|reload|unload] infopack <name> [in memory] [.|!]'
! self.re1 = re.compile(r"(?P<action>re|un)?load\s+infopack\s+(?P<name>\w+)(?P<inmemory>\s+in\s+memory)?\s*[.!]*$", re.I)
! # Match 'show infopacks'
! self.re2 = re.compile(r"show\s+infopacks\s*[!.]*$", re.I)
!
! def unload(self):
! hooks.unregister("Message", self.message)
!
! def message(self, msg):
! if msg.forme:
! m = self.re1.match(msg.line)
! if m:
! if mm.hasperm(0, msg.server.servername, msg.target, msg.user, "infopackadmin"):
! name = m.group("name")
! action = m.group("action")
! infopackdir = config.get("infopack", "infopackdir")
! packname = "%s/%s.info" % (infopackdir, name)
! if not action:
! # Load infopack
! if self.packs.has_key(name):
! msg.answer("%:", ["Oops!", "Sorry!"], "This infopack is already loaded", [".", "!"])
! else:
! if os.path.isfile(packname):
! inmemory = m.group("inmemory")
! pack = Infopack(packname)
! self.packs[name] = pack
! self.loadpacks.append((name, inmemory))
! if inmemory:
! pack.load()
! else:
! pack.loadcore()
! msg.answer("%:", ["Loaded", "Done", "Ok"], [".", "!"])
! else:
! msg.answer("%:", ["Infopack not found", "I can't find this infopack"], [".", "!"])
! elif action == "re":
! # Reload infopack
! if not self.packs.has_key(name):
! msg.answer("%:", ["Oops!", "Sorry!"], "This infopack is not loaded", [".", "!"])
! else:
! if os.path.isfile(packname):
! self.packs[name].reload()
! msg.answer("%:", ["Reloaded", "Done", "Ok"], [".", "!"])
! else:
! ...
[truncated message content] |