/** * TakumiRecordGenshinApi 相关请求 * @since Beta v0.10.0 */ import gameEnum from "@enum/game.js"; import { getRequestHeader } from "@utils/getRequestHeader.js"; import TGHttps from "@utils/TGHttps.js"; import TGHttp from "@utils/TGHttp.js"; // TakumiRecordGenshinApiBaseUrl => trgAbu const trgAbu: Readonly = "https://api-takumi-record.mihoyo.com/game_record/app/genshin/api/"; /** * 获取角色详情 * @since Beta v0.6.3 * @param cookie - Cookie * @param user - 用户 * @param avatarIds - 角色 id 列表 * @returns 角色详情返回 */ async function characterDetail( cookie: TGApp.App.Account.Cookie, user: TGApp.Sqlite.Account.Game, avatarIds: Array, ): Promise { const ck = { account_id: cookie.account_id, cookie_token: cookie.cookie_token }; const data = { role_id: user.gameUid, server: user.region, character_ids: avatarIds }; const resp = await TGHttp( `${trgAbu}character/detail`, { method: "POST", body: JSON.stringify(data), headers: getRequestHeader(ck, "POST", data) }, ); if (resp.retcode !== 0) return resp; return resp.data; } /** * 获取角色列表 * @since Beta v0.6.3 * @param cookie - Cookie * @param user - 用户 * @returns 角色列表返回 */ async function characterList( cookie: TGApp.App.Account.Cookie, user: TGApp.Sqlite.Account.Game, ): Promise | TGApp.BBS.Response.Base> { const ck = { account_id: cookie.account_id, cookie_token: cookie.cookie_token }; const data = { role_id: user.gameUid, server: user.region }; const resp = await TGHttp( `${trgAbu}character/list`, { method: "POST", body: JSON.stringify(data), headers: getRequestHeader(ck, "POST", data) }, ); if (resp.retcode !== 0) return resp; return resp.data.list; } /** * 获取首页信息 * @since Beta v0.10.0 * @param cookie - Cookie * @param user - 用户 * @param listType - 列表类型 * @returns 首页返回 */ async function index( cookie: TGApp.App.Account.Cookie, user: TGApp.Sqlite.Account.Game, listType: number = 0, ): Promise { const ck = { account_id: cookie.account_id, cookie_token: cookie.cookie_token }; const params = { avatar_list_type: listType, role_id: user.gameUid, server: user.region }; const resp = await TGHttps.get(`${trgAbu}index`, { headers: getRequestHeader(ck, "GET", params), query: params, }); return resp.data; } /** * 获取真境剧诗数据 * @since Beta v0.9.6 * @param cookie - Cookie * @param user - 用户 * @returns 真境剧诗数据 */ async function roleCombat( cookie: TGApp.App.Account.Cookie, user: TGApp.Sqlite.Account.Game, ): Promise { const ck = { account_id: cookie.account_id, cookie_token: cookie.cookie_token, ltoken: cookie.ltoken, ltuid: cookie.ltuid, }; const params = { role_id: user.gameUid, server: user.region, active: 1, need_detail: true }; const resp = await TGHttp( `${trgAbu}role_combat`, { method: "GET", headers: getRequestHeader(ck, "GET", params), query: params }, ); if (resp.retcode !== 0) return resp; return resp.data; } /** * 获取绘想游迹数据 * @since Beta v0.9.6 * @param cookie - Cookie * @param user - 用户 * @returns 绘想游迹数据 */ async function charMaster( cookie: TGApp.App.Account.Cookie, user: TGApp.Sqlite.Account.Game, ): Promise { const ck = { account_id: cookie.account_id, cookie_token: cookie.cookie_token, ltoken: cookie.ltoken, ltuid: cookie.ltuid, }; const params = { role_id: user.gameUid, server: user.region }; const resp = await TGHttp( `${trgAbu}char_master`, { method: "GET", headers: getRequestHeader(ck, "GET", params), query: params }, ); if (resp.retcode !== 0) return resp; return resp.data; } /** * 获取深渊螺旋记录 * @since Beta v0.6.3 * @param cookie - Cookie * @param user - 用户 * @param schedule - 档期 * @example 1: 本期, 2: 上期 * @returns 深渊螺旋记录 */ async function spiralAbyss( cookie: TGApp.App.Account.Cookie, user: TGApp.Sqlite.Account.Game, schedule: string, ): Promise { const ck = { account_id: cookie.account_id, cookie_token: cookie.cookie_token, ltoken: cookie.ltoken, ltuid: cookie.ltuid, }; const params = { role_id: user.gameUid, schedule_type: schedule, server: user.region }; const resp = await TGHttp( `${trgAbu}spiralAbyss`, { method: "GET", headers: getRequestHeader(ck, "GET", params), query: params }, ); if (resp.retcode !== 0) return resp; return resp.data; } /** * 获取赋光之人列表 * @since Beta v0.8.0 * @param server - 区服 * @returns 赋光之人列表 */ async function hardChallengePopularity( server: TGApp.Game.Base.ServerTypeEnum = gameEnum.server.CN_GF01, ): Promise { let roleId: number | undefined; switch (server) { case gameEnum.server.CN_GF01: roleId = 147991965; break; case gameEnum.server.CN_QD01: roleId = 500299765; break; default: return { retcode: -1, message: "不支持的服务器", data: null }; } const resp = await TGHttp( `${trgAbu}hard_challenge/popularity`, { method: "GET", query: { server, role_id: roleId } }, ); if (resp.retcode !== 0) return resp; return resp; } /** * 获取幽境危战数据 * @since Beta v0.8.0 * @param cookie - Cookie * @param user - 用户 * @returns 幽境危战数据 */ async function hardChallengeDetail( cookie: TGApp.App.Account.Cookie, user: TGApp.Sqlite.Account.Game, ): Promise { const ck = { account_id: cookie.account_id, cookie_token: cookie.cookie_token }; const params = { need_detail: true, role_id: user.gameUid, server: user.region }; const resp = await TGHttp( `${trgAbu}hard_challenge`, { method: "GET", headers: getRequestHeader(ck, "GET", params), query: params }, ); if (resp.retcode !== 0) return resp; return resp.data; } /** * 获取活动日历数据 * @since Beta v0.8.0 * @param cookie - Cookie * @param user - 用户 * @returns 活动日历数据 */ async function actCalendar( cookie: TGApp.App.Account.Cookie, user: TGApp.Sqlite.Account.Game, ): Promise { const ck = { account_id: cookie.account_id, cookie_token: cookie.cookie_token }; const body = { role_id: user.gameUid, server: user.region }; const resp = await TGHttp( `${trgAbu}act_calendar`, { method: "POST", headers: getRequestHeader(ck, "POST", body), body: JSON.stringify(body) }, ); if (resp.retcode !== 0) return resp; return resp.data; } const recordReq = { index: index, actCalendar: actCalendar, character: { list: characterList, detail: characterDetail }, combat: { base: roleCombat, char: charMaster, }, spiralAbyss: spiralAbyss, challenge: { detail: hardChallengeDetail, pop: hardChallengePopularity, }, }; export default recordReq;