mirror of
https://github.com/RPCS3/discord-bot.git
synced 2026-01-31 01:25:22 +01:00
Reformat to spaces + fix lehvenstein hopefully
This commit is contained in:
120
api/config.py
120
api/config.py
@@ -10,83 +10,83 @@ base_url = "https://rpcs3.net/compatibility"
|
||||
newline_separator = "<newline>"
|
||||
|
||||
return_codes = {
|
||||
0: {
|
||||
"display_results": True,
|
||||
"override_all": False,
|
||||
"display_footer": True,
|
||||
"info": "Results successfully retrieved."
|
||||
},
|
||||
1: {
|
||||
"display_results": False,
|
||||
"override_all": False,
|
||||
"display_footer": True,
|
||||
"info": "No results."
|
||||
},
|
||||
2: {
|
||||
"display_results": True,
|
||||
"override_all": False,
|
||||
"display_footer": True,
|
||||
"info": "No match was found, displaying closest results."
|
||||
},
|
||||
-1: {
|
||||
"display_results": False,
|
||||
"override_all": True,
|
||||
"display_footer": False,
|
||||
"info": "{requestor}: Internal error occurred, please contact Ani and Nicba1010"
|
||||
},
|
||||
-2: {
|
||||
"display_results": False,
|
||||
"override_all": True,
|
||||
"display_footer": False,
|
||||
"info": "{requestor}: API is under maintenance, please try again later."
|
||||
},
|
||||
-3: {
|
||||
"display_results": False,
|
||||
"override_all": False,
|
||||
"display_footer": False,
|
||||
"info": "Illegal characters found, please try again with a different search term."
|
||||
}
|
||||
0: {
|
||||
"display_results": True,
|
||||
"override_all": False,
|
||||
"display_footer": True,
|
||||
"info": "Results successfully retrieved."
|
||||
},
|
||||
1: {
|
||||
"display_results": False,
|
||||
"override_all": False,
|
||||
"display_footer": True,
|
||||
"info": "No results."
|
||||
},
|
||||
2: {
|
||||
"display_results": True,
|
||||
"override_all": False,
|
||||
"display_footer": True,
|
||||
"info": "No match was found, displaying results for: ***{lehvenstein}***."
|
||||
},
|
||||
-1: {
|
||||
"display_results": False,
|
||||
"override_all": True,
|
||||
"display_footer": False,
|
||||
"info": "{requestor}: Internal error occurred, please contact Ani and Nicba1010"
|
||||
},
|
||||
-2: {
|
||||
"display_results": False,
|
||||
"override_all": True,
|
||||
"display_footer": False,
|
||||
"info": "{requestor}: API is under maintenance, please try again later."
|
||||
},
|
||||
-3: {
|
||||
"display_results": False,
|
||||
"override_all": False,
|
||||
"display_footer": False,
|
||||
"info": "Illegal characters found, please try again with a different search term."
|
||||
}
|
||||
}
|
||||
|
||||
default_amount = 1
|
||||
request_result_amount = {
|
||||
1: 15,
|
||||
2: 25,
|
||||
3: 50,
|
||||
4: 100
|
||||
1: 15,
|
||||
2: 25,
|
||||
3: 50,
|
||||
4: 100
|
||||
}
|
||||
|
||||
directions = {
|
||||
"a": ("a", "asc", "ascending"),
|
||||
"d": ("d", "desc", "descending")
|
||||
"a": ("a", "asc", "ascending"),
|
||||
"d": ("d", "desc", "descending")
|
||||
}
|
||||
|
||||
regions = {
|
||||
"j": ("j", "jap", "japan", "JPN"),
|
||||
"u": ("u", "us", "america", "USA"),
|
||||
"e": ("e", "eu", "europe", "EU"),
|
||||
"a": ("a", "asia", "ch", "china", "CHN"),
|
||||
"k": ("k", "kor", "korea", "KOR"),
|
||||
"h": ("h", "hk", "hong", "kong", "hongkong", "HK")
|
||||
"j": ("j", "jap", "japan", "JPN"),
|
||||
"u": ("u", "us", "america", "USA"),
|
||||
"e": ("e", "eu", "europe", "EU"),
|
||||
"a": ("a", "asia", "ch", "china", "CHN"),
|
||||
"k": ("k", "kor", "korea", "KOR"),
|
||||
"h": ("h", "hk", "hong", "kong", "hongkong", "HK")
|
||||
}
|
||||
|
||||
statuses = {
|
||||
"all": 0,
|
||||
"playable": 1,
|
||||
"ingame": 2,
|
||||
"intro": 3,
|
||||
"loadable": 4,
|
||||
"nothing": 5
|
||||
"all": 0,
|
||||
"playable": 1,
|
||||
"ingame": 2,
|
||||
"intro": 3,
|
||||
"loadable": 4,
|
||||
"nothing": 5
|
||||
}
|
||||
|
||||
sort_types = {
|
||||
"id": 1,
|
||||
"title": 2,
|
||||
"status": 3,
|
||||
"date": 4
|
||||
"id": 1,
|
||||
"title": 2,
|
||||
"status": 3,
|
||||
"date": 4
|
||||
}
|
||||
|
||||
release_types = {
|
||||
"b": ("b", "d", "disc", "bluray", "Blu-Ray"),
|
||||
"n": ("n", "p", "psn", "PSN")
|
||||
"b": ("b", "d", "disc", "bluray", "Blu-Ray"),
|
||||
"n": ("n", "p", "psn", "PSN")
|
||||
}
|
||||
|
||||
324
api/request.py
324
api/request.py
@@ -13,188 +13,188 @@ from api.response import ApiResponse
|
||||
|
||||
|
||||
class ApiRequest(object):
|
||||
"""
|
||||
API Request builder object
|
||||
"""
|
||||
"""
|
||||
API Request builder object
|
||||
"""
|
||||
|
||||
def __init__(self, requestor=None) -> None:
|
||||
self.requestor = requestor
|
||||
self.custom_header = None
|
||||
self.time_start = None
|
||||
self.search = None
|
||||
self.status = None
|
||||
self.start = None
|
||||
self.sort = None
|
||||
self.date = None
|
||||
self.release_type = None
|
||||
self.region = None
|
||||
self.amount = api.default_amount
|
||||
self.amount_wanted = api.request_result_amount[api.default_amount]
|
||||
def __init__(self, requestor=None) -> None:
|
||||
self.requestor = requestor
|
||||
self.custom_header = None
|
||||
self.time_start = None
|
||||
self.search = None
|
||||
self.status = None
|
||||
self.start = None
|
||||
self.sort = None
|
||||
self.date = None
|
||||
self.release_type = None
|
||||
self.region = None
|
||||
self.amount = api.default_amount
|
||||
self.amount_wanted = api.request_result_amount[api.default_amount]
|
||||
|
||||
def set_search(self, search: str) -> 'ApiRequest':
|
||||
"""
|
||||
Adds the search string to the query.
|
||||
:param search: string to search for
|
||||
:return: ApiRequest object
|
||||
"""
|
||||
self.search = search
|
||||
return self
|
||||
def set_search(self, search: str) -> 'ApiRequest':
|
||||
"""
|
||||
Adds the search string to the query.
|
||||
:param search: string to search for
|
||||
:return: ApiRequest object
|
||||
"""
|
||||
self.search = search
|
||||
return self
|
||||
|
||||
def set_custom_header(self, custom_header) -> 'ApiRequest':
|
||||
"""
|
||||
Sets a custom header.
|
||||
:param custom_header: custom hedaer
|
||||
:return: ApiRequest object
|
||||
"""
|
||||
self.custom_header = custom_header
|
||||
def set_custom_header(self, custom_header) -> 'ApiRequest':
|
||||
"""
|
||||
Sets a custom header.
|
||||
:param custom_header: custom hedaer
|
||||
:return: ApiRequest object
|
||||
"""
|
||||
self.custom_header = custom_header
|
||||
|
||||
def set_status(self, status: int) -> 'ApiRequest':
|
||||
"""
|
||||
Adds status filter to the query.
|
||||
:param status: status to filter by, see ApiConfig.statuses
|
||||
:return: ApiRequest object
|
||||
"""
|
||||
try:
|
||||
self.status = api.statuses[status]
|
||||
except KeyError:
|
||||
self.status = None
|
||||
def set_status(self, status: int) -> 'ApiRequest':
|
||||
"""
|
||||
Adds status filter to the query.
|
||||
:param status: status to filter by, see ApiConfig.statuses
|
||||
:return: ApiRequest object
|
||||
"""
|
||||
try:
|
||||
self.status = api.statuses[status]
|
||||
except KeyError:
|
||||
self.status = None
|
||||
|
||||
return self
|
||||
return self
|
||||
|
||||
def set_startswith(self, start: str) -> 'ApiRequest':
|
||||
"""
|
||||
Adds starting character filter to the query.
|
||||
:param start: character to filter by
|
||||
:return: ApiRequest object
|
||||
"""
|
||||
if len(start) != 1:
|
||||
if start in ("num", "09"):
|
||||
self.start = "09"
|
||||
elif start in ("sym", "#"):
|
||||
self.start = "sym"
|
||||
else:
|
||||
self.start = start
|
||||
def set_startswith(self, start: str) -> 'ApiRequest':
|
||||
"""
|
||||
Adds starting character filter to the query.
|
||||
:param start: character to filter by
|
||||
:return: ApiRequest object
|
||||
"""
|
||||
if len(start) != 1:
|
||||
if start in ("num", "09"):
|
||||
self.start = "09"
|
||||
elif start in ("sym", "#"):
|
||||
self.start = "sym"
|
||||
else:
|
||||
self.start = start
|
||||
|
||||
return self
|
||||
return self
|
||||
|
||||
def set_sort(self, sort_type, direction) -> 'ApiRequest':
|
||||
"""
|
||||
Adds sorting request to query.
|
||||
:param sort_type: element to sort by, see ApiConfig.sort_types
|
||||
:param direction: sorting direction, see ApiConfig.directions
|
||||
:return: ApiRequest object
|
||||
"""
|
||||
for k, v in api.directions.items():
|
||||
if direction in v:
|
||||
try:
|
||||
self.sort = str(api.sort_types[sort_type]) + k
|
||||
return self
|
||||
except KeyError:
|
||||
self.sort = None
|
||||
return self
|
||||
def set_sort(self, sort_type, direction) -> 'ApiRequest':
|
||||
"""
|
||||
Adds sorting request to query.
|
||||
:param sort_type: element to sort by, see ApiConfig.sort_types
|
||||
:param direction: sorting direction, see ApiConfig.directions
|
||||
:return: ApiRequest object
|
||||
"""
|
||||
for k, v in api.directions.items():
|
||||
if direction in v:
|
||||
try:
|
||||
self.sort = str(api.sort_types[sort_type]) + k
|
||||
return self
|
||||
except KeyError:
|
||||
self.sort = None
|
||||
return self
|
||||
|
||||
return self
|
||||
return self
|
||||
|
||||
def set_date(self, date: str) -> 'ApiRequest':
|
||||
"""
|
||||
Adds date filter to query.
|
||||
:param date: date to filter by
|
||||
:return: ApiRequest object
|
||||
"""
|
||||
try:
|
||||
date = datetime.strptime(date, datetime_input_format)
|
||||
self.date = datetime.strftime(date, datetime_compatlist_query_format)
|
||||
except ValueError:
|
||||
self.date = None
|
||||
def set_date(self, date: str) -> 'ApiRequest':
|
||||
"""
|
||||
Adds date filter to query.
|
||||
:param date: date to filter by
|
||||
:return: ApiRequest object
|
||||
"""
|
||||
try:
|
||||
date = datetime.strptime(date, datetime_input_format)
|
||||
self.date = datetime.strftime(date, datetime_compatlist_query_format)
|
||||
except ValueError:
|
||||
self.date = None
|
||||
|
||||
return self
|
||||
return self
|
||||
|
||||
def set_release_type(self, release_type: str) -> 'ApiRequest':
|
||||
"""
|
||||
Adds release type filter to query.
|
||||
:param release_type: release type to filter by, see ApiConfig.release_type
|
||||
:return: ApiRequest object
|
||||
"""
|
||||
for k, v in api.release_types.items():
|
||||
if release_type in v:
|
||||
self.release_type = k
|
||||
return self
|
||||
def set_release_type(self, release_type: str) -> 'ApiRequest':
|
||||
"""
|
||||
Adds release type filter to query.
|
||||
:param release_type: release type to filter by, see ApiConfig.release_type
|
||||
:return: ApiRequest object
|
||||
"""
|
||||
for k, v in api.release_types.items():
|
||||
if release_type in v:
|
||||
self.release_type = k
|
||||
return self
|
||||
|
||||
self.release_type = None
|
||||
return self
|
||||
self.release_type = None
|
||||
return self
|
||||
|
||||
def set_region(self, region: str) -> 'ApiRequest':
|
||||
"""
|
||||
Adds region filter to query.
|
||||
:param region: region to filter by, see ApiConfig.regions
|
||||
:return: ApiRequest object
|
||||
"""
|
||||
for k, v in api.regions.items():
|
||||
if region in v:
|
||||
self.region = k
|
||||
return self
|
||||
def set_region(self, region: str) -> 'ApiRequest':
|
||||
"""
|
||||
Adds region filter to query.
|
||||
:param region: region to filter by, see ApiConfig.regions
|
||||
:return: ApiRequest object
|
||||
"""
|
||||
for k, v in api.regions.items():
|
||||
if region in v:
|
||||
self.region = k
|
||||
return self
|
||||
|
||||
self.region = None
|
||||
return self
|
||||
self.region = None
|
||||
return self
|
||||
|
||||
def set_amount(self, amount: int) -> 'ApiRequest':
|
||||
"""
|
||||
Sets the desired result count and gets the closest available.
|
||||
:param amount: desired result count, chooses closest available option, see ApiConfig.request_result_amount
|
||||
:return: ApiRequest object
|
||||
"""
|
||||
if max(api.request_result_amount.values()) >= amount >= 1:
|
||||
current_diff = -1
|
||||
def set_amount(self, amount: int) -> 'ApiRequest':
|
||||
"""
|
||||
Sets the desired result count and gets the closest available.
|
||||
:param amount: desired result count, chooses closest available option, see ApiConfig.request_result_amount
|
||||
:return: ApiRequest object
|
||||
"""
|
||||
if max(api.request_result_amount.values()) >= amount >= 1:
|
||||
current_diff = -1
|
||||
|
||||
for k, v in api.request_result_amount.items():
|
||||
if v >= amount:
|
||||
diff = v - amount
|
||||
if diff < current_diff or current_diff == -1:
|
||||
self.amount = k
|
||||
current_diff = diff
|
||||
for k, v in api.request_result_amount.items():
|
||||
if v >= amount:
|
||||
diff = v - amount
|
||||
if diff < current_diff or current_diff == -1:
|
||||
self.amount = k
|
||||
current_diff = diff
|
||||
|
||||
if current_diff != -1:
|
||||
self.amount_wanted = amount
|
||||
else:
|
||||
self.amount_wanted = None
|
||||
self.amount = api.default_amount
|
||||
if current_diff != -1:
|
||||
self.amount_wanted = amount
|
||||
else:
|
||||
self.amount_wanted = None
|
||||
self.amount = api.default_amount
|
||||
|
||||
return self
|
||||
return self
|
||||
|
||||
def build_query(self) -> str:
|
||||
"""
|
||||
Builds the search query.
|
||||
:return: the search query
|
||||
"""
|
||||
url = base_url + "?"
|
||||
def build_query(self) -> str:
|
||||
"""
|
||||
Builds the search query.
|
||||
:return: the search query
|
||||
"""
|
||||
url = base_url + "?"
|
||||
|
||||
if self.search is not None:
|
||||
url += "g={}&".format(html.escape(self.search).replace(" ", "%20"))
|
||||
if self.status is not None:
|
||||
url += "s={}&".format(self.status)
|
||||
if self.start is not None:
|
||||
url += "c={}&".format(self.start)
|
||||
if self.sort is not None:
|
||||
url += "o={}&".format(self.sort)
|
||||
if self.date is not None:
|
||||
url += "d={}&".format(self.date)
|
||||
if self.release_type is not None:
|
||||
url += "t={}&".format(self.release_type)
|
||||
if self.region is not None:
|
||||
url += "f={}&".format(self.region)
|
||||
if self.search is not None:
|
||||
url += "g={}&".format(html.escape(self.search).replace(" ", "%20"))
|
||||
if self.status is not None:
|
||||
url += "s={}&".format(self.status)
|
||||
if self.start is not None:
|
||||
url += "c={}&".format(self.start)
|
||||
if self.sort is not None:
|
||||
url += "o={}&".format(self.sort)
|
||||
if self.date is not None:
|
||||
url += "d={}&".format(self.date)
|
||||
if self.release_type is not None:
|
||||
url += "t={}&".format(self.release_type)
|
||||
if self.region is not None:
|
||||
url += "f={}&".format(self.region)
|
||||
|
||||
return url + "api=v{}".format(version)
|
||||
return url + "api=v{}".format(version)
|
||||
|
||||
def request(self) -> ApiResponse:
|
||||
"""
|
||||
Makes an API request to the API with the current request configuration.
|
||||
:return: the API response
|
||||
"""
|
||||
print(self.build_query())
|
||||
self.time_start = api.system_time_millis()
|
||||
return ApiResponse(
|
||||
request=self,
|
||||
data=requests.get(self.build_query()).content,
|
||||
amount_wanted=self.amount_wanted,
|
||||
custom_header=self.custom_header
|
||||
)
|
||||
def request(self) -> ApiResponse:
|
||||
"""
|
||||
Makes an API request to the API with the current request configuration.
|
||||
:return: the API response
|
||||
"""
|
||||
print(self.build_query())
|
||||
self.time_start = api.system_time_millis()
|
||||
return ApiResponse(
|
||||
request=self,
|
||||
data=requests.get(self.build_query()).content,
|
||||
amount_wanted=self.amount_wanted,
|
||||
custom_header=self.custom_header
|
||||
)
|
||||
|
||||
146
api/response.py
146
api/response.py
@@ -10,86 +10,88 @@ from .result import ApiResult
|
||||
|
||||
|
||||
class ApiResponse(object):
|
||||
"""
|
||||
API Response object
|
||||
"""
|
||||
"""
|
||||
API Response object
|
||||
"""
|
||||
|
||||
# noinspection PyUnresolvedReferences
|
||||
def __init__(self, request: 'ApiRequest', data: Dict, amount_wanted: int = None, custom_header: str = None) -> None:
|
||||
self.request = request
|
||||
self.results: List[ApiResult] = []
|
||||
# noinspection PyUnresolvedReferences
|
||||
def __init__(self, request: 'ApiRequest', data: Dict, amount_wanted: int = None, custom_header: str = None) -> None:
|
||||
self.request = request
|
||||
self.results: List[ApiResult] = []
|
||||
|
||||
parsed_data = json.loads(data)
|
||||
self.code = parsed_data["return_code"]
|
||||
if return_codes[self.code]["display_results"]:
|
||||
self.load_results(parsed_data["results"], amount=amount_wanted)
|
||||
parsed_data = json.loads(data)
|
||||
self.code = parsed_data["return_code"]
|
||||
self.lehvenstein = parsed_data["search_term"] if self.code is 2 else ''
|
||||
if return_codes[self.code]["display_results"]:
|
||||
self.load_results(parsed_data["results"], amount=amount_wanted)
|
||||
|
||||
self.time_end = system_time_millis()
|
||||
self.custom_header = custom_header
|
||||
self.time_end = system_time_millis()
|
||||
self.custom_header = custom_header
|
||||
|
||||
def load_results(self, data: Dict, amount: int = None) -> None:
|
||||
"""
|
||||
Loads the result object from JSON
|
||||
:param data: data for the result objects
|
||||
:param amount: desired amount to load
|
||||
"""
|
||||
for game_id, result_data in data.items():
|
||||
if amount is None or len(self.results) < amount:
|
||||
self.results.append(ApiResult(game_id, result_data))
|
||||
else:
|
||||
break
|
||||
def load_results(self, data: Dict, amount: int = None) -> None:
|
||||
"""
|
||||
Loads the result object from JSON
|
||||
:param data: data for the result objects
|
||||
:param amount: desired amount to load
|
||||
"""
|
||||
for game_id, result_data in data.items():
|
||||
if amount is None or len(self.results) < amount:
|
||||
self.results.append(ApiResult(game_id, result_data))
|
||||
else:
|
||||
break
|
||||
|
||||
def to_string(self) -> str:
|
||||
"""
|
||||
Makes a string representation of the object.
|
||||
:return: string representation of the object
|
||||
"""
|
||||
return self.build_string().format(
|
||||
requestor=self.request.requestor.mention,
|
||||
search_string=self.request.search,
|
||||
request_url=self.request.build_query().replace("&api=v1", ""),
|
||||
milliseconds=self.time_end - self.request.time_start,
|
||||
amount=self.request.amount_wanted,
|
||||
region="" if self.request.region is None else regions[self.request.region][-1],
|
||||
media="" if self.request.release_type is None else release_types[self.request.release_type][-1]
|
||||
)
|
||||
def to_string(self) -> str:
|
||||
"""
|
||||
Makes a string representation of the object.
|
||||
:return: string representation of the object
|
||||
"""
|
||||
return self.build_string().format(
|
||||
requestor=self.request.requestor.mention,
|
||||
search_string=self.request.search,
|
||||
request_url=self.request.build_query().replace("&api=v1", ""),
|
||||
milliseconds=self.time_end - self.request.time_start,
|
||||
amount=self.request.amount_wanted,
|
||||
region="" if self.request.region is None else regions[self.request.region][-1],
|
||||
media="" if self.request.release_type is None else release_types[self.request.release_type][-1],
|
||||
lehvenstein=self.lehvenstein
|
||||
)
|
||||
|
||||
def build_string(self) -> str:
|
||||
"""
|
||||
Builds a string representation of the object with placeholder.
|
||||
:return: string representation of the object with placeholder
|
||||
"""
|
||||
header_string = search_header if self.custom_header is None else self.custom_header
|
||||
results_string = ""
|
||||
def build_string(self) -> str:
|
||||
"""
|
||||
Builds a string representation of the object with placeholder.
|
||||
:return: string representation of the object with placeholder
|
||||
"""
|
||||
header_string = search_header if self.custom_header is None else self.custom_header
|
||||
results_string = ""
|
||||
|
||||
results_string_part = "```\n"
|
||||
for result in self.results:
|
||||
result_string = result.to_string()
|
||||
results_string_part = "```\n"
|
||||
for result in self.results:
|
||||
result_string = result.to_string()
|
||||
|
||||
if len(results_string_part) + len(result_string) + 4 > 2000:
|
||||
results_string_part += "```"
|
||||
results_string += results_string_part + newline_separator
|
||||
results_string_part = "```\n"
|
||||
if len(results_string_part) + len(result_string) + 4 > 2000:
|
||||
results_string_part += "```"
|
||||
results_string += results_string_part + newline_separator
|
||||
results_string_part = "```\n"
|
||||
|
||||
results_string_part += result_string + '\n'
|
||||
results_string_part += result_string + '\n'
|
||||
|
||||
if results_string_part != "```\n":
|
||||
results_string_part += "```"
|
||||
results_string += results_string_part
|
||||
if results_string_part != "```\n":
|
||||
results_string_part += "```"
|
||||
results_string += results_string_part
|
||||
|
||||
footer_string = "Retrieved from: *{request_url}* in {milliseconds} milliseconds!"
|
||||
if return_codes[self.code]["display_results"]:
|
||||
return "{}{}{}{}{}".format(
|
||||
header_string + '\n' + return_codes[self.code]["info"],
|
||||
newline_separator,
|
||||
results_string,
|
||||
newline_separator,
|
||||
footer_string
|
||||
)
|
||||
elif return_codes[self.code]["override_all"]:
|
||||
return return_codes[self.code]["info"]
|
||||
else:
|
||||
return "{}{}".format(
|
||||
header_string + '\n' + return_codes[self.code]["info"],
|
||||
(newline_separator + footer_string) if return_codes[self.code]["display_footer"] else ""
|
||||
)
|
||||
footer_string = "Retrieved from: *{request_url}* in {milliseconds} milliseconds!"
|
||||
if return_codes[self.code]["display_results"]:
|
||||
return "{}{}{}{}{}".format(
|
||||
header_string + '\n' + return_codes[self.code]["info"],
|
||||
newline_separator,
|
||||
results_string,
|
||||
newline_separator,
|
||||
footer_string
|
||||
)
|
||||
elif return_codes[self.code]["override_all"]:
|
||||
return return_codes[self.code]["info"]
|
||||
else:
|
||||
return "{}{}".format(
|
||||
header_string + '\n' + return_codes[self.code]["info"],
|
||||
(newline_separator + footer_string) if return_codes[self.code]["display_footer"] else ""
|
||||
)
|
||||
|
||||
@@ -9,28 +9,28 @@ from api import datetime_input_format, datetime_output_format, trim_string
|
||||
|
||||
|
||||
class ApiResult(object):
|
||||
"""
|
||||
API Result object
|
||||
"""
|
||||
"""
|
||||
API Result object
|
||||
"""
|
||||
|
||||
def __init__(self, game_id: str, data: Dict) -> None:
|
||||
self.game_id = game_id
|
||||
self.title = data["title"]
|
||||
self.status = data["status"]
|
||||
self.date = datetime.strptime(data["date"], datetime_input_format)
|
||||
self.thread = data["thread"]
|
||||
self.commit = data["commit"]
|
||||
self.pr = data["pr"]
|
||||
def __init__(self, game_id: str, data: Dict) -> None:
|
||||
self.game_id = game_id
|
||||
self.title = data["title"]
|
||||
self.status = data["status"]
|
||||
self.date = datetime.strptime(data["date"], datetime_input_format)
|
||||
self.thread = data["thread"]
|
||||
self.commit = data["commit"]
|
||||
self.pr = data["pr"]
|
||||
|
||||
def to_string(self) -> str:
|
||||
"""
|
||||
Makes a string representation of the object.
|
||||
:return: string representation of the object
|
||||
"""
|
||||
return ("ID:{:9s} Title:{:40s} PR:{:4s} Status:{:8s} Updated:{:10s}".format(
|
||||
self.game_id,
|
||||
trim_string(self.title, 40),
|
||||
self.pr if self.pr is not 0 else "????",
|
||||
self.status,
|
||||
datetime.strftime(self.date, datetime_output_format)
|
||||
))
|
||||
def to_string(self) -> str:
|
||||
"""
|
||||
Makes a string representation of the object.
|
||||
:return: string representation of the object
|
||||
"""
|
||||
return ("ID:{:9s} Title:{:40s} PR:{:4s} Status:{:8s} Updated:{:10s}".format(
|
||||
self.game_id,
|
||||
trim_string(self.title, 40),
|
||||
self.pr if self.pr is not 0 else "????",
|
||||
self.status,
|
||||
datetime.strftime(self.date, datetime_output_format)
|
||||
))
|
||||
|
||||
10
api/utils.py
10
api/utils.py
@@ -2,11 +2,11 @@ import time
|
||||
|
||||
|
||||
def trim_string(string: str, length: int) -> str:
|
||||
if len(string) > length:
|
||||
return string[:length - 3] + "..."
|
||||
else:
|
||||
return string
|
||||
if len(string) > length:
|
||||
return string[:length - 3] + "..."
|
||||
else:
|
||||
return string
|
||||
|
||||
|
||||
def system_time_millis() -> int:
|
||||
return int(round(time.time() * 1000))
|
||||
return int(round(time.time() * 1000))
|
||||
|
||||
2
bot.py
2
bot.py
@@ -196,7 +196,7 @@ async def greet():
|
||||
Greets on boot!
|
||||
"""
|
||||
await rpcs3Bot.wait_until_ready()
|
||||
await rpcs3Bot.send_message(discord.Object(id=bot_spam_id), boot_up_message)
|
||||
return await rpcs3Bot.send_message(discord.Object(id=bot_spam_id), boot_up_message)
|
||||
|
||||
|
||||
# User requests
|
||||
|
||||
@@ -6,7 +6,7 @@ Variables:
|
||||
{region} = Region
|
||||
{media} = Blu-Ray/PSN
|
||||
"""
|
||||
search_header = "{requestor} searched for: ***{search_string}***"
|
||||
search_header = "{requestor} searched for: ***{search_string}***"
|
||||
newest_header = "{requestor} requested top {amount} newest {region} {media} updated games"
|
||||
oldest_header = "{requestor} requested top {amount} oldest {region} {media} updated games"
|
||||
|
||||
|
||||
16
utils.py
16
utils.py
@@ -1,9 +1,9 @@
|
||||
def limit_int(amount: int, high: int, low: int = 0) -> int:
|
||||
"""
|
||||
Limits an integer.
|
||||
:param amount: amount
|
||||
:param high: high limit
|
||||
:param low: low limit
|
||||
:return: limited integer
|
||||
"""
|
||||
return low if amount < low else (high if amount > high else amount)
|
||||
"""
|
||||
Limits an integer.
|
||||
:param amount: amount
|
||||
:param high: high limit
|
||||
:param low: low limit
|
||||
:return: limited integer
|
||||
"""
|
||||
return low if amount < low else (high if amount > high else amount)
|
||||
|
||||
Reference in New Issue
Block a user