Files
2025-03-04 20:48:27 +08:00

330 lines
10 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import pymysql
import nonebot
from nonebot.log import logger
config = nonebot.get_driver().config
db_host = getattr(config, 'db_host', '81.71.65.247')
db_user = getattr(config, 'db_user', 'root')
db_pass = getattr(config, 'db_pass', '<PASSWORD>')
db = getattr(config, 'db_name', 'aime')
def is_hex_string(s):
return all(c in {'e', '4', '1', '6', '7', 'c', '8', '2', '0', '5', 'b', 'd', 'a', 'f', '9', '3'} for c in s)
def find_chara_levels(all_chara_list, chara_slot_list):
"""
根据角色槽列表,从所有角色列表中找出对应角色的等级。
:param all_chara_list: 包含所有角色信息的列表,每个元素是一个字典,必须包含"characterId""level"键。
:param chara_slot_list: 包含角色槽ID的列表用于查找对应角色的等级。
:return: 一个整数列表表示对应角色槽的角色等级。如果某个角色槽没有对应的角色则该位置的等级为0。
"""
# 初始化角色等级列表长度与chara_slot_list相同
character_levels = [0] * len(chara_slot_list)
# {"characterId":101,"point":0,"useCount":2147483647,"level":9999,"nextAwake":0,"nextAwakePercent":0,"awakening":6}
# 创建一个角色ID到等级的映射以提高查找效率
chara_id_to_level = {}
for chara in all_chara_list:
chara_id = chara.get("characterId")
level = chara.get("level")
if chara_id is not None and level is not None:
chara_id_to_level[chara_id] = int(level)
# 使用映射更新角色槽的等级信息
for i, chara_slot in enumerate(chara_slot_list):
level = chara_id_to_level.get(chara_slot)
if level is not None:
character_levels[i] = level
return character_levels
def find_chara_awakening(all_chara_list, chara_slot_list):
"""
根据角色槽列表,从所有角色列表中找出对应角色的觉醒数。
:param all_chara_list: 包含所有角色信息的列表,每个元素是一个字典,必须包含"characterId""level"键。
:param chara_slot_list: 包含角色槽ID的列表用于查找对应角色的等级。
:return: 一个整数列表表示对应角色槽的角色等级。如果某个角色槽没有对应的角色则该位置的等级为0。
"""
# 初始化角色等级列表长度与chara_slot_list相同
character_awakening = [0] * len(chara_slot_list)
# {"characterId":101,"point":0,"useCount":2147483647,"level":9999,"nextAwake":0,"nextAwakePercent":0,"awakening":6}
# 创建一个角色ID到等级的映射以提高查找效率
chara_id_to_level = {}
for chara in all_chara_list:
chara_id = chara.get("characterId")
awakening = chara.get("awakening")
if chara_id is not None and awakening is not None:
chara_id_to_level[chara_id] = int(awakening)
# 使用映射更新角色槽的等级信息
for i, chara_slot in enumerate(chara_slot_list):
awakening = chara_id_to_level.get(chara_slot)
if awakening is not None:
character_awakening[i] = awakening
return character_awakening
def is_userid_exist(user_qq):
"""
根据QQ号查询userid是否在数据库内
:param user_qq: 用户QQ号
"""
conn = pymysql.connect(
host='81.71.65.247',
port=3306,
user='root',
passwd='root',
db='aime',
charset='utf8'
)
try:
with conn.cursor() as cursor:
logger.debug(f"开始查询数据库是否有QQ号:{user_qq}对应USER_ID")
sql = 'select * from id where qq = %s'
result = cursor.execute(sql, (user_qq,))
if result > 0:
logger.success("查询成功")
return True
else:
logger.success("查询无结果")
return False
except Exception as e:
logger.error(f"USER_ID查询失败:{e}")
return False
finally:
conn.close()
def del_user_id(user_qq, user_id):
"""
删除对应QQ的USERID
:param user_qq: 用户QQ号
:param user_id: 用户USER_ID
"""
conn = pymysql.connect(
host='81.71.65.247',
port=3306,
user='root',
passwd='root',
db='aime',
charset='utf8'
)
try:
with conn.cursor() as cursor:
logger.debug(f"开始删除QQ:{user_qq}对应USERID:{user_id}")
sql = 'delete from id where qq = %s'
cursor.execute(sql, (user_id,))
conn.commit()
logger.success("删除失败")
return True
except Exception as e:
logger.error(f"删除QQ:{user_qq}对应ID{user_id}失败:{e}")
return False
finally:
conn.close()
def del_user_token(user_qq, token):
"""
删除对应QQ的USER_TOKEN
:param user_qq: 用户QQ号
:param user_token: 用户USER_TOKEN
"""
conn = pymysql.connect(
host='81.71.65.247',
port=3306,
user='root',
passwd='root',
db='aime',
charset='utf8'
)
try:
with conn.cursor() as cursor:
logger.debug(f"开始删除QQ:{user_qq}对应USERID:{token}")
sql = 'delete from id where qq = %s'
cursor.execute(sql, (token,))
conn.commit()
logger.success("删除失败")
return True
except Exception as e:
logger.error(f"删除QQ:{user_qq}对应ID{token}失败:{e}")
return False
finally:
conn.close()
def save_user_id(user_qq, user_id):
"""
存入对应QQ号的USER_ID
:param user_qq: 用户QQ号
:param user_id: 用户USER_ID
"""
conn = pymysql.connect(
host='81.71.65.247',
port=3306,
user='root',
passwd='root',
db='aime',
charset='utf8'
)
try:
if not is_userid_exist(user_qq):
with conn.cursor() as cursor:
logger.debug(f"开始存入QQ:{user_qq}的USERID:{user_id}")
sql = 'insert into id (qq, userid) values (%s, %s)' % (user_qq, user_id)
cursor.execute(sql)
conn.commit()
logger.success("存入成功")
return 1
else:
return -1
except Exception as e:
logger.error(f"插入/更新QQ:{user_qq}对应USERID:{user_id}失败:{e}")
return -2
finally:
conn.close()
def get_userid(user_qq):
"""
根据QQ号查询userid
:param user_qq: 用户QQ号
"""
conn = pymysql.connect(
host='81.71.65.247',
port=3306,
user='root',
passwd='root',
db='aime',
charset='utf8'
)
try:
if is_userid_exist(user_qq):
with conn.cursor() as cursor:
logger.debug(f"开始获取QQ号:{user_qq}对应USER_ID")
sql = 'select * from id where qq = %s' % (user_qq)
cursor.execute(sql)
result = cursor.fetchall()
for row in result:
logger.success(f'获取QQ:{user_qq}对应USER_ID成功:{row[1]}')
return row[1]
else:
logger.error(f"QQ:{user_qq}不存在USER_ID")
return -1
except Exception as e:
logger.error(f"QQ:{user_qq}对应USER_ID获取失败:{e}")
return -1
finally:
conn.close()
def is_token_exist(user_qq):
"""
根据QQ号查询token是否在数据库内
:param user_qq: 用户QQ号
"""
conn = pymysql.connect(
host='81.71.65.247',
port=3306,
user='root',
passwd='root',
db='aime',
charset='utf8'
)
try:
with conn.cursor() as cursor:
logger.debug(f"开始查询数据库是否有QQ号:{user_qq}对应TOKEN")
sql = 'select * from diving where qq = %s'
result = cursor.execute(sql, (user_qq,))
if result > 0:
logger.success("查询成功")
return True
else:
logger.success("查询无结果")
return False
except Exception as e:
logger.error(f"USER_ID查询失败:{e}")
return False
finally:
conn.close()
def save_user_token(user_qq, token):
"""
存入对应QQ号的USER_ID
:param user_qq: 用户QQ号
:param user_token: 用户USER_TOKEN
"""
conn = pymysql.connect(
host='81.71.65.247',
port=3306,
user='root',
passwd='root',
db='aime',
charset='utf8'
)
try:
if not is_token_exist(user_qq):
with conn.cursor() as cursor:
logger.debug(f"开始存入QQ:{user_qq}的TOKEN:{token}")
sql = 'insert into diving (qq, token) values (%s, %s)' % (user_qq, f"'{token}'")
print(sql)
cursor.execute(sql)
conn.commit()
logger.success("存入成功")
return 1
else:
return -1
except Exception as e:
logger.error(f"插入/更新QQ:{user_qq}对应USERID:{token}失败:{e}")
return -2
finally:
conn.close()
def get_token(user_qq):
"""
根据QQ号查询token
:param user_qq: 用户QQ号
"""
conn = pymysql.connect(
host='81.71.65.247',
port=3306,
user='root',
passwd='root',
db='aime',
charset='utf8'
)
try:
if is_token_exist(user_qq):
with conn.cursor() as cursor:
logger.debug(f"开始获取QQ号:{user_qq}对应USER_ID")
sql = 'select * from diving where qq = %s' % (user_qq)
cursor.execute(sql)
result = cursor.fetchall()
for row in result:
logger.success(f'获取QQ:{user_qq}对应USER_ID成功:{row[1]}')
return row[1]
else:
logger.error(f"QQ:{user_qq}不存在USER_ID")
return -1
except Exception as e:
logger.error(f"QQ:{user_qq}对应USER_ID获取失败:{e}")
return -1
finally:
conn.close()