feat: 增加留影叙佳期获取生日角色相片功能

This commit is contained in:
woxigousade 2023-08-10 15:33:33 +08:00
parent 9b9ec42ffa
commit 993d42db8f
1 changed files with 142 additions and 0 deletions

View File

@ -0,0 +1,142 @@
import plugin from '../../../lib/plugins/plugin.js'
import gsCfg from '../model/gsCfg.js'
import axios from 'axios'
export class takeBirthdayPhoto extends plugin {
constructor() {
super({
name: '留影叙佳期',
dsc: '留影叙佳期',
/** https://oicqjs.github.io/oicq/#events */
event: 'message',
priority: 5000,
rule: [
{
/** 命令正则匹配 */
reg: '#?留影叙佳期$',
/** 执行方法 */
fnc: 'birthdaystar',
}
]
})
}
async birthdaystar(e) {
const { user_id } = e;
const userInfo = await this.getCookie(user_id)
if (!userInfo) {
e.reply('请先绑定ck再使用本功能哦~', true);
return true;
}
const e_hk4e_token = await this.getEHK4EToken(userInfo.ck, userInfo.uid)
if (!e_hk4e_token) {
e.reply('获取e-hk4e_token失败请刷新ck后再试~', true);
return true;
}
const birthday_star_list = await this.getBirthdayStar(userInfo.uid, e_hk4e_token, userInfo.ck);
if (!birthday_star_list) {
e.reply('获取生日角色失败,请稍后再试~', true);
return true;
}
if (birthday_star_list.length === 0) {
e.reply('今天没有生日角色哦~', true);
return true;
}
for (let role of birthday_star_list) {
await e.reply(`正在获取${role.name}的图片,请稍等~`, true);
await e.reply(segment.image(role.take_picture))
let message = await this.getBirthdayStarImg(userInfo.uid, e_hk4e_token, userInfo.ck, role.role_id)
if (message != 'success') {
await e.reply(message)
return true
} else {
await e.reply(`获取${role.name}的图片成功~`, true);
}
}
return true
}
async getCookie(user_id) {
const userInfo = ((await gsCfg.getBingCk()).ckQQ)[user_id]
return userInfo
}
async getEHK4EToken(ck, uid) {
const isCN = uid.toString().match(/^[125]/) ? true : false;
const url = isCN ? 'https://api-takumi.mihoyo.com/common/badge/v1/login/account' : 'https://api-os-takumi.mihoyo.com/common/badge/v1/login/account'
const game_biz = isCN ? 'hk4e_cn' : 'hk4e_global'
const region = await this.getServer(uid)
const header = {
'Cookie': ck,
'Content-Type': 'application/json;charset=UTF-8',
'Referer': 'https://webstatic.mihoyo.com/',
'Origin': 'https://webstatic.mihoyo.com'
}
const body = JSON.stringify({
uid: Number(uid),
game_biz: game_biz,
lang: 'zh-cn',
region: region,
})
let res = await axios.post(url, body, { headers: header })
if (res.data.retcode != 0) {
return false
}
let e_hk4e_token = res.headers['set-cookie'].toString().match(/e_hk4e_token=(.*?);/)[1]
return e_hk4e_token
}
async getServer(uid) {
switch (String(uid)[0]) {
case '1':
case '2':
return 'cn_gf01'
case '5':
return 'cn_qd01'
case '6':
return 'os_usa'
case '7':
return 'os_euro'
case '8':
return 'os_asia'
case '9':
return 'os_cht'
}
return 'cn_gf01'
}
async getBirthdayStar(uid, e_hk4e_token, ck) {
let cookie = `e_hk4e_token=${e_hk4e_token};${ck}`
let badge_region = await this.getServer(uid)
let isCN = uid.toString().match(/^[125]/) ? true : false;
let game_biz = isCN ? 'hk4e_cn' : 'hk4e_global'
let header = {
'Cookie': cookie,
}
let url = `https://hk4e-api.mihoyo.com/event/birthdaystar/account/index?lang=zh-cn&badge_uid=${uid}&badge_region=${badge_region}&game_biz=${game_biz}&activity_id=20220301153521`
let res = await axios.get(url, { headers: header })
return res.data.data.role
}
async getBirthdayStarImg(uid, e_hk4e_token, ck, role_id) {
let cookie = `e_hk4e_token=${e_hk4e_token};${ck}`
let badge_region = await this.getServer(uid)
let isCN = uid.toString().match(/^[125]/) ? true : false;
let game_biz = isCN ? 'hk4e_cn' : 'hk4e_global'
let header = {
'Cookie': cookie,
}
let url = `https://hk4e-api.mihoyo.com/event/birthdaystar/account/post_my_draw?lang=zh-cn&badge_uid=${uid}&badge_region=${badge_region}&game_biz=${game_biz}&activity_id=20220301153521`
let res = await axios.post(url, { role_id: Number(role_id) }, { headers: header })
if (res.data.retcode != 0) {
return res.data.message
} else {
return 'success'
}
}
}