nxy/bot/plugins/regex.py

60 lines
1.8 KiB
Python
Raw Normal View History

2017-07-04 13:22:20 +00:00
# -*- coding: utf-8 -*-
import re
import irc3
from irc3.utils import IrcString
from . import DatabasePlugin
@irc3.plugin
class Useless(DatabasePlugin):
requires = ['irc3.plugins.command',
2017-07-07 00:11:20 +00:00
'bot.plugins.storage']
2017-07-04 13:22:20 +00:00
@irc3.event(r'^:(?P<mask>\S+) PRIVMSG (?P<target>#\S+) :s/'
r'(?P<search>(?:[^/\\]|\\.)*)/'
r'(?P<replace>(?:.*?))'
r'(?:/ ?(?P<nick>.*))?$')
def regex(self, mask: str, target: str, search: str, replace: str,
nick: str = None):
nick = (nick or IrcString(mask).nick).strip()
if nick == self.bot.nick:
return
self.cur.execute('''
select
item
from
last_messages
where
nick = lower(%s)
and channel = lower(%s)
''', [nick, target])
result = self.cur.fetchone()
if result:
old = result['item']
2017-07-06 18:12:42 +00:00
msg = old.replace(search, '\x02{}\x0F'.format(replace), 1)
2017-07-04 16:57:53 +00:00
msg = re.sub(r'\x01ACTION (.*)\x01', r'/me \1', msg)
2017-07-04 13:22:20 +00:00
if old != msg:
self.bot.privmsg(target, '<{nick}> {msg}'.format(nick=nick,
msg=msg))
@irc3.event(r'(?i)^:(?P<mask>\S+) PRIVMSG (?P<target>#\S+) :(?P<msg>.*)$')
def last_message(self, mask: str, target: str, msg: str):
"""Saves the last message of a user for each channel (for regex)."""
mask = IrcString(mask)
self.cur.execute('''
insert into
last_messages (nick, host, channel, item)
values
(lower(%s), %s, lower(%s), %s)
on conflict (nick, channel) do update set
host = excluded.host,
item = excluded.item
''', [mask.nick, mask.host, target, msg])
self.con.commit()