mirror of
https://github.com/Lost-MSth/Arcaea-server.git
synced 2026-02-10 01:37:27 +08:00
Update a midway version (waiting for offical update)
Add some things and fix some bugs. It will not have a description.
This commit is contained in:
@@ -986,3 +986,199 @@ def deliver_present():
|
||||
flash(error)
|
||||
|
||||
return render_template('web/deliverpresent.html')
|
||||
|
||||
|
||||
@bp.route('/allredeem', methods=['GET'])
|
||||
@login_required
|
||||
def all_redeem():
|
||||
# 所有兑换码数据
|
||||
|
||||
conn = sqlite3.connect('./database/arcaea_database.db')
|
||||
c = conn.cursor()
|
||||
c.execute('''select * from redeem''')
|
||||
x = c.fetchall()
|
||||
error = None
|
||||
if x:
|
||||
posts = []
|
||||
for i in x:
|
||||
items = json.loads(i[1])
|
||||
items_string = ''
|
||||
for j in items:
|
||||
items_string = items_string + '\n' + \
|
||||
str(j['id']) + ': ' + str(j['amount'])
|
||||
|
||||
posts.append({'code': i[0],
|
||||
'items': items_string,
|
||||
'type': i[2]
|
||||
})
|
||||
else:
|
||||
error = '没有兑换码数据 No redeem code data.'
|
||||
|
||||
conn.commit()
|
||||
conn.close()
|
||||
if error:
|
||||
flash(error)
|
||||
return render_template('web/allredeem.html')
|
||||
else:
|
||||
return render_template('web/allredeem.html', posts=posts)
|
||||
|
||||
|
||||
@bp.route('/changeredeem', methods=['GET'])
|
||||
@login_required
|
||||
def change_redeem():
|
||||
# 修改兑换码数据
|
||||
return render_template('web/changeredeem.html')
|
||||
|
||||
|
||||
@bp.route('/changeredeem/addredeem', methods=['POST'])
|
||||
@login_required
|
||||
def add_redeem():
|
||||
# 添加兑换码数据
|
||||
print(request.form)
|
||||
code = request.form['code']
|
||||
amount = request.form['amount']
|
||||
redeem_type = request.form['type']
|
||||
fragment = request.form['fragment']
|
||||
ticket = request.form['ticket']
|
||||
try:
|
||||
if amount:
|
||||
amount = int(amount)
|
||||
if ticket:
|
||||
ticket = int(ticket)
|
||||
if fragment:
|
||||
fragment = int(fragment)
|
||||
except:
|
||||
flash('数据错误 Wrong data.')
|
||||
return redirect(url_for('index.change_redeem'))
|
||||
|
||||
items = []
|
||||
if ticket:
|
||||
items.append({'type': 'memory', 'id': 'memory', 'amount': ticket})
|
||||
if fragment:
|
||||
items.append(
|
||||
{'type': 'fragment', 'id': 'fragment', 'amount': fragment})
|
||||
if items == []:
|
||||
flash('奖励为空 No items.')
|
||||
return redirect(url_for('index.change_redeem'))
|
||||
|
||||
if code and not amount:
|
||||
if len(code) > 20 or len(code) < 10:
|
||||
flash('兑换码长度不合适 Inappropriate length of redeem code.')
|
||||
return redirect(url_for('index.change_redeem'))
|
||||
|
||||
message = web.system.add_one_redeem(
|
||||
code, redeem_type, json.dumps(items))
|
||||
elif amount and not code:
|
||||
if amount <= 0 or amount > 1000:
|
||||
flash('数量错误 Wrong amount.')
|
||||
return redirect(url_for('index.change_redeem'))
|
||||
|
||||
message = web.system.add_some_random_redeem(
|
||||
amount, redeem_type, json.dumps(items))
|
||||
elif amount and code:
|
||||
flash('只能使用一种添加方式 Only one add method can be used.')
|
||||
return redirect(url_for('index.change_redeem'))
|
||||
else:
|
||||
flash('空输入 Null input.')
|
||||
return redirect(url_for('index.change_redeem'))
|
||||
|
||||
if message:
|
||||
flash(message)
|
||||
|
||||
return redirect(url_for('index.change_redeem'))
|
||||
|
||||
|
||||
@bp.route('/changeredeem/deleteredeem', methods=['POST'])
|
||||
@login_required
|
||||
def delete_redeem():
|
||||
# 删除兑换码数据
|
||||
code = request.form['code']
|
||||
message = web.system.delete_one_redeem(code)
|
||||
|
||||
if message:
|
||||
flash(message)
|
||||
|
||||
return redirect(url_for('index.change_redeem'))
|
||||
|
||||
|
||||
@bp.route('/redeem/<code>', methods=['GET'])
|
||||
@login_required
|
||||
def one_redeem(code):
|
||||
# 某个兑换码的用户使用情况数据
|
||||
|
||||
conn = sqlite3.connect('./database/arcaea_database.db')
|
||||
c = conn.cursor()
|
||||
c.execute(
|
||||
'''select user_id, name, user_code from user where user_id in (select user_id from user_redeem where code=:a)''', {'a': code})
|
||||
x = c.fetchall()
|
||||
error = None
|
||||
if x:
|
||||
posts = []
|
||||
for i in x:
|
||||
posts.append({'user_id': i[0],
|
||||
'name': i[1],
|
||||
'user_code': i[2]
|
||||
})
|
||||
else:
|
||||
error = '没有数据 No data.'
|
||||
|
||||
conn.commit()
|
||||
conn.close()
|
||||
if error:
|
||||
flash(error)
|
||||
return render_template('web/redeem.html', code=code)
|
||||
else:
|
||||
return render_template('web/redeem.html', posts=posts, code=code)
|
||||
|
||||
|
||||
@bp.route('/changeuserpwd', methods=['GET', 'POST'])
|
||||
@login_required
|
||||
def edit_userpwd():
|
||||
# 修改用户密码
|
||||
if request.method == 'GET':
|
||||
return render_template('web/changeuserpwd.html')
|
||||
|
||||
error = None
|
||||
|
||||
name = request.form['name']
|
||||
user_code = request.form['user_code']
|
||||
pwd = request.form['pwd']
|
||||
pwd2 = request.form['pwd2']
|
||||
if pwd != pwd2:
|
||||
flash('两次输入的密码不一致 Entered passwords differ!')
|
||||
return render_template('web/changeuserpwd.html')
|
||||
else:
|
||||
if len(pwd) < 8 or len(pwd) > 20:
|
||||
flash('密码太长或太短 Password is too long or too short!')
|
||||
return render_template('web/changeuserpwd.html')
|
||||
|
||||
conn = sqlite3.connect('./database/arcaea_database.db')
|
||||
c = conn.cursor()
|
||||
|
||||
if name or user_code:
|
||||
|
||||
if user_code:
|
||||
c.execute('''select user_id from user where user_code=:a''', {
|
||||
'a': user_code})
|
||||
else:
|
||||
c.execute(
|
||||
'''select user_id from user where name=:a''', {'a': name})
|
||||
|
||||
user_id = c.fetchone()
|
||||
if user_id:
|
||||
user_id = user_id[0]
|
||||
web.system.change_userpwd(c, user_id, pwd)
|
||||
flash('用户密码修改成功 Successfully edit the user information.')
|
||||
|
||||
else:
|
||||
error = '玩家不存在 The player does not exist.'
|
||||
|
||||
else:
|
||||
error = '输入为空 Null Input.'
|
||||
|
||||
conn.commit()
|
||||
conn.close()
|
||||
if error:
|
||||
flash(error)
|
||||
|
||||
return redirect(url_for('index.edit_userpwd'))
|
||||
|
||||
@@ -3,6 +3,8 @@ import sqlite3
|
||||
import time
|
||||
import json
|
||||
import server.arcscore
|
||||
import hashlib
|
||||
from random import Random
|
||||
|
||||
|
||||
def int2b(x):
|
||||
@@ -13,6 +15,17 @@ def int2b(x):
|
||||
return True
|
||||
|
||||
|
||||
def random_str(randomlength=10):
|
||||
# 随机生成字符串
|
||||
s = ''
|
||||
chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789'
|
||||
length = len(chars) - 1
|
||||
random = Random()
|
||||
for i in range(randomlength):
|
||||
s += chars[random.randint(0, length)]
|
||||
return s
|
||||
|
||||
|
||||
def get_table_info(c, table_name):
|
||||
# 得到表结构,返回主键列表和字段名列表
|
||||
pk = []
|
||||
@@ -85,8 +98,25 @@ def get_sql_insert_table(table_name, field, value):
|
||||
return sql, sql_dict
|
||||
|
||||
|
||||
def get_sql_delete_table(table_name, where_field=[], where_value=[]):
|
||||
# sql语句拼接,delete from ... where ...
|
||||
sql = 'delete from ' + table_name
|
||||
sql_dict = {}
|
||||
|
||||
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) >= 1:
|
||||
for i in range(1, len(where_field)):
|
||||
sql_dict[where_field[i]] = where_value[i]
|
||||
sql += ' and ' + where_field[i] + '=:' + where_field[i]
|
||||
|
||||
return sql, sql_dict
|
||||
|
||||
|
||||
def update_one_table(c1, c2, table_name):
|
||||
# 从c1向c2更新数据表,c2中存在的信息不变
|
||||
# 从c1向c2更新数据表,c1中存在的信息不变
|
||||
c1.execute(
|
||||
'''select * from sqlite_master where type = 'table' and name = :a''', {'a': table_name})
|
||||
c2.execute(
|
||||
@@ -117,11 +147,15 @@ def update_one_table(c1, c2, table_name):
|
||||
sql = 'select exists(' + sql + ')'
|
||||
c2.execute(sql, sql_dict)
|
||||
|
||||
if c2.fetchone() == (0,):
|
||||
sql, sql_dict = get_sql_insert_table(
|
||||
table_name, field, list(y[i]))
|
||||
if c2.fetchone() == (1,): # 如果c2里存在,先删除
|
||||
sql, sql_dict = get_sql_delete_table(
|
||||
table_name, db1_pk, list(x[i]))
|
||||
c2.execute(sql, sql_dict)
|
||||
|
||||
sql, sql_dict = get_sql_insert_table(
|
||||
table_name, field, list(y[i]))
|
||||
c2.execute(sql, sql_dict)
|
||||
|
||||
return None
|
||||
|
||||
|
||||
@@ -142,7 +176,7 @@ def update_user_char(c):
|
||||
|
||||
def update_database():
|
||||
# 将old数据库不存在数据加入到新数据库上,并删除old数据库
|
||||
# 对于arcaea_datebase.db,更新best_score,friend,recent30,user,user_world, user_item, user_save, login, present, user_present并用character数据更新user_char
|
||||
# 对于arcaea_datebase.db,更新一些表,并用character数据更新user_char
|
||||
# 对于arcsong.db,更新songs
|
||||
if os.path.isfile("database/old_arcaea_database.db") and os.path.isfile("database/arcaea_database.db"):
|
||||
conn1 = sqlite3.connect('./database/old_arcaea_database.db')
|
||||
@@ -155,11 +189,14 @@ def update_database():
|
||||
update_one_table(c1, c2, 'best_score')
|
||||
update_one_table(c1, c2, 'recent30')
|
||||
update_one_table(c1, c2, 'user_world')
|
||||
update_one_table(c1, c2, 'item')
|
||||
update_one_table(c1, c2, 'user_item')
|
||||
update_one_table(c1, c2, 'user_save')
|
||||
update_one_table(c1, c2, 'login')
|
||||
update_one_table(c1, c2, 'present')
|
||||
update_one_table(c1, c2, 'user_present')
|
||||
update_one_table(c1, c2, 'redeem')
|
||||
update_one_table(c1, c2, 'user_redeem')
|
||||
|
||||
update_user_char(c2)
|
||||
|
||||
@@ -378,3 +415,73 @@ def deliver_all_user_present(c, present_id):
|
||||
{'a': i[0], 'b': present_id})
|
||||
|
||||
return
|
||||
|
||||
|
||||
def add_one_redeem(code, redeem_type, items):
|
||||
# 添加一个兑换码
|
||||
|
||||
message = None
|
||||
conn = sqlite3.connect('./database/arcaea_database.db')
|
||||
c = conn.cursor()
|
||||
c.execute(
|
||||
'''select exists(select * from redeem where code=:a)''', {'a': code})
|
||||
if c.fetchone() == (0,):
|
||||
c.execute('''insert into redeem values(:a,:b,:c)''', {
|
||||
'a': code, 'b': items, 'c': redeem_type})
|
||||
message = '添加成功 Successfully add it.'
|
||||
else:
|
||||
message = '兑换码已存在 The redeem code exists.'
|
||||
|
||||
conn.commit()
|
||||
conn.close()
|
||||
return message
|
||||
|
||||
|
||||
def add_some_random_redeem(amount, redeem_type, items):
|
||||
# 随机生成一堆10位的兑换码
|
||||
|
||||
message = None
|
||||
conn = sqlite3.connect('./database/arcaea_database.db')
|
||||
c = conn.cursor()
|
||||
i = 0
|
||||
while i <= amount:
|
||||
code = random_str()
|
||||
c.execute(
|
||||
'''select exists(select * from redeem where code=:a)''', {'a': code})
|
||||
if c.fetchone() == (0,):
|
||||
c.execute('''insert into redeem values(:a,:b,:c)''',
|
||||
{'a': code, 'b': items, 'c': redeem_type})
|
||||
i += 1
|
||||
|
||||
message = '添加成功 Successfully add it.'
|
||||
conn.commit()
|
||||
conn.close()
|
||||
return message
|
||||
|
||||
|
||||
def delete_one_redeem(code):
|
||||
# 删除一个兑换码
|
||||
|
||||
message = None
|
||||
conn = sqlite3.connect('./database/arcaea_database.db')
|
||||
c = conn.cursor()
|
||||
c.execute(
|
||||
'''select exists(select * from redeem where code=:a)''', {'a': code})
|
||||
if c.fetchone() == (1,):
|
||||
c.execute('''delete from redeem where code = :a''', {'a': code})
|
||||
c.execute('''delete from user_redeem where code =:a''', {'a': code})
|
||||
message = '删除成功 Successfully delete it.'
|
||||
else:
|
||||
message = '兑换码不存在 The redeem code does not exist.'
|
||||
|
||||
conn.commit()
|
||||
conn.close()
|
||||
return message
|
||||
|
||||
|
||||
def change_userpwd(c, user_id, password):
|
||||
# 修改用户密码
|
||||
hash_pwd = hashlib.sha256(password.encode("utf8")).hexdigest()
|
||||
c.execute('''update user set password =:a where user_id=:b''',
|
||||
{'a': hash_pwd, 'b': user_id})
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user