Compare commits

2 Commits

Author SHA1 Message Date
2b121be258 Added archive module 2024-12-26 15:54:55 +01:00
eefb47476a fix 2024-12-26 15:27:03 +01:00
12 changed files with 67 additions and 136 deletions

4
app.py
View File

@@ -3,7 +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.JapariSling.database import Database as KFSL
from modules.Archive.database import Database as KFADB
app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False
@@ -13,7 +13,7 @@ api = Api(app)
KF3DB(api)
KFKDB(api)
KFSL(api)
KFADB(api)
if __name__ == '__main__':
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

@@ -1,7 +0,0 @@
from typing import List
from .construct_serialized import ConstructSerialized
class ConstructLevel:
Name : str
Description : str
Objects : List[ConstructSerialized]

View File

@@ -1,13 +0,0 @@
class SVector3:
x : float
y : float
z : float
class ConstructSerialized:
Id : int
Variant : int
Position : SVector3
Rotation : SVector3
Width : float
Height : float
Properties : int

View File

@@ -1,15 +0,0 @@
from .endpoints.get import Get
from .endpoints.upload import Upload
class Database:
def __init__(self, api) -> None:
app = api.app
if "JapariSling" in app.databases:
del app.databases["JapariSling"]
app.databases["JapariSling"] = self
api.add_resource(Upload, "/JapariSling/Upload")
api.add_resource(Get, "/JapariSling/Get")

View File

@@ -1,23 +0,0 @@
import os
import json
from flask_restful import Resource
from flask import abort, request, current_app as app
class Get(Resource):
def get(self):
dir_name = os.path.join(app.root_path, 'data', 'JapariSling')
files = [json.loads(read_file(os.path.join(dir_name, f))) for f in os.listdir(dir_name) if os.path.isfile(os.path.join(dir_name, f))]
files = files[:10]
files = {"levels": files}
response = app.response_class(
response = json.dumps(files),
status=200,
mimetype='application/json'
)
response.headers.add("Access-Control-Allow-Origin", "*")
return response
def read_file(path):
with open(path, 'r') as f:
return f.read()

View File

@@ -1,29 +0,0 @@
import os
import json
from flask_restful import Resource
from ..classes.construct_level import ConstructLevel
from flask import abort, request, current_app as app
class Upload(Resource):
def post(self):
cl = request.content_length
if cl is not None and cl > 1024:
abort(413)
content = request.json
if "Name" not in content:
abort(400)
filename = os.path.join(app.root_path, 'data', 'JapariSling', content["Name"] + '.json')
with open(filename, "wt") as text_file:
text_file.write(json.dumps(content, ensure_ascii=False, indent=1))
response = app.response_class(
response="level uploaded",
status=200,
mimetype='text/plain'
)
response.headers.add("Access-Control-Allow-Origin", "*")
return response

View File

@@ -82,10 +82,7 @@ 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)
data = json.loads(data)
# if key == "GACHA_DATA":
# download_banners(data, server_name)
json.dump(data, out_file, ensure_ascii=False, indent=1)
json.dump(json.loads(data), out_file, ensure_ascii=False, indent=1)
old_mst_ver[key] = new_mst_ver[key]
@@ -96,36 +93,6 @@ 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 = {}
@@ -227,15 +194,6 @@ 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
View File

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

View File

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