Huge cleanup and refactoring :>
This commit is contained in:
63
bot/seen.py
Normal file
63
bot/seen.py
Normal file
@@ -0,0 +1,63 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
import re
|
||||
|
||||
import irc3
|
||||
from docopt import Dict
|
||||
from irc3.plugins.command import command
|
||||
from irc3.utils import IrcString
|
||||
|
||||
from . import DatabasePlugin
|
||||
|
||||
|
||||
class Seen(DatabasePlugin):
|
||||
@command
|
||||
def seen(self, mask: IrcString, target: IrcString, args: Dict):
|
||||
"""Get last seen date and message for a nick
|
||||
|
||||
%%seen [<nick>]
|
||||
"""
|
||||
nick = args.get('<nick>', mask.nick)
|
||||
|
||||
# Don't be stupid
|
||||
if nick == mask.nick:
|
||||
return '{}, look in the mirror faggot!'.format(nick)
|
||||
|
||||
# Fetch seen from database
|
||||
self.cur.execute('''
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
seens
|
||||
WHERE
|
||||
lower(nick) = lower(%s)
|
||||
''', [nick])
|
||||
seen = self.cur.fetchone()
|
||||
|
||||
# No result
|
||||
if not seen:
|
||||
return 'I\'ve never seen {}'.format(nick)
|
||||
|
||||
# Return result
|
||||
return '{nick} was last seen {delta} saying: {message}'.format(
|
||||
nick=seen['nick'],
|
||||
# TODO: relative string delta?
|
||||
delta=seen['seen_at'],
|
||||
message=re.sub(r'\x01ACTION (.*)\x01', r'/me \1', seen['message']),
|
||||
)
|
||||
|
||||
@irc3.event(r'(?i)^:(?P<mask>\S+) PRIVMSG (?P<target>\S+) :(?P<msg>.*)')
|
||||
def save(self, mask: str, target: str, msg: str):
|
||||
mask = IrcString(mask)
|
||||
|
||||
self.cur.execute('''
|
||||
INSERT INTO
|
||||
seens (nick, host, channel, message)
|
||||
VALUES
|
||||
(%s, %s, %s, %s)
|
||||
ON CONFLICT (nick) DO UPDATE SET
|
||||
host = excluded.host,
|
||||
channel = excluded.channel,
|
||||
seen_at = now(),
|
||||
message = excluded.message
|
||||
''', [mask.nick, mask.host, target, msg])
|
||||
self.con.commit()
|
||||
Reference in New Issue
Block a user