Compare commits

5 Commits

Author SHA1 Message Date
26a98b53d7 Merge branch 'master' of https://git.japari.cafe/katboi01/KemoFureApi 2024-12-26 16:17:26 +01:00
a36e6940d9 fix 2024-12-26 16:15:58 +01:00
0ce68c606f include changes 2024-12-26 16:08:16 +01:00
2b121be258 Added archive module 2024-12-26 15:54:55 +01:00
eefb47476a fix 2024-12-26 15:27:03 +01:00
8 changed files with 131 additions and 12 deletions

2
app.py
View File

@@ -3,6 +3,7 @@ from flask_restful import Api
from modules.KF3.database import Database as KF3DB from modules.KF3.database import Database as KF3DB
from modules.Kingdom.database import Database as KFKDB from modules.Kingdom.database import Database as KFKDB
from modules.Archive.database import Database as KFADB
app = Flask(__name__) app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False app.config['JSON_AS_ASCII'] = False
@@ -12,6 +13,7 @@ api = Api(app)
KF3DB(api) KF3DB(api)
KFKDB(api) KFKDB(api)
KFADB(api)
if __name__ == '__main__': if __name__ == '__main__':
app.run(host='127.0.0.1', port=8080, debug=True) app.run(host='127.0.0.1', port=8080, debug=True)

View 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")

View 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()

View 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

View File

@@ -123,7 +123,7 @@ class Database:
chara = {} chara = {}
charaData = self.charaData[id] charaData = self.charaData[id]
alphaBase = self.paramAlphaBases[id] alphaBase = self.paramAlphaBases[id] if id in self.paramAlphaBases else None
wrLocked = False wrLocked = False
promoIds = [] promoIds = []
@@ -190,6 +190,12 @@ class Database:
else: else:
level_curve = self.limitlevel_rising_status[patternId] if patternId != 0 else None level_curve = self.limitlevel_rising_status[patternId] if patternId != 0 else None
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_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["stats_max"] = get_all_stats(chara, alphaBase, max_level = True, rising_status_pattern=level_curve)
chara["plasmPoint"] = alphaBase["plasmPoint"] chara["plasmPoint"] = alphaBase["plasmPoint"]
@@ -200,6 +206,7 @@ class Database:
{"type":alphaBase["orderCardType03"], "value":alphaBase["orderCardValue03"]}, {"type":alphaBase["orderCardType03"], "value":alphaBase["orderCardValue03"]},
{"type":alphaBase["orderCardType04"], "value":alphaBase["orderCardValue04"]} {"type":alphaBase["orderCardType04"], "value":alphaBase["orderCardValue04"]}
] ]
chara["synergy_flag"] = self.paramArts[id]["authParam"]["SynergyFlag"] if id in self.paramArts else 0 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 chara["arts"] = self.paramArts[id] if id in self.paramArts else None

View File

@@ -82,7 +82,10 @@ async def download_cache(server_name, server : str):
file.write(data) file.write(data)
with open(file_path_json, "wt", encoding="utf-8") as out_file: with open(file_path_json, "wt", encoding="utf-8") as out_file:
data = gzip.decompress(data) 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] old_mst_ver[key] = new_mst_ver[key]
@@ -93,6 +96,36 @@ async def download_cache(server_name, server : str):
await session.close() await session.close()
return downloaded_files 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): async def download_files(server_name, asset_bundle_url, srv_platform : str):
def parse_ab_list(filecontent : str): def parse_ab_list(filecontent : str):
out = {} out = {}
@@ -194,6 +227,15 @@ async def convert_files():
print("Conversion failed", f) print("Conversion failed", f)
async def manual(): 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_cache = {}
downloaded_files = {} downloaded_files = {}

2
run.sh Normal file
View File

@@ -0,0 +1,2 @@
#!/usr/bin/env bash
gunicorn --bind 127.0.0.1:8081 --config gunicorn_config.py wsgi:app

2
update.sh Normal file
View File

@@ -0,0 +1,2 @@
#!/usr/bin/env bash
python -m modules.KF3.downloader