mirror of
https://github.com/Mikaela/Limnoria.git
synced 2025-02-06 17:44:09 +01:00
Made the bot keep stats on himself.
This commit is contained in:
parent
fa5ac0a885
commit
5ae13a9422
@ -83,6 +83,7 @@ class ChannelDB(plugins.ChannelDBHandler, callbacks.PrivmsgCommandAndRegexp):
|
|||||||
callbacks.PrivmsgCommandAndRegexp.__init__(self)
|
callbacks.PrivmsgCommandAndRegexp.__init__(self)
|
||||||
self.lastmsg = None
|
self.lastmsg = None
|
||||||
self.laststate = None
|
self.laststate = None
|
||||||
|
self.outFiltering = False
|
||||||
|
|
||||||
def makeDb(self, filename):
|
def makeDb(self, filename):
|
||||||
if os.path.exists(filename):
|
if os.path.exists(filename):
|
||||||
@ -92,7 +93,7 @@ class ChannelDB(plugins.ChannelDBHandler, callbacks.PrivmsgCommandAndRegexp):
|
|||||||
cursor = db.cursor()
|
cursor = db.cursor()
|
||||||
cursor.execute("""CREATE TABLE user_stats (
|
cursor.execute("""CREATE TABLE user_stats (
|
||||||
id INTEGER PRIMARY KEY,
|
id INTEGER PRIMARY KEY,
|
||||||
user_id INTEGER UNIQUE,
|
user_id INTEGER UNIQUE ON CONFLICT IGNORE,
|
||||||
last_seen TIMESTAMP,
|
last_seen TIMESTAMP,
|
||||||
last_msg TEXT,
|
last_msg TEXT,
|
||||||
smileys INTEGER,
|
smileys INTEGER,
|
||||||
@ -157,51 +158,62 @@ class ChannelDB(plugins.ChannelDBHandler, callbacks.PrivmsgCommandAndRegexp):
|
|||||||
def doPrivmsg(self, irc, msg):
|
def doPrivmsg(self, irc, msg):
|
||||||
callbacks.PrivmsgCommandAndRegexp.doPrivmsg(self, irc, msg)
|
callbacks.PrivmsgCommandAndRegexp.doPrivmsg(self, irc, msg)
|
||||||
if ircutils.isChannel(msg.args[0]):
|
if ircutils.isChannel(msg.args[0]):
|
||||||
(channel, s) = msg.args
|
self._updatePrivmsgStats(msg)
|
||||||
db = self.getDb(channel)
|
|
||||||
cursor = db.cursor()
|
def _updatePrivmsgStats(self, msg):
|
||||||
chars = len(s)
|
(channel, s) = msg.args
|
||||||
words = len(s.split())
|
db = self.getDb(channel)
|
||||||
isAction = ircmsgs.isAction(msg)
|
cursor = db.cursor()
|
||||||
frowns = len(frownre.findall(s))
|
chars = len(s)
|
||||||
smileys = len(smileyre.findall(s))
|
words = len(s.split())
|
||||||
s = ircmsgs.prettyPrint(msg)
|
isAction = ircmsgs.isAction(msg)
|
||||||
cursor.execute("""UPDATE channel_stats
|
frowns = len(frownre.findall(s))
|
||||||
SET smileys=smileys+%s,
|
smileys = len(smileyre.findall(s))
|
||||||
frowns=frowns+%s,
|
s = ircmsgs.prettyPrint(msg)
|
||||||
chars=chars+%s,
|
cursor.execute("""UPDATE channel_stats
|
||||||
words=words+%s,
|
SET smileys=smileys+%s,
|
||||||
msgs=msgs+1,
|
frowns=frowns+%s,
|
||||||
actions=actions+%s""",
|
chars=chars+%s,
|
||||||
smileys, frowns, chars, words, int(isAction))
|
words=words+%s,
|
||||||
cursor.execute("""INSERT INTO nick_seen VALUES (%s, %s, %s)""",
|
msgs=msgs+1,
|
||||||
msg.nick, int(time.time()), s)
|
actions=actions+%s""",
|
||||||
try:
|
smileys, frowns, chars, words, int(isAction))
|
||||||
id = ircdb.users.getUserId(msg.prefix)
|
cursor.execute("""INSERT INTO nick_seen VALUES (%s, %s, %s)""",
|
||||||
except KeyError:
|
msg.nick, int(time.time()), s)
|
||||||
return
|
try:
|
||||||
cursor.execute("""SELECT COUNT(*)
|
if self.outFiltering:
|
||||||
FROM user_stats
|
id = 0
|
||||||
WHERE user_id=%s""", id)
|
|
||||||
count = int(cursor.fetchone()[0])
|
|
||||||
if count == 0: # User isn't in database.
|
|
||||||
cursor.execute("""INSERT INTO user_stats VALUES (
|
|
||||||
NULL, %s, %s, %s, %s, %s,
|
|
||||||
%s, %s, 1, %s,
|
|
||||||
0, 0, 0, 0, 0, 0, 0)""",
|
|
||||||
id, int(time.time()), s,
|
|
||||||
smileys, frowns, chars, words, int(isAction))
|
|
||||||
else:
|
else:
|
||||||
cursor.execute("""UPDATE user_stats SET
|
id = ircdb.users.getUserId(msg.prefix)
|
||||||
last_seen=%s, last_msg=%s, chars=chars+%s,
|
except KeyError:
|
||||||
words=words+%s, msgs=msgs+1,
|
return
|
||||||
actions=actions+%s, smileys=smileys+%s,
|
cursor.execute("""INSERT INTO user_stats VALUES (
|
||||||
frowns=frowns+%s
|
NULL, %s, %s, %s, %s, %s,
|
||||||
WHERE user_id=%s""",
|
%s, %s, 1, %s,
|
||||||
int(time.time()), s,
|
0, 0, 0, 0, 0, 0, 0)""",
|
||||||
chars, words, int(isAction),
|
id, int(time.time()), s,
|
||||||
smileys, frowns, id)
|
smileys, frowns, chars, words, int(isAction))
|
||||||
db.commit()
|
cursor.execute("""UPDATE user_stats SET
|
||||||
|
last_seen=%s, last_msg=%s, chars=chars+%s,
|
||||||
|
words=words+%s, msgs=msgs+1,
|
||||||
|
actions=actions+%s, smileys=smileys+%s,
|
||||||
|
frowns=frowns+%s
|
||||||
|
WHERE user_id=%s""",
|
||||||
|
int(time.time()), s, chars, words, int(isAction),
|
||||||
|
smileys, frowns, id)
|
||||||
|
db.commit()
|
||||||
|
|
||||||
|
def outFilter(self, irc, msg):
|
||||||
|
if msg.command == 'PRIVMSG':
|
||||||
|
if ircutils.isChannel(msg.args[0]):
|
||||||
|
db = self.getDb(msg.args[0])
|
||||||
|
cursor = db.cursor()
|
||||||
|
try:
|
||||||
|
self.outFiltering = True
|
||||||
|
self._updatePrivmsgStats(msg)
|
||||||
|
finally:
|
||||||
|
self.outFiltering = False
|
||||||
|
return msg
|
||||||
|
|
||||||
def doPart(self, irc, msg):
|
def doPart(self, irc, msg):
|
||||||
channel = msg.args[0]
|
channel = msg.args[0]
|
||||||
@ -419,6 +431,7 @@ class ChannelDB(plugins.ChannelDBHandler, callbacks.PrivmsgCommandAndRegexp):
|
|||||||
if not name:
|
if not name:
|
||||||
try:
|
try:
|
||||||
id = ircdb.users.getUserId(msg.prefix)
|
id = ircdb.users.getUserId(msg.prefix)
|
||||||
|
name = ircdb.users.getUser(id).name
|
||||||
except KeyError:
|
except KeyError:
|
||||||
irc.error(msg, 'I couldn\'t find you in my user database.')
|
irc.error(msg, 'I couldn\'t find you in my user database.')
|
||||||
return
|
return
|
||||||
|
@ -58,6 +58,7 @@ if sqlite is not None:
|
|||||||
self.assertNotError('stats %s' % self.nick)
|
self.assertNotError('stats %s' % self.nick)
|
||||||
self.assertNotError('stats %s' % self.nick.upper())
|
self.assertNotError('stats %s' % self.nick.upper())
|
||||||
self.assertNotError('stats')
|
self.assertNotError('stats')
|
||||||
|
self.assertRegexp('stats', self.nick)
|
||||||
|
|
||||||
def testNoKeyErrorEscapeFromSeen(self):
|
def testNoKeyErrorEscapeFromSeen(self):
|
||||||
self.assertRegexp('seen asldfkjasdlfkj', 'I have not seen')
|
self.assertRegexp('seen asldfkjasdlfkj', 'I have not seen')
|
||||||
|
Loading…
Reference in New Issue
Block a user