]>
jfr.im git - erebus.git/blob - modules/subtext.py
1 # Erebus IRC bot - Author: Erebus Team
2 # vim: fileencoding=utf-8
3 # module for 's/regex/replacement/' style correction
4 # see for usage examples: https://github.com/zonidjan/erebus/commit/d7e9802778477f1faa26a03078cb1b3c018a5e5c
5 # This file is released into the public domain; see http://unlicense.org/
9 'author': 'Erebus Team',
10 'license': 'public domain',
11 'compatible': [0], # compatible module API versions
12 'depends': [], # other modules required to work properly?
13 'softdeps': [], # modules which are preferred but not required
18 lib
= modlib
.modlib(__name__
)
19 modstart
= lib
.modstart
24 from collections
import namedtuple
25 re_findsub
= re
.compile(r
"s(.)(?P<search>[^\1]+)\1(?P<replace>[^\1]+)\1(?P<global>g)?;?")
26 Line
= namedtuple('Line', ['sender', 'msg'])
28 @lib.hooknum("PRIVMSG")
29 def privmsg_hook(bot
, line
):
30 pieces
= line
.split(None, 3)
31 fromnick
= pieces
[0][1:].split('!')[0]
34 mo
= re_findsub
.match(msg
)
36 if mo
.group('global') is not None:
39 count
= 1 # only first
41 newline
= re
.sub(mo
.group('search'), mo
.group('replace'), lastline
[chan
].msg
, count
)
42 except Exception as e
: return # ignore it if it doesn't work
43 if newline
!= lastline
[chan
].msg
:
44 if lastline
[chan
].sender
== fromnick
:
45 bot
.msg(chan
, "<%s> %s" % (lastline
[chan
].sender
, newline
))
47 bot
.msg(chan
, "%s: <%s> %s" % (fromnick
, lastline
[chan
].sender
, newline
))
49 lastline
[chan
] = Line(sender
=fromnick
, msg
=msg
)