commit
4e169b199e
@ -31,7 +31,8 @@ MOCK_MODULES = [
|
||||
"notmuch",
|
||||
"requests",
|
||||
"bs4",
|
||||
"novaclient.v2"
|
||||
"novaclient.v2",
|
||||
"dota2py",
|
||||
]
|
||||
|
||||
for mod_name in MOCK_MODULES:
|
||||
|
105
i3pystatus/dota2wins.py
Normal file
105
i3pystatus/dota2wins.py
Normal file
@ -0,0 +1,105 @@
|
||||
from dota2py import api
|
||||
from i3pystatus import IntervalModule
|
||||
|
||||
|
||||
class Dota2wins(IntervalModule):
|
||||
"""
|
||||
Displays the win/loss ratio of a given Dota account.
|
||||
Requires: dota2py
|
||||
"""
|
||||
|
||||
settings = (
|
||||
("matches", "Number of recent matches to calculate"),
|
||||
("steamid", "Steam user to track"),
|
||||
("steam_api_key", "Steam API key "
|
||||
"(http://steamcommunity.com/dev/apikey)"),
|
||||
("good_threshold", "Win percentage (or higher) which you are happy "
|
||||
"with"),
|
||||
("bad_threshold", "Win percentage you want to be alerted (difference "
|
||||
"between good_threshold and bad_threshold is cautious_threshold)"),
|
||||
("interval", "Update interval (games usually last at least 20 min)."),
|
||||
("good_color", "Color of text while win percentage is above "
|
||||
"good_threshold"),
|
||||
("bad_color", "Color of text while win percentage is below "
|
||||
"bad_threshold"),
|
||||
("caution_color", "Color of text while win precentage is between good "
|
||||
"and bad thresholds"),
|
||||
("screenname", "If set to 'retrieve', requests for the users's "
|
||||
"screenname via API calls. Else, use the supplied string as the "
|
||||
"user's screename"),
|
||||
"format"
|
||||
)
|
||||
required = ("steamid", "steam_api_key")
|
||||
good_color = "#00FF00" # green
|
||||
caution_color = "#FFFF00" # yellow
|
||||
bad_color = "#FF0000" # red
|
||||
good_threshold = 50
|
||||
bad_threshold = 45
|
||||
matches = 25
|
||||
interval = 1800
|
||||
screenname = 'retrieve'
|
||||
format = "{screenname} {wins}W:{losses}L {win_percent}%"
|
||||
|
||||
def run(self):
|
||||
api.set_api_key(self.steam_api_key)
|
||||
hist = api.get_match_history(account_id=self.steamid)['result']
|
||||
recent_matches = []
|
||||
while len(recent_matches) < self.matches:
|
||||
recent_matches.append(hist['matches'].pop(0))
|
||||
|
||||
player_team_per_match = []
|
||||
# create a list of tuples where each tuple is:
|
||||
# [match_id, bool]
|
||||
# The bool will be true if the player is on Radiant and alse if they
|
||||
# are on Dire.
|
||||
for match in recent_matches:
|
||||
this_match = [match['match_id']]
|
||||
for player in match['players']:
|
||||
# 64bit player ID
|
||||
long_id = player['account_id'] + 76561197960265728
|
||||
if long_id == self.steamid:
|
||||
if player['player_slot'] < 128:
|
||||
this_match.append(True)
|
||||
else:
|
||||
this_match.append(False)
|
||||
player_team_per_match.append(this_match)
|
||||
|
||||
outcomes = []
|
||||
for match in player_team_per_match:
|
||||
if api.get_match_details(match[0])['result']['radiant_win'] == match[1]:
|
||||
outcomes.append(1)
|
||||
else:
|
||||
outcomes.append(0)
|
||||
|
||||
wins = outcomes.count(1)
|
||||
losses = outcomes.count(0)
|
||||
win_percent = float(sum(outcomes) / float(len(outcomes))) * 100
|
||||
|
||||
if win_percent >= float(self.good_threshold):
|
||||
color = self.good_color
|
||||
elif win_percent <= float(self.bad_threshold):
|
||||
color = self.bad_color
|
||||
else:
|
||||
color = self.caution_color
|
||||
|
||||
if self.screenname == 'retrieve':
|
||||
from urllib.request import urlopen
|
||||
import json
|
||||
response = urlopen(
|
||||
'http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=%s&steamids=%s' %
|
||||
(self.steam_api_key, self.steamid))
|
||||
screenname = json.loads(bytes.decode(response.read()))['response']['players'][0]['personaname']
|
||||
else:
|
||||
screenname = self.screenname
|
||||
|
||||
cdict = {
|
||||
"screenname": screenname,
|
||||
"wins": wins,
|
||||
"losses": losses,
|
||||
"win_percent": win_percent,
|
||||
}
|
||||
|
||||
self.output = {
|
||||
"full_text": self.format.format(**cdict),
|
||||
"color": color
|
||||
}
|
Loading…
Reference in New Issue
Block a user