GenshinUID/utils/db_operation/db_operation.py
2022-09-03 11:03:43 +08:00

256 lines
8.1 KiB
Python

from typing import List, Union, Optional
from .database.ConfigDAL import ConfigDAL
from .database.CookiesDAL import CookiesDAL
from .database.UidDataDAL import UidDataDAL
from .database.PushDataDAL import PushDataDAL
from .database.db_config import async_session
async def get_push_status(uid, func) -> List:
async with async_session() as session: # type: ignore
async with session.begin():
PushData = PushDataDAL(session)
push_dict = await PushData.get_user_data(uid)
if push_dict:
if f'{func}Push' in push_dict:
return [
push_dict[f'{func}Push'],
push_dict[f'{func}Value'],
]
return []
async def update_push_status(uid: int, func: str, status: str) -> bool:
async with async_session() as session: # type: ignore
async with session.begin():
PushData = PushDataDAL(session)
return await PushData.update_user_data(
uid, {f'{func}Push': status}
)
async def update_push_value(uid: int, func: str, value: int) -> bool:
async with async_session() as session: # type: ignore
async with session.begin():
PushData = PushDataDAL(session)
return await PushData.update_user_data(
uid, {f'{func}Value': value}
)
async def update_is_pushed(
uid: int, func: str, is_pushed: str = 'off'
) -> bool:
async with async_session() as session: # type: ignore
async with session.begin():
PushData = PushDataDAL(session)
return await PushData.update_user_data(
uid, {f'{func}IsPush': is_pushed}
)
async def bind_db(userid, uid=None, mys=None):
async with async_session() as session: # type: ignore
async with session.begin():
UidData = UidDataDAL(session)
im = await UidData.bind_db(userid, {'UID': uid, 'MYSID': mys})
return im
async def get_all_uid() -> List:
async with async_session() as session: # type: ignore
async with session.begin():
UidData = UidDataDAL(session)
lst = await UidData.get_all_uid_list()
return lst
async def get_all_cookie() -> List:
async with async_session() as session: # type: ignore
async with session.begin():
Cookies = CookiesDAL(session)
lst = await Cookies.get_all_cookie_list()
return lst
async def get_all_stoken() -> List:
async with async_session() as session: # type: ignore
async with session.begin():
Cookies = CookiesDAL(session)
lst = await Cookies.get_all_stoken_list()
return lst
async def select_db(userid, mode='auto') -> Union[List, str, None]:
"""
:说明:
选择绑定uid/mys库
:参数:
* userid (str): QQ号。
* mode (str): 模式如下
* auto(默认): 自动选择(优先mys)
* uid: 选择uid库
* mys: 选择mys库
* list: 返回uid列表
:返回:
* data (list): 返回获取值
mode为list时返回uid列表
其他情况下data[0]为需要的uid/mysid
data[1]表示data[0]是`uid` or `mysid`
"""
async with async_session() as session: # type: ignore
async with session.begin():
UidData = UidDataDAL(session)
if mode == 'auto':
im = await UidData.get_anyid(userid)
elif mode == 'uid':
im = await UidData.get_uid(userid)
elif mode == 'mys':
im = await UidData.get_mysid(userid)
elif mode == 'list':
im = await UidData.get_uid_list(userid)
else:
return None
return im
async def switch_db(userid: int, uid: Optional[str] = None) -> str:
"""
:说明:
切换绑定的UID列表,绑定一个UID的情况下返回无法切换
切换前 -> 12_13_14
切换后 -> 13_14_12
:参数:
* userid (str): QQ号。
:返回:
* im (str): 回调信息。
"""
async with async_session() as session: # type: ignore
async with session.begin():
UidData = UidDataDAL(session)
im = await UidData.switch_uid(userid, uid)
return im
async def delete_db(userid: int, data: dict) -> str:
"""
:说明:
删除当前绑定的UID信息
删除前 -> 12_13_14
删除后 -> 13_14
:参数:
* userid (str): QQ号。
:返回:
* im (str): 回调信息。
"""
async with async_session() as session: # type: ignore
async with session.begin():
UidData = UidDataDAL(session)
im = await UidData.delete_db(userid, data)
return im
async def cookies_db(uid: str, cookies: str, qid: int):
async with async_session() as session: # type: ignore
async with session.begin():
Cookies = CookiesDAL(session)
im = await Cookies.add_cookie_db(qid, uid, cookies)
return im
async def error_db(cookies: str, error: str):
async with async_session() as session: # type: ignore
async with session.begin():
Cookies = CookiesDAL(session)
im = await Cookies.add_error_db(cookies, error)
return im
async def owner_cookies(uid: str) -> str:
async with async_session() as session: # type: ignore
async with session.begin():
Cookies = CookiesDAL(session)
owner_ck = await Cookies.get_user_ck(uid)
return str(owner_ck)
async def get_stoken(uid: str) -> str:
async with async_session() as session: # type: ignore
async with session.begin():
Cookies = CookiesDAL(session)
stoken = await Cookies.get_user_stoken(uid)
return str(stoken)
async def get_user_bind_data(uid: str) -> dict:
async with async_session() as session: # type: ignore
async with session.begin():
Cookies = CookiesDAL(session)
lst = await Cookies.get_user_data_dict(uid)
return lst
async def stoken_db(s_cookies: str, uid: str) -> str:
async with async_session() as session: # type: ignore
async with session.begin():
Cookies = CookiesDAL(session)
im = await Cookies.add_stoken_db(uid, s_cookies)
return im
async def open_push(uid, qid, status, func):
async with async_session() as session: # type: ignore
async with session.begin():
Cookies = CookiesDAL(session)
im = await Cookies.update_user_status(
uid, {'QID': qid, func: status}
)
return im
async def config_check(func, mode='CHECK') -> bool:
async with async_session() as session: # type: ignore
async with session.begin():
Config = ConfigDAL(session)
im = False
if mode == 'CHECK':
im = await Config.config_check(func)
elif mode == 'OPEN':
im = await Config.config_update(func, 'on')
elif mode == 'CLOSED':
im = await Config.config_update(func, 'off')
return im
async def get_all_signin_list() -> List:
async with async_session() as session: # type: ignore
async with session.begin():
Cookies = CookiesDAL(session)
im = await Cookies.get_status_list('StatusB')
return im
async def get_all_push_list() -> List:
async with async_session() as session: # type: ignore
async with session.begin():
Cookies = CookiesDAL(session)
im = await Cookies.get_status_list('StatusA')
return im
async def get_push_data(uid: int) -> dict:
async with async_session() as session: # type: ignore
async with session.begin():
PushData = PushDataDAL(session)
push_data = await PushData.get_user_data(uid)
return push_data
async def cache_db(uid):
async with async_session() as session: # type: ignore
async with session.begin():
Cookies = CookiesDAL(session)
im = await Cookies.get_random_ck(uid)
return im