@sjtdev/koishi-plugin-dota2tracker 1.2.20-pre.2 → 1.2.20-pre.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.js +362 -177
- package/package.json +3 -2
- package/template/hero/hero_1.ejs +1 -1
- package/template/player/player_1.ejs +1 -1
package/lib/index.js
CHANGED
|
@@ -5,6 +5,9 @@ var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
|
5
5
|
var __getProtoOf = Object.getPrototypeOf;
|
|
6
6
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
7
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
8
|
+
var __commonJS = (cb, mod) => function __require() {
|
|
9
|
+
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
10
|
+
};
|
|
8
11
|
var __export = (target, all) => {
|
|
9
12
|
for (var name2 in all)
|
|
10
13
|
__defProp(target, name2, { get: all[name2], enumerable: true });
|
|
@@ -27,6 +30,20 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
27
30
|
));
|
|
28
31
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
32
|
|
|
33
|
+
// src/locales/zh-CN.yml
|
|
34
|
+
var require_zh_CN = __commonJS({
|
|
35
|
+
"src/locales/zh-CN.yml"(exports2, module2) {
|
|
36
|
+
module2.exports = { dota2tracker: { position: { "1": "优势路", "2": "中路", "3": "烈士路", "4": "采灵芝", "5": "工具人" }, heroes: { "0": '请严格遵循 "", "" 格式填写(如下方默认数据,注意是英文半角符号),如果格式有误将仅使用英雄默认名称。可以不包含英雄默认名称。', "1": '"敌法师", "敌法", "AM"', "2": '"斧王"', "3": '"祸乱之源", "祸乱", "水桶腰"', "4": '"血魔"', "5": '"水晶室女", "冰女", "CM"', "6": '"卓尔游侠", "小黑"', "7": '"撼地者", "小牛", "牛头"', "8": '"主宰", "剑圣", "jugg", "奶棒人"', "9": '"米拉娜", "白虎", "pom"', "10": '"变体精灵", "水人"', "11": '"影魔", "影魔王", "SF", "影儿魔儿"', "12": '"幻影长矛手", "PL"', "13": '"帕克"', "14": '"帕吉", "屠夫", "扒鸡", "啪唧"', "15": '"雷泽", "电魂", "电棍"', "16": '"沙王", "SK"', "17": '"风暴之灵", "蓝猫"', "18": '"斯温", "流浪剑客", "流浪"', "19": '"小小"', "20": '"复仇之魂", "复仇", "VS"', "21": '"风行者", "风行", "WR"', "22": '"宙斯"', "23": '"昆卡", "船长"', "25": '"莉娜", "火女"', "26": '"莱恩", "恶魔巫师", "Lion"', "27": '"暗影萨满", "小Y", "小歪"', "28": '"斯拉达", "大鱼", "大鱼人"', "29": '"潮汐猎人", "潮汐", "西瓜皮"', "30": '"巫医"', "31": '"巫妖"', "32": '"力丸", "隐形刺客", "隐刺"', "33": '"谜团"', "34": '"修补匠", "TK", "Tinker"', "35": '"狙击手", "矮人火枪手", "火枪", "传说哥"', "36": '"瘟疫法师", "死灵法", "NEC"', "37": '"术士", "Warlock"', "38": '"兽王"', "39": '"痛苦女王", "女王", "QOP"', "40": '"剧毒术士", "剧毒"', "41": '"虚空假面", "虚空", "JB脸"', "42": '"冥魂大帝", "骷髅王"', "43": '"死亡先知", "DP"', "44": '"幻影刺客", "幻刺", "PA"', "45": '"帕格纳", "骨法", "湮灭法师"', "46": '"圣堂刺客", "圣堂", "TA"', "47": '"冥界亚龙", "毒龙", "Viper"', "48": '"露娜", "月骑", "Luna"', "49": '"龙骑士", "龙骑"', "50": '"戴泽", "暗影牧师", "暗牧"', "51": '"发条技师", "发条"', "52": '"拉席克", "老鹿"', "53": '"先知"', "54": '"噬魂鬼", "小狗"', "55": '"黑暗贤者", "黑贤"', "56": '"克林克兹", "小骷髅"', "57": '"全能骑士", "全能"', "58": '"魅惑魔女", "小鹿"', "59": '"哈斯卡", "神灵", "神灵武士"', "60": '"暗夜魔王", "夜魔"', "61": '"育母蜘蛛", "蜘蛛"', "62": '"赏金猎人", "赏金"', "63": '"编织者", "蚂蚁"', "64": '"杰奇洛", "双头龙"', "65": '"蝙蝠骑士", "蝙蝠"', "66": '"陈", "老陈"', "67": '"幽鬼", "SPE", "UG"', "68": '"远古冰魄", "冰魂"', "69": '"末日使者", "末日", "Doom"', "70": '"熊战士", "拍拍", "拍拍熊"', "71": '"裂魂人", "白牛", "sb"', "72": '"矮人直升机", "飞机"', "73": '"炼金术士", "炼金"', "74": '"祈求者", "卡尔"', "75": '"沉默术士", "沉默"', "76": '"殁境神蚀者", "黑鸟"', "77": '"狼人"', "78": '"酒仙", "熊猫", "熊猫酒仙"', "79": '"暗影恶魔", "毒狗"', "80": '"德鲁伊", "熊德"', "81": '"混沌骑士", "混沌", "CK"', "82": '"米波"', "83": '"树精卫士", "大树", "树精"', "84": '"食人魔魔法师", "蓝胖"', "85": '"不朽尸王", "尸王"', "86": '"拉比克"', "87": '"干扰者", "萨尔"', "88": '"司夜刺客", "小强"', "89": '"娜迦海妖", "小娜迦"', "90": '"光之守卫", "光法"', "91": '"艾欧", "小精灵", "精灵", "IO"', "92": '"维萨吉", "死灵龙", "死灵飞龙"', "93": '"斯拉克", "小鱼", "小鱼人"', "94": '"美杜莎", "一姐", "美杜莎"', "95": '"巨魔战将", "巨魔", "巨馍蘸酱"', "96": '"半人马战行者", "人马", "半人马"', "97": '"马格纳斯", "猛犸"', "98": '"伐木机", "花母鸡"', "99": '"钢背兽", "钢背"', "100": '"巨牙海民", "海民"', "101": '"天怒法师", "天怒"', "102": '"亚巴顿"', "103": '"上古巨神", "大牛"', "104": '"军团指挥官", "军团"', "105": '"工程师", "炸弹", "炸弹人"', "106": '"灰烬之灵", "火猫"', "107": '"大地之灵", "土猫"', "108": '"孽主", "大屁股"', "109": '"恐怖利刃", "TB"', "110": '"凤凰", "烧鸡"', "111": '"神谕者", "神谕"', "112": '"寒冬飞龙", "冰龙"', "113": '"天穹守望者", "电狗"', "114": '"齐天大圣", "大圣"', "119": '"邪影芳灵", "小仙女", "花仙子"', "120": '"石鳞剑士", "滚滚"', "121": '"天涯墨客", "墨客"', "123": '"森海飞霞", "松鼠", "小松鼠", "小松许"', "126": '"虚无之灵", "紫猫"', "128": '"电炎绝手", "老奶奶"', "129": '"玛尔斯"', "131": '"百戏大王"', "135": '"破晓辰星", "大锤"', "136": '"玛西"', "137": '"獸", "畜"', "138": '"琼英碧灵", "奶绿", "绿奶奶"', "145": '"凯", "鸟人"' } } };
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
// src/locales/en-US.yml
|
|
41
|
+
var require_en_US = __commonJS({
|
|
42
|
+
"src/locales/en-US.yml"(exports2, module2) {
|
|
43
|
+
module2.exports = { dota2tracker: { position: { "1": "Safe Lane", "2": "Mid Lane", "3": "Off Lane", "4": "Soft Support", "5": "Hard Support" }, heroes: { "0": 'Please strictly follow the format of "", "" when filling out, if the format is incorrect, only the default name of the hero will be used. The default name of the hero may be omitted.', "1": '"Anti-Mage"', "2": '"Axe"', "3": '"Bane"', "4": '"Bloodseeker"', "5": '"Crystal Maiden"', "6": '"Drow Ranger"', "7": '"Earthshaker"', "8": '"Juggernaut"', "9": '"Mirana"', "10": '"Morphling"', "11": '"Shadow Fiend"', "12": '"Phantom Lancer"', "13": '"Puck"', "14": '"Pudge"', "15": '"Razor"', "16": '"Sand King"', "17": '"Storm Spirit"', "18": '"Sven"', "19": '"Tiny"', "20": '"Vengeful Spirit"', "21": '"Windranger"', "22": '"Zeus"', "23": '"Kunkka"', "25": '"Lina"', "26": '"Lion"', "27": '"Shadow Shaman"', "28": '"Slardar"', "29": '"Tidehunter"', "30": '"Witch Doctor"', "31": '"Lich"', "32": '"Riki"', "33": '"Enigma"', "34": '"Tinker"', "35": '"Sniper"', "36": '"Necrophos"', "37": '"Warlock"', "38": '"Beastmaster"', "39": '"Queen of Pain"', "40": '"Venomancer"', "41": '"Faceless Void"', "42": '"Wraith King"', "43": '"Death Prophet"', "44": '"Phantom Assassin"', "45": '"Pugna"', "46": '"Templar Assassin"', "47": '"Viper"', "48": '"Luna"', "49": '"Dragon Knight"', "50": '"Dazzle"', "51": '"Clockwerk"', "52": '"Leshrac"', "53": `"Nature's Prophet"`, "54": '"Lifestealer"', "55": '"Dark Seer"', "56": '"Clinkz"', "57": '"Omniknight"', "58": '"Enchantress"', "59": '"Huskar"', "60": '"Night Stalker"', "61": '"Broodmother"', "62": '"Bounty Hunter"', "63": '"Weaver"', "64": '"Jakiro"', "65": '"Batrider"', "66": '"Chen"', "67": '"Spectre"', "68": '"Ancient Apparition"', "69": '"Doom"', "70": '"Ursa"', "71": '"Spirit Breaker"', "72": '"Gyrocopter"', "73": '"Alchemist"', "74": '"Invoker"', "75": '"Silencer"', "76": '"Outworld Devourer"', "77": '"Lycan"', "78": '"Brewmaster"', "79": '"Shadow Demon"', "80": '"Lone Druid"', "81": '"Chaos Knight"', "82": '"Meepo"', "83": '"Treant Protector"', "84": '"Ogre Magi"', "85": '"Undying"', "86": '"Rubick"', "87": '"Disruptor"', "88": '"Nyx Assassin"', "89": '"Naga Siren"', "90": '"Keeper of the Light"', "91": '"Io"', "92": '"Visage"', "93": '"Slark"', "94": '"Medusa"', "95": '"Troll Warlord"', "96": '"Centaur Warrunner"', "97": '"Magnus"', "98": '"Timbersaw"', "99": '"Bristleback"', "100": '"Tusk"', "101": '"Skywrath Mage"', "102": '"Abaddon"', "103": '"Elder Titan"', "104": '"Legion Commander"', "105": '"Techies"', "106": '"Ember Spirit"', "107": '"Earth Spirit"', "108": '"Underlord"', "109": '"Terrorblade"', "110": '"Phoenix"', "111": '"Oracle"', "112": '"Winter Wyvern"', "113": '"Arc Warden"', "114": '"Monkey King"', "119": '"Dark Willow"', "120": '"Pangolier"', "121": '"Grimstroke"', "123": '"Hoodwink"', "126": '"Void Spirit"', "128": '"Snapfire"', "129": '"Mars"', "131": '"Ring Master"', "135": '"Dawnbreaker"', "136": '"Marci"', "137": '"Primal Beast"', "138": '"Muerta"', "145": '"Kez"' } } };
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
|
|
30
47
|
// src/index.ts
|
|
31
48
|
var src_exports = {};
|
|
32
49
|
__export(src_exports, {
|
|
@@ -110,8 +127,13 @@ function loadGraphqlFile(queryName) {
|
|
|
110
127
|
return import_fs.default.readFileSync(filepath, { encoding: "utf-8" }).replace(/[\r\n]+/g, " ");
|
|
111
128
|
}
|
|
112
129
|
__name(loadGraphqlFile, "loadGraphqlFile");
|
|
113
|
-
async function queryHeroFromValve(heroId) {
|
|
114
|
-
|
|
130
|
+
async function queryHeroFromValve(heroId, languageTag = "zh-CN") {
|
|
131
|
+
let language;
|
|
132
|
+
((language2) => {
|
|
133
|
+
language2["zh-CN"] = "schinese";
|
|
134
|
+
language2["en-US"] = "english";
|
|
135
|
+
})(language || (language = {}));
|
|
136
|
+
return (await http.get(`https://www.dota2.com/datafeed/herodata?language=${language[languageTag]}&hero_id=${heroId}`)).result.data.heroes[0];
|
|
115
137
|
}
|
|
116
138
|
__name(queryHeroFromValve, "queryHeroFromValve");
|
|
117
139
|
var HeroDescType = /* @__PURE__ */ ((HeroDescType2) => {
|
|
@@ -525,10 +547,10 @@ var import_path2 = __toESM(require("path"));
|
|
|
525
547
|
var import_moment = __toESM(require("moment"));
|
|
526
548
|
var dotaconstants2 = __toESM(require("dotaconstants"));
|
|
527
549
|
|
|
528
|
-
// src/dotaconstants_add.json
|
|
550
|
+
// src/data/dotaconstants_add.json
|
|
529
551
|
var dotaconstants_add_exports = {};
|
|
530
552
|
__export(dotaconstants_add_exports, {
|
|
531
|
-
|
|
553
|
+
HEROES_NAMES: () => HEROES_NAMES,
|
|
532
554
|
LOSE_NEGATIVE: () => LOSE_NEGATIVE,
|
|
533
555
|
LOSE_POSITIVE: () => LOSE_POSITIVE,
|
|
534
556
|
WIN_NEGATIVE: () => WIN_NEGATIVE,
|
|
@@ -644,133 +666,263 @@ var behavior = {
|
|
|
644
666
|
AOE: "范围生效"
|
|
645
667
|
};
|
|
646
668
|
var target_team = { Enemy: "敌方单位", Both: "单位", Friendly: "友方单位" };
|
|
647
|
-
var
|
|
648
|
-
"
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
669
|
+
var HEROES_NAMES = {
|
|
670
|
+
"zh-CN": {
|
|
671
|
+
"1": "敌法师",
|
|
672
|
+
"2": "斧王",
|
|
673
|
+
"3": "祸乱之源",
|
|
674
|
+
"4": "血魔",
|
|
675
|
+
"5": "水晶室女",
|
|
676
|
+
"6": "卓尔游侠",
|
|
677
|
+
"7": "撼地者",
|
|
678
|
+
"8": "主宰",
|
|
679
|
+
"9": "米拉娜",
|
|
680
|
+
"10": "变体精灵",
|
|
681
|
+
"11": "影魔",
|
|
682
|
+
"12": "幻影长矛手",
|
|
683
|
+
"13": "帕克",
|
|
684
|
+
"14": "帕吉",
|
|
685
|
+
"15": "雷泽",
|
|
686
|
+
"16": "沙王",
|
|
687
|
+
"17": "风暴之灵",
|
|
688
|
+
"18": "斯温",
|
|
689
|
+
"19": "小小",
|
|
690
|
+
"20": "复仇之魂",
|
|
691
|
+
"21": "风行者",
|
|
692
|
+
"22": "宙斯",
|
|
693
|
+
"23": "昆卡",
|
|
694
|
+
"25": "莉娜",
|
|
695
|
+
"26": "莱恩",
|
|
696
|
+
"27": "暗影萨满",
|
|
697
|
+
"28": "斯拉达",
|
|
698
|
+
"29": "潮汐猎人",
|
|
699
|
+
"30": "巫医",
|
|
700
|
+
"31": "巫妖",
|
|
701
|
+
"32": "力丸",
|
|
702
|
+
"33": "谜团",
|
|
703
|
+
"34": "修补匠",
|
|
704
|
+
"35": "狙击手",
|
|
705
|
+
"36": "瘟疫法师",
|
|
706
|
+
"37": "术士",
|
|
707
|
+
"38": "兽王",
|
|
708
|
+
"39": "痛苦女王",
|
|
709
|
+
"40": "剧毒术士",
|
|
710
|
+
"41": "虚空假面",
|
|
711
|
+
"42": "冥魂大帝",
|
|
712
|
+
"43": "死亡先知",
|
|
713
|
+
"44": "幻影刺客",
|
|
714
|
+
"45": "帕格纳",
|
|
715
|
+
"46": "圣堂刺客",
|
|
716
|
+
"47": "冥界亚龙",
|
|
717
|
+
"48": "露娜",
|
|
718
|
+
"49": "龙骑士",
|
|
719
|
+
"50": "戴泽",
|
|
720
|
+
"51": "发条技师",
|
|
721
|
+
"52": "拉席克",
|
|
722
|
+
"53": "先知",
|
|
723
|
+
"54": "噬魂鬼",
|
|
724
|
+
"55": "黑暗贤者",
|
|
725
|
+
"56": "克林克兹",
|
|
726
|
+
"57": "全能骑士",
|
|
727
|
+
"58": "魅惑魔女",
|
|
728
|
+
"59": "哈斯卡",
|
|
729
|
+
"60": "暗夜魔王",
|
|
730
|
+
"61": "育母蜘蛛",
|
|
731
|
+
"62": "赏金猎人",
|
|
732
|
+
"63": "编织者",
|
|
733
|
+
"64": "杰奇洛",
|
|
734
|
+
"65": "蝙蝠骑士",
|
|
735
|
+
"66": "陈",
|
|
736
|
+
"67": "幽鬼",
|
|
737
|
+
"68": "远古冰魄",
|
|
738
|
+
"69": "末日使者",
|
|
739
|
+
"70": "熊战士",
|
|
740
|
+
"71": "裂魂人",
|
|
741
|
+
"72": "矮人直升机",
|
|
742
|
+
"73": "炼金术士",
|
|
743
|
+
"74": "祈求者",
|
|
744
|
+
"75": "沉默术士",
|
|
745
|
+
"76": "殁境神蚀者",
|
|
746
|
+
"77": "狼人",
|
|
747
|
+
"78": "酒仙",
|
|
748
|
+
"79": "暗影恶魔",
|
|
749
|
+
"80": "德鲁伊",
|
|
750
|
+
"81": "混沌骑士",
|
|
751
|
+
"82": "米波",
|
|
752
|
+
"83": "树精卫士",
|
|
753
|
+
"84": "食人魔魔法师",
|
|
754
|
+
"85": "不朽尸王",
|
|
755
|
+
"86": "拉比克",
|
|
756
|
+
"87": "干扰者",
|
|
757
|
+
"88": "司夜刺客",
|
|
758
|
+
"89": "娜迦海妖",
|
|
759
|
+
"90": "光之守卫",
|
|
760
|
+
"91": "艾欧",
|
|
761
|
+
"92": "维萨吉",
|
|
762
|
+
"93": "斯拉克",
|
|
763
|
+
"94": "美杜莎",
|
|
764
|
+
"95": "巨魔战将",
|
|
765
|
+
"96": "半人马战行者",
|
|
766
|
+
"97": "马格纳斯",
|
|
767
|
+
"98": "伐木机",
|
|
768
|
+
"99": "钢背兽",
|
|
769
|
+
"100": "巨牙海民",
|
|
770
|
+
"101": "天怒法师",
|
|
771
|
+
"102": "亚巴顿",
|
|
772
|
+
"103": "上古巨神",
|
|
773
|
+
"104": "军团指挥官",
|
|
774
|
+
"105": "工程师",
|
|
775
|
+
"106": "灰烬之灵",
|
|
776
|
+
"107": "大地之灵",
|
|
777
|
+
"108": "孽主",
|
|
778
|
+
"109": "恐怖利刃",
|
|
779
|
+
"110": "凤凰",
|
|
780
|
+
"111": "神谕者",
|
|
781
|
+
"112": "寒冬飞龙",
|
|
782
|
+
"113": "天穹守望者",
|
|
783
|
+
"114": "齐天大圣",
|
|
784
|
+
"119": "邪影芳灵",
|
|
785
|
+
"120": "石鳞剑士",
|
|
786
|
+
"121": "天涯墨客",
|
|
787
|
+
"123": "森海飞霞",
|
|
788
|
+
"126": "虚无之灵",
|
|
789
|
+
"128": "电炎绝手",
|
|
790
|
+
"129": "玛尔斯",
|
|
791
|
+
"131": "百戏大王",
|
|
792
|
+
"135": "破晓辰星",
|
|
793
|
+
"136": "玛西",
|
|
794
|
+
"137": "獸",
|
|
795
|
+
"138": "琼英碧灵",
|
|
796
|
+
"145": "凯"
|
|
797
|
+
},
|
|
798
|
+
"en-US": {
|
|
799
|
+
"1": "Anti-Mage",
|
|
800
|
+
"2": "Axe",
|
|
801
|
+
"3": "Bane",
|
|
802
|
+
"4": "Bloodseeker",
|
|
803
|
+
"5": "Crystal Maiden",
|
|
804
|
+
"6": "Drow Ranger",
|
|
805
|
+
"7": "Earthshaker",
|
|
806
|
+
"8": "Juggernaut",
|
|
807
|
+
"9": "Mirana",
|
|
808
|
+
"10": "Morphling",
|
|
809
|
+
"11": "Shadow Fiend",
|
|
810
|
+
"12": "Phantom Lancer",
|
|
811
|
+
"13": "Puck",
|
|
812
|
+
"14": "Pudge",
|
|
813
|
+
"15": "Razor",
|
|
814
|
+
"16": "Sand King",
|
|
815
|
+
"17": "Storm Spirit",
|
|
816
|
+
"18": "Sven",
|
|
817
|
+
"19": "Tiny",
|
|
818
|
+
"20": "Vengeful Spirit",
|
|
819
|
+
"21": "Windranger",
|
|
820
|
+
"22": "Zeus",
|
|
821
|
+
"23": "Kunkka",
|
|
822
|
+
"25": "Lina",
|
|
823
|
+
"26": "Lion",
|
|
824
|
+
"27": "Shadow Shaman",
|
|
825
|
+
"28": "Slardar",
|
|
826
|
+
"29": "Tidehunter",
|
|
827
|
+
"30": "Witch Doctor",
|
|
828
|
+
"31": "Lich",
|
|
829
|
+
"32": "Riki",
|
|
830
|
+
"33": "Enigma",
|
|
831
|
+
"34": "Tinker",
|
|
832
|
+
"35": "Sniper",
|
|
833
|
+
"36": "Necrophos",
|
|
834
|
+
"37": "Warlock",
|
|
835
|
+
"38": "Beastmaster",
|
|
836
|
+
"39": "Queen of Pain",
|
|
837
|
+
"40": "Venomancer",
|
|
838
|
+
"41": "Faceless Void",
|
|
839
|
+
"42": "Wraith King",
|
|
840
|
+
"43": "Death Prophet",
|
|
841
|
+
"44": "Phantom Assassin",
|
|
842
|
+
"45": "Pugna",
|
|
843
|
+
"46": "Templar Assassin",
|
|
844
|
+
"47": "Viper",
|
|
845
|
+
"48": "Luna",
|
|
846
|
+
"49": "Dragon Knight",
|
|
847
|
+
"50": "Dazzle",
|
|
848
|
+
"51": "Clockwerk",
|
|
849
|
+
"52": "Leshrac",
|
|
850
|
+
"53": "Nature's Prophet",
|
|
851
|
+
"54": "Lifestealer",
|
|
852
|
+
"55": "Dark Seer",
|
|
853
|
+
"56": "Clinkz",
|
|
854
|
+
"57": "Omniknight",
|
|
855
|
+
"58": "Enchantress",
|
|
856
|
+
"59": "Huskar",
|
|
857
|
+
"60": "Night Stalker",
|
|
858
|
+
"61": "Broodmother",
|
|
859
|
+
"62": "Bounty Hunter",
|
|
860
|
+
"63": "Weaver",
|
|
861
|
+
"64": "Jakiro",
|
|
862
|
+
"65": "Batrider",
|
|
863
|
+
"66": "Chen",
|
|
864
|
+
"67": "Spectre",
|
|
865
|
+
"68": "Ancient Apparition",
|
|
866
|
+
"69": "Doom",
|
|
867
|
+
"70": "Ursa",
|
|
868
|
+
"71": "Spirit Breaker",
|
|
869
|
+
"72": "Gyrocopter",
|
|
870
|
+
"73": "Alchemist",
|
|
871
|
+
"74": "Invoker",
|
|
872
|
+
"75": "Silencer",
|
|
873
|
+
"76": "Outworld Devourer",
|
|
874
|
+
"77": "Lycan",
|
|
875
|
+
"78": "Brewmaster",
|
|
876
|
+
"79": "Shadow Demon",
|
|
877
|
+
"80": "Lone Druid",
|
|
878
|
+
"81": "Chaos Knight",
|
|
879
|
+
"82": "Meepo",
|
|
880
|
+
"83": "Treant Protector",
|
|
881
|
+
"84": "Ogre Magi",
|
|
882
|
+
"85": "Undying",
|
|
883
|
+
"86": "Rubick",
|
|
884
|
+
"87": "Disruptor",
|
|
885
|
+
"88": "Nyx Assassin",
|
|
886
|
+
"89": "Naga Siren",
|
|
887
|
+
"90": "Keeper of the Light",
|
|
888
|
+
"91": "Io",
|
|
889
|
+
"92": "Visage",
|
|
890
|
+
"93": "Slark",
|
|
891
|
+
"94": "Medusa",
|
|
892
|
+
"95": "Troll Warlord",
|
|
893
|
+
"96": "Centaur Warrunner",
|
|
894
|
+
"97": "Magnus",
|
|
895
|
+
"98": "Timbersaw",
|
|
896
|
+
"99": "Bristleback",
|
|
897
|
+
"100": "Tusk",
|
|
898
|
+
"101": "Skywrath Mage",
|
|
899
|
+
"102": "Abaddon",
|
|
900
|
+
"103": "Elder Titan",
|
|
901
|
+
"104": "Legion Commander",
|
|
902
|
+
"105": "Techies",
|
|
903
|
+
"106": "Ember Spirit",
|
|
904
|
+
"107": "Earth Spirit",
|
|
905
|
+
"108": "Underlord",
|
|
906
|
+
"109": "Terrorblade",
|
|
907
|
+
"110": "Phoenix",
|
|
908
|
+
"111": "Oracle",
|
|
909
|
+
"112": "Winter Wyvern",
|
|
910
|
+
"113": "Arc Warden",
|
|
911
|
+
"114": "Monkey King",
|
|
912
|
+
"119": "Dark Willow",
|
|
913
|
+
"120": "Pangolier",
|
|
914
|
+
"121": "Grimstroke",
|
|
915
|
+
"123": "Hoodwink",
|
|
916
|
+
"126": "Void Spirit",
|
|
917
|
+
"128": "Snapfire",
|
|
918
|
+
"129": "Mars",
|
|
919
|
+
"131": "Ring Master",
|
|
920
|
+
"135": "Dawnbreaker",
|
|
921
|
+
"136": "Marci",
|
|
922
|
+
"137": "Primal Beast",
|
|
923
|
+
"138": "Muerta",
|
|
924
|
+
"145": "Kez"
|
|
925
|
+
}
|
|
774
926
|
};
|
|
775
927
|
var WIN_NEGATIVE = ["侥幸赢得了比赛", "走狗屎运赢得了比赛", "躺赢了比赛", "打团都没来, 队友4V5赢得了比赛"];
|
|
776
928
|
var WIN_POSITIVE = ["带领团队走向了胜利", "暴打对面后赢得了胜利", " CARRY全场赢得了胜利", "把对面当猪宰了, 赢得了胜利", "又赢了, 这游戏就是这么枯燥, 且乏味", "直接进行一个比赛的赢"];
|
|
@@ -786,7 +938,7 @@ var dotaconstants_add_default = {
|
|
|
786
938
|
primary_attrs,
|
|
787
939
|
behavior,
|
|
788
940
|
target_team,
|
|
789
|
-
|
|
941
|
+
HEROES_NAMES,
|
|
790
942
|
WIN_NEGATIVE,
|
|
791
943
|
WIN_POSITIVE,
|
|
792
944
|
LOSE_NEGATIVE,
|
|
@@ -799,6 +951,7 @@ var ejs = __toESM(require("ejs"));
|
|
|
799
951
|
var name = "dota2tracker";
|
|
800
952
|
var usage = `
|
|
801
953
|
DOTA2Bot插件-提供自动追踪群友的最新对局的功能(需群友绑定),以及一系列查询功能。
|
|
954
|
+
[本地化/dota2tracker](../../locales/dota2tracker)可以自定义英雄别名和位置代称
|
|
802
955
|
**更多信息请进入[插件主页](https://github.com/sjtdev/koishi-plugin-dota2tracker)与[更新日志](https://github.com/sjtdev/koishi-plugin-dota2tracker/blob/master/changelog.md)查看。**`;
|
|
803
956
|
var inject = ["http", "database", "cron", "puppeteer"];
|
|
804
957
|
var Config = import_koishi.Schema.intersect([
|
|
@@ -862,6 +1015,14 @@ var random = new import_koishi2.Random(() => Math.random());
|
|
|
862
1015
|
async function apply(ctx, config) {
|
|
863
1016
|
CONFIGS.STRATZ_API.TOKEN = config.STRATZ_API_TOKEN;
|
|
864
1017
|
init(ctx.http, ctx.setTimeout);
|
|
1018
|
+
ctx.i18n.define("zh-CN", require_zh_CN());
|
|
1019
|
+
ctx.i18n.define("en-US", require_en_US());
|
|
1020
|
+
const koishiLanguageTag = ctx.i18n.fallback(void 0).at(2);
|
|
1021
|
+
const getLanguageTag = /* @__PURE__ */ __name(async function(session, channel) {
|
|
1022
|
+
if (!session && !channel) return koishiLanguageTag;
|
|
1023
|
+
const resolvedChannel = channel ?? await session?.getChannel(session.event.channel.id);
|
|
1024
|
+
return resolvedChannel?.locales?.at(0) ?? koishiLanguageTag;
|
|
1025
|
+
}, "getLanguageTag");
|
|
865
1026
|
ctx.command("订阅本群", "订阅后还需玩家在本群绑定SteamID").usage("订阅后还需玩家在本群绑定SteamID,BOT将订阅本群中已绑定玩家的新比赛数据,在STRATZ比赛解析完成后将比赛数据生成为图片战报发布至本群中。").action(async ({ session }) => {
|
|
866
1027
|
if (session.guild) {
|
|
867
1028
|
let currentGuild = (await ctx.database.get("dt_subscribed_guilds", { guildId: session.event.channel.id, platform: session.event.platform }))[0];
|
|
@@ -964,7 +1125,7 @@ async function apply(ctx, config) {
|
|
|
964
1125
|
}
|
|
965
1126
|
async function getUsers(subscribedPlayers2, memberList2) {
|
|
966
1127
|
const playerSteamIds = { steamAccountIds: subscribedPlayers2.map((player) => player.steamId) };
|
|
967
|
-
const queryResult = await query("PlayersInfoWith10MatchesForGuild",
|
|
1128
|
+
const queryResult = await query("PlayersInfoWith10MatchesForGuild", playerSteamIds);
|
|
968
1129
|
const playersInfo = queryResult.players;
|
|
969
1130
|
const users2 = [];
|
|
970
1131
|
for (const subscribedPlayer of subscribedPlayers2) {
|
|
@@ -1065,16 +1226,16 @@ async function apply(ctx, config) {
|
|
|
1065
1226
|
return;
|
|
1066
1227
|
}
|
|
1067
1228
|
session.send("正在获取玩家数据,请稍后...");
|
|
1068
|
-
let
|
|
1229
|
+
let heroId = findingHero(options.hero);
|
|
1069
1230
|
let steamId = flagBindedPlayer?.steamId ?? input_data;
|
|
1070
1231
|
let player;
|
|
1071
1232
|
try {
|
|
1072
|
-
player = (await query("PlayerInfoWith25Matches", { steamAccountId: steamId, heroIds:
|
|
1233
|
+
player = (await query("PlayerInfoWith25Matches", { steamAccountId: steamId, heroIds: heroId })).player;
|
|
1073
1234
|
let playerExtra = (await query("PlayerExtraInfo", {
|
|
1074
1235
|
steamAccountId: steamId,
|
|
1075
1236
|
matchCount: player.matchCount,
|
|
1076
1237
|
totalHeroCount: Object.keys(dotaconstants2.heroes).length,
|
|
1077
|
-
heroIds:
|
|
1238
|
+
heroIds: heroId
|
|
1078
1239
|
})).player;
|
|
1079
1240
|
let filteredDotaPlus = {};
|
|
1080
1241
|
playerExtra.dotaPlus.forEach((item) => {
|
|
@@ -1085,11 +1246,11 @@ async function apply(ctx, config) {
|
|
|
1085
1246
|
};
|
|
1086
1247
|
}
|
|
1087
1248
|
});
|
|
1088
|
-
playerExtra.heroesPerformance.forEach((
|
|
1089
|
-
if (filteredDotaPlus[
|
|
1090
|
-
filteredDotaPlus[
|
|
1091
|
-
filteredDotaPlus[
|
|
1092
|
-
filteredDotaPlus[
|
|
1249
|
+
playerExtra.heroesPerformance.forEach((hero) => {
|
|
1250
|
+
if (filteredDotaPlus[hero.hero.id]) {
|
|
1251
|
+
filteredDotaPlus[hero.hero.id].shortName = hero.hero.shortName;
|
|
1252
|
+
filteredDotaPlus[hero.hero.id].winCount = hero.winCount;
|
|
1253
|
+
filteredDotaPlus[hero.hero.id].matchCount = hero.matchCount;
|
|
1093
1254
|
}
|
|
1094
1255
|
});
|
|
1095
1256
|
player.rank = {
|
|
@@ -1106,14 +1267,14 @@ async function apply(ctx, config) {
|
|
|
1106
1267
|
return a.heroId - b.heroId;
|
|
1107
1268
|
});
|
|
1108
1269
|
player.heroesPerformanceTop10 = playerExtra.heroesPerformance.slice(0, 10);
|
|
1109
|
-
if (
|
|
1270
|
+
if (heroId) {
|
|
1110
1271
|
const { matchCount, winCount, imp } = player.heroesPerformanceTop10[0];
|
|
1111
1272
|
player.matchCount = matchCount;
|
|
1112
1273
|
player.winCount = winCount;
|
|
1113
1274
|
player.performance.imp = imp;
|
|
1114
|
-
player.dotaPlus = player.dotaPlus.filter((dpHero) => dpHero.heroId ==
|
|
1275
|
+
player.dotaPlus = player.dotaPlus.filter((dpHero) => dpHero.heroId == heroId);
|
|
1115
1276
|
}
|
|
1116
|
-
player.genHero =
|
|
1277
|
+
player.genHero = { name: HEROES_NAMES[(await session.getChannel(session.event.channel.id)).locales?.at(0) ?? "zh-CN"][heroId] };
|
|
1117
1278
|
session.send(
|
|
1118
1279
|
(ctx.config.urlInMessageType.some((type) => type == "player") ? "https://stratz.com/players/" + player.steamAccount.id : "") + await ctx.puppeteer.render(genImageHTML(player, config.template_player, "player" /* Player */))
|
|
1119
1280
|
);
|
|
@@ -1126,17 +1287,17 @@ async function apply(ctx, config) {
|
|
|
1126
1287
|
}
|
|
1127
1288
|
});
|
|
1128
1289
|
ctx.command("查询英雄 <input_data>", "查询英雄技能/面板信息").usage("查询英雄的技能说明与各项数据,生成图片发布。\n参数可输入英雄ID、英雄名、英雄常用别名").option("random", "-r 随机选择英雄").example("查询英雄 15").example("查询英雄 雷泽").example("查询英雄 电魂").action(async ({ session, options }, input_data) => {
|
|
1129
|
-
|
|
1290
|
+
const languageTag = await getLanguageTag(session);
|
|
1291
|
+
if (options.random) input_data = random.pick(Object.keys(HEROES_NAMES[languageTag]));
|
|
1130
1292
|
if (input_data) {
|
|
1131
|
-
let
|
|
1132
|
-
if (!
|
|
1293
|
+
let heroId = findingHero(input_data);
|
|
1294
|
+
if (!heroId) {
|
|
1133
1295
|
session.send("未找到输入的英雄,请确认后重新输入。");
|
|
1134
1296
|
return;
|
|
1135
1297
|
}
|
|
1136
1298
|
await session.send("正在获取英雄数据,请稍后...");
|
|
1137
1299
|
try {
|
|
1138
|
-
|
|
1139
|
-
Object.assign(hero, queryHero);
|
|
1300
|
+
let hero = await queryHeroFromValve(heroId, languageTag);
|
|
1140
1301
|
hero.facet_abilities.forEach((fa, i) => {
|
|
1141
1302
|
if (fa.abilities.length) {
|
|
1142
1303
|
fa.abilities.forEach((ab) => {
|
|
@@ -1217,13 +1378,14 @@ async function apply(ctx, config) {
|
|
|
1217
1378
|
});
|
|
1218
1379
|
ctx.command("查询英雄对战 <input_data:string>", "查询英雄近一周的最佳搭档与最佳克星英雄").usage("根据输入英雄查询最近一周比赛数据(传奇~万古分段)中与该英雄组合胜率最高英雄和与该英雄对抗胜率最低英雄。\n参数可输入英雄ID、英雄名、英雄常用别名").option("limit", "-l <value:number> 返回英雄个数(默认值 5)", { fallback: 5 }).option("filter", "-f <value:number> 过滤场数过低的组合(单位:%,默认值0.75)", { fallback: 0.5 }).example("查询英雄对战 敌法师 (无额外参数默认返回5个英雄,过滤舍弃场次占比0.75%以下)").example("查询英雄对战 敌法师 -l=10 -f=1 (返回10个英雄,过滤舍弃场次占比1%以下)").example("查询英雄对战 敌法师 -l 10 -f 1 (等同于上例,参数接空格也可使用)").action(async ({ session, options }, input_data) => {
|
|
1219
1380
|
if (input_data) {
|
|
1220
|
-
|
|
1221
|
-
|
|
1381
|
+
const languageTag = await getLanguageTag(session);
|
|
1382
|
+
let heroId = findingHero(input_data);
|
|
1383
|
+
if (!heroId) {
|
|
1222
1384
|
session.send("未找到输入的英雄,请确认后重新输入。");
|
|
1223
1385
|
return;
|
|
1224
1386
|
}
|
|
1225
1387
|
try {
|
|
1226
|
-
let heroStats = (await query("HeroMatchupWinrate", { heroId
|
|
1388
|
+
let heroStats = (await query("HeroMatchupWinrate", { heroId, take: Object.keys(dotaconstants2.heroes).length - 1 })).heroStats;
|
|
1227
1389
|
let withTopFive = heroStats.matchUp[0].with.filter((item) => item.matchCount / heroStats.matchUp[0].matchCountWith > Math.max(0, Math.min(5, options.filter)) / 100).map((item) => {
|
|
1228
1390
|
const winRate = item.winCount / item.matchCount;
|
|
1229
1391
|
return { ...item, winRate: winRate.toFixed(3) };
|
|
@@ -1233,10 +1395,10 @@ async function apply(ctx, config) {
|
|
|
1233
1395
|
return { ...item, winRate: winRate.toFixed(3) };
|
|
1234
1396
|
}).sort((a, b) => a.winRate - b.winRate).slice(0, Math.max(1, Math.min(Object.keys(dotaconstants2.heroes).length - 1, options.limit)));
|
|
1235
1397
|
session.send(
|
|
1236
|
-
`你查询的英雄是${
|
|
1398
|
+
`你查询的英雄是${HEROES_NAMES[heroStats.matchUp[0].heroId][0]}(ID:${heroStats.matchUp[0].heroId}),
|
|
1237
1399
|
以下是7天内传奇-万古分段比赛数据总结而来的搭档与克制关系
|
|
1238
|
-
最佳搭档(组合胜率前${options.limit}):${withTopFive.map((item) => `${
|
|
1239
|
-
最佳克星(对抗胜率倒${options.limit}):${vsBottomFive.map((item) => `${
|
|
1400
|
+
最佳搭档(组合胜率前${options.limit}):${withTopFive.map((item) => `${HEROES_NAMES[languageTag][item.heroId2][0]}(胜率${(item.winRate * 100).toFixed(1)}%)`).join("、")}
|
|
1401
|
+
最佳克星(对抗胜率倒${options.limit}):${vsBottomFive.map((item) => `${HEROES_NAMES[languageTag][item.heroId2][0]}(胜率${(item.winRate * 100).toFixed(1)}%)`).join("、")}`
|
|
1240
1402
|
);
|
|
1241
1403
|
} catch (error) {
|
|
1242
1404
|
ctx.logger.error(error);
|
|
@@ -1246,28 +1408,48 @@ async function apply(ctx, config) {
|
|
|
1246
1408
|
}
|
|
1247
1409
|
});
|
|
1248
1410
|
function findingHero(input) {
|
|
1249
|
-
|
|
1250
|
-
let
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1411
|
+
const heroIds = Object.keys(dotaconstants2.heroes).map((id) => parseInt(id));
|
|
1412
|
+
let tid;
|
|
1413
|
+
for (const loc of Object.keys(HEROES_NAMES)) {
|
|
1414
|
+
for (const id_nicknames of getHeroNicknames(heroIds, loc)) {
|
|
1415
|
+
for (const [id, nicknames] of Object.entries(id_nicknames)) {
|
|
1416
|
+
try {
|
|
1417
|
+
for (const nickname of nicknames) {
|
|
1418
|
+
if (input == nickname) return Number(id);
|
|
1419
|
+
}
|
|
1420
|
+
} catch {
|
|
1421
|
+
continue;
|
|
1422
|
+
}
|
|
1423
|
+
}
|
|
1424
|
+
}
|
|
1425
|
+
}
|
|
1426
|
+
for (const names of Object.values(HEROES_NAMES)) {
|
|
1427
|
+
for (const [id, name2] of Object.entries(names)) {
|
|
1428
|
+
if (input == name2) return Number(id);
|
|
1429
|
+
if (input == id) tid = input;
|
|
1430
|
+
}
|
|
1431
|
+
}
|
|
1432
|
+
return tid;
|
|
1269
1433
|
}
|
|
1270
1434
|
__name(findingHero, "findingHero");
|
|
1435
|
+
function getHeroNicknames(heroIds, languageTag = koishiLanguageTag) {
|
|
1436
|
+
if (heroIds === void 0) return [];
|
|
1437
|
+
const heroIdArray = Array.isArray(heroIds) ? heroIds : [heroIds];
|
|
1438
|
+
const result = [];
|
|
1439
|
+
for (const heroId of heroIdArray) {
|
|
1440
|
+
let content = [];
|
|
1441
|
+
try {
|
|
1442
|
+
const rawContent = ctx.i18n.render([languageTag], [`dota2tracker.heroes.${heroId}`], {}).at(0)?.attrs?.content ?? "";
|
|
1443
|
+
content = JSON.parse(`[${rawContent}]`);
|
|
1444
|
+
} catch (error) {
|
|
1445
|
+
ctx.logger.error(`Failed to parse heroId ${heroId} content: ${error.message}`);
|
|
1446
|
+
content = [];
|
|
1447
|
+
}
|
|
1448
|
+
result.push({ [heroId]: content });
|
|
1449
|
+
}
|
|
1450
|
+
return Array.isArray(heroIds) ? result : result[0][heroIds];
|
|
1451
|
+
}
|
|
1452
|
+
__name(getHeroNicknames, "getHeroNicknames");
|
|
1271
1453
|
ctx.on("ready", async () => {
|
|
1272
1454
|
ctx.model.extend("dt_subscribed_guilds", { id: "unsigned", guildId: "string", platform: "string" }, { autoInc: true });
|
|
1273
1455
|
ctx.model.extend("dt_subscribed_players", { id: "unsigned", userId: "string", guildId: "string", platform: "string", steamId: "integer", nickName: "string", rank: "json" }, { autoInc: true });
|
|
@@ -1312,7 +1494,9 @@ async function apply(ctx, config) {
|
|
|
1312
1494
|
});
|
|
1313
1495
|
});
|
|
1314
1496
|
pendingMatches.push({ matchId: match.id, guilds: tempGuilds });
|
|
1315
|
-
query("RequestMatchDataAnalysis", { matchId: match.id })
|
|
1497
|
+
query("RequestMatchDataAnalysis", { matchId: match.id }).then(
|
|
1498
|
+
(response) => ctx.logger.info(response.stratz.matchRetry ? "解析请求已成功发送至服务器。" : "解析请求发送失败。")
|
|
1499
|
+
);
|
|
1316
1500
|
ctx.logger.info(
|
|
1317
1501
|
tempGuilds.map((guild) => `追踪到来自群组${guild.platform}:${guild.guildId}的用户${guild.players.map((player) => `[${player.nickName ?? ""}(${player.steamId})]`).join("、")}的尚未播报过的最新比赛 ${match.id}。`).join("")
|
|
1318
1502
|
);
|
|
@@ -1372,6 +1556,7 @@ async function apply(ctx, config) {
|
|
|
1372
1556
|
const now = (0, import_moment.default)();
|
|
1373
1557
|
const pendingMatch = pendingMatches[(now.hours() * 60 + now.minutes()) % pendingMatches.length];
|
|
1374
1558
|
try {
|
|
1559
|
+
const languageTag = await getLanguageTag();
|
|
1375
1560
|
let matchQuery;
|
|
1376
1561
|
let queryLocal = await ctx.database.get("dt_previous_query_results", pendingMatch.matchId, ["data"]);
|
|
1377
1562
|
if (queryLocal.length > 0) {
|
|
@@ -1390,7 +1575,7 @@ async function apply(ctx, config) {
|
|
|
1390
1575
|
let broadPlayers = match.players.filter((item) => idsToFind.includes(item.steamAccountId));
|
|
1391
1576
|
for (let player of broadPlayers) {
|
|
1392
1577
|
const random2 = new import_koishi2.Random(() => enhancedSimpleHashToSeed(`${match.id}-${player.steamAccountId}-${player.playerSlot}`));
|
|
1393
|
-
let broadPlayerMessage = `${player.steamAccount.name}的${random2.pick(
|
|
1578
|
+
let broadPlayerMessage = `${player.steamAccount.name}的${random2.pick(getHeroNicknames(player.hero.id, languageTag))}`;
|
|
1394
1579
|
if (player.isRadiant == match.didRadiantWin) {
|
|
1395
1580
|
if (player.deathContribution < 0.2 || player.killContribution > 0.75 || player.heroDamage / player.networth > 1.5 || player.towerDamage > 1e4 || player.imp > 0)
|
|
1396
1581
|
broadPlayerMessage += random2.pick(WIN_POSITIVE);
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sjtdev/koishi-plugin-dota2tracker",
|
|
3
3
|
"description": "koishi插件-追踪群友的DOTA2对局",
|
|
4
|
-
"version": "1.2.20-pre.
|
|
4
|
+
"version": "1.2.20-pre.3",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"typings": "lib/index.d.ts",
|
|
7
7
|
"files": [
|
|
@@ -46,7 +46,8 @@
|
|
|
46
46
|
"cron"
|
|
47
47
|
],
|
|
48
48
|
"locales": [
|
|
49
|
-
"zh"
|
|
49
|
+
"zh-CN",
|
|
50
|
+
"en-US"
|
|
50
51
|
]
|
|
51
52
|
}
|
|
52
53
|
}
|
package/template/hero/hero_1.ejs
CHANGED
|
@@ -570,7 +570,7 @@
|
|
|
570
570
|
<div class="wrapper">
|
|
571
571
|
<%- `
|
|
572
572
|
<div class="hero" id="${hero.id}">
|
|
573
|
-
<img src="${utils.getImageUrl(hero.
|
|
573
|
+
<img src="${utils.getImageUrl(hero["name"].match(/^npc_dota_hero_(.+)$/)[1], ImageType.Heroes)}"/>
|
|
574
574
|
<img class="pri_attr" src="${utils.getImageUrl(d2a.primary_attrs[hero.primary_attr], ImageType.Icons)}"/>
|
|
575
575
|
<div class="info">
|
|
576
576
|
<p class="name">${hero.name_loc}</p>
|
|
@@ -409,7 +409,7 @@
|
|
|
409
409
|
<%- `
|
|
410
410
|
<div class="avatar"><img src="${player.steamAccount?.avatar}" alt="" /></div>
|
|
411
411
|
<div class="info">
|
|
412
|
-
<p class="name">${escapeHTML(player.steamAccount.name)}${player.guildMember ? ` <span class="guild ${guildLevel(player.guildMember.guild.currentPercentile)}">[${escapeHTML(player.guildMember.guild.tag)}]</span>${player.genHero?` >${player.genHero.
|
|
412
|
+
<p class="name">${escapeHTML(player.steamAccount.name)}${player.guildMember ? ` <span class="guild ${guildLevel(player.guildMember.guild.currentPercentile)}">[${escapeHTML(player.guildMember.guild.tag)}]</span>${player.genHero?` >${player.genHero.name}<`:""}</p>` : ""}
|
|
413
413
|
<p class="matches"><span>场次:${player.matchCount}(<span class="win">${player.winCount}</span>/<span class="lose">${player.matchCount - player.winCount}</span>)</span>胜率:<span style="color:${utils.winRateColor(player.winCount / player.matchCount)};">${((player.winCount / player.matchCount) * 100).toFixed(2)}%</span></p>
|
|
414
414
|
<p class="matches"><span>最近25场:<span class="win">${nearWinCount}</span>/<span class="lose">${nearMatchCount - nearWinCount}</span></span><span>胜率:<span style="color:${utils.winRateColor(nearWinCount / nearMatchCount)};">${(
|
|
415
415
|
(nearWinCount / nearMatchCount) * 100).toFixed(2)}%</span></span><span>评分:${(player.performance.imp > 0 ? "+" : "") + player.performance.imp}</span></span></p>
|