summaryrefslogtreecommitdiff
path: root/ATRI/plugins/genshin/data_source.py
blob: 2bb4572118ce5a99f7d9793f34e2f9c7f7989155 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import time
import json
import random
import string
import hashlib
import requests
from typing import Optional

from ATRI.request import Request
from ATRI.config import GENSHIN_CONFIG
from ATRI.exceptions import InvalidRequestError


mhyVersion = GENSHIN_CONFIG['genshin']['mhyVersion']


class Genshin:
    def md5(self, text: str) -> str:
        md5 = hashlib.md5()
        md5.update(text.encode())
        return md5.hexdigest()

    def getDS(self):
        global mhyVersion
        if mhyVersion == '2.1.0':
            n = self.md5(mhyVersion)
        elif mhyVersion == '2.2.1':
            n = "cx2y9z9a29tfqvr1qsq6c7yz99b5jsqt"
        else:
            mhyVersion = "2.2.1"
            n = "cx2y9z9a29tfqvr1qsq6c7yz99b5jsqt"
        
        i = str(int(time.time()))
        r = ''.join(random.sample(string.ascii_lowercase + string.digits, 6))
        c = self.md5("salt=" + n + "&t="+ i + "&r=" + r)
        return (i + "," + r + "," + c)
    
    def getInfo(self, server_id: str, uid: str) -> str:
        try:
            url = GENSHIN_CONFIG['genshin']['url'] + server_id + "&role_id=" + uid
            print(url)
            headers: dict = {
                'Accept': 'application/json, text/plain, */*',
                'DS': self.getDS(),
                'Origin': 'https://webstatic.mihoyo.com',
                'x-rpc-app_version': mhyVersion,
                'User-Agent': 'Mozilla/5.0 (Linux; Android 9; Unspecified Device) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/39.0.0.0 Mobile Safari/537.36 miHoYoBBS/2.2.0',
                'x-rpc-client_type': '4',
                'Referer': 'https://webstatic.mihoyo.com/app/community-game-records/index.html?v=6',
                'Accept-Encoding': 'gzip, deflate',
                'Accept-Language': 'zh-CN,en-US;q=0.8',
                'X-Requested-With': 'com.mihoyo.hyperion'
            }
            result = requests.get(url=url,headers=headers, timeout=10)
            print(result.text)
            return result.text
        except InvalidRequestError:
            raise InvalidRequestError('请求数据出错')
    
    def jsonAnalysis(self, a) -> Optional[str]:
        print(a)
        data = json.loads(a)
        if data['retcode'] != 0:
            raise InvalidRequestError('请求出错,原因:uid错误/不存在/国服之外')
        else:
            pass
        
        character_info = 'Roles:\n'
        character_list = data['data']['avatars']
        for i in character_list:
            if i["element"] == "None":
                character_type = "无属性"
            elif i["element"] == "Anemo":
                character_type = "风属性"
            elif i["element"] == "Pyro":
                character_type = "火属性"
            elif i["element"] == "Geo":
                character_type = "岩属性"
            elif i["element"] == "Electro":
                character_type = "雷属性"
            elif i["element"] == "Cryo":
                character_type = "冰属性"
            elif i["element"] == "Hydro":
                character_type = "水属性"
            else:
                character_type = "草属性"
            
            if i["name"] == "旅行者":
                if i["image"].find("UI_AvatarIcon_PlayerGirl") != -1:
                    temp_text = f'* {i["name"]}\n'
                    temp_text += f'  - [萤——妹妹] {i["level"]}{character_type}\n'

                elif i["image"].find("UI_AvatarIcon_PlayerBoy") != -1:
                    temp_text = f'* {i["name"]}\n'
                    temp_text += f'  - [空——哥哥] {i["level"]}{character_type}\n'

                else:
                    temp_text = f'* {i["name"]}\n'
                    temp_text += f'  - [性别判断失败] {i["level"]}{character_type}\n'
            else:
                temp_text = f'* {i["name"]} {i["rarity"]}★角色:\n'
                temp_text += f'  - {i["level"]}级 好感度({i["fetter"]})级 {character_type}\n'
            
            character_info += temp_text
            
            a1 = data["data"]["stats"]["spiral_abyss"]

            account_info = 'Account Info:\n'
            account_info += f'- 活跃天数:{data["data"]["stats"]["active_day_number"]}\n'
            account_info += f'- 达成成就:{data["data"]["stats"]["achievement_number"]}\n'
            account_info += f'- 获得角色:{data["data"]["stats"]["avatar_number"]}\n'
            account_info += f'- 深渊螺旋:{"没打" if (data["data"]["stats"]["spiral_abyss"] == "-") else f"打到了{a1}"}\n'
            account_info += f'* 收集:\n'
            account_info += f'  - 风神瞳{data["data"]["stats"]["anemoculus_number"]}个 岩神瞳{data["data"]["stats"]["geoculus_number"]}\n'
            account_info += f'* 解锁:\n'
            account_info += f'  - 传送点{data["data"]["stats"]["way_point_number"]}个 秘境{data["data"]["stats"]["domain_number"]}\n'
            account_info += f'* 共开启宝箱:\n'
            account_info += f'  - 普通:{data["data"]["stats"]["common_chest_number"]}个 精致:{data["data"]["stats"]["exquisite_chest_number"]}\n'
            account_info += f'  - 珍贵:{data["data"]["stats"]["luxurious_chest_number"]}个 华丽:{data["data"]["stats"]["precious_chest_number"]}个'
            
            return str(character_info + '\r\n' + account_info)