add logger module
parent
3d41e2f1d9
commit
410d72172f
|
@ -0,0 +1,67 @@
|
|||
#!/usr/bin/python3
|
||||
"""
|
||||
logger.py - logger for privacy-protecting IRC stats
|
||||
author: mutantmonkey <mutantmonkey@mutantmonkey.in>
|
||||
"""
|
||||
|
||||
import os
|
||||
import random
|
||||
import sqlite3
|
||||
|
||||
def setup(self):
|
||||
fn = self.nick + '-' + self.config.host + '.logger.db'
|
||||
self.logger_db = os.path.join(os.path.expanduser('~/.phenny'), fn)
|
||||
self.logger_conn = sqlite3.connect(self.logger_db)
|
||||
|
||||
c = self.logger_conn.cursor()
|
||||
c.execute('''create table if not exists lines_by_nick (
|
||||
channel varchar(255),
|
||||
nick varchar(255),
|
||||
lines unsigned big int not null default 0,
|
||||
characters unsigned big int not null default 0,
|
||||
last_time timestamp default CURRENT_TIMESTAMP,
|
||||
quote text,
|
||||
unique (channel, nick) on conflict replace
|
||||
);''')
|
||||
|
||||
def logger(phenny, input):
|
||||
if not logger.conn:
|
||||
logger.conn = sqlite3.connect(phenny.logger_db)
|
||||
|
||||
sqlite_data = {
|
||||
'channel': input.sender,
|
||||
'nick': input.nick,
|
||||
'msg': input.group(1),
|
||||
'chars': len(input.group(1)),
|
||||
}
|
||||
|
||||
c = logger.conn.cursor()
|
||||
c.execute('''insert or replace into lines_by_nick
|
||||
(channel, nick, lines, characters, last_time, quote)
|
||||
values(
|
||||
:channel,
|
||||
:nick,
|
||||
coalesce((select lines from lines_by_nick where
|
||||
channel=:channel and nick=:nick) + 1, 1),
|
||||
coalesce((select characters from lines_by_nick where
|
||||
channel=:channel and nick=:nick) + :chars, :chars),
|
||||
CURRENT_TIMESTAMP,
|
||||
coalesce((select quote from lines_by_nick where
|
||||
channel=:channel and nick=:nick), :msg)
|
||||
);''', sqlite_data)
|
||||
c.close()
|
||||
|
||||
if random.randint(0, 20) == 10 and not input.group(1)[:8] == '\x01ACTION ':
|
||||
c = logger.conn.cursor()
|
||||
c.execute('update lines_by_nick set quote=:msg where channel=:channel \
|
||||
and nick=:nick', sqlite_data)
|
||||
c.close()
|
||||
|
||||
logger.conn.commit()
|
||||
logger.conn = None
|
||||
logger.priority = 'low'
|
||||
logger.rule = r'(.*)'
|
||||
logger.thread = False
|
||||
|
||||
if __name__ == '__main__':
|
||||
print(__doc__.strip())
|
Loading…
Reference in New Issue