def on_player_connectI(self, match, set_online=True): # bslwBzSLx # gbtami 001411E1663P1483P1720P0P1646P0P0P1679P name, status, titlehex, blitz, blitzdev, std, stddev, light, lightdev, \ wild, wilddev, bughouse, bughousedev, crazyhouse, crazyhousedev, \ suicide, suicidedev, losers, losersdev, atomic, atomicdev = match.groups() player = self.connection.players.get(FICSPlayer(name)) self.players.append(player) titles = parse_title_hex(titlehex) if not player.titles >= titles: player.titles |= titles for rtype, elo, dev in \ ((TYPE_BLITZ, blitz, blitzdev), (TYPE_STANDARD, std, stddev), (TYPE_LIGHTNING, light, lightdev), (TYPE_ATOMIC, atomic, atomicdev), (TYPE_WILD, wild, wilddev), (TYPE_CRAZYHOUSE, crazyhouse, crazyhousedev), (TYPE_BUGHOUSE, bughouse, bughousedev), (TYPE_LOSERS, losers, losersdev), (TYPE_SUICIDE, suicide, suicidedev)): parse_rating = self.parseRating(elo) if player.ratings[rtype].elo != parse_rating: player.ratings[rtype].elo = parse_rating player.ratings[rtype].deviation = DEVIATION[dev] # do last so rating info is there when notifications are generated status = STATUS[status] if player.status != status: player.status = status if set_online and not player.online: player.online = True
def on_seek_add(self, match): # The <s> message looks like: # <s> index w=name_from ti=titles rt=rating t=time i=increment # r=rated('r')/unrated('u') tp=type("wild/fr", "wild/4","blitz") # c=color rr=rating_range(lower-upper) a=automatic?('t'/'f') # f=formula_checked('t'/f') parts = match.groups()[0].split(" ") seek = {} for key, value in [p.split("=") for p in parts[1:] if p]: seek[key] = value try: index = int(parts[0]) player = self.connection.players.get(seek['w']) player.titles |= parse_title_hex(seek['ti']) rated = seek['r'] == 'r' minutes = int(seek['t']) increment = int(seek['i']) rmin, rmax = [int(r) for r in seek['rr'].split("-")] rating = seek['rt'] if rating[-1] in (" ", "P", "E"): deviation = DEVIATION[rating[-1]] rating = rating[:-1] rating = int(rating) deviation = None automatic = seek['a'] == 't' color = None if seek['c'] == "W": color = "white" elif seek['c'] == "B": color = "black" except KeyError as e: log.warning("on_seek_add: KeyError: %s %s" % (repr(e), repr(seek))) return try: gametype = GAME_TYPES[seek["tp"]] except KeyError: if self.connection.FatICS and seek["tp"] == "chess": # TODO: remove when fixed in FatICS expected_time = minutes + increment * 2 / 3 if expected_time == 0: gametype = "untimed" elif expected_time < 3: gametype = "lightning" elif expected_time < 15: gametype = "blitz" else: gametype = "standard" gametype = GAME_TYPES[gametype] else: return if gametype.variant_type in UNSUPPORTED: return if gametype.rating_type in RATING_TYPES and player.ratings[gametype.rating_type] != rating: player.ratings[gametype.rating_type] = rating player.deviations[gametype.rating_type] = deviation player.emit("ratings_changed", gametype.rating_type, player) seek = FICSSeek(index, player, minutes, increment, rated, color, gametype, rmin=rmin, rmax=rmax, automatic=automatic) self.emit("addSeek", seek)
def on_seek_add(self, match): # The <s> message looks like: # <s> index w=name_from ti=titles rt=rating t=time i=increment # r=rated('r')/unrated('u') tp=type("wild/fr", "wild/4","blitz") # c=color rr=rating_range(lower-upper) a=automatic?('t'/'f') # f=formula_checked('t'/f') parts = match.groups()[0].split() seek = {} for key, value in [p.split("=") for p in parts[1:] if p]: seek[key] = value try: index = int(parts[0]) player = self.connection.players.get(seek["w"]) player.titles |= parse_title_hex(seek["ti"]) rated = seek["r"] == "r" minutes = int(seek["t"]) increment = int(seek["i"]) rmin, rmax = [int(r) for r in seek["rr"].split("-")] rating = seek["rt"] if rating[-1] in (" ", "P", "E"): deviation = DEVIATION[rating[-1]] rating = rating[:-1] rating = int(rating) deviation = None automatic = seek["a"] == "t" color = None if seek["c"] == "W": color = "white" elif seek["c"] == "B": color = "black" except KeyError as e: log.warning("on_seek_add: KeyError: %s %s" % (repr(e), repr(seek))) return try: gametype = GAME_TYPES[seek["tp"]] except KeyError: if self.connection.FatICS and seek["tp"] == "chess": # TODO: remove when fixed in FatICS expected_time = minutes + increment * 2 / 3 if expected_time == 0: gametype = "untimed" elif expected_time < 3: gametype = "lightning" elif expected_time < 15: gametype = "blitz" else: gametype = "standard" gametype = GAME_TYPES[gametype] else: return if gametype.variant_type in UNSUPPORTED: return if (gametype.rating_type in RATING_TYPES and player.ratings[gametype.rating_type] != rating): player.ratings[gametype.rating_type] = rating player.deviations[gametype.rating_type] = deviation player.emit("ratings_changed", gametype.rating_type, player) seek = FICSSeek( index, player, minutes, increment, rated, color, gametype, rmin=rmin, rmax=rmax, automatic=automatic, ) self.emit("addSeek", seek)