diff --git a/steam/steamid.py b/steam/steamid.py index 0d47f36..311710d 100644 --- a/steam/steamid.py +++ b/steam/steamid.py @@ -123,7 +123,8 @@ class SteamID(intBase): """ - return "STEAM_1:%s:%s" % ( + return "STEAM_%d:%d:%d" % ( + self.universe, self.id % 2, self.id >> 1, ) @@ -279,7 +280,7 @@ def steam2_to_tuple(value): .. note:: The universe will be always set to ``1``. See :attr:`SteamID.as_steam2` """ - match = re.match(r"^STEAM_(?P[01])" + match = re.match(r"^STEAM_(?P\d+)" r":(?P[0-1])" r":(?P\d+)$", value ) @@ -288,8 +289,13 @@ def steam2_to_tuple(value): return None steam32 = (int(match.group('id')) << 1) | int(match.group('reminder')) + universe = int(match.group('universe')) - return (steam32, EType(1), EUniverse(1), 1) + # Games before orange box used to incorrectly display universe as 0, we support that + if universe == 0: + universe = 1 + + return (steam32, EType(1), EUniverse(universe), 1) def steam3_to_tuple(value): diff --git a/tests/test_steamid.py b/tests/test_steamid.py index 5271bfc..6714032 100644 --- a/tests/test_steamid.py +++ b/tests/test_steamid.py @@ -199,12 +199,18 @@ class SteamID_properties(unittest.TestCase): self.assertEqual(SteamID('STEAM_0:0:4').as_steam2, 'STEAM_1:0:4') self.assertEqual(SteamID('STEAM_1:0:4').as_steam2, 'STEAM_1:0:4') + self.assertEqual(SteamID('STEAM_4:0:4').as_steam2, 'STEAM_4:0:4') + self.assertEqual(SteamID('STEAM_4:1:4').as_steam2, 'STEAM_4:1:4') + def test_as_steam2_zero(self): self.assertEqual(SteamID('STEAM_0:1:4').as_steam2_zero, 'STEAM_0:1:4') self.assertEqual(SteamID('STEAM_1:1:4').as_steam2_zero, 'STEAM_0:1:4') self.assertEqual(SteamID('STEAM_0:0:4').as_steam2_zero, 'STEAM_0:0:4') self.assertEqual(SteamID('STEAM_1:0:4').as_steam2_zero, 'STEAM_0:0:4') + self.assertEqual(SteamID('STEAM_4:0:4').as_steam2_zero, 'STEAM_4:0:4') + self.assertEqual(SteamID('STEAM_4:1:4').as_steam2_zero, 'STEAM_4:1:4') + def test_as_steam3(self): self.assertEqual(SteamID('[U:1:1234]').as_steam3, '[U:1:1234]') self.assertEqual(SteamID('[g:1:4]').as_steam3, '[g:1:4]') @@ -297,6 +303,12 @@ class steamid_functions(unittest.TestCase): self.assertEqual(steamid.steam2_to_tuple("STEAM_1:0:4"), (8, EType.Individual, EUniverse.Public, 1) ) + self.assertEqual(steamid.steam2_to_tuple("STEAM_4:1:1"), + (3, EType.Individual, EUniverse.Dev, 1) + ) + self.assertEqual(steamid.steam2_to_tuple("STEAM_4:0:4"), + (8, EType.Individual, EUniverse.Dev, 1) + ) def test_arg_steam3(self): self.assertIsNone(steamid.steam3_to_tuple('invalid_format'))