| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- from ._plugin import Plugin
- from .utils.db import Mongo
- import logging
- logger = logging.getLogger(__name__)
- class CompetitiveStat(Plugin):
- def get_stats(self):
- return ({
- 'gamePlayed': round(i['career']['ranked']['所有英雄']['比赛场次']),
- 'won': round(i['career']['ranked']['所有英雄']['比赛胜利']),
- 'lost': round(i['career']['ranked']['所有英雄']['比赛战败']),
- 'draw': round(i['career']['ranked']['所有英雄']['比赛战平']),
- 'skillRate': i['career']['player']['ranked']['level'],
- } for i in (self.root.latest_profile.formatted, self.root.new_profile.formatted))
- def calc(self):
- old, new = self.get_stats()
- if old['gamePlayed'] == new['gamePlayed']:
- return
- try:
- assert new['gamePlayed'] - old['gamePlayed'] == 1, 'GameMissed'
- sr_diff = new['skillRate'] - old['skillRate']
- # basically, self.record(sign(sr_diff), sr_diff)
- # But with assertion
- if sr_diff > 0:
- assert new['won'] - old['won'] == 1, 'WonWrong'
- self.record(1, sr_diff, new)
- elif sr_diff < 0:
- assert new['lost'] - old['lost'] == 1, 'LostWrong'
- self.record(-1, sr_diff, new)
- elif sr_diff == 0:
- assert new['draw'] - old['draw'] == 1, 'DrawWrong'
- self.record(-1, sr_diff, new)
- except AssertionError as e:
- logging.error('[%s] calced error, [%s]', self._id, *e.args)
- def record(self, status, sr_diff, stats):
- Mongo.db.stats.insert({
- 'user': self._id,
- 'time': self.root.latest.raw['lastUpdate'],
- 'gameStatus': status,
- 'skillRateDifference': sr_diff,
- **stats
- })
|