📝 5.0metadata

This commit is contained in:
forchannot 2024-07-17 18:51:59 +08:00
parent df82bad379
commit 94d9b8ce4c
10 changed files with 542 additions and 309 deletions

View File

@ -164,7 +164,10 @@
"10000096": ["阿蕾奇诺", "仆人", "父亲"],
"10000097": ["赛索斯"],
"10000098": ["克洛琳德", "枫丹决斗人", "决斗人"],
"10000099": ["艾梅莉埃", "调香师", "艾梅"]
"10000099": ["艾梅莉埃", "调香师", "艾梅"],
"10000100": ["卡齐娜"],
"10000101": ["基尼奇", "像素龙"],
"10000102": ["玛拉妮", "纳塔鲨", "娜塔莎"]
},
"武器": {
"柔灯挽歌": ["柔灯挽歌", "柔灯", "艾梅莉埃专武", "艾梅专武"],
@ -373,7 +376,14 @@
"赤月之形": ["赤月之形", "赤月", "仆人专武", "阿蕾奇诺专武"],
"白雨心弦": ["白雨心弦", "白雨", "心弦", "希格雯专武"],
"筑云": ["筑云"],
"赦罪": ["赦罪", "克洛琳德专武"]
"赦罪": ["赦罪", "克洛琳德专武"],
"撼地者": ["撼地者"],
"山王长牙": ["山王长牙", "基尼奇专武"],
"虹的行迹": ["虹的行迹"],
"苍纹角杯": ["苍纹角杯", "苍纹", "角杯"],
"木棉之环": ["木棉之环", "木棉"],
"冲浪时光": ["冲浪时光", "冲浪", "玛拉妮专武"],
"碎链": ["碎链"]
},
"圣遗物": {
"游医": ["游医"],
@ -426,7 +436,9 @@
"昔时之歌": ["昔时之歌", "昔时"],
"回声之林夜话": ["回声之林夜话", "回声"],
"未竟的遐思": ["未竟的遐思", "未竟"],
"谐律异想断章": ["谐律异想断章", "谐律"]
"谐律异想断章": ["谐律异想断章", "谐律"],
"黑曜秘典": ["黑曜秘典", "黑曜"],
"烬城勇者绘卷": ["烬城勇者绘卷", "烬城", "绘卷"]
},
"原魔": {
"草史莱姆": ["草史莱姆"],

View File

@ -498,15 +498,21 @@
"褪光的翠尾": "未竟的遐思",
"失冕的宝冠": "未竟的遐思",
"暗结的明花": "未竟的遐思",
"举业的识刻": "未竟的遐思"
"举业的识刻": "未竟的遐思",
"游学者的爪杯": "烬城勇者绘卷",
"巡山客的信标": "烬城勇者绘卷",
"魔战士的羽面": "烬城勇者绘卷",
"驯兽师的护符": "烬城勇者绘卷",
"秘术家的金盘": "烬城勇者绘卷",
"纷争的前宴": "黑曜秘典",
"灵髓的根脉": "黑曜秘典",
"诸圣的礼冠": "黑曜秘典",
"异种的期许": "黑曜秘典",
"夜域的迷思": "黑曜秘典"
},
"Info": {
"冒险家": {
"avail_rarity": [
"1",
"2",
"3"
],
"avail_rarity": ["1", "2", "3"],
"pcs_attr": {
"2": "生命值上限提高1000点。",
"4": "开启各类宝箱后的5秒内持续恢复30%生命值。"
@ -514,10 +520,7 @@
"alias": "冒险"
},
"悠古的磐岩": {
"avail_rarity": [
"4",
"5"
],
"avail_rarity": ["4", "5"],
"pcs_attr": {
"2": "获得15%岩元素伤害加成。",
"4": "获得结晶反应形成的晶片时队伍中所有角色获得35%对应元素伤害加成持续10秒。同时只能通过该效果获得一种元素伤害加成。"
@ -525,10 +528,7 @@
"alias": "磐岩"
},
"战狂": {
"avail_rarity": [
"3",
"4"
],
"avail_rarity": ["3", "4"],
"pcs_attr": {
"2": "暴击率提高12%。",
"4": "生命值低于70%时暴击率额外提升24%。"
@ -536,10 +536,7 @@
"alias": "战狂"
},
"冰风迷途的勇士": {
"avail_rarity": [
"4",
"5"
],
"avail_rarity": ["4", "5"],
"pcs_attr": {
"2": "获得15%冰元素伤害加成。",
"4": "攻击处于冰元素影响下的敌人时暴击率提高20%若敌人处于冻结状态下则暴击率额外提高20%。"
@ -547,10 +544,7 @@
"alias": "冰套"
},
"染血的骑士道": {
"avail_rarity": [
"4",
"5"
],
"avail_rarity": ["4", "5"],
"pcs_attr": {
"2": "造成的物理伤害提高25%。",
"4": "击败敌人后的10秒内施放重击时不消耗体力且重击造成的伤害提升50%。"
@ -558,10 +552,7 @@
"alias": "染血"
},
"勇士之心": {
"avail_rarity": [
"3",
"4"
],
"avail_rarity": ["3", "4"],
"pcs_attr": {
"2": "攻击力提高18%。",
"4": "对生命值高于50%的敌人造成的伤害增加30%。"
@ -569,10 +560,7 @@
"alias": "勇士"
},
"炽烈的炎之魔女": {
"avail_rarity": [
"4",
"5"
],
"avail_rarity": ["4", "5"],
"pcs_attr": {
"2": "获得15%火元素伤害加成。",
"4": "超载、燃烧反应造成的伤害提升40%蒸发、融化反应的加成系数提高15%。施放元素战技后的10秒内2件套的效果提高50%该效果最多叠加3次。"
@ -580,10 +568,7 @@
"alias": "魔女"
},
"守护之心": {
"avail_rarity": [
"3",
"4"
],
"avail_rarity": ["3", "4"],
"pcs_attr": {
"2": "防御力提高30%。",
"4": "队伍里每有不同一种元素类型的自己的角色自身获得30%相应的元素抗性。"
@ -591,10 +576,7 @@
"alias": "守护"
},
"来歆余响": {
"avail_rarity": [
"4",
"5"
],
"avail_rarity": ["4", "5"],
"pcs_attr": {
"2": "攻击力提高18%。",
"4": "普通攻击命中敌人时有36%概率触发「幽谷祝祀」普通攻击造成的伤害提高伤害提高值为攻击力的70%该效果将在普通攻击造成伤害后的0.05秒后清除。普通攻击未触发「幽谷祝祀」时会使下次触发概率提升20%0.2秒内至多判定1次触发与否。"
@ -602,10 +584,7 @@
"alias": "余响"
},
"绝缘之旗印": {
"avail_rarity": [
"4",
"5"
],
"avail_rarity": ["4", "5"],
"pcs_attr": {
"2": "元素充能效率提高20%。",
"4": "基于元素充能效率的25%提高元素爆发造成的伤害。至多通过这种方式获得75%提升。"
@ -613,10 +592,7 @@
"alias": "绝缘"
},
"赌徒": {
"avail_rarity": [
"3",
"4"
],
"avail_rarity": ["3", "4"],
"pcs_attr": {
"2": "元素战技造成的伤害提升20%。",
"4": "击败敌人时有100%概率清除元素战技的冷却时间。该效果每15秒至多触发一次。"
@ -632,10 +608,7 @@
"alias": "冰砂"
},
"角斗士的终幕礼": {
"avail_rarity": [
"4",
"5"
],
"avail_rarity": ["4", "5"],
"pcs_attr": {
"2": "攻击力提高18%。",
"4": "装备该圣遗物套装的角色为单手剑、双手剑、长柄武器角色时角色普通攻击造成的伤害提高35%。"
@ -643,10 +616,7 @@
"alias": "角斗"
},
"沉沦之心": {
"avail_rarity": [
"4",
"5"
],
"avail_rarity": ["4", "5"],
"pcs_attr": {
"2": "获得15%水元素伤害加成。",
"4": "施放元素战技后的15秒内普通攻击与重击造成的伤害提高30%。"
@ -654,10 +624,7 @@
"alias": "水套"
},
"华馆梦醒形骸记": {
"avail_rarity": [
"4",
"5"
],
"avail_rarity": ["4", "5"],
"pcs_attr": {
"2": "防御力提高30%。",
"4": "装备此圣遗物套装的角色在以下情况下将获得「问答」效果在场上用岩元素攻击命中敌人后获得一层每0.3秒至多触发一次在队伍后台中每3秒获得一层。问答至多叠加4层每层能提供6%防御力与6%岩元素伤害加成。每6秒若未获得问答效果将损失一层。"
@ -665,10 +632,7 @@
"alias": "华馆"
},
"教官": {
"avail_rarity": [
"3",
"4"
],
"avail_rarity": ["3", "4"],
"pcs_attr": {
"2": "元素精通提高80点。",
"4": "触发元素反应后队伍中所有角色的元素精通提高120点持续8秒。"
@ -676,10 +640,7 @@
"alias": "教官"
},
"渡过烈火的贤人": {
"avail_rarity": [
"4",
"5"
],
"avail_rarity": ["4", "5"],
"pcs_attr": {
"2": "火元素抗性提高40%。",
"4": "对处于火元素影响下的敌人造成的伤害提升35%。"
@ -687,11 +648,7 @@
"alias": "渡火"
},
"幸运儿": {
"avail_rarity": [
"1",
"2",
"3"
],
"avail_rarity": ["1", "2", "3"],
"pcs_attr": {
"2": "防御力提高100点。",
"4": "拾取摩拉时恢复300点生命值。"
@ -699,10 +656,7 @@
"alias": "幸运"
},
"被怜爱的少女": {
"avail_rarity": [
"4",
"5"
],
"avail_rarity": ["4", "5"],
"pcs_attr": {
"2": "角色造成的治疗效果提升15%。",
"4": "施放元素战技或元素爆发后的10秒内队伍中所有角色受治疗效果加成提高20%。"
@ -710,10 +664,7 @@
"alias": "少女"
},
"武人": {
"avail_rarity": [
"3",
"4"
],
"avail_rarity": ["3", "4"],
"pcs_attr": {
"2": "普通攻击与重击造成的伤害提高15%",
"4": "施放元素战技后的8秒内普通攻击和重击造成的伤害提升25%。"
@ -721,10 +672,7 @@
"alias": "武人"
},
"昔日宗室之仪": {
"avail_rarity": [
"4",
"5"
],
"avail_rarity": ["4", "5"],
"pcs_attr": {
"2": "元素爆发造成的伤害提升20%。",
"4": "施放元素爆发后队伍中所有角色攻击力提升20%持续12秒。该效果不可叠加。"
@ -732,10 +680,7 @@
"alias": "宗室"
},
"海染砗磲": {
"avail_rarity": [
"4",
"5"
],
"avail_rarity": ["4", "5"],
"pcs_attr": {
"2": "治疗加成提高15%。",
"4": "装备此圣遗物套装的角色对队伍中的角色进行治疗时将产生持续3秒的海染泡沫记录治疗的生命值回复量包括溢出值。持续时间结束时海染泡沫将会爆炸对周围的敌人造成90%累计回复量的伤害该伤害结算方式同感电、超导等元素反应但不受元素精通、等级或反应伤害加成效果影响。每3.5秒至多产生一个海染泡沫海染泡沫至多记录30000点回复量含溢出部分的治疗量自己的队伍中同时至多存在一个海染泡沫。装备此圣遗物套装的角色处于队伍后台时依然能触发该效果。"
@ -743,10 +688,7 @@
"alias": "海染"
},
"苍白之火": {
"avail_rarity": [
"4",
"5"
],
"avail_rarity": ["4", "5"],
"pcs_attr": {
"2": "造成的物理伤害提高25%。",
"4": "元素战技命中敌人后攻击力提升9%。该效果持续7秒至多叠加2层每0.3秒至多触发一次。叠满2层时2件套的效果提升100%。"
@ -754,40 +696,28 @@
"alias": "苍白"
},
"祭水之人": {
"avail_rarity": [
"3",
"4"
],
"avail_rarity": ["3", "4"],
"pcs_attr": {
"1": "受到的水元素附着效果的持续时间减少40%。"
},
"alias": "祭水"
},
"祭火之人": {
"avail_rarity": [
"3",
"4"
],
"avail_rarity": ["3", "4"],
"pcs_attr": {
"1": "受到的火元素附着效果的持续时间减少40%。"
},
"alias": "祭火"
},
"祭雷之人": {
"avail_rarity": [
"3",
"4"
],
"avail_rarity": ["3", "4"],
"pcs_attr": {
"1": "受到的雷元素附着效果的持续时间减少40%。"
},
"alias": "祭雷"
},
"祭冰之人": {
"avail_rarity": [
"3",
"4"
],
"avail_rarity": ["3", "4"],
"pcs_attr": {
"1": "受到的冰元素附着效果的持续时间减少40%。"
},
@ -801,10 +731,7 @@
"alias": "祭风"
},
"行者之心": {
"avail_rarity": [
"3",
"4"
],
"avail_rarity": ["3", "4"],
"pcs_attr": {
"2": "攻击力提高18%。",
"4": "重击的暴击率提升30%。"
@ -812,10 +739,7 @@
"alias": "行者"
},
"逆飞的流星": {
"avail_rarity": [
"4",
"5"
],
"avail_rarity": ["4", "5"],
"pcs_attr": {
"2": "护盾强效提高35%。",
"4": "处于护盾庇护下时额外获得40%普通攻击和重击伤害加成。"
@ -823,10 +747,7 @@
"alias": "逆飞"
},
"学士": {
"avail_rarity": [
"3",
"4"
],
"avail_rarity": ["3", "4"],
"pcs_attr": {
"2": "元素充能效率提高20%。",
"4": "获得元素微粒或元素晶球时队伍中所有弓箭和法器角色额外恢复3点元素能量。该效果每3秒只能触发一次。"
@ -834,10 +755,7 @@
"alias": "学士"
},
"追忆之注连": {
"avail_rarity": [
"4",
"5"
],
"avail_rarity": ["4", "5"],
"pcs_attr": {
"2": "攻击力提高18%。",
"4": "施放元素战技时如果角色的元素能量高于或等于15点则会流失15点元素能量使接下来的10秒内普通攻击、重击、下落攻击造成的伤害提高50%,持续期间内该效果不会再次触发。"
@ -845,10 +763,7 @@
"alias": "追忆"
},
"千岩牢固": {
"avail_rarity": [
"4",
"5"
],
"avail_rarity": ["4", "5"],
"pcs_attr": {
"2": "生命值提升20%",
"4": "元素战技命中敌人后使队伍中附近的所有角色攻击力提升20%护盾强效提升30%持续3秒。该效果每0.5秒至多触发一次。装备此圣遗物套装的角色处于队伍后台时,依然能触发该效果。"
@ -856,10 +771,7 @@
"alias": "千岩"
},
"流放者": {
"avail_rarity": [
"3",
"4"
],
"avail_rarity": ["3", "4"],
"pcs_attr": {
"2": "元素充能效率提高20%。",
"4": "施放元素爆发后每2秒为队伍中所有角色不包括自己恢复2点元素能量。该效果持续6秒无法叠加。"
@ -867,10 +779,7 @@
"alias": "流放"
},
"如雷的盛怒": {
"avail_rarity": [
"4",
"5"
],
"avail_rarity": ["4", "5"],
"pcs_attr": {
"2": "获得15%雷元素伤害加成。",
"4": "超载、感电、超导反应造成的伤害提升40%。触发这些元素反应时元素战技冷却时间减少1秒。该效果每0.8秒最多触发一次。"
@ -878,10 +787,7 @@
"alias": "如雷"
},
"平息鸣雷的尊者": {
"avail_rarity": [
"4",
"5"
],
"avail_rarity": ["4", "5"],
"pcs_attr": {
"2": "雷元素抗性提高40%。",
"4": "对处于雷元素影响下的敌人造成的伤害提升35%。"
@ -889,10 +795,7 @@
"alias": "平雷"
},
"奇迹": {
"avail_rarity": [
"3",
"4"
],
"avail_rarity": ["3", "4"],
"pcs_attr": {
"2": "所有元素抗性提高20%。",
"4": "受到某个元素类型的伤害后相应的抗性提升30%持续10秒。该效果每10秒只能触发一次。"
@ -900,11 +803,7 @@
"alias": "奇迹"
},
"游医": {
"avail_rarity": [
"1",
"2",
"3"
],
"avail_rarity": ["1", "2", "3"],
"pcs_attr": {
"2": "角色受到的治疗效果提高20%。",
"4": "施放元素爆发时恢复20%生命值。"
@ -912,10 +811,7 @@
"alias": "游医"
},
"辰砂往生录": {
"avail_rarity": [
"4",
"5"
],
"avail_rarity": ["4", "5"],
"pcs_attr": {
"2": "攻击力提高18%。",
"4": "施放元素爆发后将产生持续16秒的「潜光」效果攻击力提升8%并在角色的生命值降低时攻击力进一步提升10%至多通过这种方式提升4次每0.8秒至多触发一次。「潜光」效果将在角色退场时消失;持续期间再次施放元素爆发,将移除原有的「潜光」。"
@ -923,10 +819,7 @@
"alias": "辰砂"
},
"翠绿之影": {
"avail_rarity": [
"4",
"5"
],
"avail_rarity": ["4", "5"],
"pcs_attr": {
"2": "获得15%风元素伤害加成。",
"4": "扩散反应造成的伤害提升60%。根据扩散的元素类型降低受到影响的敌人40%的对应元素抗性持续10秒。"
@ -934,10 +827,7 @@
"alias": "风套"
},
"流浪大地的乐团": {
"avail_rarity": [
"4",
"5"
],
"avail_rarity": ["4", "5"],
"pcs_attr": {
"2": "元素精通提高80点。",
"4": "装备该圣遗物套装的角色为法器、弓箭角色时角色重击造成的伤害提高35%。"
@ -946,25 +836,10 @@
}
},
"Piece": {
"1": [
"goblet",
"空之杯"
],
"2": [
"plume",
"死之羽"
],
"3": [
"circlet",
"理之冠"
],
"4": [
"flower",
"生之花"
],
"5": [
"sands",
"时之沙"
]
"1": ["goblet", "空之杯"],
"2": ["plume", "死之羽"],
"3": ["circlet", "理之冠"],
"4": ["flower", "生之花"],
"5": ["sands", "时之沙"]
}
}

View File

@ -2585,6 +2585,122 @@
"SideIconName": "UI_AvatarIcon_Side_Emilie",
"QualityType": "QUALITY_ORANGE"
},
"10000100": {
"Element": "Rock",
"Consts": [
"UI_Talent_S_Kachina_01",
"UI_Talent_S_Kachina_02",
"UI_Talent_U_Kachina_01",
"UI_Talent_S_Kachina_03",
"UI_Talent_U_Kachina_02",
"UI_Talent_S_Kachina_04"
],
"SkillOrder": [
11001,
11002,
11005
],
"Skills": {
"11001": "Skill_A_03",
"11002": "Skill_S_Kachina_01",
"11005": "Skill_E_Kachina_01"
},
"ProudMap": {
"11001": 10031,
"11002": 10032,
"11005": 10039
},
"NameTextMapHash": 2531816890,
"SideIconName": "UI_AvatarIcon_Side_Kachina",
"QualityType": "QUALITY_PURPLE"
},
"10000101": {
"Element": "Grass",
"Consts": [
"UI_Talent_S_Kinich_01",
"UI_Talent_S_Kinich_02",
"UI_Talent_U_Kinich_01",
"UI_Talent_S_Kinich_03",
"UI_Talent_U_Kinich_02",
"UI_Talent_S_Kinich_04"
],
"SkillOrder": [
11011,
11012,
11015
],
"Skills": {
"11011": "Skill_A_04",
"11012": "Skill_S_Kinich_01",
"11015": "Skill_E_Kinich_01"
},
"ProudMap": {
"11011": 10131,
"11012": 10132,
"11015": 10139
},
"NameTextMapHash": 4172712634,
"SideIconName": "UI_AvatarIcon_Side_Kinich",
"QualityType": "QUALITY_ORANGE"
},
"10000102": {
"Element": "Water",
"Consts": [
"UI_Talent_S_Mualani_01",
"UI_Talent_S_Mualani_02",
"UI_Talent_U_Mualani_01",
"UI_Talent_S_Mualani_03",
"UI_Talent_U_Mualani_02",
"UI_Talent_S_Mualani_04"
],
"SkillOrder": [
30000,
30002,
30007
],
"Skills": {
"30000": "Skill_A_Catalyst_MD",
"30002": "Skill_S_Mualani_01",
"30007": "Skill_E_Mualani_01"
},
"ProudMap": {
"30000": 10231,
"30002": 10232,
"30007": 10239
},
"NameTextMapHash": 3949670506,
"SideIconName": "UI_AvatarIcon_Side_Mualani",
"QualityType": "QUALITY_ORANGE"
},
"11000046": {
"Element": "Ice",
"Consts": [
"UI_Talent_S_Kaeya_01",
"UI_Talent_S_Kaeya_02",
"UI_Talent_U_Kaeya_01",
"UI_Talent_S_Kaeya_03",
"UI_Talent_U_Kaeya_02",
"UI_Talent_S_Kaeya_04"
],
"SkillOrder": [
10073,
10074,
10075
],
"Skills": {
"10073": "Skill_A_01",
"10074": "Skill_S_Kaeya_01",
"10075": "Skill_E_Kaeya_01"
},
"ProudMap": {
"10073": 1531,
"10074": 1532,
"10075": 1539
},
"NameTextMapHash": 3986000746,
"SideIconName": "UI_AvatarIcon_Side_Qin",
"QualityType": "QUALITY_PURPLE"
},
"10000005-501": {
"Element": "None",
"Consts": [

View File

@ -408,6 +408,45 @@
"10991": "普通攻击·逐影枪术·改",
"10992": "撷萃调香",
"10995": "香氛演绎",
"11001": "普通攻击·嵴之啮咬",
"11002": "出击,冲天转转!",
"11003": "卡齐娜元素战技-上陀螺",
"11004": "卡齐娜元素战技-下陀螺",
"11005": "现在,认真时间!",
"11006": "卡齐娜元素战技-震地攻击",
"11007": "卡齐娜元素战技-特殊跳跃",
"11008": "卡齐娜夜魂接力技",
"11011": "普通攻击·夜阳斗技",
"11012": "悬猎·游骋高狩",
"11013": "基尼奇元素战技终结攻击",
"11014": "基尼奇元素战技空中二段飞行",
"11016": "基尼奇元素战技吐出吞噬物",
"11017": "基尼奇龙化摆荡",
"11015": "向伟大圣龙致意",
"11018": "基尼奇吞噬或者钩锚点",
"11019": "基尼奇空中喷射",
"30000": "普通攻击·降温处理",
"30002": "踏鲨破浪",
"30003": "游猎S冲浪攻击技",
"30004": "游猎S冲浪冲刺",
"30005": "游猎S冲浪跳跃",
"30006": "游猎S冲浪退出",
"30007": "爆瀑飞弹",
"30008": "游猎S冲浪攻击技 - 空中",
"30009": "游猎S冲浪 - fromswim",
"30010": "游猎S弧光攻击技",
"30011": "游猎S弧光空中攻击技",
"30101": "猎龙少年-普通攻击",
"30102": "猎龙少年-元素战技",
"30103": "猎龙少年-猎龙状态-特殊普攻",
"30104": "猎龙少年-猎龙状态-特殊战技",
"30105": "猎龙少年-元素爆发",
"30201": "铭刻师-普通攻击",
"30202": "铭刻师-元素战技-进豹灵状态",
"30203": "铭刻师-豹灵状态-特殊普攻",
"30204": "铭刻师-豹灵状态-特殊冲刺",
"30205": "铭刻师-元素爆发",
"30206": "铭刻师-元素战技-退豹灵状态",
"20001": "风魔炮",
"20002": "风魔炮",
"20011": "飞行挑战 - 前冲",
@ -687,7 +726,10 @@
"5096010": "阿蕾奇诺空中攻击",
"5097010": "赛索斯空中攻击",
"5098010": "克洛琳德空中攻击",
"5099010": "艾梅莉埃空中攻击"
"5099010": "艾梅莉埃空中攻击",
"5100010": "卡齐娜空中攻击",
"5101010": "基尼奇空中攻击",
"5102010": "玛拉妮空中攻击"
},
"Icon": {
"10001": "",
@ -1098,6 +1140,45 @@
"10991": "Skill_A_03",
"10992": "Skill_S_Emilie_01",
"10995": "Skill_E_Emilie_01",
"11001": "Skill_A_03",
"11002": "Skill_S_Kachina_01",
"11003": "Skill_S_Kachina_02",
"11004": "Skill_S_Kachina_03",
"11005": "Skill_E_Kachina_01",
"11006": "Skill_S_Kachina_04",
"11007": "Skill_S_Kachina_04",
"11008": "Skill_S_Kachina_01",
"11011": "Skill_A_04",
"11012": "Skill_S_Kinich_01",
"11013": "Skill_S_Kinich_03",
"11014": "Skill_S_Kinich_04",
"11016": "Skill_S_Kinich_06",
"11017": "Skill_S_Kinich_02",
"11015": "Skill_E_Kinich_01",
"11018": "Skill_S_Kinich_05",
"11019": "Skill_S_Kinich_07",
"30000": "Skill_A_Catalyst_MD",
"30002": "Skill_S_Mualani_01",
"30003": "Skill_S_Mualani_02",
"30004": "Skill_S_Mualani_05",
"30005": "Skill_S_Mualani_04",
"30006": "Skill_S_Mualani_01",
"30007": "Skill_E_Mualani_01",
"30008": "Skill_S_Mualani_02",
"30009": "Skill_S_Mualani_01",
"30010": "Skill_S_Mualani_02",
"30011": "Skill_S_Mualani_02",
"30101": "Skill_A_Catalyst_MD",
"30102": "",
"30103": "",
"30104": "",
"30105": "",
"30201": "Skill_A_01",
"30202": "Skill_S_Momoka_01",
"30203": "",
"30204": "",
"30205": "",
"30206": "Skill_S_Momoka_02",
"20001": "Skill_A_Dvalin_AirGun",
"20002": "Skill_A_Dvalin_AirGun",
"20011": "Btn_FlightSprint",
@ -1377,6 +1458,9 @@
"5096010": "Skill_A_03",
"5097010": "Skill_A_02",
"5098010": "Skill_A_01",
"5099010": "Skill_A_03"
"5099010": "Skill_A_03",
"5100010": "Skill_A_03",
"5101010": "Skill_A_04",
"5102010": "Skill_A_Catalyst_MD"
}
}

View File

@ -533,7 +533,25 @@
"993": "郁馥臻萃",
"994": "柔灯心韵",
"995": "纯露凝芳",
"996": "茉洁香迹"
"996": "茉洁香迹",
"1001": "晶片,也是一种宝石",
"1002": "不能少了…冲天转转",
"1003": "改良型·平衡稳定器",
"1004": "敌人越多,越要小心",
"1005": "迄今为止,所有收藏",
"1006": "这一次,我一定要赢",
"1011": "七鹦之喙",
"1012": "星虎之掌",
"1013": "原鳄之爪",
"1014": "蜂鸟之羽",
"1015": "吼猴之尾",
"1016": "瑞兽之形",
"1021": "悠闲的「梅兹特利」…",
"1022": "全力以赴玛拉妮!",
"1023": "在欢乐海上冲浪",
"1024": "鲨鲨主食是豚豚。",
"1025": "同款冲浪板有售!",
"1026": "「流泉之众」的精神"
},
"Icon": {
"21": "UI_Talent_S_Ayaka_01",
@ -1069,6 +1087,24 @@
"993": "UI_Talent_U_Emilie_01",
"994": "UI_Talent_S_Emilie_03",
"995": "UI_Talent_U_Emilie_02",
"996": "UI_Talent_S_Emilie_04"
"996": "UI_Talent_S_Emilie_04",
"1001": "UI_Talent_S_Kachina_01",
"1002": "UI_Talent_S_Kachina_02",
"1003": "UI_Talent_U_Kachina_01",
"1004": "UI_Talent_S_Kachina_03",
"1005": "UI_Talent_U_Kachina_02",
"1006": "UI_Talent_S_Kachina_04",
"1011": "UI_Talent_S_Kinich_01",
"1012": "UI_Talent_S_Kinich_02",
"1013": "UI_Talent_U_Kinich_01",
"1014": "UI_Talent_S_Kinich_03",
"1015": "UI_Talent_U_Kinich_02",
"1016": "UI_Talent_S_Kinich_04",
"1021": "UI_Talent_S_Mualani_01",
"1022": "UI_Talent_S_Mualani_02",
"1023": "UI_Talent_U_Mualani_01",
"1024": "UI_Talent_S_Mualani_03",
"1025": "UI_Talent_U_Mualani_02",
"1026": "UI_Talent_S_Mualani_04"
}
}

View File

@ -31494,5 +31494,20 @@
"region": "枫丹",
"star": 5,
"element": "草"
},
"卡齐娜": {
"region": "纳塔",
"star": 4,
"element": "岩"
},
"基尼奇": {
"region": "纳塔",
"star": 5,
"element": "草"
},
"玛拉妮": {
"region": "纳塔",
"star": 5,
"element": "水"
}
}

View File

@ -848,6 +848,9 @@
"赛索斯": [0, 2],
"希格雯": [1, 2],
"克洛琳德": [1, 2],
"艾梅莉埃": [1, 2]
"艾梅莉埃": [1, 2],
"玛拉妮": [1, 2],
"卡齐娜": [1, 2],
"基尼奇": [1, 2]
}
}

View File

@ -35,6 +35,7 @@
"1790067483": "船坞长剑",
"3016493955": "水仙十字之剑",
"594850707": "水仙十字之剑",
"3434743027": "息燧之笛",
"902264035": "风鹰剑",
"4055003299": "天空之刃",
"2949448555": "苍古自由之誓",
@ -76,6 +77,7 @@
"2077869763": "浪影阔剑",
"933442195": "「究极霸王超级魔剑」",
"3693117451": "便携动力锯",
"2481464075": "撼地者",
"1089950259": "天空之傲",
"3995710363": "狼的末路",
"1075647299": "松籁响起之时",
@ -83,6 +85,7 @@
"3914951691": "赤角石溃杵",
"2834063555": "苇海信标",
"3812523339": "裁断",
"1183454019": "山王长牙",
"2796697027": "新手长枪",
"3070169307": "铁尖枪",
"1390797107": "白缨枪",
@ -107,6 +110,7 @@
"4158971171": "公义的酬报",
"2847771107": "沙中伟贤的对答",
"882305891": "勘探钻机",
"415520051": "虹的行迹",
"3235324891": "护摩之杖",
"4158505619": "天空之脊",
"197755235": "贯虹之槊",
@ -143,6 +147,8 @@
"2275710883": "遗祀玉珑",
"2432865507": "纯水流华",
"2722902043": "无垠蔚蓝之歌",
"422144187": "苍纹角杯",
"3092853059": "木棉之环",
"807607555": "天空之卷",
"1455107995": "四风原典",
"693354267": "尘世之锁",
@ -154,6 +160,7 @@
"724881171": "金流监督",
"4176923379": "万世流涌大典",
"3660626387": "鹤鸣余音",
"1673987515": "冲浪时光",
"3600623979": "猎弓",
"2340970067": "历练的猎弓",
"3975746731": "鸦羽弓",
@ -185,6 +192,7 @@
"2600875323": "静谧之曲",
"4038676067": "筑云",
"1055195035": "测距规",
"565052971": "碎链",
"3933622347": "天空之翼",
"828711395": "阿莫斯之弓",
"3112679155": "终末嗟叹之诗",
@ -235,6 +243,7 @@
"灰河渡手": "单手剑",
"船坞长剑": "单手剑",
"水仙十字之剑": "单手剑",
"息燧之笛": "单手剑",
"风鹰剑": "单手剑",
"天空之刃": "单手剑",
"苍古自由之誓": "单手剑",
@ -276,6 +285,7 @@
"浪影阔剑": "双手剑",
"「究极霸王超级魔剑」": "双手剑",
"便携动力锯": "双手剑",
"撼地者": "双手剑",
"天空之傲": "双手剑",
"狼的末路": "双手剑",
"松籁响起之时": "双手剑",
@ -283,6 +293,7 @@
"赤角石溃杵": "双手剑",
"苇海信标": "双手剑",
"裁断": "双手剑",
"山王长牙": "双手剑",
"新手长枪": "长柄武器",
"铁尖枪": "长柄武器",
"白缨枪": "长柄武器",
@ -307,6 +318,7 @@
"公义的酬报": "长柄武器",
"沙中伟贤的对答": "长柄武器",
"勘探钻机": "长柄武器",
"虹的行迹": "长柄武器",
"护摩之杖": "长柄武器",
"天空之脊": "长柄武器",
"贯虹之槊": "长柄武器",
@ -343,6 +355,8 @@
"遗祀玉珑": "法器",
"纯水流华": "法器",
"无垠蔚蓝之歌": "法器",
"苍纹角杯": "法器",
"木棉之环": "法器",
"天空之卷": "法器",
"四风原典": "法器",
"尘世之锁": "法器",
@ -354,6 +368,7 @@
"金流监督": "法器",
"万世流涌大典": "法器",
"鹤鸣余音": "法器",
"冲浪时光": "法器",
"猎弓": "弓",
"历练的猎弓": "弓",
"鸦羽弓": "弓",
@ -385,6 +400,7 @@
"静谧之曲": "弓",
"筑云": "弓",
"测距规": "弓",
"碎链": "弓",
"天空之翼": "弓",
"阿莫斯之弓": "弓",
"终末嗟叹之诗": "弓",
@ -430,6 +446,7 @@
"灰河渡手": "UI_EquipIcon_Sword_Machination",
"船坞长剑": "UI_EquipIcon_Sword_Mechanic",
"水仙十字之剑": "UI_EquipIcon_Sword_Purewill",
"息燧之笛": "UI_EquipIcon_Sword_Isikhulu",
"风鹰剑": "UI_EquipIcon_Sword_Falcon",
"天空之刃": "UI_EquipIcon_Sword_Dvalin",
"苍古自由之誓": "UI_EquipIcon_Sword_Widsith",
@ -471,6 +488,7 @@
"浪影阔剑": "UI_EquipIcon_Claymore_Vorpal",
"「究极霸王超级魔剑」": "UI_EquipIcon_Claymore_Champion",
"便携动力锯": "UI_EquipIcon_Claymore_Mechanic",
"撼地者": "UI_EquipIcon_Claymore_Isikhulu",
"天空之傲": "UI_EquipIcon_Claymore_Dvalin",
"狼的末路": "UI_EquipIcon_Claymore_Wolfmound",
"松籁响起之时": "UI_EquipIcon_Claymore_Widsith",
@ -478,6 +496,7 @@
"赤角石溃杵": "UI_EquipIcon_Claymore_Itadorimaru",
"苇海信标": "UI_EquipIcon_Claymore_Deshret",
"裁断": "UI_EquipIcon_Claymore_GoldenVerdict",
"山王长牙": "UI_EquipIcon_Claymore_EmeraldSword",
"新手长枪": "UI_EquipIcon_Pole_Gewalt",
"铁尖枪": "UI_EquipIcon_Pole_Rod",
"白缨枪": "UI_EquipIcon_Pole_Ruby",
@ -502,6 +521,7 @@
"公义的酬报": "UI_EquipIcon_Pole_Vorpal",
"沙中伟贤的对答": "UI_EquipIcon_Pole_Caduceus",
"勘探钻机": "UI_EquipIcon_Pole_Mechanic",
"虹的行迹": "UI_EquipIcon_Pole_Isikhulu",
"护摩之杖": "UI_EquipIcon_Pole_Homa",
"天空之脊": "UI_EquipIcon_Pole_Dvalin",
"贯虹之槊": "UI_EquipIcon_Pole_Kunwu",
@ -538,6 +558,8 @@
"遗祀玉珑": "UI_EquipIcon_Catalyst_Yue",
"纯水流华": "UI_EquipIcon_Catalyst_Vorpal",
"无垠蔚蓝之歌": "UI_EquipIcon_Catalyst_DandelionPoem",
"苍纹角杯": "UI_EquipIcon_Catalyst_ConchSprayer",
"木棉之环": "UI_EquipIcon_Catalyst_Isikhulu",
"天空之卷": "UI_EquipIcon_Catalyst_Dvalin",
"四风原典": "UI_EquipIcon_Catalyst_Fourwinds",
"尘世之锁": "UI_EquipIcon_Catalyst_Kunwu",
@ -549,6 +571,7 @@
"金流监督": "UI_EquipIcon_Catalyst_Wheatley",
"万世流涌大典": "UI_EquipIcon_Catalyst_Iudex",
"鹤鸣余音": "UI_EquipIcon_Catalyst_MountainGale",
"冲浪时光": "UI_EquipIcon_Catalyst_MechaPufferfish",
"猎弓": "UI_EquipIcon_Bow_Hunters",
"历练的猎弓": "UI_EquipIcon_Bow_Old",
"鸦羽弓": "UI_EquipIcon_Bow_Crowfeather",
@ -580,6 +603,7 @@
"静谧之曲": "UI_EquipIcon_Bow_Vorpal",
"筑云": "UI_EquipIcon_Bow_Ultimatum",
"测距规": "UI_EquipIcon_Bow_Mechanic",
"碎链": "UI_EquipIcon_Bow_Isikhulu",
"天空之翼": "UI_EquipIcon_Bow_Dvalin",
"阿莫斯之弓": "UI_EquipIcon_Bow_Amos",
"终末嗟叹之诗": "UI_EquipIcon_Bow_Widsith",

View File

@ -41,7 +41,8 @@
"纳西妲",
"流浪者",
"夏洛蒂",
"闲云"
"闲云",
"玛拉妮"
],
"双手剑": [
"迪卢克",
@ -57,7 +58,8 @@
"迪希雅",
"菲米尼",
"娜维娅",
"嘉明"
"嘉明",
"基尼奇"
],
"弓": [
"安柏",
@ -93,7 +95,8 @@
"瑶瑶",
"米卡",
"夏沃蕾",
"阿蕾奇诺"
"阿蕾奇诺",
"卡齐娜"
]
},
"元素类型": {
@ -154,7 +157,8 @@
"坎蒂丝",
"旅行者水",
"那维莱特",
"芙宁娜"
"芙宁娜",
"玛拉妮"
],
"火": [
"迪卢克",
@ -182,7 +186,8 @@
"云堇",
"旅行者岩",
"娜维娅",
"千织"
"千织",
"卡齐娜"
],
"草": [
"柯莱",
@ -192,7 +197,8 @@
"艾尔海森",
"旅行者草",
"绮良良",
"艾梅莉埃"
"艾梅莉埃",
"基尼奇"
]
}
},
@ -240,7 +246,8 @@
"水仙十字之剑",
"静水流涌之辉",
"有乐御簾切",
"赦罪"
"赦罪",
"息燧之笛"
],
"双手剑": [
"训练大剑",
@ -275,7 +282,9 @@
"浪影阔剑",
"便携动力锯",
"「究极霸王超级魔剑」",
"裁断"
"裁断",
"撼地者",
"山王长牙"
],
"长柄武器": [
"新手长枪",
@ -308,7 +317,8 @@
"公义的酬报",
"勘探钻机",
"沙中伟贤的对答",
"柔灯挽歌"
"柔灯挽歌",
"虹的行迹"
],
"法器": [
"学徒笔记",
@ -346,7 +356,10 @@
"无垠蔚蓝之歌",
"金流监督",
"万世流涌大典",
"鹤鸣余音"
"鹤鸣余音",
"苍纹角杯",
"木棉之环",
"冲浪时光"
],
"弓": [
"猎弓",
@ -387,7 +400,8 @@
"静谧之曲",
"测距规",
"筑云",
"白雨心弦"
"白雨心弦",
"碎链"
]
}
}

View File

@ -16,7 +16,12 @@ import qrcode
from fastapi import FastAPI
from fastapi.responses import StreamingResponse
from nonebot import on_command, get_bot, get_app
from nonebot.adapters.onebot.v11 import Bot, MessageSegment, MessageEvent, GroupMessageEvent
from nonebot.adapters.onebot.v11 import (
Bot,
MessageSegment,
MessageEvent,
GroupMessageEvent,
)
from LittlePaimon.config import config
from LittlePaimon.database.models import PrivateCookie, LastQuery
@ -26,9 +31,9 @@ from LittlePaimon.utils.scheduler import scheduler
from LittlePaimon.utils.api import get_bind_game_info
from LittlePaimon.utils.message import fullmatch_rule
CN_DS_SALT = 'JwYDpKvLj6MrMqqYU6jTKF17KNO2PXoS'
bind_tips = '绑定方法二选一:\n1.通过米游社扫码绑定:\n请发送指令[原神扫码绑定]\n2.通过Cookie绑定获取教程\ndocs.qq.com/doc/DQ3JLWk1vQVllZ2Z1\n获取后,使用[ysb cookie]指令绑定'
bind_tips_web = '绑定方法二选一:\n1.通过米游社扫码绑定:\n请发送指令[原神扫码绑定]\n2.通过Cookie绑定获取教程\ndocs.qq.com/doc/DQ3JLWk1vQVllZ2Z1\n获取后,使用[ysb cookie]指令绑定或前往{cookie_web_url}网页添加绑定'
CN_DS_SALT = "JwYDpKvLj6MrMqqYU6jTKF17KNO2PXoS"
bind_tips = "绑定方法二选一:\n1.通过米游社扫码绑定:\n请发送指令[原神扫码绑定]\n2.通过Cookie绑定获取教程\ndocs.qq.com/doc/DQ3JLWk1vQVllZ2Z1\n获取后,使用[ysb cookie]指令绑定"
bind_tips_web = "绑定方法二选一:\n1.通过米游社扫码绑定:\n请发送指令[原神扫码绑定]\n2.通过Cookie绑定获取教程\ndocs.qq.com/doc/DQ3JLWk1vQVllZ2Z1\n获取后,使用[ysb cookie]指令绑定或前往{cookie_web_url}网页添加绑定"
running_login_data = {}
@ -39,160 +44,207 @@ def md5_(self) -> str:
def get_ds(body=None, query=None) -> str:
t = int(time.time())
r = ''.join(random.choices(ascii_letters, k=6))
b = json.dumps(body) if body else ''
q = '&'.join((f"{k}={v}" for k, v in sorted(query.items()))) if query else ''
r = "".join(random.choices(ascii_letters, k=6))
b = json.dumps(body) if body else ""
q = "&".join((f"{k}={v}" for k, v in sorted(query.items()))) if query else ""
h = md5_(f"salt={CN_DS_SALT}&t={t}&r={r}&b={b}&q={q}")
return f"{t},{r},{h}"
async def get_stoken(aigis: str = '', data: dict = None):
async def get_stoken(aigis: str = "", data: dict = None):
if data is None:
data = {}
resp = await aiorequests.post('https://passport-api.mihoyo.com/account/ma-cn-session/app/getTokenByGameToken',
headers={'x-rpc-app_version': '2.41.0',
'DS': get_ds(data),
'x-rpc-aigis': aigis,
'Content-Type': 'application/json',
'Accept': 'application/json',
'x-rpc-game_biz': 'bbs_cn',
'x-rpc-sys_version': '11',
'x-rpc-device_id': uuid.uuid4().hex,
'x-rpc-device_fp': ''.join(
random.choices((ascii_letters + digits), k=13)),
'x-rpc-device_name': 'Chrome 108.0.0.0',
'x-rpc-device_model': 'Windows 10 64-bit',
'x-rpc-app_id': 'bll8iq97cem8',
'x-rpc-client_type': '4',
'User-Agent': 'okhttp/4.8.0'},
json=data)
resp = await aiorequests.post(
"https://passport-api.mihoyo.com/account/ma-cn-session/app/getTokenByGameToken",
headers={
"x-rpc-app_version": "2.41.0",
"DS": get_ds(data),
"x-rpc-aigis": aigis,
"Content-Type": "application/json",
"Accept": "application/json",
"x-rpc-game_biz": "bbs_cn",
"x-rpc-sys_version": "11",
"x-rpc-device_id": uuid.uuid4().hex,
"x-rpc-device_fp": "".join(random.choices((ascii_letters + digits), k=13)),
"x-rpc-device_name": "Chrome 108.0.0.0",
"x-rpc-device_model": "Windows 10 64-bit",
"x-rpc-app_id": "bll8iq97cem8",
"x-rpc-client_type": "4",
"User-Agent": "okhttp/4.8.0",
},
json=data,
)
return resp.json()
def generate_qrcode(url):
qr = qrcode.QRCode(version=1,
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4)
border=4,
)
qr.add_data(url)
qr.make(fit=True)
img = qr.make_image(fill_color='black', back_color='white')
img = qr.make_image(fill_color="black", back_color="white")
bio = BytesIO()
img.save(bio)
return f'base64://{base64.b64encode(bio.getvalue()).decode()}'
return f"base64://{base64.b64encode(bio.getvalue()).decode()}"
async def create_login_data():
device_id = ''.join(random.choices((ascii_letters + digits), k=64))
app_id = '4'
data = {'app_id': app_id,
'device': device_id}
res = await aiorequests.post('https://hk4e-sdk.mihoyo.com/hk4e_cn/combo/panda/qrcode/fetch?',
json=data)
url = res.json()['data']['url']
ticket = url.split('ticket=')[1]
return {'app_id': app_id,
'ticket': ticket,
'device': device_id,
'url': url}
device_id = "".join(random.choices((ascii_letters + digits), k=64))
app_id = "2"
data = {"app_id": app_id, "device": device_id}
res = await aiorequests.post(
"https://hk4e-sdk.mihoyo.com/hk4e_cn/combo/panda/qrcode/fetch?", json=data
)
url = res.json()["data"]["url"]
ticket = url.split("ticket=")[1]
return {"app_id": app_id, "ticket": ticket, "device": device_id, "url": url}
async def check_login(login_data: dict):
data = {'app_id': login_data['app_id'],
'ticket': login_data['ticket'],
'device': login_data['device']}
res = await aiorequests.post('https://hk4e-sdk.mihoyo.com/hk4e_cn/combo/panda/qrcode/query?',
json=data)
data = {
"app_id": login_data["app_id"],
"ticket": login_data["ticket"],
"device": login_data["device"],
}
res = await aiorequests.post(
"https://hk4e-sdk.mihoyo.com/hk4e_cn/combo/panda/qrcode/query?", json=data
)
return res.json()
async def get_cookie_token(game_token: dict):
res = await aiorequests.get(
f"https://api-takumi.mihoyo.com/auth/api/getCookieAccountInfoByGameToken?game_token={game_token['token']}&account_id={game_token['uid']}")
f"https://api-takumi.mihoyo.com/auth/api/getCookieAccountInfoByGameToken?game_token={game_token['token']}&account_id={game_token['uid']}"
)
return res.json()
qrcode_bind = on_command('原神扫码绑定', aliases={'原神扫码登录', '原神扫码登陆'}, priority=1, block=True,
qrcode_bind = on_command(
"原神扫码绑定",
aliases={"原神扫码登录", "原神扫码登陆"},
priority=1,
block=True,
rule=fullmatch_rule,
state={
'pm_name': '原神扫码绑定',
'pm_description': '通过米游社扫码的方式绑定原神Cookie',
'pm_usage': '原神扫码绑定',
'pm_priority': 1
})
"pm_name": "原神扫码绑定",
"pm_description": "通过米游社扫码的方式绑定原神Cookie",
"pm_usage": "原神扫码绑定",
"pm_priority": 1,
},
)
@qrcode_bind.handle()
async def _(event: MessageEvent): # sourcery skip: use-fstring-for-concatenation
if str(event.user_id) in running_login_data:
await qrcode_bind.finish('你已经在绑定中了,请扫描上一次的二维码')
await qrcode_bind.finish("你已经在绑定中了,请扫描上一次的二维码")
login_data = await create_login_data()
running_login_data[str(event.user_id)] = login_data
img_b64 = generate_qrcode(login_data['url'])
running_login_data[str(event.user_id)]['img_b64'] = img_b64
img = f'二维码链接:{config.CookieWeb_url}/qrcode?user_id={event.user_id}' if config.qrcode_bind_use_url else MessageSegment.image(img_b64)
img_b64 = generate_qrcode(login_data["url"])
running_login_data[str(event.user_id)]["img_b64"] = img_b64
img = (
f"二维码链接:{config.CookieWeb_url}/qrcode?user_id={event.user_id}"
if config.qrcode_bind_use_url
else MessageSegment.image(img_b64)
)
msg_data = await qrcode_bind.send(
img + f'\n请在3分钟内使用米游社扫码并确认进行绑定。\n注意1.扫码即代表你同意将Cookie信息授权给{NICKNAME}\n2.扫码时会提示登录原神,实际不会把你顶掉原神\n3.其他人请不要乱扫否则会将你的账号绑到TA身上',
at_sender=True)
running_login_data[str(event.user_id)]['msg_id'] = msg_data['message_id']
img
+ f"\n请在3分钟内使用米游社扫码并确认进行绑定。\n注意1.扫码即代表你同意将Cookie信息授权给{NICKNAME}\n2.扫码时会提示登录原神,实际不会把你顶掉原神\n3.其他人请不要乱扫否则会将你的账号绑到TA身上",
at_sender=True,
)
running_login_data[str(event.user_id)]["msg_id"] = msg_data["message_id"]
if isinstance(event, GroupMessageEvent):
running_login_data[str(event.user_id)]['group_id'] = event.group_id
elif event.message_type == 'guild':
running_login_data[str(event.user_id)]['guild_id'] = event.guild_id
running_login_data[str(event.user_id)]['channel_id'] = event.channel_id
running_login_data[str(event.user_id)]['bot_id'] = event.self_id
running_login_data[str(event.user_id)]['nickname'] = event.sender.card or event.sender.nickname
running_login_data[str(event.user_id)]["group_id"] = event.group_id
elif event.message_type == "guild":
running_login_data[str(event.user_id)]["guild_id"] = event.guild_id
running_login_data[str(event.user_id)]["channel_id"] = event.channel_id
running_login_data[str(event.user_id)]["bot_id"] = event.self_id
running_login_data[str(event.user_id)]["nickname"] = (
event.sender.card or event.sender.nickname
)
@scheduler.scheduled_job('cron', second='*/10', misfire_grace_time=10)
@scheduler.scheduled_job("cron", second="*/10", misfire_grace_time=10)
async def check_qrcode():
with contextlib.suppress(RuntimeError):
for user_id, data in running_login_data.items():
send_msg = None
status_data = await check_login(data)
if status_data['retcode'] != 0:
send_msg = '绑定二维码已过期,请重新发送扫码绑定指令'
if status_data["retcode"] != 0:
send_msg = "绑定二维码已过期,请重新发送扫码绑定指令"
running_login_data.pop(user_id)
elif status_data['data']['stat'] == 'Confirmed':
game_token = json.loads(status_data['data']['payload']['raw'])
elif status_data["data"]["stat"] == "Confirmed":
game_token = json.loads(status_data["data"]["payload"]["raw"])
running_login_data.pop(user_id)
cookie_token_data = await get_cookie_token(game_token)
stoken_data = await get_stoken(data={'account_id': int(game_token['uid']),
'game_token': game_token['token']})
mys_id = stoken_data['data']['user_info']['aid']
mid = stoken_data['data']['user_info']['mid']
cookie_token = cookie_token_data['data']['cookie_token']
stoken = stoken_data['data']['token']['token']
if game_info := await get_bind_game_info(f"account_id={mys_id};cookie_token={cookie_token}", mys_id):
if not game_info['list']:
send_msg = '该账号尚未绑定任何游戏,请确认扫码的账号无误'
elif not (genshin_games := [{'uid': game['game_role_id'], 'nickname': game['nickname']} for game in
game_info['list'] if game['game_id'] == 2]):
send_msg = '该账号尚未绑定原神,请确认扫码的账号无误'
stoken_data = await get_stoken(
data={
"account_id": int(game_token["uid"]),
"game_token": game_token["token"],
}
)
mys_id = stoken_data["data"]["user_info"]["aid"]
mid = stoken_data["data"]["user_info"]["mid"]
cookie_token = cookie_token_data["data"]["cookie_token"]
stoken = stoken_data["data"]["token"]["token"]
if game_info := await get_bind_game_info(
f"account_id={mys_id};cookie_token={cookie_token}", mys_id
):
if not game_info["list"]:
send_msg = "该账号尚未绑定任何游戏,请确认扫码的账号无误"
elif not (
genshin_games := [
{"uid": game["game_role_id"], "nickname": game["nickname"]}
for game in game_info["list"]
if game["game_id"] == 2
]
):
send_msg = "该账号尚未绑定原神,请确认扫码的账号无误"
else:
send_msg = '成功绑定原神账号:'
send_msg = "成功绑定原神账号:"
for info in genshin_games:
send_msg += f'{info["nickname"]}({info["uid"]}) '
await PrivateCookie.update_or_create(user_id=user_id, uid=info['uid'], mys_id=mys_id,
await PrivateCookie.update_or_create(
user_id=user_id,
uid=info["uid"],
mys_id=mys_id,
defaults={
'cookie': f"account_id={mys_id};cookie_token={cookie_token}",
'stoken': f'stuid={mys_id};stoken={stoken};mid={mid};'})
"cookie": f"account_id={mys_id};cookie_token={cookie_token}",
"stoken": f"stuid={mys_id};stoken={stoken};mid={mid};",
},
)
send_msg = send_msg.strip()
await LastQuery.update_or_create(user_id=user_id,
defaults={'uid': genshin_games[0]['uid'],
'last_time': datetime.datetime.now()})
await LastQuery.update_or_create(
user_id=user_id,
defaults={
"uid": genshin_games[0]["uid"],
"last_time": datetime.datetime.now(),
},
)
if send_msg:
bot: Bot = get_bot(str(data['bot_id']))
if 'group_id' in data:
await bot.send_group_msg(group_id=data['group_id'],
message=MessageSegment.reply(data['msg_id']) + MessageSegment.at(
int(user_id)) + send_msg)
elif 'guild_id' in data:
await bot.send_guild_channel_msg(guild_id=data['guild_id'], channel_id=data['channel_id'],
message=MessageSegment.at(int(user_id)) + send_msg)
bot: Bot = get_bot(str(data["bot_id"]))
if "group_id" in data:
await bot.send_group_msg(
group_id=data["group_id"],
message=MessageSegment.reply(data["msg_id"])
+ MessageSegment.at(int(user_id))
+ send_msg,
)
elif "guild_id" in data:
await bot.send_guild_channel_msg(
guild_id=data["guild_id"],
channel_id=data["channel_id"],
message=MessageSegment.at(int(user_id)) + send_msg,
)
else:
await bot.send_private_msg(user_id=int(user_id),
message=MessageSegment.reply(data['msg_id']) + send_msg)
await bot.send_private_msg(
user_id=int(user_id),
message=MessageSegment.reply(data["msg_id"]) + send_msg,
)
if not running_login_data:
break
await asyncio.sleep(1)
@ -201,11 +253,13 @@ async def check_qrcode():
app: FastAPI = get_app()
@app.get('/LittlePaimon/cookie/qrcode')
@app.get("/LittlePaimon/cookie/qrcode")
async def qrcode_img_url(user_id: str):
if not config.qrcode_bind_use_url:
return {'status': 'error', 'msg': '请在QQ内查看二维码'}
return {"status": "error", "msg": "请在QQ内查看二维码"}
if user_id not in running_login_data:
return {'status': 'error', 'msg': '二维码不存在'}
img_base64 = running_login_data[user_id]['img_b64'].lstrip('base64://')
return StreamingResponse(BytesIO(base64.b64decode(img_base64)), media_type='image/png')
return {"status": "error", "msg": "二维码不存在"}
img_base64 = running_login_data[user_id]["img_b64"].lstrip("base64://")
return StreamingResponse(
BytesIO(base64.b64decode(img_base64)), media_type="image/png"
)