Files
tilde-projects/Code/python/chatstats.py
T

109 lines
4.0 KiB
Python
Raw Normal View History

2016-01-06 14:08:25 -05:00
#!/usr/bin/python
import fileinput
import json
import time
import calendar
import shutil
2017-03-30 21:39:44 +00:00
import re
2016-01-06 14:08:25 -05:00
2018-01-24 20:51:54 +00:00
logfile = "/home/archangelic/irc/log"
2018-10-05 16:02:38 -04:00
# logfile = "/home/jumblesale/Code/irc/log"
2016-01-06 14:08:25 -05:00
outfile = "/home/krowbar/logs/chatStats.json"
2018-10-10 18:09:23 -04:00
# hash keyed by "user" that contains a start timestamp, last timestamp, last said string, chat count, letter count, and word count
userData = {}
2018-10-05 16:02:38 -04:00
# also now happy emotes and sad emotes
2017-03-30 21:39:44 +00:00
rejectRegexp = "http[s]?://|[0-9]{2}[;:][0-9]{2}"
happyRegexp = ":[-]?[])}]"
sadRegexp = ":[-]?[[({]"
2016-01-11 16:26:15 -05:00
nameFix = {
2018-10-05 16:02:38 -04:00
"archangel": "archangelic",
"jumblesal": "jumblesale",
"hardmath1": "kc",
"hardmath123": "kc",
"bendorphan": "endorphant",
"endorphan": "endorphant",
"synergian": "synergiance",
}
2016-01-06 14:08:25 -05:00
with open(logfile, "r") as log:
2018-10-05 16:02:38 -04:00
lastUser = ""
2016-01-11 16:26:15 -05:00
currentStreak = 1
2016-01-06 14:08:25 -05:00
for line in log:
try:
time, user, message = line.split("\t", 3)
time = int(time)
2016-01-11 16:26:15 -05:00
if nameFix.has_key(user):
user = nameFix[user]
else:
user = user.lower()
2016-01-06 14:08:25 -05:00
except ValueError:
2018-10-05 16:02:38 -04:00
continue # There are some bad lines in the log file that we'll ignore if we can't parse
2016-01-06 14:08:25 -05:00
if user in userData:
2018-10-05 16:02:38 -04:00
day = time / 86400 # seconds in a day
if userData[user]["startTime"] == 0:
userData[user]["startTime"] = time
if userData[user]["lastDay"] != day:
userData[user]["daysActive"] += 1
userData[user]["lastDay"] = day
2016-01-11 16:26:15 -05:00
if lastUser == user:
currentStreak += 1
2018-10-05 16:02:38 -04:00
if currentStreak > userData[user]["streak"]:
userData[user]["streak"] = currentStreak
2016-01-11 16:26:15 -05:00
else:
currentStreak = 1
2018-10-05 16:02:38 -04:00
if userData[user]["lastMention"]:
resTime = time - userData[user]["lastMention"]
userData[user]["responseTime"] += min(
resTime, 7200
) # cap the value at 2hrs, things get skewed toward the high end otherwise
userData[user]["lastMention"] = 0
2016-01-11 16:26:15 -05:00
2018-10-05 16:02:38 -04:00
userData[user]["endTime"] = time
# userData[user]['lastSaid'] = message
userData[user]["lineCount"] += 1
userData[user]["wordCount"] += len(message.split())
userData[user]["charCount"] += len(message)
else: # if they are new
2016-01-06 14:08:25 -05:00
userData[user] = {}
2018-10-05 16:02:38 -04:00
userData[user]["startTime"] = time
userData[user]["endTime"] = time
# userData[user]['lastSaid'] = message
userData[user]["lineCount"] = 1
userData[user]["wordCount"] = len(message.split())
userData[user]["charCount"] = len(message)
userData[user]["daysActive"] = 1
userData[user]["lastDay"] = time / 86400
userData[user]["streak"] = 1
userData[user]["mentions"] = 0
userData[user]["lastMention"] = 0
userData[user]["responseTime"] = 0
userData[user]["botUse"] = 0
userData[user]["happyEmotes"] = 0
userData[user]["sadEmotes"] = 0
2016-01-11 16:26:15 -05:00
2018-10-05 16:02:38 -04:00
lastUser = user
if message.rstrip() and message[0] == "!":
userData[user]["botUse"] += 1
2017-03-30 21:39:44 +00:00
if not re.search(rejectRegexp, message):
if re.search(happyRegexp, message):
2018-10-05 16:02:38 -04:00
userData[user]["happyEmotes"] += 1
2017-03-30 21:39:44 +00:00
if re.search(sadRegexp, message):
2018-10-05 16:02:38 -04:00
userData[user]["sadEmotes"] += 1
2016-01-11 16:26:15 -05:00
try:
2018-10-05 16:02:38 -04:00
if (
message.rstrip() and message.split()[0][-1] == ":"
): # last character of first word
2016-01-11 16:26:15 -05:00
name = message.split()[0][0:-1]
if user != name and userData.has_key(name):
2018-10-05 16:02:38 -04:00
userData[name]["mentions"] += 1
if not userData[name]["lastMention"]:
userData[name]["lastMention"] = time
2016-01-11 16:26:15 -05:00
except IndexError:
2018-10-05 16:02:38 -04:00
print("##" + message + "##")
2016-01-11 16:26:15 -05:00
continue
2016-01-06 14:08:25 -05:00
with open(outfile + ".tmp", "w") as tmpFile:
tmpFile.write(json.dumps(userData))
shutil.move(outfile + ".tmp", outfile)