]> jfr.im git - erebus.git/blobdiff - modules/subtext.py
help - if nofakelag, showcommands should send the list instead of URL
[erebus.git] / modules / subtext.py
index bef2ac18f822d45f8d3372dba978992105ad9b3f..88a2368e5747dc37f705f9938e10338f5587db86 100644 (file)
@@ -1,5 +1,7 @@
 # Erebus IRC bot - Author: Erebus Team
+# vim: fileencoding=utf-8
 # module for 's/regex/replacement/' style correction
+# warning: arbitrary regex's are generally capable of various DoS attacks on CPU/memory usage. use with caution.
 # see for usage examples: https://github.com/zonidjan/erebus/commit/d7e9802778477f1faa26a03078cb1b3c018a5e5c
 # This file is released into the public domain; see http://unlicense.org/
 
@@ -21,7 +23,7 @@ modstop = lib.modstop
 # module code
 import re
 from collections import namedtuple
-re_findsub = re.compile(r"s(.)(?P<search>[^\1]+)\1(?P<replace>[^\1]+)\1(?P<global>g)?;?")
+re_findsub = re.compile(r"""s([/'";:!@#$%^&-_=`~])(?P<search>.+?)\1(?P<replace>.+?)(?:\1(?P<global>g)?|$)""")
 Line = namedtuple('Line', ['sender', 'msg'])
 lastline = {}
 @lib.hooknum("PRIVMSG")
@@ -32,16 +34,13 @@ def privmsg_hook(bot, line):
        msg = pieces[3][1:]
        mo = re_findsub.match(msg)
        if mo:
-               print lastline[chan]
-               print mo.groupdict()
                if mo.group('global') is not None:
                        count = 0 # unlimited
                else:
                        count = 1 # only first
                try:
                        newline = re.sub(mo.group('search'), mo.group('replace'), lastline[chan].msg, count)
-               except Exception as e: print e; return # ignore it if it doesn't work
-               print newline
+               except Exception as e: return # ignore it if it doesn't work
                if newline != lastline[chan].msg:
                        if lastline[chan].sender == fromnick:
                                bot.msg(chan, "<%s> %s" % (lastline[chan].sender, newline))