mirror of
https://github.com/Lost-MSth/Arcaea-server.git
synced 2026-02-10 01:37:27 +08:00
Waiting for updating
+ new character + new byd map + new items + some new configs + two new operations in background + record email while registering + record ip while logging in + checking something before running and updating database automatically building something about API fix bugs: about purchasing system about hiding ptt about login different accounts with same device about some details This is only a pre updating. Many things have been changed. It takes time to find some ways.
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
from server.sql import Connect
|
||||
import server.info
|
||||
import time
|
||||
import json
|
||||
|
||||
@@ -67,49 +68,55 @@ def buy_item(c, user_id, price):
|
||||
return True, ticket - price
|
||||
|
||||
|
||||
def buy_pack(user_id, pack_id):
|
||||
# 曲包购买,返回字典
|
||||
re = {"success": False}
|
||||
with Connect() as c:
|
||||
c.execute('''select price from item where item_id = :a''',
|
||||
{'a': pack_id})
|
||||
price = c.fetchone()
|
||||
if price:
|
||||
price = price[0]
|
||||
else:
|
||||
price = 0
|
||||
def buy_thing(user_id, item_id, item_type):
|
||||
# 购买物品接口,返回字典
|
||||
success_flag = False
|
||||
ticket = 0
|
||||
packs = []
|
||||
singles = []
|
||||
characters = []
|
||||
|
||||
flag, ticket = buy_item(c, user_id, price)
|
||||
with Connect() as c:
|
||||
c.execute('''select is_available, price, orig_price, discount_from, discount_to from item where item_id=:a and type=:b''',
|
||||
{'a': item_id, 'b': item_type})
|
||||
x = c.fetchone()
|
||||
price = 0
|
||||
flag = False
|
||||
if x:
|
||||
is_available = x[0]
|
||||
price = x[1]
|
||||
orig_price = x[2]
|
||||
discount_from = x[3]
|
||||
discount_to = x[4]
|
||||
|
||||
if not is_available:
|
||||
return False
|
||||
|
||||
now = int(time.time() * 1000)
|
||||
if not(discount_from <= now <= discount_to):
|
||||
price = orig_price
|
||||
|
||||
flag, ticket = buy_item(c, user_id, price)
|
||||
|
||||
if flag:
|
||||
c.execute('''insert into user_item values(:a,:b,'pack')''',
|
||||
{'a': user_id, 'b': pack_id})
|
||||
c.execute('''insert into user_item values(:a,:b,:c)''',
|
||||
{'a': user_id, 'b': item_id, 'c': item_type})
|
||||
|
||||
re = {"success": True}
|
||||
success_flag = True
|
||||
|
||||
return re
|
||||
packs = server.info.get_user_packs(c, user_id)
|
||||
singles = server.info.get_user_singles(c, user_id)
|
||||
characters = server.info.get_user_characters(c, user_id)
|
||||
|
||||
|
||||
def buy_single(user_id, single_id):
|
||||
# 单曲购买,返回字典
|
||||
re = {"success": False}
|
||||
with Connect() as c:
|
||||
c.execute('''select price from item where item_id = :a''',
|
||||
{'a': single_id})
|
||||
price = c.fetchone()
|
||||
if price:
|
||||
price = price[0]
|
||||
else:
|
||||
price = 0
|
||||
|
||||
flag, ticket = buy_item(c, user_id, price)
|
||||
|
||||
if flag:
|
||||
c.execute('''insert into user_item values(:a,:b,'single')''',
|
||||
{'a': user_id, 'b': single_id})
|
||||
re = {"success": True}
|
||||
|
||||
return re
|
||||
return {
|
||||
"success": success_flag,
|
||||
"value": {'user_id': user_id,
|
||||
'ticket': ticket,
|
||||
'packs': packs,
|
||||
'singles': singles,
|
||||
'characters': characters
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
def get_prog_boost(user_id):
|
||||
|
||||
@@ -188,8 +188,22 @@ def arc_score_me(user_id, song_id, difficulty, limit=20):
|
||||
return r
|
||||
|
||||
|
||||
def calculate_rating(defnum, score):
|
||||
# 计算rating
|
||||
if score >= 10000000:
|
||||
ptt = defnum + 2
|
||||
elif score < 9800000:
|
||||
ptt = defnum + (score-9500000) / 300000
|
||||
if ptt < 0 and defnum != -10:
|
||||
ptt = 0
|
||||
else:
|
||||
ptt = defnum + 1 + (score-9800000) / 200000
|
||||
|
||||
return ptt
|
||||
|
||||
|
||||
def get_one_ptt(song_id, difficulty, score: int) -> float:
|
||||
# 单曲ptt计算,ptt为负说明没铺面定数数据
|
||||
# 单曲ptt计算,ptt为负说明没谱面定数数据
|
||||
ptt = -10
|
||||
with Connect('./database/arcsong.db') as c:
|
||||
if difficulty == 0:
|
||||
@@ -212,14 +226,7 @@ def get_one_ptt(song_id, difficulty, score: int) -> float:
|
||||
if defnum <= 0:
|
||||
defnum = -10 # 缺少难度的当做定数-10
|
||||
|
||||
if score >= 10000000:
|
||||
ptt = defnum + 2
|
||||
elif score < 9800000:
|
||||
ptt = defnum + (score-9500000) / 300000
|
||||
if ptt < 0 and defnum != -10:
|
||||
ptt = 0
|
||||
else:
|
||||
ptt = defnum + 1 + (score-9800000) / 200000
|
||||
ptt = calculate_rating(defnum, score)
|
||||
|
||||
return ptt
|
||||
|
||||
@@ -299,7 +306,7 @@ def get_user_ptt(c, user_id) -> int:
|
||||
|
||||
|
||||
def update_recent30(c, user_id, song_id, rating, is_protected):
|
||||
# 刷新r30,这里的判断方法存疑
|
||||
# 刷新r30,这里的判断方法存疑,这里的song_id结尾包含难度数字
|
||||
def insert_r30table(c, user_id, a, b):
|
||||
# 更新r30表
|
||||
c.execute('''delete from recent30 where user_id = :a''',
|
||||
@@ -587,6 +594,49 @@ def arc_score_check(user_id, song_id, difficulty, score, shiny_perfect_count, pe
|
||||
return True
|
||||
|
||||
|
||||
def refresh_all_score_rating():
|
||||
# 刷新所有best成绩的rating
|
||||
error = 'Unknown error.'
|
||||
song_data = []
|
||||
|
||||
with Connect('./database/arcsong.db') as c:
|
||||
with Connect() as c2:
|
||||
c.execute(
|
||||
'''select sid, rating_pst, rating_prs, rating_ftr, rating_byn from songs''')
|
||||
x = c.fetchall()
|
||||
|
||||
if x:
|
||||
song_list = [i[0] for i in song_data]
|
||||
with Connect() as c:
|
||||
c.execute('''update best_score set rating=0 where song_id not in ({0})'''.format(
|
||||
','.join(['?']*len(song_list))), tuple(song_list))
|
||||
for i in x:
|
||||
for j in range(0, 4):
|
||||
defnum = -10 # 没在库里的全部当做定数-10
|
||||
if i is not None:
|
||||
defnum = float(i[j+1]) / 10
|
||||
if defnum <= 0:
|
||||
defnum = -10 # 缺少难度的当做定数-10
|
||||
|
||||
c.execute('''select user_id, score from best_score where song_id=:a and difficulty=:b''', {
|
||||
'a': i[0], 'b': j})
|
||||
y = c.fetchall()
|
||||
if y:
|
||||
for k in y:
|
||||
ptt = calculate_rating(defnum, k[1])
|
||||
if ptt < 0:
|
||||
ptt = 0
|
||||
|
||||
c.execute('''update best_score set rating=:a where user_id=:b and song_id=:c and difficulty=:d''', {
|
||||
'a': ptt, 'b': k[0], 'c': i[0], 'd': j})
|
||||
error = None
|
||||
|
||||
else:
|
||||
error = 'No song data.'
|
||||
|
||||
return error
|
||||
|
||||
|
||||
def arc_all_post(user_id, scores_data, clearlamps_data, clearedsongs_data, unlocklist_data, installid_data, devicemodelname_data, story_data):
|
||||
# 向云端同步,无返回
|
||||
with Connect() as c:
|
||||
@@ -882,6 +932,36 @@ def arc_all_get(user_id):
|
||||
"mi": 6,
|
||||
"c": True,
|
||||
"r": True
|
||||
}, {
|
||||
"ma": 9,
|
||||
"mi": 1,
|
||||
"c": True,
|
||||
"r": True
|
||||
}, {
|
||||
"ma": 9,
|
||||
"mi": 2,
|
||||
"c": True,
|
||||
"r": True
|
||||
}, {
|
||||
"ma": 9,
|
||||
"mi": 3,
|
||||
"c": True,
|
||||
"r": True
|
||||
}, {
|
||||
"ma": 9,
|
||||
"mi": 4,
|
||||
"c": True,
|
||||
"r": True
|
||||
}, {
|
||||
"ma": 9,
|
||||
"mi": 5,
|
||||
"c": True,
|
||||
"r": True
|
||||
}, {
|
||||
"ma": 9,
|
||||
"mi": 6,
|
||||
"c": True,
|
||||
"r": True
|
||||
}, {
|
||||
"ma": 6,
|
||||
"mi": 1,
|
||||
@@ -944,9 +1024,6 @@ def arc_all_get(user_id):
|
||||
"r": True
|
||||
}]
|
||||
unlocklist_data = [{
|
||||
"unlock_key": "worldvanquisher|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "worldvanquisher|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
@@ -955,42 +1032,48 @@ def arc_all_get(user_id):
|
||||
}, {
|
||||
"unlock_key": "viyellastears|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "viyellastears|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "viciousheroism|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "loschen|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "vector|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "corpssansorganes|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "valhallazero|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "tiferet|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "ouroboros|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "tiemedowngently|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "aegleseeker|2|3|crystalgravity|2",
|
||||
"complete": 10
|
||||
}, {
|
||||
"unlock_key": "tempestissimo|0|101",
|
||||
"complete": 100
|
||||
}, {
|
||||
"unlock_key": "syro|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "ringedgenesis|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "suomi|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "solitarydream|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "snowwhite|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "sheriruth|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "senkyou|2|0",
|
||||
"complete": 1
|
||||
@@ -1000,9 +1083,15 @@ def arc_all_get(user_id):
|
||||
}, {
|
||||
"unlock_key": "scarletlance|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "toaliceliddell|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "scarletlance|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "aterlbus|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "rugie|2|0",
|
||||
"complete": 1
|
||||
@@ -1018,24 +1107,33 @@ def arc_all_get(user_id):
|
||||
}, {
|
||||
"unlock_key": "reinvent|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "essenceoftwilight|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "redandblue|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "espebranch|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "redandblue|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "lostcivilization|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "supernova|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "rabbitintheblackroom|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "pragmatism|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "rabbitintheblackroom|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "worldexecuteme|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "ringedgenesis|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "quon|1|0",
|
||||
"complete": 1
|
||||
@@ -1048,8 +1146,17 @@ def arc_all_get(user_id):
|
||||
}, {
|
||||
"unlock_key": "supernova|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "halcyon|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "saikyostronger|2|3|einherjar|2",
|
||||
"complete": 3
|
||||
}, {
|
||||
"unlock_key": "cyanine|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "saikyostronger|2|3|laqryma|2",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "purgatorium|1|0",
|
||||
@@ -1058,17 +1165,23 @@ def arc_all_get(user_id):
|
||||
"unlock_key": "pragmatism|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "ouroboros|2|0",
|
||||
"unlock_key": "ringedgenesis|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "ouroboros|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "partyvinyl|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "oracle|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "onelastdrive|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "nirvluce|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "onelastdrive|1|0",
|
||||
"complete": 1
|
||||
@@ -1076,10 +1189,13 @@ def arc_all_get(user_id):
|
||||
"unlock_key": "omegafour|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "oblivia|2|0",
|
||||
"unlock_key": "harutopia|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "pragmatism|1|0",
|
||||
"unlock_key": "anokumene|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "oblivia|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "nhelv|2|0",
|
||||
@@ -1090,9 +1206,6 @@ def arc_all_get(user_id):
|
||||
}, {
|
||||
"unlock_key": "melodyoflove|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "saikyostronger|2|3|laqryma|2",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "omegafour|2|0",
|
||||
"complete": 1
|
||||
@@ -1102,6 +1215,12 @@ def arc_all_get(user_id):
|
||||
}, {
|
||||
"unlock_key": "lucifer|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "gloryroad|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "babaroque|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "lucifer|1|0",
|
||||
"complete": 1
|
||||
@@ -1111,21 +1230,36 @@ def arc_all_get(user_id):
|
||||
}, {
|
||||
"unlock_key": "tiemedowngently|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "solitarydream|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "lostdesire|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "viciousheroism|1|0",
|
||||
"unlock_key": "lostcivilization|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "flyburg|1|0",
|
||||
"unlock_key": "loschen|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "lostcivilization|2|0",
|
||||
"unlock_key": "shadesoflight|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "kanagawa|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "grievouslady|1|101",
|
||||
"complete": 100
|
||||
}, {
|
||||
"unlock_key": "infinityheaven|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "worldvanquisher|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "bookmaker|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "ignotus|2|0",
|
||||
"complete": 1
|
||||
@@ -1135,39 +1269,39 @@ def arc_all_get(user_id):
|
||||
}, {
|
||||
"unlock_key": "partyvinyl|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "viciousheroism|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "gloryroad|0|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "axiumcrisis|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "kanagawa|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "ifi|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "jump|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "nhelv|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "harutopia|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "revixy|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "aterlbus|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "linearaccelerator|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "guardina|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "corpssansorganes|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "linearaccelerator|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "guardina|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "lethaeus|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "saikyostronger|2|0",
|
||||
"complete": 1
|
||||
@@ -1180,21 +1314,18 @@ def arc_all_get(user_id):
|
||||
}, {
|
||||
"unlock_key": "oshamascramble|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "aiueoon|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "blaster|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "grievouslady|2|101",
|
||||
"complete": 100
|
||||
}, {
|
||||
"unlock_key": "partyvinyl|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "darakunosono|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "grievouslady|1|101",
|
||||
"complete": 100
|
||||
}, {
|
||||
"unlock_key": "valhallazero|1|0",
|
||||
"complete": 1
|
||||
@@ -1207,9 +1338,15 @@ def arc_all_get(user_id):
|
||||
}, {
|
||||
"unlock_key": "gothiveofra|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "cyanine|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "tempestissimo|3|101",
|
||||
"complete": 100
|
||||
}, {
|
||||
"unlock_key": "overwhelm|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "chronostasis|2|0",
|
||||
"complete": 1
|
||||
@@ -1217,19 +1354,13 @@ def arc_all_get(user_id):
|
||||
"unlock_key": "gloryroad|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "supernova|1|0",
|
||||
"unlock_key": "etherstrike|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "singularity|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "gloryroad|0|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "shadesoflight|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "kanagawa|2|0",
|
||||
"unlock_key": "buchigireberserker|2|3|gothiveofra|2",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "genesis|1|0",
|
||||
@@ -1240,9 +1371,15 @@ def arc_all_get(user_id):
|
||||
}, {
|
||||
"unlock_key": "freefall|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "revixy|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "fractureray|2|101",
|
||||
"complete": 100
|
||||
}, {
|
||||
"unlock_key": "goodtek|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "monochromeprincess|2|0",
|
||||
"complete": 1
|
||||
@@ -1258,29 +1395,29 @@ def arc_all_get(user_id):
|
||||
}, {
|
||||
"unlock_key": "clotho|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "quon|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "gou|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "felis|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "cyaegha|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "qualia|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "buchigireberserker|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "etherstrike|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "etherstrike|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "syro|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "anokumene|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "essenceoftwilight|2|0",
|
||||
"unlock_key": "flyburg|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "shadesoflight|2|0",
|
||||
@@ -1289,26 +1426,23 @@ def arc_all_get(user_id):
|
||||
"unlock_key": "espebranch|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "tempestissimo|1|101",
|
||||
"complete": 100
|
||||
}, {
|
||||
"unlock_key": "nhelv|1|0",
|
||||
"unlock_key": "aterlbus|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "conflict|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "espebranch|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "lostcivilization|1|0",
|
||||
"unlock_key": "dreaminattraction|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "goodtek|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "infinityheaven|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "dandelion|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "blrink|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "suomi|2|0",
|
||||
"complete": 1
|
||||
@@ -1321,104 +1455,104 @@ def arc_all_get(user_id):
|
||||
}, {
|
||||
"unlock_key": "cyberneciacatharsis|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "quon|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "chronostasis|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "bookmaker|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "heavensdoor|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "tempestissimo|2|101",
|
||||
"complete": 100
|
||||
}, {
|
||||
"unlock_key": "cyaegha|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "axiumcrisis|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "blrink|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "rise|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "cyanine|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "corpssansorganes|0|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "vector|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "infinityheaven|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "essenceoftwilight|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "conflict|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "singularity|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "harutopia|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "cyberneciacatharsis|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "ignotus|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "nirvluce|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "monochromeprincess|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "lethaeus|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "clotho|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "aterlbus|2|0",
|
||||
"unlock_key": "heavensdoor|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "dreaminattraction|2|0",
|
||||
"unlock_key": "chronostasis|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "solitarydream|1|0",
|
||||
"unlock_key": "lethaeus|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "ringedgenesis|1|0",
|
||||
"unlock_key": "amazingmightyyyy|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "aegleseeker|0|103",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "buchigireberserker|2|3|ouroboros|2",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "oshamascramble|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "gothiveofra|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "linearaccelerator|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "corpssansorganes|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "buchigireberserker|2|0",
|
||||
"unlock_key": "worldexecuteme|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "bookmaker|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "heavensdoor|2|0",
|
||||
"unlock_key": "fractureray|0|101",
|
||||
"complete": 100
|
||||
}, {
|
||||
"unlock_key": "singularity|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "genesis|2|0",
|
||||
"unlock_key": "blaster|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "halcyon|2|0",
|
||||
"unlock_key": "rise|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "axiumcrisis|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "tempestissimo|2|101",
|
||||
"complete": 100
|
||||
}, {
|
||||
"unlock_key": "solitarydream|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "aegleseeker|1|103",
|
||||
"complete": 103
|
||||
}, {
|
||||
"unlock_key": "amazingmightyyyy|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "cyaegha|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "linearaccelerator|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "tempestissimo|1|101",
|
||||
"complete": 100
|
||||
}, {
|
||||
"unlock_key": "conflict|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "grievouslady|0|101",
|
||||
"complete": 100
|
||||
}, {
|
||||
"unlock_key": "dreaminattraction|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "saikyostronger|2|3|izana|2",
|
||||
@@ -1432,6 +1566,9 @@ def arc_all_get(user_id):
|
||||
}, {
|
||||
"unlock_key": "felis|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "overwhelm|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "toaliceliddell|2|0",
|
||||
"complete": 1
|
||||
@@ -1439,50 +1576,17 @@ def arc_all_get(user_id):
|
||||
"unlock_key": "blrink|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "grievouslady|0|101",
|
||||
"complete": 100
|
||||
}, {
|
||||
"unlock_key": "buchigireberserker|2|3|gothiveofra|2",
|
||||
"unlock_key": "heavensdoor|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "kanagawa|1|0",
|
||||
"unlock_key": "genesis|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "darakunosono|2|0",
|
||||
"unlock_key": "viyellastears|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "freefall|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "nirvluce|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "cyanine|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "goodtek|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "buchigireberserker|2|3|ouroboros|2",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "fractureray|0|101",
|
||||
"complete": 100
|
||||
}, {
|
||||
"unlock_key": "blaster|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "dreaminattraction|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "toaliceliddell|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "oshamascramble|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "gothiveofra|2|0",
|
||||
"complete": 1
|
||||
"unlock_key": "aegleseeker|2|103",
|
||||
"complete": 103
|
||||
}, {
|
||||
"unlock_key": "tiferet|2|0",
|
||||
"complete": 1
|
||||
@@ -1490,37 +1594,46 @@ def arc_all_get(user_id):
|
||||
"unlock_key": "grimheart|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "amazingmightyyyy|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "lethaeus|2|0",
|
||||
"complete": 1
|
||||
"unlock_key": "aegleseeker|2|3|farawaylight|2",
|
||||
"complete": 10
|
||||
}, {
|
||||
"unlock_key": "rugie|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "gou|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "sheriruth|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "aegleseeker|2|3|paperwitch|2",
|
||||
"complete": 10
|
||||
}, {
|
||||
"unlock_key": "sheriruth|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "babaroque|2|0",
|
||||
"unlock_key": "aegleseeker|2|3|loschen|2",
|
||||
"complete": 10
|
||||
}, {
|
||||
"unlock_key": "cyberneciacatharsis|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "aiueoon|2|0",
|
||||
"unlock_key": "essenceoftwilight|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "gloryroad|1|0",
|
||||
"unlock_key": "syro|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "cyaegha|1|0",
|
||||
"unlock_key": "anokumene|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "amazingmightyyyy|2|0",
|
||||
"unlock_key": "freefall|1|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "anokumene|1|0",
|
||||
"unlock_key": "darakunosono|2|0",
|
||||
"complete": 1
|
||||
}, {
|
||||
"unlock_key": "nirvluce|2|0",
|
||||
"complete": 1
|
||||
}]
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
import hashlib
|
||||
import time
|
||||
import server.arcworld
|
||||
from server.sql import Connect
|
||||
import functools
|
||||
from setting import Config
|
||||
from flask import jsonify
|
||||
|
||||
|
||||
def arc_login(name: str, password: str, device_id: str): # 登录判断
|
||||
def arc_login(name: str, password: str, device_id: str, ip: str): # 登录判断
|
||||
# 查询数据库中的user表,验证账号密码,返回并记录token,多返回个error code
|
||||
# token采用user_id和时间戳连接后hash生成(真的是瞎想的,没用bear)
|
||||
# 密码和token的加密方式为 SHA-256
|
||||
@@ -43,8 +43,8 @@ def arc_login(name: str, password: str, device_id: str): # 登录判断
|
||||
|
||||
if not Config.ALLOW_LOGIN_SAME_DEVICE:
|
||||
if device_id in device_list: # 对相同设备进行删除
|
||||
c.execute('''delete from login where login_device=:a''', {
|
||||
'a': device_id})
|
||||
c.execute('''delete from login where login_device=:a and user_id=:b''', {
|
||||
'a': device_id, 'b': user_id})
|
||||
should_delete_num = len(
|
||||
device_list) + 1 - device_list.count(device_id) - Config.LOGIN_DEVICE_NUMBER_LIMIT
|
||||
|
||||
@@ -52,8 +52,8 @@ def arc_login(name: str, password: str, device_id: str): # 登录判断
|
||||
c.execute('''delete from login where rowid in (select rowid from login where user_id=:user_id limit :a);''',
|
||||
{'user_id': user_id, 'a': int(should_delete_num)})
|
||||
|
||||
c.execute('''insert into login(access_token, user_id, login_device) values(:access_token, :user_id, :device_id)''', {
|
||||
'user_id': user_id, 'access_token': token, 'device_id': device_id})
|
||||
c.execute('''insert into login values(:access_token, :user_id, :time, :ip, :device_id)''', {
|
||||
'user_id': user_id, 'access_token': token, 'device_id': device_id, 'time': now, 'ip': ip})
|
||||
error_code = None
|
||||
else:
|
||||
# 密码错误
|
||||
@@ -65,8 +65,8 @@ def arc_login(name: str, password: str, device_id: str): # 登录判断
|
||||
return token, error_code
|
||||
|
||||
|
||||
def arc_register(name: str, password: str, device_id: str): # 注册
|
||||
# 账号注册,只记录hash密码和用户名,生成user_id和user_code,自动登录返回token
|
||||
def arc_register(name: str, password: str, device_id: str, email: str, ip: str): # 注册
|
||||
# 账号注册,记录hash密码、用户名和邮箱,生成user_id和user_code,自动登录返回token
|
||||
# token和密码的处理同登录部分
|
||||
|
||||
def build_user_code(c):
|
||||
@@ -107,23 +107,28 @@ def arc_register(name: str, password: str, device_id: str): # 注册
|
||||
c.execute(
|
||||
'''select exists(select * from user where name = :name)''', {'name': name})
|
||||
if c.fetchone() == (0,):
|
||||
user_code = build_user_code(c)
|
||||
user_id = build_user_id(c)
|
||||
now = int(time.time() * 1000)
|
||||
c.execute('''insert into user(user_id, name, password, join_date, user_code, rating_ptt,
|
||||
character_id, is_skill_sealed, is_char_uncapped, is_char_uncapped_override, is_hide_rating, favorite_character, max_stamina_notification_enabled, current_map, ticket, prog_boost)
|
||||
values(:user_id, :name, :password, :join_date, :user_code, 0, 0, 0, 0, 0, 0, -1, 0, '', :memories, 0)
|
||||
''', {'user_code': user_code, 'user_id': user_id, 'join_date': now, 'name': name, 'password': hash_pwd, 'memories': Config.DEFAULT_MEMORIES})
|
||||
c.execute('''insert into recent30(user_id) values(:user_id)''', {
|
||||
'user_id': user_id})
|
||||
c.execute(
|
||||
'''select exists(select * from user where email = :email)''', {'email': email})
|
||||
if c.fetchone() == (0,):
|
||||
user_code = build_user_code(c)
|
||||
user_id = build_user_id(c)
|
||||
now = int(time.time() * 1000)
|
||||
c.execute('''insert into user(user_id, name, password, join_date, user_code, rating_ptt,
|
||||
character_id, is_skill_sealed, is_char_uncapped, is_char_uncapped_override, is_hide_rating, favorite_character, max_stamina_notification_enabled, current_map, ticket, prog_boost, email)
|
||||
values(:user_id, :name, :password, :join_date, :user_code, 0, 0, 0, 0, 0, 0, -1, 0, '', :memories, 0, :email)
|
||||
''', {'user_code': user_code, 'user_id': user_id, 'join_date': now, 'name': name, 'password': hash_pwd, 'memories': Config.DEFAULT_MEMORIES, 'email': email})
|
||||
c.execute('''insert into recent30(user_id) values(:user_id)''', {
|
||||
'user_id': user_id})
|
||||
|
||||
token = hashlib.sha256(
|
||||
(str(user_id) + str(now)).encode("utf8")).hexdigest()
|
||||
c.execute('''insert into login(access_token, user_id, login_device) values(:access_token, :user_id, :device_id)''', {
|
||||
'user_id': user_id, 'access_token': token, 'device_id': device_id})
|
||||
token = hashlib.sha256(
|
||||
(str(user_id) + str(now)).encode("utf8")).hexdigest()
|
||||
c.execute('''insert into login values(:access_token, :user_id, :time, :ip, :device_id)''', {
|
||||
'user_id': user_id, 'access_token': token, 'device_id': device_id, 'time': now, 'ip': ip})
|
||||
|
||||
insert_user_char(c, user_id)
|
||||
error_code = 0
|
||||
insert_user_char(c, user_id)
|
||||
error_code = 0
|
||||
else:
|
||||
error_code = 102
|
||||
else:
|
||||
error_code = 101
|
||||
|
||||
@@ -166,17 +171,16 @@ def auth_required(request):
|
||||
def wrapped_view(*args, **kwargs):
|
||||
|
||||
user_id = None
|
||||
with Connect() as c:
|
||||
headers = request.headers
|
||||
if 'Authorization' in headers:
|
||||
token = headers['Authorization']
|
||||
token = token[7:]
|
||||
user_id = token_get_id(token)
|
||||
headers = request.headers
|
||||
if 'Authorization' in headers:
|
||||
token = headers['Authorization']
|
||||
token = token[7:]
|
||||
user_id = token_get_id(token)
|
||||
|
||||
if user_id is not None:
|
||||
return view(user_id, *args, **kwargs)
|
||||
else:
|
||||
return '''{"success":false,"error_code":108}'''
|
||||
return jsonify({"success": False, "error_code": 108})
|
||||
|
||||
return wrapped_view
|
||||
return decorator
|
||||
|
||||
@@ -118,12 +118,16 @@ def get_user_friend(c, user_id):
|
||||
is_char_uncapped = int2b(z[0])
|
||||
is_char_uncapped_override = int2b(z[1])
|
||||
|
||||
rating = y[5]
|
||||
if int2b(y[10]):
|
||||
rating = -1
|
||||
|
||||
s.append({
|
||||
"is_mutual": is_mutual,
|
||||
"is_char_uncapped_override": is_char_uncapped_override,
|
||||
"is_char_uncapped": is_char_uncapped,
|
||||
"is_skill_sealed": int2b(y[7]),
|
||||
"rating": y[5],
|
||||
"rating": rating,
|
||||
"join_date": int(y[3]),
|
||||
"character": character,
|
||||
"recent_score": get_recent_score(c, i[0]),
|
||||
@@ -162,16 +166,34 @@ def get_user_packs(c, user_id):
|
||||
return re
|
||||
|
||||
|
||||
def get_value_0(c, user_id):
|
||||
# 构造value id=0的数据,返回字典
|
||||
def get_user_characters(c, user_id):
|
||||
# 获取用户所拥有角色,返回列表
|
||||
|
||||
c.execute('''select character_id from user_char where user_id = :user_id''',
|
||||
{'user_id': user_id})
|
||||
|
||||
x = c.fetchall()
|
||||
characters = []
|
||||
|
||||
if x:
|
||||
for i in x:
|
||||
characters.append(i[0])
|
||||
|
||||
return characters
|
||||
|
||||
|
||||
def get_user_me(c, user_id):
|
||||
# 构造user/me的数据,返回字典
|
||||
c.execute('''select * from user where user_id = :x''', {'x': user_id})
|
||||
x = c.fetchone()
|
||||
r = {}
|
||||
if x is not None:
|
||||
user_character = get_user_character(c, user_id)
|
||||
# 下面没有使用get_user_characters函数是为了节省一次查询
|
||||
characters = []
|
||||
for i in user_character:
|
||||
characters.append(i['character_id'])
|
||||
|
||||
prog_boost = 0
|
||||
if x[27] and x[27] != 0:
|
||||
prog_boost = 300
|
||||
@@ -199,7 +221,7 @@ def get_value_0(c, user_id):
|
||||
"max_stamina_ts": 1586274871917,
|
||||
"stamina": 12,
|
||||
"world_unlocks": ["scenery_chap1", "scenery_chap2", "scenery_chap3", "scenery_chap4", "scenery_chap5"],
|
||||
"world_songs": ["babaroque", "shadesoflight", "kanagawa", "lucifer", "anokumene", "ignotus", "rabbitintheblackroom", "qualia", "redandblue", "bookmaker", "darakunosono", "espebranch", "blacklotus", "givemeanightmare", "vividtheory", "onefr", "gekka", "vexaria3", "infinityheaven3", "fairytale3", "goodtek3", "suomi", "rugie", "faintlight", "harutopia", "goodtek", "dreaminattraction", "syro", "diode", "freefall", "grimheart", "blaster", "cyberneciacatharsis", "monochromeprincess", "revixy", "vector", "supernova", "nhelv", "purgatorium3", "dement3", "crossover", "guardina", "axiumcrisis", "worldvanquisher", "sheriruth", "pragmatism", "gloryroad", "etherstrike", "corpssansorganes", "lostdesire", "blrink", "essenceoftwilight", "lapis", "solitarydream", "lumia3", "purpleverse", "moonheart3", "glow", "enchantedlove", "take", "lifeispiano"],
|
||||
"world_songs": ["babaroque", "shadesoflight", "kanagawa", "lucifer", "anokumene", "ignotus", "rabbitintheblackroom", "qualia", "redandblue", "bookmaker", "darakunosono", "espebranch", "blacklotus", "givemeanightmare", "vividtheory", "onefr", "gekka", "vexaria3", "infinityheaven3", "fairytale3", "goodtek3", "suomi", "rugie", "faintlight", "harutopia", "goodtek", "dreaminattraction", "syro", "diode", "freefall", "grimheart", "blaster", "cyberneciacatharsis", "monochromeprincess", "revixy", "vector", "supernova", "nhelv", "purgatorium3", "dement3", "crossover", "guardina", "axiumcrisis", "worldvanquisher", "sheriruth", "pragmatism", "gloryroad", "etherstrike", "corpssansorganes", "lostdesire", "blrink", "essenceoftwilight", "lapis", "solitarydream", "lumia3", "purpleverse", "moonheart3", "glow", "enchantedlove", "take", "lifeispiano", "vandalism", "nexttoyou3", "lostcivilization3"],
|
||||
"singles": get_user_singles(c, user_id),
|
||||
"packs": get_user_packs(c, user_id),
|
||||
"characters": characters,
|
||||
@@ -207,7 +229,8 @@ def get_value_0(c, user_id):
|
||||
"recent_score": get_recent_score(c, user_id),
|
||||
"max_friend": 50,
|
||||
"rating": x[5],
|
||||
"join_date": int(x[3])
|
||||
"join_date": int(x[3]),
|
||||
"global_rank": 114514
|
||||
}
|
||||
|
||||
return r
|
||||
@@ -220,7 +243,7 @@ def arc_aggregate_small(user_id):
|
||||
r = {"success": True,
|
||||
"value": [{
|
||||
"id": 0,
|
||||
"value": get_value_0(c, user_id)
|
||||
"value": get_user_me(c, user_id)
|
||||
}]}
|
||||
|
||||
return r
|
||||
@@ -233,7 +256,7 @@ def arc_aggregate_big(user_id):
|
||||
r = {"success": True,
|
||||
"value": [{
|
||||
"id": 0,
|
||||
"value": get_value_0(c, user_id)
|
||||
"value": get_user_me(c, user_id)
|
||||
}, {
|
||||
"id": 1,
|
||||
"value": server.arcpurchase.get_item(c, 'pack')
|
||||
|
||||
@@ -1,4 +1,23 @@
|
||||
import os
|
||||
from shutil import copy, copy2
|
||||
from server.sql import Connect
|
||||
from database.database_initialize import main, ARCAEA_SERVER_VERSION
|
||||
from web.system import update_database
|
||||
|
||||
|
||||
def try_rename(path, new_path):
|
||||
# 尝试重命名文件,并尝试避免命名冲突,返回最终路径
|
||||
final_path = new_path
|
||||
if os.path.exists(new_path):
|
||||
i = 1
|
||||
while os.path.exists(new_path + str(i)):
|
||||
i += 1
|
||||
os.rename(path, new_path + str(i))
|
||||
final_path = new_path + str(i)
|
||||
else:
|
||||
os.rename(path, new_path)
|
||||
|
||||
return final_path
|
||||
|
||||
|
||||
def check_before_run(app):
|
||||
@@ -21,6 +40,56 @@ def check_before_run(app):
|
||||
if not os.path.exists('database/arcaea_database.db'):
|
||||
app.logger.warning('File `database/arcaea_database.db` is missing.')
|
||||
f = False
|
||||
try:
|
||||
app.logger.info(
|
||||
'Try to new the file `database/arcaea_database.db`.')
|
||||
main('./database/')
|
||||
app.logger.info(
|
||||
'Success to new the file `database/arcaea_database.db`.')
|
||||
f = True
|
||||
except:
|
||||
app.logger.warning(
|
||||
'Fail to new the file `database/arcaea_database.db`.')
|
||||
|
||||
else:
|
||||
with Connect() as c:
|
||||
try:
|
||||
c.execute('''select value from config where id="version"''')
|
||||
x = c.fetchone()
|
||||
except:
|
||||
x = None
|
||||
|
||||
# 数据库自动更新,不强求
|
||||
if not x or x[0] != ARCAEA_SERVER_VERSION:
|
||||
app.logger.warning(
|
||||
'Maybe the file `database/arcaea_database.db` is an old version.')
|
||||
try:
|
||||
app.logger.info(
|
||||
'Try to update the file `database/arcaea_database.db`.')
|
||||
|
||||
path = try_rename('database/arcaea_database.db',
|
||||
'database/arcaea_database.db.bak')
|
||||
|
||||
try:
|
||||
copy2(path, 'database/arcaea_database.db')
|
||||
except:
|
||||
copy(path, 'database/arcaea_database.db')
|
||||
|
||||
if os.path.isfile("database/old_arcaea_database.db"):
|
||||
os.remove('database/old_arcaea_database.db')
|
||||
|
||||
try_rename('database/arcaea_database.db',
|
||||
'database/old_arcaea_database.db')
|
||||
|
||||
main('./database/')
|
||||
update_database()
|
||||
|
||||
app.logger.info(
|
||||
'Success to update the file `database/arcaea_database.db`.')
|
||||
|
||||
except:
|
||||
app.logger.warning(
|
||||
'Fail to update the file `database/arcaea_database.db`.')
|
||||
|
||||
if not os.path.exists('database/arcsong.db'):
|
||||
app.logger.warning('File `database/arcsong.db` is missing.')
|
||||
|
||||
@@ -29,3 +29,52 @@ class Connect():
|
||||
traceback.format_exception(exc_type, exc_val, exc_tb))
|
||||
|
||||
return True
|
||||
|
||||
class Sql():
|
||||
|
||||
@staticmethod
|
||||
def select(c, table_name, target_column=[], limit=-1, offset=0, query={}, sort=[]):
|
||||
# 执行查询单句sql语句,返回fetchall数据
|
||||
# 使用准确查询,且在单表内
|
||||
|
||||
sql = 'select '
|
||||
sql_dict = {}
|
||||
if len(target_column) >= 2:
|
||||
sql += target_column[0]
|
||||
for i in range(1, len(target_column)):
|
||||
sql += ',' + target_column[i]
|
||||
sql += ' from ' + table_name
|
||||
elif len(target_column) == 1:
|
||||
sql += target_column[0] + ' from ' + table_name
|
||||
else:
|
||||
sql += '* from ' + table_name
|
||||
|
||||
where_field = []
|
||||
where_value = []
|
||||
for i in query:
|
||||
where_field.append(i)
|
||||
where_value.append(query[i])
|
||||
|
||||
if where_field and where_value:
|
||||
sql += ' where '
|
||||
sql += where_field[0] + '=:' + where_field[0]
|
||||
sql_dict[where_field[0]] = where_value[0]
|
||||
if len(where_field) >= 2:
|
||||
for i in range(1, len(where_field)):
|
||||
sql_dict[where_field[i]] = where_value[i]
|
||||
sql += ' and ' + where_field[i] + '=:' + where_field[i]
|
||||
|
||||
if sort:
|
||||
sql += ' order by ' + sort[0]['column'] + ' ' + sort[0]['order']
|
||||
if len(sort) >= 2:
|
||||
for i in range(1, len(sort)):
|
||||
sql += ', ' + sort[i]['column'] + ' ' + sort[i]['order']
|
||||
|
||||
if limit >= 0:
|
||||
sql += ' limit :limit offset :offset'
|
||||
sql_dict['limit'] = limit
|
||||
sql_dict['offset'] = offset
|
||||
|
||||
c.execute(sql, sql_dict)
|
||||
|
||||
return c.fetchall()
|
||||
|
||||
Reference in New Issue
Block a user