mc5-api-client 1.0.21__py3-none-any.whl → 1.0.23__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mc5_api_client/__init__.py +15 -1
- mc5_api_client/client.py +361 -0
- {mc5_api_client-1.0.21.dist-info → mc5_api_client-1.0.23.dist-info}/METADATA +300 -17
- {mc5_api_client-1.0.21.dist-info → mc5_api_client-1.0.23.dist-info}/RECORD +8 -8
- {mc5_api_client-1.0.21.dist-info → mc5_api_client-1.0.23.dist-info}/WHEEL +0 -0
- {mc5_api_client-1.0.21.dist-info → mc5_api_client-1.0.23.dist-info}/entry_points.txt +0 -0
- {mc5_api_client-1.0.21.dist-info → mc5_api_client-1.0.23.dist-info}/licenses/LICENSE +0 -0
- {mc5_api_client-1.0.21.dist-info → mc5_api_client-1.0.23.dist-info}/top_level.txt +0 -0
mc5_api_client/__init__.py
CHANGED
|
@@ -15,7 +15,7 @@ messaging, and more.
|
|
|
15
15
|
|
|
16
16
|
from typing import Optional, Dict, Any
|
|
17
17
|
|
|
18
|
-
__version__ = "1.0.
|
|
18
|
+
__version__ = "1.0.23"
|
|
19
19
|
__author__ = "Chizoba"
|
|
20
20
|
__email__ = "chizoba2026@hotmail.com"
|
|
21
21
|
__license__ = "MIT"
|
|
@@ -437,6 +437,20 @@ __all__ = [
|
|
|
437
437
|
"get_my_squad_info",
|
|
438
438
|
"update_my_squad_info",
|
|
439
439
|
"get_my_squad_members",
|
|
440
|
+
"calculate_xp_for_level",
|
|
441
|
+
"get_color_value",
|
|
442
|
+
"customize_squad_theme",
|
|
443
|
+
"set_squad_level",
|
|
444
|
+
"customize_squad_complete",
|
|
445
|
+
"quick_set_name",
|
|
446
|
+
"quick_set_rating",
|
|
447
|
+
"quick_set_member_limit",
|
|
448
|
+
"quick_set_colors",
|
|
449
|
+
"quick_set_level",
|
|
450
|
+
"quick_set_currency",
|
|
451
|
+
"quick_setup_professional_squad",
|
|
452
|
+
"quick_setup_gaming_squad",
|
|
453
|
+
"quick_reset_to_defaults",
|
|
440
454
|
"generate_device_id",
|
|
441
455
|
"create_federation_session",
|
|
442
456
|
"locate_service",
|
mc5_api_client/client.py
CHANGED
|
@@ -1832,6 +1832,367 @@ class MC5Client(SquadBattleMixin, FederationMixin, AlertsMixin, AccountMixin, Tr
|
|
|
1832
1832
|
"timestamp": time.time()
|
|
1833
1833
|
}
|
|
1834
1834
|
|
|
1835
|
+
# Squad Customization Helpers (NEW!)
|
|
1836
|
+
|
|
1837
|
+
def calculate_xp_for_level(self, level: int) -> int:
|
|
1838
|
+
"""
|
|
1839
|
+
Calculate XP required for a specific squad level.
|
|
1840
|
+
|
|
1841
|
+
Level System:
|
|
1842
|
+
- Level 1: 1000 XP
|
|
1843
|
+
- Level 2: 2000 XP
|
|
1844
|
+
- ...
|
|
1845
|
+
- Level 10: 10000 XP (maximum)
|
|
1846
|
+
|
|
1847
|
+
Args:
|
|
1848
|
+
level: Desired level (1-10)
|
|
1849
|
+
|
|
1850
|
+
Returns:
|
|
1851
|
+
XP value for the level
|
|
1852
|
+
"""
|
|
1853
|
+
if level < 1:
|
|
1854
|
+
level = 1
|
|
1855
|
+
elif level > 10:
|
|
1856
|
+
level = 10
|
|
1857
|
+
|
|
1858
|
+
return level * 1000
|
|
1859
|
+
|
|
1860
|
+
def get_color_value(self, color_name: str) -> str:
|
|
1861
|
+
"""
|
|
1862
|
+
Get color value for common colors.
|
|
1863
|
+
|
|
1864
|
+
Args:
|
|
1865
|
+
color_name: Name of the color
|
|
1866
|
+
|
|
1867
|
+
Returns:
|
|
1868
|
+
Color value in decimal format
|
|
1869
|
+
"""
|
|
1870
|
+
colors = {
|
|
1871
|
+
'black': '0',
|
|
1872
|
+
'white': '16777215',
|
|
1873
|
+
'red': '16711680',
|
|
1874
|
+
'green': '65280',
|
|
1875
|
+
'blue': '255',
|
|
1876
|
+
'yellow': '16776960',
|
|
1877
|
+
'purple': '16711808',
|
|
1878
|
+
'orange': '16753920',
|
|
1879
|
+
'pink': '16761035',
|
|
1880
|
+
'cyan': '65535',
|
|
1881
|
+
'lime': '65280',
|
|
1882
|
+
'navy': '128',
|
|
1883
|
+
'gold': '16766720',
|
|
1884
|
+
'silver': '12632256',
|
|
1885
|
+
'maroon': '8388608',
|
|
1886
|
+
'teal': '32768',
|
|
1887
|
+
'olive': '8421376'
|
|
1888
|
+
}
|
|
1889
|
+
|
|
1890
|
+
return colors.get(color_name.lower(), '0')
|
|
1891
|
+
|
|
1892
|
+
def customize_squad_theme(self, theme_name: str, squad_name: str = None) -> Dict[str, Any]:
|
|
1893
|
+
"""
|
|
1894
|
+
Apply a predefined color theme to your squad.
|
|
1895
|
+
|
|
1896
|
+
Args:
|
|
1897
|
+
theme_name: Name of the theme ('dark', 'fire', 'ice', 'nature')
|
|
1898
|
+
squad_name: Optional custom squad name
|
|
1899
|
+
|
|
1900
|
+
Returns:
|
|
1901
|
+
Dictionary with update result or error details
|
|
1902
|
+
"""
|
|
1903
|
+
themes = {
|
|
1904
|
+
'dark': {
|
|
1905
|
+
'_logo_clr_prim': self.get_color_value('black'),
|
|
1906
|
+
'_logo_clr_sec': self.get_color_value('white'),
|
|
1907
|
+
'name': squad_name or 'Dark Knights'
|
|
1908
|
+
},
|
|
1909
|
+
'fire': {
|
|
1910
|
+
'_logo_clr_prim': self.get_color_value('red'),
|
|
1911
|
+
'_logo_clr_sec': self.get_color_value('orange'),
|
|
1912
|
+
'name': squad_name or 'Fire Warriors'
|
|
1913
|
+
},
|
|
1914
|
+
'ice': {
|
|
1915
|
+
'_logo_clr_prim': self.get_color_value('blue'),
|
|
1916
|
+
'_logo_clr_sec': self.get_color_value('cyan'),
|
|
1917
|
+
'name': squad_name or 'Ice Legion'
|
|
1918
|
+
},
|
|
1919
|
+
'nature': {
|
|
1920
|
+
'_logo_clr_prim': self.get_color_value('green'),
|
|
1921
|
+
'_logo_clr_sec': self.get_color_value('lime'),
|
|
1922
|
+
'name': squad_name or 'Nature Guardians'
|
|
1923
|
+
}
|
|
1924
|
+
}
|
|
1925
|
+
|
|
1926
|
+
theme = themes.get(theme_name.lower())
|
|
1927
|
+
if not theme:
|
|
1928
|
+
return {
|
|
1929
|
+
"error": f"Unknown theme: {theme_name}",
|
|
1930
|
+
"available_themes": list(themes.keys()),
|
|
1931
|
+
"timestamp": time.time()
|
|
1932
|
+
}
|
|
1933
|
+
|
|
1934
|
+
return self.update_my_squad_info(**theme)
|
|
1935
|
+
|
|
1936
|
+
def set_squad_level(self, level: int, squad_name: str = None) -> Dict[str, Any]:
|
|
1937
|
+
"""
|
|
1938
|
+
Set squad to a specific level with appropriate settings.
|
|
1939
|
+
|
|
1940
|
+
Args:
|
|
1941
|
+
level: Desired level (1-10)
|
|
1942
|
+
squad_name: Optional custom squad name
|
|
1943
|
+
|
|
1944
|
+
Returns:
|
|
1945
|
+
Dictionary with update result or error details
|
|
1946
|
+
"""
|
|
1947
|
+
if level < 1 or level > 10:
|
|
1948
|
+
return {
|
|
1949
|
+
"error": "Level must be between 1 and 10",
|
|
1950
|
+
"timestamp": time.time()
|
|
1951
|
+
}
|
|
1952
|
+
|
|
1953
|
+
updates = {
|
|
1954
|
+
"name": squad_name or f"Level {level} Squad",
|
|
1955
|
+
"_xp": self.calculate_xp_for_level(level),
|
|
1956
|
+
"rating": level * 500,
|
|
1957
|
+
"_min_join_value": level * 100,
|
|
1958
|
+
"member_limit": 20 + (level * 5),
|
|
1959
|
+
"description": f"Elite squad at Level {level}!"
|
|
1960
|
+
}
|
|
1961
|
+
|
|
1962
|
+
return self.update_my_squad_info(**updates)
|
|
1963
|
+
|
|
1964
|
+
def customize_squad_complete(self, **kwargs) -> Dict[str, Any]:
|
|
1965
|
+
"""
|
|
1966
|
+
Customize squad with any parameters and validation.
|
|
1967
|
+
|
|
1968
|
+
Args:
|
|
1969
|
+
**kwargs: Any squad parameters to update
|
|
1970
|
+
|
|
1971
|
+
Available parameters:
|
|
1972
|
+
- name: Squad name
|
|
1973
|
+
- description: Squad description
|
|
1974
|
+
- rating: Squad rating
|
|
1975
|
+
- score: Squad score
|
|
1976
|
+
- member_limit: Maximum members (1-300)
|
|
1977
|
+
- membership: Membership type ('open' or 'owner_approved')
|
|
1978
|
+
- _logo: Logo ID
|
|
1979
|
+
- _logo_clr_prim: Primary color (RGB decimal 0-16777215)
|
|
1980
|
+
- _logo_clr_sec: Secondary color (RGB decimal 0-16777215)
|
|
1981
|
+
- _min_join_value: Minimum join value
|
|
1982
|
+
- _xp: Squad XP (1000-10000, determines level)
|
|
1983
|
+
- _killsig_id: Kill signature ID
|
|
1984
|
+
- currency: Squad currency
|
|
1985
|
+
- active_clan_label: Active clan label
|
|
1986
|
+
- active_clan_threshold: Active clan threshold
|
|
1987
|
+
|
|
1988
|
+
Returns:
|
|
1989
|
+
Dictionary with update result or error details
|
|
1990
|
+
"""
|
|
1991
|
+
# Validate data
|
|
1992
|
+
errors = []
|
|
1993
|
+
|
|
1994
|
+
# Validate XP/Level
|
|
1995
|
+
if '_xp' in kwargs:
|
|
1996
|
+
try:
|
|
1997
|
+
xp = int(kwargs['_xp'])
|
|
1998
|
+
if xp < 1000 or xp > 10000:
|
|
1999
|
+
errors.append("XP must be between 1000 (Level 1) and 10000 (Level 10)")
|
|
2000
|
+
except ValueError:
|
|
2001
|
+
errors.append("_xp must be a valid number")
|
|
2002
|
+
|
|
2003
|
+
# Validate member limit
|
|
2004
|
+
if 'member_limit' in kwargs:
|
|
2005
|
+
try:
|
|
2006
|
+
limit = int(kwargs['member_limit'])
|
|
2007
|
+
if limit < 1 or limit > 300:
|
|
2008
|
+
errors.append("Member limit must be between 1 and 300")
|
|
2009
|
+
except ValueError:
|
|
2010
|
+
errors.append("member_limit must be a valid number")
|
|
2011
|
+
|
|
2012
|
+
# Validate colors
|
|
2013
|
+
for color_key in ['_logo_clr_prim', '_logo_clr_sec']:
|
|
2014
|
+
if color_key in kwargs:
|
|
2015
|
+
try:
|
|
2016
|
+
color = int(kwargs[color_key])
|
|
2017
|
+
if color < 0 or color > 16777215: # RGB max value
|
|
2018
|
+
errors.append(f"{color_key} must be between 0 and 16777215")
|
|
2019
|
+
except ValueError:
|
|
2020
|
+
errors.append(f"{color_key} must be a valid number")
|
|
2021
|
+
|
|
2022
|
+
# Validate rating
|
|
2023
|
+
if 'rating' in kwargs:
|
|
2024
|
+
try:
|
|
2025
|
+
rating = int(kwargs['rating'])
|
|
2026
|
+
if rating < 0 or rating > 99999:
|
|
2027
|
+
errors.append("Rating must be between 0 and 99999")
|
|
2028
|
+
except ValueError:
|
|
2029
|
+
errors.append("rating must be a valid number")
|
|
2030
|
+
|
|
2031
|
+
if errors:
|
|
2032
|
+
return {
|
|
2033
|
+
"error": "Validation failed",
|
|
2034
|
+
"validation_errors": errors,
|
|
2035
|
+
"timestamp": time.time()
|
|
2036
|
+
}
|
|
2037
|
+
|
|
2038
|
+
# Apply updates
|
|
2039
|
+
return self.update_my_squad_info(**kwargs)
|
|
2040
|
+
|
|
2041
|
+
# Quick Squad Customization Functions (NEW!)
|
|
2042
|
+
|
|
2043
|
+
def quick_set_name(self, name: str) -> Dict[str, Any]:
|
|
2044
|
+
"""
|
|
2045
|
+
Quickly set squad name.
|
|
2046
|
+
|
|
2047
|
+
Args:
|
|
2048
|
+
name: New squad name
|
|
2049
|
+
|
|
2050
|
+
Returns:
|
|
2051
|
+
Dictionary with update result or error details
|
|
2052
|
+
"""
|
|
2053
|
+
return self.update_my_squad_info(name=name)
|
|
2054
|
+
|
|
2055
|
+
def quick_set_rating(self, rating: int) -> Dict[str, Any]:
|
|
2056
|
+
"""
|
|
2057
|
+
Quickly set squad rating.
|
|
2058
|
+
|
|
2059
|
+
Args:
|
|
2060
|
+
rating: New squad rating (0-99999)
|
|
2061
|
+
|
|
2062
|
+
Returns:
|
|
2063
|
+
Dictionary with update result or error details
|
|
2064
|
+
"""
|
|
2065
|
+
return self.update_my_squad_info(rating=rating)
|
|
2066
|
+
|
|
2067
|
+
def quick_set_member_limit(self, limit: int) -> Dict[str, Any]:
|
|
2068
|
+
"""
|
|
2069
|
+
Quickly set member limit.
|
|
2070
|
+
|
|
2071
|
+
Args:
|
|
2072
|
+
limit: New member limit (1-300)
|
|
2073
|
+
|
|
2074
|
+
Returns:
|
|
2075
|
+
Dictionary with update result or error details
|
|
2076
|
+
"""
|
|
2077
|
+
return self.update_my_squad_info(member_limit=limit)
|
|
2078
|
+
|
|
2079
|
+
def quick_set_colors(self, primary_color: str, secondary_color: str = None) -> Dict[str, Any]:
|
|
2080
|
+
"""
|
|
2081
|
+
Quickly set squad colors using color names.
|
|
2082
|
+
|
|
2083
|
+
Args:
|
|
2084
|
+
primary_color: Primary color name
|
|
2085
|
+
secondary_color: Secondary color name (optional)
|
|
2086
|
+
|
|
2087
|
+
Returns:
|
|
2088
|
+
Dictionary with update result or error details
|
|
2089
|
+
"""
|
|
2090
|
+
updates = {
|
|
2091
|
+
"_logo_clr_prim": self.get_color_value(primary_color)
|
|
2092
|
+
}
|
|
2093
|
+
|
|
2094
|
+
if secondary_color:
|
|
2095
|
+
updates["_logo_clr_sec"] = self.get_color_value(secondary_color)
|
|
2096
|
+
|
|
2097
|
+
return self.update_my_squad_info(**updates)
|
|
2098
|
+
|
|
2099
|
+
def quick_set_level(self, level: int, name: str = None) -> Dict[str, Any]:
|
|
2100
|
+
"""
|
|
2101
|
+
Quickly set squad to specific level.
|
|
2102
|
+
|
|
2103
|
+
Args:
|
|
2104
|
+
level: Desired level (1-10)
|
|
2105
|
+
name: Optional custom squad name
|
|
2106
|
+
|
|
2107
|
+
Returns:
|
|
2108
|
+
Dictionary with update result or error details
|
|
2109
|
+
"""
|
|
2110
|
+
return self.set_squad_level(level, name)
|
|
2111
|
+
|
|
2112
|
+
def quick_set_currency(self, amount: int) -> Dict[str, Any]:
|
|
2113
|
+
"""
|
|
2114
|
+
Quickly set squad currency.
|
|
2115
|
+
|
|
2116
|
+
Args:
|
|
2117
|
+
amount: Currency amount
|
|
2118
|
+
|
|
2119
|
+
Returns:
|
|
2120
|
+
Dictionary with update result or error details
|
|
2121
|
+
"""
|
|
2122
|
+
return self.update_my_squad_info(currency=str(amount))
|
|
2123
|
+
|
|
2124
|
+
def quick_setup_professional_squad(self, name: str, level: int = 8) -> Dict[str, Any]:
|
|
2125
|
+
"""
|
|
2126
|
+
Quick setup for professional squad with optimal settings.
|
|
2127
|
+
|
|
2128
|
+
Args:
|
|
2129
|
+
name: Squad name
|
|
2130
|
+
level: Squad level (1-10)
|
|
2131
|
+
|
|
2132
|
+
Returns:
|
|
2133
|
+
Dictionary with update result or error details
|
|
2134
|
+
"""
|
|
2135
|
+
return self.customize_squad_complete(
|
|
2136
|
+
name=name,
|
|
2137
|
+
_xp=self.calculate_xp_for_level(level),
|
|
2138
|
+
rating=level * 1000,
|
|
2139
|
+
member_limit=50 + (level * 10),
|
|
2140
|
+
membership="owner_approved",
|
|
2141
|
+
_min_join_value=level * 200,
|
|
2142
|
+
description=f"Professional squad at Level {level}!",
|
|
2143
|
+
currency=str(level * 5000),
|
|
2144
|
+
active_clan_label="true"
|
|
2145
|
+
)
|
|
2146
|
+
|
|
2147
|
+
def quick_setup_gaming_squad(self, name: str, theme: str = "fire") -> Dict[str, Any]:
|
|
2148
|
+
"""
|
|
2149
|
+
Quick setup for gaming squad with theme.
|
|
2150
|
+
|
|
2151
|
+
Args:
|
|
2152
|
+
name: Squad name
|
|
2153
|
+
theme: Color theme ('fire', 'ice', 'dark', 'nature')
|
|
2154
|
+
|
|
2155
|
+
Returns:
|
|
2156
|
+
Dictionary with update result or error details
|
|
2157
|
+
"""
|
|
2158
|
+
# Apply theme first
|
|
2159
|
+
theme_result = self.customize_squad_theme(theme, name)
|
|
2160
|
+
|
|
2161
|
+
if theme_result and 'error' not in theme_result:
|
|
2162
|
+
# Add gaming-specific settings
|
|
2163
|
+
gaming_updates = {
|
|
2164
|
+
membership="owner_approved",
|
|
2165
|
+
_min_join_value=1000,
|
|
2166
|
+
currency="10000",
|
|
2167
|
+
active_clan_label="true"
|
|
2168
|
+
}
|
|
2169
|
+
|
|
2170
|
+
return self.update_my_squad_info(**gaming_updates)
|
|
2171
|
+
|
|
2172
|
+
return theme_result
|
|
2173
|
+
|
|
2174
|
+
def quick_reset_to_defaults(self) -> Dict[str, Any]:
|
|
2175
|
+
"""
|
|
2176
|
+
Quick reset squad to default settings.
|
|
2177
|
+
|
|
2178
|
+
Returns:
|
|
2179
|
+
Dictionary with update result or error details
|
|
2180
|
+
"""
|
|
2181
|
+
return self.customize_squad_complete(
|
|
2182
|
+
name="Default Squad",
|
|
2183
|
+
description="Default squad description",
|
|
2184
|
+
rating=1000,
|
|
2185
|
+
member_limit=30,
|
|
2186
|
+
membership="open",
|
|
2187
|
+
_logo="1",
|
|
2188
|
+
_logo_clr_prim=self.get_color_value("blue"),
|
|
2189
|
+
_logo_clr_sec=self.get_color_value("white"),
|
|
2190
|
+
_min_join_value=500,
|
|
2191
|
+
_xp=self.calculate_xp_for_level(1),
|
|
2192
|
+
currency="0",
|
|
2193
|
+
active_clan_label="false"
|
|
2194
|
+
)
|
|
2195
|
+
|
|
1835
2196
|
# Events API
|
|
1836
2197
|
|
|
1837
2198
|
def get_events(self, event_type: str = None, status: str = None) -> List[Dict[str, Any]]:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mc5_api_client
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.23
|
|
4
4
|
Summary: A comprehensive Python library for interacting with the Modern Combat 5 API
|
|
5
5
|
Home-page: https://pypi.org/project/mc5-api-client/
|
|
6
6
|
Author: Chizoba
|
|
@@ -81,22 +81,27 @@ Dynamic: requires-python
|
|
|
81
81
|
[](https://python.org)
|
|
82
82
|
[](LICENSE)
|
|
83
83
|
[](mailto:chizoba2026@hotmail.com)
|
|
84
|
-
[](https://pypi.org/project/mc5-api-client/)
|
|
85
85
|
[](https://pypi.org/project/mc5-api-client/)
|
|
86
86
|
|
|
87
87
|
Hey there! 👋 Welcome to the **Modern Combat 5 API Client** - Comprehensive Python library for interacting with Modern Combat 5 game servers
|
|
88
88
|
|
|
89
|
-
## ✨ **New in v1.0.
|
|
90
|
-
|
|
91
|
-
-
|
|
92
|
-
- 🚀 **
|
|
93
|
-
-
|
|
94
|
-
-
|
|
95
|
-
-
|
|
96
|
-
-
|
|
97
|
-
-
|
|
98
|
-
-
|
|
99
|
-
-
|
|
89
|
+
## ✨ **New in v1.0.21: Revolutionary Automatic Squad Management!**
|
|
90
|
+
|
|
91
|
+
- 🎮 **REVOLUTIONARY: Automatic Squad Management** - No more manual squad IDs! Automatically detect and manage your squad from your profile
|
|
92
|
+
- 🚀 **Zero Configuration Squad Operations** - `get_my_squad_info()`, `update_my_squad_info()`, `get_my_squad_members()` - all work without squad IDs
|
|
93
|
+
- 🔄 **Squad Switching Support** - Automatically adapts when you change squads
|
|
94
|
+
- 🛡️ **Intelligent Error Handling** - Graceful handling for users without squads
|
|
95
|
+
- 📱 **Perfect for Mobile/Web Apps** - Standalone functions work without client instances
|
|
96
|
+
- 🎯 **MC5Easy** - Super simple one-line functions for everyday tasks
|
|
97
|
+
- 🚀 **One-Liner Functions** - `check_my_daily_tasks()`, `get_my_mc5_profile()`, `find_mc5_player()`
|
|
98
|
+
- 📝 **Context Manager** - Auto-connect and auto-cleanup with `with MC5Easy()`
|
|
99
|
+
- 🔧 **Environment Variables** - Secure credential management with `MC5_USERNAME` and `MC5_PASSWORD`
|
|
100
|
+
- 🌐 **Service Location** - Dynamic MC5 service endpoint discovery
|
|
101
|
+
- 🎮 **Federation Sessions** - Complete game launch preparation
|
|
102
|
+
- 🌍 **Global ID Management** - Device tracking and identification
|
|
103
|
+
- 🔗 **Connection Monitoring** - Service health and status tracking
|
|
104
|
+
- 🏠 **Room Discovery** - Find available game rooms
|
|
100
105
|
- 🏰 **PC Storage Admin** - Complete squad management with storage scopes
|
|
101
106
|
- 🔧 **StorageAdminMixin** - Core storage functionality for advanced operations
|
|
102
107
|
- 👤 **System Account Access** - 5 working system accounts discovered
|
|
@@ -140,12 +145,84 @@ Think of this as your remote control for Modern Combat 5! Here's what you can do
|
|
|
140
145
|
|
|
141
146
|
## 🚀 Installation
|
|
142
147
|
|
|
143
|
-
### 🎉 MC5 API Client v1.0.
|
|
148
|
+
### 🎉 MC5 API Client v1.0.21 - Revolutionary Automatic Squad Management!
|
|
144
149
|
|
|
145
150
|
```bash
|
|
146
|
-
pip install mc5_api_client==1.0.
|
|
151
|
+
pip install mc5_api_client==1.0.21
|
|
147
152
|
```
|
|
148
153
|
|
|
154
|
+
## 🎮 **🚀 REVOLUTIONARY FEATURE: Automatic Squad Management**
|
|
155
|
+
|
|
156
|
+
### **🎯 The Problem We Solved:**
|
|
157
|
+
Previously, users had to manually specify squad IDs for squad operations:
|
|
158
|
+
```python
|
|
159
|
+
# ❌ OLD METHOD - Complex and error-prone
|
|
160
|
+
squad_id = "d1e7437c-0156-11f1-ad07-b8ca3a709038" # Hard to remember!
|
|
161
|
+
squad_info = client.get_clan_settings(squad_id) # Manual ID required
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### **✅ Our Solution - Automatic Detection:**
|
|
165
|
+
```python
|
|
166
|
+
# ✅ NEW METHOD - Simple and automatic
|
|
167
|
+
squad_info = client.get_my_squad_info() # Auto-fetched from profile!
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### **🎮 Key Benefits:**
|
|
171
|
+
- 🎯 **No Squad ID Memorization** - Automatically detected from your profile
|
|
172
|
+
- 🔄 **Squad Switching Support** - Works when you change squads
|
|
173
|
+
- 🛡️ **Intelligent Error Handling** - Graceful handling for users without squads
|
|
174
|
+
- 📱 **Perfect for Mobile/Web Apps** - Standalone functions work without client instances
|
|
175
|
+
- 🚀 **Zero Configuration** - Just call the methods, no setup required
|
|
176
|
+
|
|
177
|
+
### **🔧 Available Methods:**
|
|
178
|
+
|
|
179
|
+
#### **Client Methods:**
|
|
180
|
+
```python
|
|
181
|
+
from mc5_api_client import MC5Client
|
|
182
|
+
|
|
183
|
+
client = MC5Client(username, password)
|
|
184
|
+
|
|
185
|
+
# Get squad ID automatically
|
|
186
|
+
squad_id = client.get_my_squad_id()
|
|
187
|
+
|
|
188
|
+
# Get complete squad information
|
|
189
|
+
squad_info = client.get_my_squad_info()
|
|
190
|
+
|
|
191
|
+
# Get squad members
|
|
192
|
+
members = client.get_my_squad_members()
|
|
193
|
+
|
|
194
|
+
# Update squad (no squad ID needed!)
|
|
195
|
+
client.update_my_squad_info(
|
|
196
|
+
name="Elite Squad",
|
|
197
|
+
description="Best squad in MC5!",
|
|
198
|
+
rating=2000
|
|
199
|
+
)
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
#### **Standalone Functions:**
|
|
203
|
+
```python
|
|
204
|
+
from mc5_api_client import get_my_squad_info, update_my_squad_info
|
|
205
|
+
|
|
206
|
+
# Work without creating a client!
|
|
207
|
+
squad_info = get_my_squad_info(
|
|
208
|
+
username="your_credential",
|
|
209
|
+
password="your_password"
|
|
210
|
+
)
|
|
211
|
+
|
|
212
|
+
# Update squad without client
|
|
213
|
+
result = update_my_squad_info(
|
|
214
|
+
username="your_credential",
|
|
215
|
+
password="your_password",
|
|
216
|
+
name="New Squad Name"
|
|
217
|
+
)
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### **🔄 Real-World Impact:**
|
|
221
|
+
- **10x easier** squad management
|
|
222
|
+
- **Zero configuration** required
|
|
223
|
+
- **Automatic adaptation** to squad changes
|
|
224
|
+
- **Perfect for** modern applications
|
|
225
|
+
|
|
149
226
|
## 🎯 **Usage Examples**
|
|
150
227
|
|
|
151
228
|
### **🎮 Basic Usage (MC5Client)**
|
|
@@ -245,6 +322,203 @@ with MC5Easy(username, password) as mc5:
|
|
|
245
322
|
print(f"Device: {device_info}")
|
|
246
323
|
```
|
|
247
324
|
|
|
325
|
+
### **🎮 Automatic Squad Management (REVOLUTIONARY!)**
|
|
326
|
+
```python
|
|
327
|
+
from mc5_api_client import MC5Client, get_my_squad_info, update_my_squad_info
|
|
328
|
+
|
|
329
|
+
# Initialize client
|
|
330
|
+
client = MC5Client(username, password)
|
|
331
|
+
|
|
332
|
+
# 🚀 NO MORE SQUAD ID NEEDED! Automatically detected from your profile!
|
|
333
|
+
|
|
334
|
+
# Get your squad information automatically
|
|
335
|
+
squad_info = client.get_my_squad_info()
|
|
336
|
+
print(f"Squad Name: {squad_info['name']}")
|
|
337
|
+
print(f"Squad Rating: {squad_info['rating']}")
|
|
338
|
+
print(f"Description: {squad_info['description']}")
|
|
339
|
+
|
|
340
|
+
# Get squad members automatically
|
|
341
|
+
members = client.get_my_squad_members()
|
|
342
|
+
print(f"Member Count: {members['member_count']}")
|
|
343
|
+
for member in members['members'][:3]:
|
|
344
|
+
print(f" - {member['name']}")
|
|
345
|
+
|
|
346
|
+
# Update squad automatically (no squad ID required!)
|
|
347
|
+
client.update_my_squad_info(
|
|
348
|
+
name="Elite Squad",
|
|
349
|
+
description="Best squad in MC5!",
|
|
350
|
+
rating=2000,
|
|
351
|
+
min_join_value=1000
|
|
352
|
+
)
|
|
353
|
+
|
|
354
|
+
# 🔄 Works even when you switch squads!
|
|
355
|
+
# The methods automatically detect your current squad
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
### **🚀 Standalone Squad Management (No Client Required!)**
|
|
359
|
+
```python
|
|
360
|
+
from mc5_api_client import get_my_squad_id, get_my_squad_info, update_my_squad_info
|
|
361
|
+
|
|
362
|
+
# Get squad ID without creating client
|
|
363
|
+
squad_id = get_my_squad_id(
|
|
364
|
+
username="your_credential",
|
|
365
|
+
password="your_password"
|
|
366
|
+
)
|
|
367
|
+
print(f"Your Squad ID: {squad_id}")
|
|
368
|
+
|
|
369
|
+
# Get squad info without creating client
|
|
370
|
+
squad_info = get_my_squad_info(
|
|
371
|
+
username="your_credential",
|
|
372
|
+
password="your_password"
|
|
373
|
+
)
|
|
374
|
+
print(f"Squad: {squad_info['name']}")
|
|
375
|
+
|
|
376
|
+
# Update squad without creating client
|
|
377
|
+
result = update_my_squad_info(
|
|
378
|
+
username="your_credential",
|
|
379
|
+
password="your_password",
|
|
380
|
+
name="New Squad Name",
|
|
381
|
+
description="Updated description"
|
|
382
|
+
)
|
|
383
|
+
print(f"Update Result: {result}")
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
### **🔄 Traditional vs Automatic Squad Management**
|
|
387
|
+
```python
|
|
388
|
+
# ❌ OLD METHOD - Manual squad ID required
|
|
389
|
+
squad_id = "d1e7437c-0156-11f1-ad07-b8ca3a709038" # Hard to remember!
|
|
390
|
+
squad_info = client.get_clan_settings(squad_id) # Manual ID required
|
|
391
|
+
members = client.get_clan_members(squad_id) # Manual ID required
|
|
392
|
+
client.update_clan_settings(squad_id, name="New") # Manual ID required
|
|
393
|
+
|
|
394
|
+
# ✅ NEW METHOD - Automatic detection
|
|
395
|
+
squad_info = client.get_my_squad_info() # Auto-fetched!
|
|
396
|
+
members = client.get_my_squad_members() # Auto-fetched!
|
|
397
|
+
client.update_my_squad_info(name="New") # Auto-fetched!
|
|
398
|
+
|
|
399
|
+
# Benefits:
|
|
400
|
+
# 🎯 No squad ID memorization
|
|
401
|
+
# 🔄 Works when switching squads
|
|
402
|
+
# 🛡️ Error handling for users without squads
|
|
403
|
+
# 🚀 Simpler API for everyday use
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
### **🎨 Complete Squad Customization (NEW!)**
|
|
407
|
+
```python
|
|
408
|
+
from mc5_api_client import MC5Client
|
|
409
|
+
|
|
410
|
+
client = MC5Client(username, password)
|
|
411
|
+
|
|
412
|
+
# 🚀 SUPER SIMPLE - One-line customizations!
|
|
413
|
+
client.quick_set_name("My Awesome Squad") # Change name
|
|
414
|
+
client.quick_set_level(5) # Set to Level 5
|
|
415
|
+
client.quick_set_colors("red", "white") # Red/White colors
|
|
416
|
+
client.quick_set_member_limit(50) # Set member limit
|
|
417
|
+
client.quick_set_currency(10000) # Set currency
|
|
418
|
+
|
|
419
|
+
# 🎯 QUICK SETUPS - Professional results in one line!
|
|
420
|
+
client.quick_setup_professional_squad("Elite Squad", level=8) # Professional squad
|
|
421
|
+
client.quick_setup_gaming_squad("Gaming Legends", "fire") # Gaming squad with theme
|
|
422
|
+
|
|
423
|
+
# 🎨 THEMES - Beautiful colors instantly
|
|
424
|
+
client.customize_squad_theme('fire') # Fire theme
|
|
425
|
+
client.customize_squad_theme('ice') # Ice theme
|
|
426
|
+
client.customize_squad_theme('dark') # Dark theme
|
|
427
|
+
client.customize_squad_theme('nature') # Nature theme
|
|
428
|
+
|
|
429
|
+
# ⭐ LEVEL SYSTEM - Automatic XP calculation
|
|
430
|
+
client.set_squad_level(10, "Max Level Squad") # Level 10 (max)
|
|
431
|
+
# Level 1: 1000 XP, Level 5: 5000 XP, Level 10: 10000 XP
|
|
432
|
+
|
|
433
|
+
# 🔧 COMPLETE CUSTOMIZATION - Full control with validation
|
|
434
|
+
client.customize_squad_complete(
|
|
435
|
+
name="452e55e84897+",
|
|
436
|
+
rating=3573,
|
|
437
|
+
score=5200,
|
|
438
|
+
member_limit=300,
|
|
439
|
+
_logo_clr_prim=client.get_color_value("red"),
|
|
440
|
+
_xp=client.calculate_xp_for_level(9),
|
|
441
|
+
currency="10000"
|
|
442
|
+
)
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
### **📊 Squad Parameters You Can Customize:**
|
|
446
|
+
```python
|
|
447
|
+
# 📝 Basic Information
|
|
448
|
+
name: "Your Squad Name"
|
|
449
|
+
description: "Your squad description"
|
|
450
|
+
rating: 5000
|
|
451
|
+
score: 5200
|
|
452
|
+
|
|
453
|
+
# 👥 Member Settings
|
|
454
|
+
member_limit: 300 # 1-300 members
|
|
455
|
+
membership: "owner_approved" # or "open"
|
|
456
|
+
_min_join_value: 1000 # Minimum score to join
|
|
457
|
+
|
|
458
|
+
# 🎨 Visual Customization
|
|
459
|
+
_logo: "1" # Logo ID
|
|
460
|
+
_logo_clr_prim: "16711680" # Primary color (RGB decimal)
|
|
461
|
+
_logo_clr_sec: "16777215" # Secondary color (RGB decimal)
|
|
462
|
+
# Colors: black=0, white=16777215, red=16711680, blue=255, green=65280
|
|
463
|
+
|
|
464
|
+
# ⭐ Level & Progress
|
|
465
|
+
_xp: "5000" # Level 5 (1000-10000, Level 1-10)
|
|
466
|
+
# Level 1: 1000, Level 2: 2000, ..., Level 10: 10000
|
|
467
|
+
|
|
468
|
+
# 💰 Economy
|
|
469
|
+
currency: "10000"
|
|
470
|
+
_killsig_id: "default_killsig_01"
|
|
471
|
+
|
|
472
|
+
# 🏃 Activity Settings
|
|
473
|
+
active_clan_label: "true"
|
|
474
|
+
active_clan_threshold: "50"
|
|
475
|
+
```
|
|
476
|
+
|
|
477
|
+
### **🚀 Quick Functions - EASIEST WAY TO CUSTOMIZE!**
|
|
478
|
+
```python
|
|
479
|
+
# 📝 BASIC QUICK FUNCTIONS
|
|
480
|
+
client.quick_set_name("My Squad") # Change name
|
|
481
|
+
client.quick_set_rating(5000) # Set rating
|
|
482
|
+
client.quick_set_member_limit(50) # Set member limit
|
|
483
|
+
client.quick_set_currency(10000) # Set currency
|
|
484
|
+
|
|
485
|
+
# � COLOR QUICK FUNCTIONS
|
|
486
|
+
client.quick_set_colors("red") # Red theme
|
|
487
|
+
client.quick_set_colors("blue", "white") # Blue/White theme
|
|
488
|
+
client.quick_set_colors("black", "gold") # Black/Gold theme
|
|
489
|
+
|
|
490
|
+
# ⭐ LEVEL QUICK FUNCTIONS
|
|
491
|
+
client.quick_set_level(5) # Set to Level 5
|
|
492
|
+
client.quick_set_level(10, "Max Level") # Set to Level 10
|
|
493
|
+
|
|
494
|
+
# 🏆 PROFESSIONAL QUICK SETUPS
|
|
495
|
+
client.quick_setup_professional_squad("Elite Squad", level=8) # Professional setup
|
|
496
|
+
client.quick_setup_gaming_squad("Gaming Squad", "fire") # Gaming setup
|
|
497
|
+
|
|
498
|
+
# 🔄 RESET QUICK FUNCTION
|
|
499
|
+
client.quick_reset_to_defaults() # Reset to defaults
|
|
500
|
+
```
|
|
501
|
+
|
|
502
|
+
### **�🎮 Quick Customization Examples:**
|
|
503
|
+
```python
|
|
504
|
+
# 🚀 One-line level upgrades
|
|
505
|
+
client.quick_set_level(10) # Max level squad
|
|
506
|
+
client.quick_set_level(5, "Level 5 Warriors") # Custom name
|
|
507
|
+
|
|
508
|
+
# 🎨 One-line theme applications
|
|
509
|
+
client.customize_squad_theme('fire') # Fire theme
|
|
510
|
+
client.customize_squad_theme('ice', 'Ice Squad') # Custom name
|
|
511
|
+
|
|
512
|
+
# 🔧 Complete professional setup
|
|
513
|
+
client.customize_squad_complete(
|
|
514
|
+
name="Elite Squad",
|
|
515
|
+
rating=8000,
|
|
516
|
+
_xp=client.calculate_xp_for_level(8),
|
|
517
|
+
_logo_clr_prim=client.get_color_value('purple'),
|
|
518
|
+
member_limit=100
|
|
519
|
+
)
|
|
520
|
+
```
|
|
521
|
+
|
|
248
522
|
## 📱 **Run Examples:** Completed!
|
|
249
523
|
|
|
250
524
|
**🎯 Super Easy Interface (NEW in v1.0.18):**
|
|
@@ -329,8 +603,17 @@ python examples/service_location_example.py
|
|
|
329
603
|
# Game launch and federation sessions:
|
|
330
604
|
python examples/game_launch_example.py
|
|
331
605
|
|
|
332
|
-
#
|
|
333
|
-
python examples/
|
|
606
|
+
# Automatic squad management:
|
|
607
|
+
python examples/automatic_squad_management.py
|
|
608
|
+
|
|
609
|
+
# Complete squad customization:
|
|
610
|
+
python examples/complete_squad_customization.py
|
|
611
|
+
|
|
612
|
+
# Quick squad customization:
|
|
613
|
+
python examples/squad_customization_quick.py
|
|
614
|
+
|
|
615
|
+
# Squad quick start (super simple):
|
|
616
|
+
python examples/squad_quick_start.py
|
|
334
617
|
|
|
335
618
|
# Authentication examples:
|
|
336
619
|
python examples/authentication_example.py
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
mc5_api_client/__init__.py,sha256=
|
|
1
|
+
mc5_api_client/__init__.py,sha256=edDAYE4uY6borS9d1ROx3bUkNP3SUvh15maqdXT7aJY,13613
|
|
2
2
|
mc5_api_client/account.py,sha256=EmydXCsCXaKqMw21oVttQfYuDl50pa2dwhcTeHtnxbQ,14396
|
|
3
3
|
mc5_api_client/account_quick.py,sha256=t4ki4ujYENmcnd_004f0pO9SPxPyCllz4WHpBG9wNbo,10458
|
|
4
4
|
mc5_api_client/admin_client.py,sha256=527aavolxVhY2M5ceFxVbbE5YTczU9Z86Fdt1UzdRZM,15220
|
|
@@ -6,7 +6,7 @@ mc5_api_client/alerts.py,sha256=zW-cEwSSShuHkGxTBQaS8Ynf1a0hh5RMQ0G3WC_ajI0,1322
|
|
|
6
6
|
mc5_api_client/alerts_quick.py,sha256=D1j0RiHteYqoAgc4KYqTxYG1Hkud3b-xWRV_VOUEnY0,7946
|
|
7
7
|
mc5_api_client/auth.py,sha256=z8vmyQIHUdAzk0pUyKCesT8gTv4jboLIFGBxAu1v_-8,13396
|
|
8
8
|
mc5_api_client/cli.py,sha256=6xciRjWkUMOxgxlbDsoOiHRuirXPy7uc9WURXPKmgGc,17255
|
|
9
|
-
mc5_api_client/client.py,sha256=
|
|
9
|
+
mc5_api_client/client.py,sha256=Ual-DEU_PptvQbM6FkTzQbP0CUToqqXbepwUj__vS00,131067
|
|
10
10
|
mc5_api_client/debug.py,sha256=524vNCE7jM_KP5JM81-3eI2cmFBBA-Hf7Uy0cIL75W0,8240
|
|
11
11
|
mc5_api_client/easy_mc5.py,sha256=kfjOJMW-VRAZcXEF1yHiGsACgjb-ZjXGuw1U_gepSQY,24202
|
|
12
12
|
mc5_api_client/exceptions.py,sha256=o7od4GrEIlgq6xSNUjZdh74xoDTytF3PLcMq5ewRiJw,2683
|
|
@@ -24,9 +24,9 @@ mc5_api_client/storage_admin.py,sha256=l-nwskbpa3KpeIoWcwVRicgBSvrTvQ5aE2QU_e366
|
|
|
24
24
|
mc5_api_client/telemetry.py,sha256=k8qOimPg-AKsnMclIgeqYCJ_97j2pWyiN7Lg80D4sKo,13246
|
|
25
25
|
mc5_api_client/transfer.py,sha256=-pln70360mo4cKBQIUzp_wt9ce1Cr4YA6aJDFPKEjzQ,14381
|
|
26
26
|
mc5_api_client/transfer_quick.py,sha256=HhRbp4FVzFwuzHDcqOyYiVjeVEIfgezlWd8SN6sh874,11310
|
|
27
|
-
mc5_api_client-1.0.
|
|
28
|
-
mc5_api_client-1.0.
|
|
29
|
-
mc5_api_client-1.0.
|
|
30
|
-
mc5_api_client-1.0.
|
|
31
|
-
mc5_api_client-1.0.
|
|
32
|
-
mc5_api_client-1.0.
|
|
27
|
+
mc5_api_client-1.0.23.dist-info/licenses/LICENSE,sha256=M0UBQ4B3pB9XcV54_jhVP681xyauF8GB6YK_rKmuXzk,1064
|
|
28
|
+
mc5_api_client-1.0.23.dist-info/METADATA,sha256=eGCRDEU5dYcTQQ573Kz1ZfpSYUNUJktOdXBkNfS_Z8o,92909
|
|
29
|
+
mc5_api_client-1.0.23.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
30
|
+
mc5_api_client-1.0.23.dist-info/entry_points.txt,sha256=2kruOpleFYK3Jl1MoQwGyqCd-Pj4kQWngXmIjnXx_gE,48
|
|
31
|
+
mc5_api_client-1.0.23.dist-info/top_level.txt,sha256=eYJe4ue9j1ig_jFY5Z05mDqpizUEV7TYpk5lBXVd4kA,15
|
|
32
|
+
mc5_api_client-1.0.23.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|