def on_message(slack, config, message): # Respond to all types of messages. channel_id = message['channel'] if channel_id[0] in ['C', 'G']: # Channel/group message, make sure foosbot is being addressed. if not re.search("<@{}>".format(config['bot_id']), message['text']): return pass sender = message['user'] text = message['text'].lower() context = core.Context(slack=slack, channel=channel_id, sender=sender, bot_id=config['bot_id'], users=config['users'], matches=loldb.getmatches()) # Look for HELP matches_help = re.search(help_command, text) if matches_help: core.reply_with_message(help_message, context) return # Look for RANK matches_rank = re.search(rank_command, text) if matches_rank: core.rank(context) return # Look for STATS matches_stats = re.search(stats_command, text) if matches_stats: core.stats(users=users_in(matches_stats.group('who')), context=context) return # Look for RESULTS matches_results = re.search(results_command, text) if matches_results: core.results(users=users_in_teams(matches_results.group('who')), score1=matches_results.group('score1'), score2=matches_results.group('score2'), context=context) return # Look for PREDICT matches_predict = re.search(predict_command, text) if matches_predict: core.predict(users=users_in_teams(matches_predict.group('who')), context=context) return # Look for DELETE matches_delete = re.search(delete_command, text) if matches_delete: core.delete(game_id=matches_delete.group('what'), context=context) return core.reply_with_message(didnt_understand_message, context)
def processRank(slack, args): m = loldb.getmatches() # d = ranking.getRankings(m) td = theanorank.getRanking(m) # print d # print td mc = loldb.getgamecounts() lastg = loldb.getlastgameall() out = formatRanking(slack, td, mc, lastg) # legstr = '' # if numpy.min(mc.values()) < 3: # legstr = '\n* has played less than 3 games' return simpleResp('```' + '\n'.join(out) + '```')
def processStats(f, slack, args, user): if len(args) == 0: uid = user elif len(args) != 1: return simpleResp("I don't understand...") else: if not args[0].startswith("<@"): return simpleResp("I don't know who %s is" % (args[0])) uid = args[0][2:-1] print "Stats UID: %s" % (uid) allusers = slack.users.list().body m = loldb.getmatches(f) gameCountsList = loldb.getgamecounts(f) if uid in gameCountsList: mc = gameCountsList[uid] else: mc = 0 if mc != 0: lg = loldb.getlastgame(f, uid) td = theanorank.getRanking(m) wp = theanorank.getWinPercentage(m, uid) bw = theanorank.getBestWorst(m, uid) r1ta = "Skill level: %.1f" % (10.0 + (10.0 * td[uid])) r2ta = "Win percentage: %.1f" % wp r3ta = "Last match: %s" % (formatMatch(allusers, lg)) nn = getNiceName(allusers, uid) r1t = "Stats for %s" % nn div = '-' * (len(r1t)) r2t = "Matches played: %i" % (mc) allt = [r1t, div] if mc != 0: allt.append(r1ta) allt.append(r2t) allt.append(r2ta) allt.append(r3ta) else: allt.append(r2t) if mc > 1: r3t = "Best recent match: %s" % (formatMatch(allusers, bw[-1][1])) r4t = "Worst recent match: %s" % (formatMatch(allusers, bw[0][1])) allt.append(r3t) allt.append(r4t) return simpleResp('```' + '\n'.join(allt) + '```')
def processPredict(args): m = loldb.getmatches() d = theanorank.getRanking(m) players1 = [] while len(args) > 0 and args[0].startswith('<@'): players1.append(args.pop(0)[2:-1]) if len(args) == 0: return simpleResp("Was expecting a 'vs' at some point") args.pop(0) players2 = [] while len(args) > 0 and args[0].startswith('<@'): players2.append(args.pop(0)[2:-1]) r1 = [] r2 = [] for p in players1: if not p in d: return simpleResp("I don't know the rank of <@%s>" % p) r1.append(d[p]) for p in players2: if not p in d: return simpleResp("I don't know the rank of <@%s>" % p) r2.append(d[p]) sd = numpy.mean(r2) - numpy.mean(r1) pred = ranking.generatePrediction(sd, 10000) line1 = "I predict team 2 has a %.0f%% chance of winning" % (pred[0] * 100.0) line2 = "The most likely outcome is %i - %i (%.0f%% chance)" % \ (pred[1][0], pred[1][1], pred[2]*100.0) return simpleResp('\n'.join([line1, line2]))
def processPredict(args): m = loldb.getmatches() d = theanorank.getRanking(m) players1 = [] while len(args) > 0 and args[0].startswith('<@'): players1.append(args.pop(0)[2:-1]) if len(args) == 0: return simpleResp("Was expecting a 'vs' at some point") args.pop(0) players2 = [] while len(args) > 0 and args[0].startswith('<@'): players2.append(args.pop(0)[2:-1]) r1 = [] r2 = [] for p in players1: if not p in d: return simpleResp("I don't know the rank of <@%s>" % p) r1.append(d[p]) for p in players2: if not p in d: return simpleResp("I don't know the rank of <@%s>" % p) r2.append(d[p]) sd = numpy.mean(r2) - numpy.mean(r1) pred = ranking.generatePrediction(sd, 10000) line1 = "I predict team 2 has a %.0f%% chance of winning" % (pred[0]*100.0) line2 = "The most likely outcome is %i - %i (%.0f%% chance)" % \ (pred[1][0], pred[1][1], pred[2]*100.0) return simpleResp('\n'.join([line1, line2]))
def processStats(slack, args, user): if len(args) == 0: uid = user elif len(args) != 1: return simpleResp("I don't understand...") else: if not args[0].startswith("<@"): return simpleResp("I don't know who %s is" % (args[0])) uid = args[0][2:-1] print "Stats UID: %s" % (uid) allusers = slack.users.list().body m = loldb.getmatches() matchStats = loldb.getMatchStats(uid, m) lg = loldb.getlastgame(uid) td = theanorank.getRanking(m) bw = theanorank.getBestWorst(m, uid) nn = getNiceName(allusers, uid) r1t = "Stats for %s" % nn div = '-' * (len(r1t)) r1ta = "Skill level: %.1f" % (10.0 + (10.0 * td[uid])) r2t = "Won, Lost, Played: %s" % (matchStats,) r2ta = "Last match: %s" % (formatMatch(allusers, lg)) allt = [r1t, div, r1ta, r2t, r2ta] if matchStats[2] > 1: r3t = "Best recent match: %s" % (formatMatch(allusers, bw[-1][1])) r4t = "Worst recent match: %s" % (formatMatch(allusers, bw[0][1])) allt.append(r3t) allt.append(r4t) return simpleResp('```' + '\n'.join(allt) + '```')
def processStats(slack, args, user): if len(args) == 0: uid = user elif len(args) != 1: return simpleResp("I don't understand...") else: if not args[0].startswith("<@"): return simpleResp("I don't know who %s is" % (args[0])) uid = args[0][2:-1] print "Stats UID: %s" % (uid) allusers = slack.users.list().body m = loldb.getmatches() matchStats = loldb.getMatchStats(uid, m) lg = loldb.getlastgame(uid) td = theanorank.getRanking(m) bw = theanorank.getBestWorst(m, uid) nn = getNiceName(allusers, uid) r1t = "Stats for %s" % nn div = '-' * (len(r1t)) r1ta = "Skill level: %.1f" % (10.0 + (10.0 * td[uid])) r2t = "Won, Lost, Played: %s" % (matchStats, ) r2ta = "Last match: %s" % (formatMatch(allusers, lg)) allt = [r1t, div, r1ta, r2t, r2ta] if matchStats[2] > 1: r3t = "Best recent match: %s" % (formatMatch(allusers, bw[-1][1])) r4t = "Worst recent match: %s" % (formatMatch(allusers, bw[0][1])) allt.append(r3t) allt.append(r4t) return simpleResp('```' + '\n'.join(allt) + '```')