import codecs
def format_modbot_bans(chatlogfile,outputfile,emotelist=None):
chatlog = [codecs.decode(x,'utf-8').rstrip().split('\t') for x in open(chatlogfile).readlines() if len(x)>1]
if emotelist is not None:emotes=[x.rstrip() for x in open(emotelist).readlines()]
for i,x in enumerate(chatlog):
if x[1]=='-*-':
tmp=[y for y in x]
tmp.pop(1)
tmp.append('-*- '+' '.join(tmp[1].split(' ')[1:]))
tmp[1] = tmp[1].split(' ')[0]
chatlog[i]=tmp
if emotelist is not None:
tmp = x[2].split(' ')
KappaCounter = 0
ind = 0
LastKappa = None
for j,y in enumerate(tmp):
if y in emotes:
if y != LastKappa:
KappaCounter=1
LastKappa = y
ind = j
else:
KappaCounter+=1
tmp[j] = ''
tmp[ind] = '({})x{}'.format(LastKappa,KappaCounter)
else:
KappaCounter = 0
LastKappa = None
while '' in tmp:tmp.remove('')
chatlog[i][2] = ' '.join(tmp)
# First pass: Find all the TPPModbot lines
print("Parsing modbot lines...")
modbot = {i:[x[2].split(' ')[0][1:], ' '.join(x[2].split(' ')[5:])] for i,x in enumerate(chatlog) if x[1].lower() == "tppmodbot"}
inds = [i for i in modbot.keys()]
inds.sort()
# Second pass: Find the offending post and format it into a file, in order.
op = [["Time","User","Ban","Post"]]
print("Finding the offenders...")
for i in inds:
for j in range(i):
if chatlog[i-j][1].lower()==modbot[i][0].lower():break
if chatlog[i-j][1].lower()==modbot[i][0].lower():
op.append(chatlog[i-j][0:2]+[modbot[i][1]]+[chatlog[i-j][2]])
with open(outputfile,'w+') as O:
stats = {}
for x in op:
O.write('|'.join([codecs.encode(y,'utf-8') for y in x])+'\n')
if x[2] not in stats.keys():stats[x[2]]=1
else:stats[x[2]]+=1
stats.pop('Ban')
return stats
Comments