Miao-Yunzai/plugins/genshin/apps/takeBirthdayPhoto.js

168 lines
4.8 KiB
JavaScript
Raw 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 plugin from '../../../lib/plugins/plugin.js'
import gsCfg from '../model/gsCfg.js'
// import axios from 'axios'
let axios = null
let getAxios = async function () {
if (axios) {
return axios
}
try {
axios = (await import('axios')).default
} catch (e) {
console.log('未安装依赖axios...')
return false
}
return 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 axios = await getAxios()
if (!axios) {
return false
}
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 axios = await getAxios()
if (!axios) {
return false
}
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 axios = await getAxios()
if (!axios) {
return false
}
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'
}
}
}