feat: 增加留影叙佳期获取生日角色相片功能
This commit is contained in:
		
							parent
							
								
									9b9ec42ffa
								
							
						
					
					
						commit
						993d42db8f
					
				| 
						 | 
					@ -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'
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue