mirror of
https://github.com/BTMuli/TeyvatGuide.git
synced 2025-12-14 09:38:13 +08:00
🌱 初步完成角色天赋获取
This commit is contained in:
143
src/types/Game/Calculate.d.ts
vendored
Normal file
143
src/types/Game/Calculate.d.ts
vendored
Normal file
@@ -0,0 +1,143 @@
|
|||||||
|
/**
|
||||||
|
* @file types Game Calculate.d.ts
|
||||||
|
* @description 养成计算器相关类型定义文件
|
||||||
|
* @author BTMuli <bt-muli@outlook.com>
|
||||||
|
* @since Alpha v0.2.1
|
||||||
|
*/
|
||||||
|
|
||||||
|
declare namespace TGApp.Game.Calculate {
|
||||||
|
/**
|
||||||
|
* @description 获取同步角色列表返回
|
||||||
|
* @since Alpha v0.2.1
|
||||||
|
* @see TGRequest.User.calculate.getSyncAvatarListAll
|
||||||
|
* @interface SyncAvatarListResponse
|
||||||
|
* @extends TGApp.BBS.Response.Base
|
||||||
|
* @property {Array<AvatarListItem>} data.list - 角色列表
|
||||||
|
* @return SyncAvatarListResponse
|
||||||
|
*/
|
||||||
|
export interface SyncAvatarListResponse extends TGApp.BBS.Response.Base {
|
||||||
|
data: {
|
||||||
|
list: AvatarListItem[];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 获取同步角色列表返回的角色数据
|
||||||
|
* @since Alpha v0.2.1
|
||||||
|
* @interface AvatarListItem
|
||||||
|
* @property {number} id - 角色 ID
|
||||||
|
* @property {string} name - 角色名称
|
||||||
|
* @property {string} icon - 角色头像
|
||||||
|
* @property {number} weapon_cat_id - 角色武器类型
|
||||||
|
* @property {number} avatar_level - 角色等级
|
||||||
|
* @property {number} element_attr_id - 角色元素类型
|
||||||
|
* @property {number} max_level - 角色最大等级
|
||||||
|
* @property {number} level_current - 角色当前等级
|
||||||
|
* @return AvatarListItem
|
||||||
|
*/
|
||||||
|
export interface AvatarListItem {
|
||||||
|
id: number;
|
||||||
|
name: string;
|
||||||
|
icon: string;
|
||||||
|
weapon_cat_id: number;
|
||||||
|
avatar_level: number;
|
||||||
|
element_attr_id: number;
|
||||||
|
max_level: number;
|
||||||
|
level_current: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 获取同步角色详情返回
|
||||||
|
* @since Alpha v0.2.1
|
||||||
|
* @see TGRequest.User.calculate.getSyncAvatarDetail
|
||||||
|
* @interface SyncAvatarDetailResponse
|
||||||
|
* @extends TGApp.BBS.Response.Base
|
||||||
|
* @property {AvatarDetail} data - 角色详情
|
||||||
|
* @return SyncAvatarDetailResponse
|
||||||
|
*/
|
||||||
|
export interface SyncAvatarDetailResponse extends TGApp.BBS.Response.Base {
|
||||||
|
data: TGApp.Game.Calculate.AvatarDetail;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 获取同步角色详情返回的角色详情数据
|
||||||
|
* @since Alpha v0.2.1
|
||||||
|
* @interface AvatarDetail
|
||||||
|
* @property {AvatarDetailSkill[]} skill_list - 角色技能列表
|
||||||
|
* @property {AvatarDetailWeapon} weapon - 角色武器
|
||||||
|
* @property {AvatarDetailRelic[]} reliquary_list - 角色圣遗物列表
|
||||||
|
* @return AvatarDetail
|
||||||
|
*/
|
||||||
|
export interface AvatarDetail {
|
||||||
|
skill_list: AvatarDetailSkill[];
|
||||||
|
weapon: AvatarDetailWeapon;
|
||||||
|
reliquary_list: AvatarDetailRelic[];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 获取同步角色详情返回的角色技能数据
|
||||||
|
* @since Alpha v0.2.1
|
||||||
|
* @interface AvatarDetailSkill
|
||||||
|
* @property {number} id - 技能 ID
|
||||||
|
* @property {number} group_id - 技能组 ID
|
||||||
|
* @property {string} name - 技能名称
|
||||||
|
* @property {string} icon - 技能图标
|
||||||
|
* @property {number} max_level - 技能最大等级
|
||||||
|
* @property {number} level_current - 技能当前等级
|
||||||
|
* @return AvatarDetailSkill
|
||||||
|
*/
|
||||||
|
export interface AvatarDetailSkill {
|
||||||
|
id: number;
|
||||||
|
group_id: number;
|
||||||
|
name: string;
|
||||||
|
icon: string;
|
||||||
|
max_level: number;
|
||||||
|
level_current: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 获取同步角色详情返回的角色武器数据
|
||||||
|
* @since Alpha v0.2.1
|
||||||
|
* @interface AvatarDetailWeapon
|
||||||
|
* @property {number} id - 武器 ID
|
||||||
|
* @property {string} name - 武器名称
|
||||||
|
* @property {string} icon - 武器图标
|
||||||
|
* @property {number} weapon_cat_id - 武器类型
|
||||||
|
* @property {number} weapon_level - 武器等级
|
||||||
|
* @property {number} max_level - 武器最大等级
|
||||||
|
* @property {number} level_current - 武器当前等级
|
||||||
|
* @return AvatarDetailWeapon
|
||||||
|
*/
|
||||||
|
export interface AvatarDetailWeapon {
|
||||||
|
id: number;
|
||||||
|
name: string;
|
||||||
|
icon: string;
|
||||||
|
weapon_cat_id: number;
|
||||||
|
weapon_level: number;
|
||||||
|
max_level: number;
|
||||||
|
level_current: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 获取同步角色详情返回的角色圣遗物数据
|
||||||
|
* @since Alpha v0.2.1
|
||||||
|
* @interface AvatarDetailRelic
|
||||||
|
* @property {number} id - 圣遗物 ID
|
||||||
|
* @property {string} name - 圣遗物名称
|
||||||
|
* @property {string} icon - 圣遗物图标
|
||||||
|
* @property {number} reliquary_cat_id - 圣遗物类型
|
||||||
|
* @property {number} reliquary_level - 圣遗物等级
|
||||||
|
* @property {number} level_current - 圣遗物当前等级
|
||||||
|
* @property {number} max_level - 圣遗物最大等级
|
||||||
|
* @return AvatarDetailRelic
|
||||||
|
*/
|
||||||
|
export interface AvatarDetailRelic {
|
||||||
|
id: number;
|
||||||
|
name: string;
|
||||||
|
icon: string;
|
||||||
|
reliquary_cat_id: number;
|
||||||
|
reliquary_level: number;
|
||||||
|
level_current: number;
|
||||||
|
max_level: number;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
* @file web api TGApi.ts
|
* @file web api TGApi.ts
|
||||||
* @description 应用用到的 API
|
* @description 应用用到的 API
|
||||||
* @author BTMuli <bt-muli@outlook.com>
|
* @author BTMuli <bt-muli@outlook.com>
|
||||||
* @since Alpha v0.2.0
|
* @since Alpha v0.2.1
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { BBSUserInfoApi } from "./BBS";
|
import { BBSUserInfoApi } from "./BBS";
|
||||||
@@ -17,6 +17,8 @@ import {
|
|||||||
TakumiRecordAbyssApi,
|
TakumiRecordAbyssApi,
|
||||||
TakumiSTokenBindingRolesApi,
|
TakumiSTokenBindingRolesApi,
|
||||||
TakumiCookieBindingRolesApi,
|
TakumiCookieBindingRolesApi,
|
||||||
|
TakumiCalculateSyncAvatarListApi,
|
||||||
|
TakumiCalculateSyncAvatarDetailApi,
|
||||||
} from "./Takumi";
|
} from "./Takumi";
|
||||||
|
|
||||||
// 应用 API
|
// 应用 API
|
||||||
@@ -40,6 +42,10 @@ const TGApi = {
|
|||||||
bySToken: {
|
bySToken: {
|
||||||
getAccounts: TakumiSTokenBindingRolesApi, // 获取绑定角色
|
getAccounts: TakumiSTokenBindingRolesApi, // 获取绑定角色
|
||||||
},
|
},
|
||||||
|
calculate: {
|
||||||
|
getSyncAvatarList: TakumiCalculateSyncAvatarListApi, // 同步角色列表
|
||||||
|
getSyncAvatarDetail: TakumiCalculateSyncAvatarDetailApi, // 同步角色详情
|
||||||
|
},
|
||||||
getUserCard: TakumiRecordCardApi, // 获取用户卡片
|
getUserCard: TakumiRecordCardApi, // 获取用户卡片
|
||||||
getUserBase: TakumiRecordIndexApi, // 获取用户基本信息
|
getUserBase: TakumiRecordIndexApi, // 获取用户基本信息
|
||||||
getAbyss: TakumiRecordAbyssApi, // 获取深境螺旋信息
|
getAbyss: TakumiRecordAbyssApi, // 获取深境螺旋信息
|
||||||
|
|||||||
@@ -6,16 +6,20 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
const TakumiApi = "https://api-takumi.mihoyo.com/"; // 基础 API
|
const TakumiApi = "https://api-takumi.mihoyo.com/"; // 基础 API
|
||||||
const TakumiRecordApi = "https://api-takumi-record.mihoyo.com/"; // 游戏记录 API
|
|
||||||
const TakumiBindingApi = `${TakumiApi}binding/api/`; // 绑定 API
|
|
||||||
const TakumiRecordGenshinApi = `${TakumiRecordApi}game_record/app/genshin/api/`; // 原神游戏记录 API
|
|
||||||
const TakumiAuthApi = `${TakumiApi}auth/api/`; // 认证 API
|
const TakumiAuthApi = `${TakumiApi}auth/api/`; // 认证 API
|
||||||
|
const TakumiBindingApi = `${TakumiApi}binding/api/`; // 绑定 API
|
||||||
|
const TakumiCalculateApi = `${TakumiApi}event/e20200928calculate/`; // 计算 API
|
||||||
|
const TakumiRecordApi = "https://api-takumi-record.mihoyo.com/"; // 游戏记录 API
|
||||||
|
const TakumiRecordGenshinApi = `${TakumiRecordApi}game_record/app/genshin/api/`; // 原神游戏记录 API
|
||||||
|
|
||||||
export const TakumiTokensApi = `${TakumiAuthApi}getMultiTokenByLoginTicket`; // 登录票据 API
|
export const TakumiTokensApi = `${TakumiAuthApi}getMultiTokenByLoginTicket`; // 登录票据 API
|
||||||
export const TakumiActionTicketsApi = `${TakumiAuthApi}getActionTicketByStoken`; // 行为票据 API
|
|
||||||
export const TakumiRecordCardApi = `${TakumiRecordApi}game_record/app/card/wapi/getGameRecordCard`; // 游戏记录卡片 API
|
export const TakumiRecordCardApi = `${TakumiRecordApi}game_record/app/card/wapi/getGameRecordCard`; // 游戏记录卡片 API
|
||||||
export const TakumiRecordIndexApi = `${TakumiRecordGenshinApi}index`; // 原神游戏记录索引 API
|
export const TakumiRecordIndexApi = `${TakumiRecordGenshinApi}index`; // 原神游戏记录索引 API
|
||||||
export const TakumiRecordCharactersApi = `${TakumiRecordGenshinApi}character`; // 原神游戏记录角色 API
|
export const TakumiRecordCharactersApi = `${TakumiRecordGenshinApi}character`; // 原神游戏记录角色 API
|
||||||
export const TakumiRecordAbyssApi = `${TakumiRecordGenshinApi}spiralAbyss`; // 原神游戏记录深境螺旋 API
|
export const TakumiRecordAbyssApi = `${TakumiRecordGenshinApi}spiralAbyss`; // 原神游戏记录深境螺旋 API
|
||||||
export const TakumiSTokenBindingRolesApi = `${TakumiBindingApi}getUserGameRolesBySToken`; // 获取绑定角色 API-根据 stoken
|
export const TakumiSTokenBindingRolesApi = `${TakumiBindingApi}getUserGameRolesBySToken`; // 获取绑定角色 API-根据 stoken
|
||||||
export const TakumiCookieBindingRolesApi = `${TakumiBindingApi}getUserGameRolesByCookie`; // 获取绑定角色 API-根据 Cookie
|
export const TakumiCookieBindingRolesApi = `${TakumiBindingApi}getUserGameRolesByCookie`; // 获取绑定角色 API-根据 Cookie
|
||||||
|
|
||||||
|
// 养成计算器 API
|
||||||
|
export const TakumiCalculateSyncAvatarListApi = `${TakumiCalculateApi}v1/sync/avatar/list`;
|
||||||
|
export const TakumiCalculateSyncAvatarDetailApi = `${TakumiCalculateApi}v1/sync/avatar/detail`;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
* @file web request TGRequest.ts
|
* @file web request TGRequest.ts
|
||||||
* @description 应用用到的请求函数
|
* @description 应用用到的请求函数
|
||||||
* @author BTMuli <bt-muli@outlook.com>
|
* @author BTMuli <bt-muli@outlook.com>
|
||||||
* @since Alpha v0.1.6
|
* @since Alpha v0.2.1
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { getAbyss } from "./getAbyss";
|
import { getAbyss } from "./getAbyss";
|
||||||
@@ -13,6 +13,8 @@ import { getGameAccountsBySToken, getGameAccountsByCookie } from "./getGameAccou
|
|||||||
import { getGameRecord } from "./getGameRecord";
|
import { getGameRecord } from "./getGameRecord";
|
||||||
import { getLTokenBySToken } from "./getLToken";
|
import { getLTokenBySToken } from "./getLToken";
|
||||||
import { getGameRoleListByLToken } from "./getRoleList";
|
import { getGameRoleListByLToken } from "./getRoleList";
|
||||||
|
import getSyncAvatarDetail from "./getSyncAvatarDetail";
|
||||||
|
import getSyncAvatarListAll from "./getSyncAvatarListAll";
|
||||||
// import * from "./getTickets.ts";
|
// import * from "./getTickets.ts";
|
||||||
import { getTokensByLoginTicket } from "./getTokens";
|
import { getTokensByLoginTicket } from "./getTokens";
|
||||||
import { getUserInfoByCookie } from "./getUserInfo";
|
import { getUserInfoByCookie } from "./getUserInfo";
|
||||||
@@ -45,6 +47,10 @@ const TGRequest = {
|
|||||||
getCookieToken: getCookieTokenBySToken,
|
getCookieToken: getCookieTokenBySToken,
|
||||||
getLToken: getLTokenBySToken,
|
getLToken: getLTokenBySToken,
|
||||||
},
|
},
|
||||||
|
calculate: {
|
||||||
|
getSyncAvatarListAll,
|
||||||
|
getSyncAvatarDetail,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
51
src/web/request/getSyncAvatarDetail.ts
Normal file
51
src/web/request/getSyncAvatarDetail.ts
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
/**
|
||||||
|
* @file web request getSyncAvatarDetail.ts
|
||||||
|
* @description 获取同步角色详情相关请求函数
|
||||||
|
* @author BTMuli <bt-muli@outlook.com>
|
||||||
|
* @since Alpha v0.2.1
|
||||||
|
*/
|
||||||
|
|
||||||
|
// tauri
|
||||||
|
import { http } from "@tauri-apps/api";
|
||||||
|
// api
|
||||||
|
import TGApi from "../api/TGApi";
|
||||||
|
// utils
|
||||||
|
import TGUtils from "../utils/TGUtils";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 获取同步角色详情
|
||||||
|
* @since Alpha v0.2.1
|
||||||
|
* @param {Record<string, string>} cookie cookie
|
||||||
|
* @param {string} uid 用户 uid
|
||||||
|
* @param {string} avatarId 角色 id
|
||||||
|
* @returns {Promise<TGApp.Game.Calculate.AvatarDetail|TGApp.BBS.Response.Base>}
|
||||||
|
*/
|
||||||
|
async function getSyncAvatarDetail(
|
||||||
|
cookie: Record<string, string>,
|
||||||
|
uid: string,
|
||||||
|
avatarId: string,
|
||||||
|
): Promise<TGApp.Game.Calculate.AvatarDetail | TGApp.BBS.Response.Base> {
|
||||||
|
const url = TGApi.GameData.calculate.getSyncAvatarDetail;
|
||||||
|
const params = {
|
||||||
|
uid,
|
||||||
|
region: TGUtils.Tools.getServerByUid(uid),
|
||||||
|
avatar_id: avatarId,
|
||||||
|
};
|
||||||
|
const header = {
|
||||||
|
"User-Agent": "Tauri.Genshin/0.2.1",
|
||||||
|
Referer: "https://webstatic.mihoyo.com/",
|
||||||
|
Cookie: TGUtils.Tools.transCookie(cookie),
|
||||||
|
};
|
||||||
|
return await http
|
||||||
|
.fetch<TGApp.Game.Calculate.SyncAvatarDetailResponse | TGApp.BBS.Response.Base>(url, {
|
||||||
|
method: "GET",
|
||||||
|
headers: header,
|
||||||
|
query: params,
|
||||||
|
})
|
||||||
|
.then((res) => {
|
||||||
|
if (res.data.retcode !== 0) return res.data as TGApp.BBS.Response.Base;
|
||||||
|
return res.data.data as TGApp.Game.Calculate.AvatarDetail;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export default getSyncAvatarDetail;
|
||||||
74
src/web/request/getSyncAvatarListAll.ts
Normal file
74
src/web/request/getSyncAvatarListAll.ts
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
/**
|
||||||
|
* @file web request getSyncAvatarListAll.ts
|
||||||
|
* @description 获取同步角色列表请求
|
||||||
|
* @author BTMuli <bt-muli@outlook.com>
|
||||||
|
* @since Alpha v0.2.1
|
||||||
|
*/
|
||||||
|
|
||||||
|
// tauri
|
||||||
|
import { http } from "@tauri-apps/api";
|
||||||
|
// api
|
||||||
|
import TGApi from "../api/TGApi";
|
||||||
|
// utils
|
||||||
|
import TGUtils from "../utils/TGUtils";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 获取同步角色列表请求
|
||||||
|
* @since Alpha v0.2.1
|
||||||
|
* @param {Record<string,string>} cookie cookie
|
||||||
|
* @param {string} uid 用户 uid
|
||||||
|
* @param {number} page 页码
|
||||||
|
* @return {Promise<TGApp.Game.Calculate.AvatarListItem[]|TGApp.BBS.Response.Base>}
|
||||||
|
*/
|
||||||
|
async function getSyncAvatarList(
|
||||||
|
cookie: Record<string, string>,
|
||||||
|
uid: string,
|
||||||
|
page: number,
|
||||||
|
): Promise<TGApp.Game.Calculate.AvatarListItem[] | TGApp.BBS.Response.Base> {
|
||||||
|
const url = TGApi.GameData.calculate.getSyncAvatarList; // 获取同步角色列表请求地址
|
||||||
|
const data = {
|
||||||
|
uid,
|
||||||
|
region: TGUtils.Tools.getServerByUid(uid),
|
||||||
|
page,
|
||||||
|
};
|
||||||
|
const header = {
|
||||||
|
"User-Agent": "Tauri.Genshin/0.2.1",
|
||||||
|
Referer: "https://webstatic.mihoyo.com/",
|
||||||
|
Cookie: TGUtils.Tools.transCookie(cookie),
|
||||||
|
};
|
||||||
|
return await http
|
||||||
|
.fetch<TGApp.Game.Calculate.SyncAvatarListResponse | TGApp.BBS.Response.Base>(url, {
|
||||||
|
method: "POST",
|
||||||
|
body: http.Body.json(data),
|
||||||
|
headers: header,
|
||||||
|
})
|
||||||
|
.then((res) => {
|
||||||
|
if (res.data.retcode !== 0) return res.data as TGApp.BBS.Response.Base;
|
||||||
|
return res.data.data.list as TGApp.Game.Calculate.AvatarListItem[];
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 获取同步角色列表-汇总
|
||||||
|
* @since Alpha v0.2.1
|
||||||
|
* @param {Record<string,string>} cookie cookie
|
||||||
|
* @param {string} uid 用户 uid
|
||||||
|
* @return {Promise<TGApp.Game.Calculate.AvatarListItem[]|TGApp.BBS.Response.Base>}
|
||||||
|
*/
|
||||||
|
async function getSyncAvatarListAll(
|
||||||
|
cookie: Record<string, string>,
|
||||||
|
uid: string,
|
||||||
|
): Promise<TGApp.Game.Calculate.AvatarListItem[] | TGApp.BBS.Response.Base> {
|
||||||
|
let page = 1;
|
||||||
|
let res = await getSyncAvatarList(cookie, uid, page);
|
||||||
|
if (!Array.isArray(res)) return res;
|
||||||
|
let list: TGApp.Game.Calculate.AvatarListItem[] = [];
|
||||||
|
while (Array.isArray(res) && res.length > 0) {
|
||||||
|
list = list.concat(res);
|
||||||
|
page++;
|
||||||
|
res = await getSyncAvatarList(cookie, uid, page);
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
export default getSyncAvatarListAll;
|
||||||
@@ -2,13 +2,13 @@
|
|||||||
* @file web utils TGUtils.ts
|
* @file web utils TGUtils.ts
|
||||||
* @description 应用用到的工具函数
|
* @description 应用用到的工具函数
|
||||||
* @author BTMuli <bt-muli@outlook.com>
|
* @author BTMuli <bt-muli@outlook.com>
|
||||||
* @since Alpha v0.2.0
|
* @since Alpha v0.2.1
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { getAnnoCard } from "./getAnnoCard";
|
import { getAnnoCard } from "./getAnnoCard";
|
||||||
import { getRequestHeader, getRequestSignHeader } from "./getRequestHeader";
|
import { getRequestHeader, getRequestSignHeader } from "./getRequestHeader";
|
||||||
import { parseAnnoContent } from "./parseAnno";
|
import { parseAnnoContent } from "./parseAnno";
|
||||||
import { getServerByUid } from "./tools";
|
import { getServerByUid, transCookie } from "./tools";
|
||||||
|
|
||||||
const TGUtils = {
|
const TGUtils = {
|
||||||
Anno: {
|
Anno: {
|
||||||
@@ -21,6 +21,7 @@ const TGUtils = {
|
|||||||
},
|
},
|
||||||
Tools: {
|
Tools: {
|
||||||
getServerByUid,
|
getServerByUid,
|
||||||
|
transCookie,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user