You've already forked KemoFureApi
							
							Compare commits
	
		
			5 Commits
		
	
	
		
			testBranch
			...
			26a98b53d7
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 26a98b53d7 | |||
| a36e6940d9 | |||
| 0ce68c606f | |||
| 2b121be258 | |||
| eefb47476a | 
							
								
								
									
										2
									
								
								app.py
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								app.py
									
									
									
									
									
								
							| @@ -3,6 +3,7 @@ from flask_restful import Api | ||||
|  | ||||
| from modules.KF3.database import Database as KF3DB | ||||
| from modules.Kingdom.database import Database as KFKDB | ||||
| from modules.Archive.database import Database as KFADB | ||||
|  | ||||
| app = Flask(__name__) | ||||
| app.config['JSON_AS_ASCII'] = False | ||||
| @@ -12,6 +13,7 @@ api = Api(app) | ||||
|  | ||||
| KF3DB(api) | ||||
| KFKDB(api) | ||||
| KFADB(api) | ||||
|  | ||||
| if __name__ == '__main__': | ||||
|     app.run(host='127.0.0.1', port=8080, debug=True) | ||||
							
								
								
									
										22
									
								
								modules/Archive/database.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								modules/Archive/database.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| import json | ||||
| from .databaseController import DatabaseController | ||||
| from .endpoints.query import Archive_Query | ||||
|  | ||||
| class Database: | ||||
|     db : DatabaseController = None | ||||
|     processed_friends = {} | ||||
|     item_stages = {} | ||||
|  | ||||
|     def __init__(self, api) -> None: | ||||
|         app = api.app | ||||
|         if "Archive" in app.databases: | ||||
|             del app.databases["Archive"] | ||||
|  | ||||
|         self.reload_data() | ||||
|  | ||||
|         app.databases["Archive"] = self | ||||
|  | ||||
|         api.add_resource(Archive_Query, "/Archive/Query") | ||||
|    | ||||
|     def reload_data(self): | ||||
|         self.db = DatabaseController("/home/pi/python/Katbots/JapariArchive/database.db") | ||||
							
								
								
									
										21
									
								
								modules/Archive/databaseController.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								modules/Archive/databaseController.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | ||||
| import os | ||||
| import sqlite3 | ||||
|  | ||||
| TABLE_ACCOUNTS  = "accounts" | ||||
| TABLE_X         = "x_posts" | ||||
|  | ||||
| class DatabaseController: | ||||
|     def __init__(self, db_name): | ||||
|         self.conn = sqlite3.connect(db_name, isolation_level="DEFERRED") | ||||
|         self.cursor = self.conn.cursor() | ||||
|  | ||||
|     def run_query(self, query): | ||||
|         try: | ||||
|             self.cursor.execute(query) | ||||
|             results = self.cursor.fetchall() | ||||
|             return results | ||||
|         except: | ||||
|             return None | ||||
|  | ||||
|     def close(self): | ||||
|         self.conn.close() | ||||
							
								
								
									
										21
									
								
								modules/Archive/endpoints/query.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								modules/Archive/endpoints/query.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | ||||
| import json | ||||
| from flask_restful import Resource | ||||
| from flask import current_app as app, jsonify | ||||
|  | ||||
| class Archive_Query(Resource): | ||||
|     def post(self, query:str): | ||||
|         db = app.databases["Archive"] | ||||
|  | ||||
|         result = db.run_query(query) | ||||
|  | ||||
|         if result is None: | ||||
|             response = app.response_class(status=400) | ||||
|         else: | ||||
|             response = app.response_class( | ||||
|                 response=json.dumps(result, ensure_ascii=False, indent=1), | ||||
|                 status=200, | ||||
|                 mimetype='application/json' | ||||
|             ) | ||||
|  | ||||
|         response.headers.add("Access-Control-Allow-Origin", "*") | ||||
|         return response    | ||||
| @@ -123,7 +123,7 @@ class Database: | ||||
|         chara = {} | ||||
|          | ||||
|         charaData = self.charaData[id] | ||||
|         alphaBase = self.paramAlphaBases[id] | ||||
|         alphaBase = self.paramAlphaBases[id] if id in self.paramAlphaBases else None | ||||
|  | ||||
|         wrLocked = False | ||||
|         promoIds = [] | ||||
| @@ -190,16 +190,23 @@ class Database: | ||||
|         else: | ||||
|             level_curve = self.limitlevel_rising_status[patternId] if patternId != 0 else None | ||||
|  | ||||
|         chara["stats_min"] = get_all_stats(chara, alphaBase, max_level = False, rising_status_pattern=level_curve) | ||||
|         chara["stats_max"] = get_all_stats(chara, alphaBase, max_level = True, rising_status_pattern=level_curve) | ||||
|         chara["plasmPoint"] = alphaBase["plasmPoint"] | ||||
|         chara["cards"] = [ | ||||
|             {"type":alphaBase["orderCardType00"], "value":alphaBase["orderCardValue00"]}, | ||||
|             {"type":alphaBase["orderCardType01"], "value":alphaBase["orderCardValue01"]}, | ||||
|             {"type":alphaBase["orderCardType02"], "value":alphaBase["orderCardValue02"]}, | ||||
|             {"type":alphaBase["orderCardType03"], "value":alphaBase["orderCardValue03"]}, | ||||
|             {"type":alphaBase["orderCardType04"], "value":alphaBase["orderCardValue04"]} | ||||
|         ] | ||||
|         if alphaBase is None: | ||||
|             chara["stats_min"] = {"level" : 0,"status" : 0,"wr" : 0,"hp" : 0,"atk" : 0,"def" : 0,"evd" : 0,"beat" : 0,"act" : 0,"try" : 0} | ||||
|             chara["stats_max"] = {"level" : 0,"status" : 0,"wr" : 0,"hp" : 0,"atk" : 0,"def" : 0,"evd" : 0,"beat" : 0,"act" : 0,"try" : 0} | ||||
|             chara["plasmPoint"] = 0 | ||||
|             chara["cards"] = {0,0,0,0,0} | ||||
|         else: | ||||
|             chara["stats_min"] = get_all_stats(chara, alphaBase, max_level = False, rising_status_pattern=level_curve) | ||||
|             chara["stats_max"] = get_all_stats(chara, alphaBase, max_level = True, rising_status_pattern=level_curve) | ||||
|             chara["plasmPoint"] = alphaBase["plasmPoint"] | ||||
|             chara["cards"] = [ | ||||
|                 {"type":alphaBase["orderCardType00"], "value":alphaBase["orderCardValue00"]}, | ||||
|                 {"type":alphaBase["orderCardType01"], "value":alphaBase["orderCardValue01"]}, | ||||
|                 {"type":alphaBase["orderCardType02"], "value":alphaBase["orderCardValue02"]}, | ||||
|                 {"type":alphaBase["orderCardType03"], "value":alphaBase["orderCardValue03"]}, | ||||
|                 {"type":alphaBase["orderCardType04"], "value":alphaBase["orderCardValue04"]} | ||||
|             ] | ||||
|  | ||||
|         chara["synergy_flag"] = self.paramArts[id]["authParam"]["SynergyFlag"] if id in self.paramArts else 0 | ||||
|          | ||||
|         chara["arts"] = self.paramArts[id] if id in self.paramArts else None | ||||
|   | ||||
| @@ -82,7 +82,10 @@ async def download_cache(server_name, server : str): | ||||
|             file.write(data) | ||||
|         with open(file_path_json, "wt", encoding="utf-8") as out_file: | ||||
|             data = gzip.decompress(data) | ||||
|             json.dump(json.loads(data), out_file, ensure_ascii=False, indent=1) | ||||
|             data = json.loads(data) | ||||
|             # if key == "GACHA_DATA": | ||||
|             #     download_banners(data, server_name) | ||||
|             json.dump(data, out_file, ensure_ascii=False, indent=1) | ||||
|  | ||||
|         old_mst_ver[key] = new_mst_ver[key] | ||||
|  | ||||
| @@ -93,6 +96,36 @@ async def download_cache(server_name, server : str): | ||||
|     await session.close() | ||||
|     return downloaded_files | ||||
|  | ||||
| async def download_banners(gacha_data, server_name, session): | ||||
|     path = f"/var/www/html/Katworks/KF/assets/KF3/{server_name}/banners/" | ||||
|     os.makedirs(path, exist_ok=True) | ||||
|  | ||||
|     for entry in gacha_data: | ||||
|         banner_name = entry["banner"] | ||||
|         if banner_name == "" or banner_name == None: | ||||
|             continue | ||||
|         banner_name += ".png" | ||||
|         file_path = path + banner_name | ||||
|         if os.path.exists(file_path): | ||||
|             continue | ||||
|          | ||||
|         file_url = "https://parade-mobile-prod-cdn.kemono-friends-3.jp/Texture2D/GachaTop/" + banner_name | ||||
|         file_url_alt = "https://parade-mobile-develop01-app.kemono-friends-3.jp/Texture2D/GachaTop/" + banner_name | ||||
|          | ||||
|         status = 0 | ||||
|         async with session.get(file_url) as resp: | ||||
|             response = await resp.read() | ||||
|             status = resp.status | ||||
|         if status != 200: | ||||
|             async with session.get(file_url_alt) as resp: | ||||
|                 response = await resp.read() | ||||
|                 status = resp.status | ||||
|         if status != 200: continue | ||||
|  | ||||
|         with open(file_path, "wb") as file: | ||||
|             file.write(response) | ||||
|          | ||||
|  | ||||
| async def download_files(server_name, asset_bundle_url, srv_platform : str): | ||||
|     def parse_ab_list(filecontent : str): | ||||
|         out = {} | ||||
| @@ -194,6 +227,15 @@ async def convert_files(): | ||||
|             print("Conversion failed", f) | ||||
|  | ||||
| async def manual(): | ||||
|  | ||||
|     # session = aiohttp.ClientSession() | ||||
|  | ||||
|     # path = f"/var/www/html/Katworks/KF/assets/KF3/{server_name}/cache/" | ||||
|  | ||||
|     # await session.close() | ||||
|  | ||||
|     # return | ||||
|  | ||||
|     downloaded_cache = {} | ||||
|     downloaded_files = {} | ||||
|      | ||||
|   | ||||
							
								
								
									
										2
									
								
								run.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								run.sh
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| #!/usr/bin/env bash | ||||
| gunicorn --bind 127.0.0.1:8081 --config gunicorn_config.py wsgi:app | ||||
		Reference in New Issue
	
	Block a user