diff --git a/assets/gacha/3_background.png b/assets/gacha/3_background.png new file mode 100644 index 0000000..0b9114b Binary files /dev/null and b/assets/gacha/3_background.png differ diff --git a/assets/gacha/3_star.png b/assets/gacha/3_star.png new file mode 100644 index 0000000..fb224cc Binary files /dev/null and b/assets/gacha/3_star.png differ diff --git a/assets/gacha/4_background.png b/assets/gacha/4_background.png new file mode 100644 index 0000000..d51b837 Binary files /dev/null and b/assets/gacha/4_background.png differ diff --git a/assets/gacha/4_star.png b/assets/gacha/4_star.png new file mode 100644 index 0000000..ea84b0e Binary files /dev/null and b/assets/gacha/4_star.png differ diff --git a/assets/gacha/5_background.png b/assets/gacha/5_background.png new file mode 100644 index 0000000..2af1598 Binary files /dev/null and b/assets/gacha/5_background.png differ diff --git a/assets/gacha/5_star.png b/assets/gacha/5_star.png new file mode 100644 index 0000000..b4ee48a Binary files /dev/null and b/assets/gacha/5_star.png differ diff --git a/assets/gacha/background.png b/assets/gacha/background.png new file mode 100644 index 0000000..2020bd3 Binary files /dev/null and b/assets/gacha/background.png differ diff --git a/assets/gacha/type.json b/assets/gacha/type.json new file mode 100644 index 0000000..df73b38 --- /dev/null +++ b/assets/gacha/type.json @@ -0,0 +1,110 @@ +{ + "阿莫斯之弓": "弓", + "弹弓": "弓", + "笛剑": "单手剑", + "飞天御剑": "单手剑", + "翡玉法球": "法器", + "风鹰剑": "单手剑", + "弓藏": "弓", + "和璞鸢": "枪", + "黑缨枪": "枪", + "祭礼残章": "法器", + "祭礼大剑": "双手剑", + "祭礼弓": "弓", + "祭礼剑": "单手剑", + "绝弦": "弓", + "狼的末路": "双手剑", + "冷刃": "单手剑", + "黎明神剑": "单手剑", + "流浪乐章": "法器", + "魔导绪论": "法器", + "沐浴龙血的剑": "双手剑", + "神射手之誓": "弓", + "四风原典": "法器", + "讨龙英杰谭": "法器", + "天空之傲": "双手剑", + "天空之脊": "枪", + "天空之卷": "法器", + "天空之刃": "单手剑", + "天空之翼": "弓", + "铁影阔剑": "双手剑", + "西风大剑": "双手剑", + "西风剑": "单手剑", + "西风猎弓": "弓", + "西风秘典": "法器", + "西风长枪": "枪", + "匣里龙吟": "单手剑", + "匣里灭辰": "枪", + "鸦羽弓": "弓", + "以理服人": "双手剑", + "雨裁": "双手剑", + "昭心": "法器", + "钟剑": "双手剑", + "雾切之回光": "单手剑", + "飞雷之弦振": "弓", + "无工之剑": "双手剑", + "薙草之稻光": "枪", + "不灭月华": "法器", + "磐岩结绿": "单手剑", + "香菱": "火", + "重云": "冰", + "迪奥娜": "冰", + "罗莎莉亚": "冰", + "班尼特": "火", + "诺艾尔": "岩", + "七七": "冰", + "丽莎": "雷", + "凯亚": "冰", + "北斗": "雷", + "安柏": "火", + "烟绯": "火", + "琴": "风", + "砂糖": "风", + "神里绫华": "冰", + "芭芭拉": "水", + "莫娜": "水", + "菲谢尔": "雷", + "辛焱": "火", + "迪卢克": "火", + "雷泽": "雷", + "刻晴": "雷", + "行秋": "水", + "凝光": "岩", + "宵宫": "火", + "早柚": "风", + "雷电将军": "雷", + "九条裟罗": "雷", + "珊瑚宫心海": "水", + "埃洛伊": "冰", + "托马": "火", + "胡桃": "火", + "达达利亚": "水", + "冬极白星": "弓", + "恶王丸": "双手剑", + "断浪长鳍": "枪", + "曚云之月": "弓", + "尘世之锁": "法器", + "护摩之杖": "枪", + "终末嗟叹之诗": "弓", + "优菈": "冰", + "阿贝多": "岩", + "五郎": "岩", + "荒泷一斗": "岩", + "辰砂之纺锤": "单手剑", + "赤角石溃杵": "双手剑", + "苍古自由之誓": "单手剑", + "松籁响起之时": "双手剑", + "暗巷的酒与诗": "法器", + "暗巷猎手": "弓", + "暗巷闪光": "单手剑", + "幽夜华尔兹": "弓", + "千岩长枪": "枪", + "息灾": "枪", + "申鹤": "冰", + "云堇": "岩", + "魈": "风", + "贯虹之槊": "枪", + "千岩古剑": "双手剑", + "钟离": "岩", + "甘雨": "冰" +} \ No newline at end of file diff --git a/assets/gacha/元素/冰.png b/assets/gacha/元素/冰.png new file mode 100644 index 0000000..b958e0a Binary files /dev/null and b/assets/gacha/元素/冰.png differ diff --git a/assets/gacha/元素/岩.png b/assets/gacha/元素/岩.png new file mode 100644 index 0000000..4327bf5 Binary files /dev/null and b/assets/gacha/元素/岩.png differ diff --git a/assets/gacha/元素/水.png b/assets/gacha/元素/水.png new file mode 100644 index 0000000..ec186aa Binary files /dev/null and b/assets/gacha/元素/水.png differ diff --git a/assets/gacha/元素/火.png b/assets/gacha/元素/火.png new file mode 100644 index 0000000..3a22021 Binary files /dev/null and b/assets/gacha/元素/火.png differ diff --git a/assets/gacha/元素/草.png b/assets/gacha/元素/草.png new file mode 100644 index 0000000..18f718c Binary files /dev/null and b/assets/gacha/元素/草.png differ diff --git a/assets/gacha/元素/雷.png b/assets/gacha/元素/雷.png new file mode 100644 index 0000000..5681cff Binary files /dev/null and b/assets/gacha/元素/雷.png differ diff --git a/assets/gacha/元素/风.png b/assets/gacha/元素/风.png new file mode 100644 index 0000000..d4fc77d Binary files /dev/null and b/assets/gacha/元素/风.png differ diff --git a/assets/gacha/武器/不灭月华.png b/assets/gacha/武器/不灭月华.png new file mode 100644 index 0000000..047c388 Binary files /dev/null and b/assets/gacha/武器/不灭月华.png differ diff --git a/assets/gacha/武器/以理服人.png b/assets/gacha/武器/以理服人.png new file mode 100644 index 0000000..25ede54 Binary files /dev/null and b/assets/gacha/武器/以理服人.png differ diff --git a/assets/gacha/武器/冬极白星.png b/assets/gacha/武器/冬极白星.png new file mode 100644 index 0000000..ba318b9 Binary files /dev/null and b/assets/gacha/武器/冬极白星.png differ diff --git a/assets/gacha/武器/冷刃.png b/assets/gacha/武器/冷刃.png new file mode 100644 index 0000000..98b67d8 Binary files /dev/null and b/assets/gacha/武器/冷刃.png differ diff --git a/assets/gacha/武器/匣里灭辰.png b/assets/gacha/武器/匣里灭辰.png new file mode 100644 index 0000000..22038bb Binary files /dev/null and b/assets/gacha/武器/匣里灭辰.png differ diff --git a/assets/gacha/武器/匣里龙吟.png b/assets/gacha/武器/匣里龙吟.png new file mode 100644 index 0000000..c42c7ab Binary files /dev/null and b/assets/gacha/武器/匣里龙吟.png differ diff --git a/assets/gacha/武器/千岩古剑.png b/assets/gacha/武器/千岩古剑.png new file mode 100644 index 0000000..fe22f2c Binary files /dev/null and b/assets/gacha/武器/千岩古剑.png differ diff --git a/assets/gacha/武器/千岩长枪.png b/assets/gacha/武器/千岩长枪.png new file mode 100644 index 0000000..4cef894 Binary files /dev/null and b/assets/gacha/武器/千岩长枪.png differ diff --git a/assets/gacha/武器/和璞鸢.png b/assets/gacha/武器/和璞鸢.png new file mode 100644 index 0000000..f076f16 Binary files /dev/null and b/assets/gacha/武器/和璞鸢.png differ diff --git a/assets/gacha/武器/四风原典.png b/assets/gacha/武器/四风原典.png new file mode 100644 index 0000000..aca1b69 Binary files /dev/null and b/assets/gacha/武器/四风原典.png differ diff --git a/assets/gacha/武器/天空之傲.png b/assets/gacha/武器/天空之傲.png new file mode 100644 index 0000000..e803bb3 Binary files /dev/null and b/assets/gacha/武器/天空之傲.png differ diff --git a/assets/gacha/武器/天空之刃.png b/assets/gacha/武器/天空之刃.png new file mode 100644 index 0000000..6dcadc8 Binary files /dev/null and b/assets/gacha/武器/天空之刃.png differ diff --git a/assets/gacha/武器/天空之卷.png b/assets/gacha/武器/天空之卷.png new file mode 100644 index 0000000..5f2782e Binary files /dev/null and b/assets/gacha/武器/天空之卷.png differ diff --git a/assets/gacha/武器/天空之翼.png b/assets/gacha/武器/天空之翼.png new file mode 100644 index 0000000..7c05afe Binary files /dev/null and b/assets/gacha/武器/天空之翼.png differ diff --git a/assets/gacha/武器/天空之脊.png b/assets/gacha/武器/天空之脊.png new file mode 100644 index 0000000..8040768 Binary files /dev/null and b/assets/gacha/武器/天空之脊.png differ diff --git a/assets/gacha/武器/尘世之锁.png b/assets/gacha/武器/尘世之锁.png new file mode 100644 index 0000000..2593aa8 Binary files /dev/null and b/assets/gacha/武器/尘世之锁.png differ diff --git a/assets/gacha/武器/幽夜华尔兹.png b/assets/gacha/武器/幽夜华尔兹.png new file mode 100644 index 0000000..b950870 Binary files /dev/null and b/assets/gacha/武器/幽夜华尔兹.png differ diff --git a/assets/gacha/武器/弓藏.png b/assets/gacha/武器/弓藏.png new file mode 100644 index 0000000..624f5ba Binary files /dev/null and b/assets/gacha/武器/弓藏.png differ diff --git a/assets/gacha/武器/弹弓.png b/assets/gacha/武器/弹弓.png new file mode 100644 index 0000000..d96f183 Binary files /dev/null and b/assets/gacha/武器/弹弓.png differ diff --git a/assets/gacha/武器/息灾.png b/assets/gacha/武器/息灾.png new file mode 100644 index 0000000..b283903 Binary files /dev/null and b/assets/gacha/武器/息灾.png differ diff --git a/assets/gacha/武器/恶王丸.png b/assets/gacha/武器/恶王丸.png new file mode 100644 index 0000000..2e1781d Binary files /dev/null and b/assets/gacha/武器/恶王丸.png differ diff --git a/assets/gacha/武器/护摩之杖.png b/assets/gacha/武器/护摩之杖.png new file mode 100644 index 0000000..e98837e Binary files /dev/null and b/assets/gacha/武器/护摩之杖.png differ diff --git a/assets/gacha/武器/断浪长鳍.png b/assets/gacha/武器/断浪长鳍.png new file mode 100644 index 0000000..d56b04a Binary files /dev/null and b/assets/gacha/武器/断浪长鳍.png differ diff --git a/assets/gacha/武器/无工之剑.png b/assets/gacha/武器/无工之剑.png new file mode 100644 index 0000000..0eaa385 Binary files /dev/null and b/assets/gacha/武器/无工之剑.png differ diff --git a/assets/gacha/武器/昭心.png b/assets/gacha/武器/昭心.png new file mode 100644 index 0000000..5357d52 Binary files /dev/null and b/assets/gacha/武器/昭心.png differ diff --git a/assets/gacha/武器/暗巷猎手.png b/assets/gacha/武器/暗巷猎手.png new file mode 100644 index 0000000..cb2f6f4 Binary files /dev/null and b/assets/gacha/武器/暗巷猎手.png differ diff --git a/assets/gacha/武器/暗巷的酒与诗.png b/assets/gacha/武器/暗巷的酒与诗.png new file mode 100644 index 0000000..32bd361 Binary files /dev/null and b/assets/gacha/武器/暗巷的酒与诗.png differ diff --git a/assets/gacha/武器/暗巷闪光.png b/assets/gacha/武器/暗巷闪光.png new file mode 100644 index 0000000..a2e97b4 Binary files /dev/null and b/assets/gacha/武器/暗巷闪光.png differ diff --git a/assets/gacha/武器/曚云之月.png b/assets/gacha/武器/曚云之月.png new file mode 100644 index 0000000..05db99f Binary files /dev/null and b/assets/gacha/武器/曚云之月.png differ diff --git a/assets/gacha/武器/松籁响起之时.png b/assets/gacha/武器/松籁响起之时.png new file mode 100644 index 0000000..1a5a8b2 Binary files /dev/null and b/assets/gacha/武器/松籁响起之时.png differ diff --git a/assets/gacha/武器/沐浴龙血的剑.png b/assets/gacha/武器/沐浴龙血的剑.png new file mode 100644 index 0000000..ed12210 Binary files /dev/null and b/assets/gacha/武器/沐浴龙血的剑.png differ diff --git a/assets/gacha/武器/流浪乐章.png b/assets/gacha/武器/流浪乐章.png new file mode 100644 index 0000000..f8829cc Binary files /dev/null and b/assets/gacha/武器/流浪乐章.png differ diff --git a/assets/gacha/武器/狼的末路.png b/assets/gacha/武器/狼的末路.png new file mode 100644 index 0000000..8be7ab6 Binary files /dev/null and b/assets/gacha/武器/狼的末路.png differ diff --git a/assets/gacha/武器/磐岩结绿.png b/assets/gacha/武器/磐岩结绿.png new file mode 100644 index 0000000..d28d3e9 Binary files /dev/null and b/assets/gacha/武器/磐岩结绿.png differ diff --git a/assets/gacha/武器/神射手之誓.png b/assets/gacha/武器/神射手之誓.png new file mode 100644 index 0000000..e892f36 Binary files /dev/null and b/assets/gacha/武器/神射手之誓.png differ diff --git a/assets/gacha/武器/祭礼剑.png b/assets/gacha/武器/祭礼剑.png new file mode 100644 index 0000000..5ed6d1c Binary files /dev/null and b/assets/gacha/武器/祭礼剑.png differ diff --git a/assets/gacha/武器/祭礼大剑.png b/assets/gacha/武器/祭礼大剑.png new file mode 100644 index 0000000..d23488d Binary files /dev/null and b/assets/gacha/武器/祭礼大剑.png differ diff --git a/assets/gacha/武器/祭礼弓.png b/assets/gacha/武器/祭礼弓.png new file mode 100644 index 0000000..b28fd38 Binary files /dev/null and b/assets/gacha/武器/祭礼弓.png differ diff --git a/assets/gacha/武器/祭礼残章.png b/assets/gacha/武器/祭礼残章.png new file mode 100644 index 0000000..7cf352d Binary files /dev/null and b/assets/gacha/武器/祭礼残章.png differ diff --git a/assets/gacha/武器/笛剑.png b/assets/gacha/武器/笛剑.png new file mode 100644 index 0000000..fd35844 Binary files /dev/null and b/assets/gacha/武器/笛剑.png differ diff --git a/assets/gacha/武器/终末嗟叹之诗.png b/assets/gacha/武器/终末嗟叹之诗.png new file mode 100644 index 0000000..659fbba Binary files /dev/null and b/assets/gacha/武器/终末嗟叹之诗.png differ diff --git a/assets/gacha/武器/绝弦.png b/assets/gacha/武器/绝弦.png new file mode 100644 index 0000000..8d0f85c Binary files /dev/null and b/assets/gacha/武器/绝弦.png differ diff --git a/assets/gacha/武器/翡玉法球.png b/assets/gacha/武器/翡玉法球.png new file mode 100644 index 0000000..ef77237 Binary files /dev/null and b/assets/gacha/武器/翡玉法球.png differ diff --git a/assets/gacha/武器/苍古自由之誓.png b/assets/gacha/武器/苍古自由之誓.png new file mode 100644 index 0000000..d9a1463 Binary files /dev/null and b/assets/gacha/武器/苍古自由之誓.png differ diff --git a/assets/gacha/武器/薙草之稻光.png b/assets/gacha/武器/薙草之稻光.png new file mode 100644 index 0000000..1a09e45 Binary files /dev/null and b/assets/gacha/武器/薙草之稻光.png differ diff --git a/assets/gacha/武器/西风剑.png b/assets/gacha/武器/西风剑.png new file mode 100644 index 0000000..e820e99 Binary files /dev/null and b/assets/gacha/武器/西风剑.png differ diff --git a/assets/gacha/武器/西风大剑.png b/assets/gacha/武器/西风大剑.png new file mode 100644 index 0000000..25502e4 Binary files /dev/null and b/assets/gacha/武器/西风大剑.png differ diff --git a/assets/gacha/武器/西风猎弓.png b/assets/gacha/武器/西风猎弓.png new file mode 100644 index 0000000..4d2ed96 Binary files /dev/null and b/assets/gacha/武器/西风猎弓.png differ diff --git a/assets/gacha/武器/西风秘典.png b/assets/gacha/武器/西风秘典.png new file mode 100644 index 0000000..f304002 Binary files /dev/null and b/assets/gacha/武器/西风秘典.png differ diff --git a/assets/gacha/武器/西风长枪.png b/assets/gacha/武器/西风长枪.png new file mode 100644 index 0000000..9a4286c Binary files /dev/null and b/assets/gacha/武器/西风长枪.png differ diff --git a/assets/gacha/武器/讨龙英杰谭.png b/assets/gacha/武器/讨龙英杰谭.png new file mode 100644 index 0000000..4e265fb Binary files /dev/null and b/assets/gacha/武器/讨龙英杰谭.png differ diff --git a/assets/gacha/武器/贯虹之槊.png b/assets/gacha/武器/贯虹之槊.png new file mode 100644 index 0000000..75b9231 Binary files /dev/null and b/assets/gacha/武器/贯虹之槊.png differ diff --git a/assets/gacha/武器/赤角石溃杵.png b/assets/gacha/武器/赤角石溃杵.png new file mode 100644 index 0000000..9ff6180 Binary files /dev/null and b/assets/gacha/武器/赤角石溃杵.png differ diff --git a/assets/gacha/武器/辰砂之纺锤.png b/assets/gacha/武器/辰砂之纺锤.png new file mode 100644 index 0000000..fd48690 Binary files /dev/null and b/assets/gacha/武器/辰砂之纺锤.png differ diff --git a/assets/gacha/武器/钟剑.png b/assets/gacha/武器/钟剑.png new file mode 100644 index 0000000..4b76bfc Binary files /dev/null and b/assets/gacha/武器/钟剑.png differ diff --git a/assets/gacha/武器/铁影阔剑.png b/assets/gacha/武器/铁影阔剑.png new file mode 100644 index 0000000..3031f80 Binary files /dev/null and b/assets/gacha/武器/铁影阔剑.png differ diff --git a/assets/gacha/武器/阿莫斯之弓.png b/assets/gacha/武器/阿莫斯之弓.png new file mode 100644 index 0000000..560bdd5 Binary files /dev/null and b/assets/gacha/武器/阿莫斯之弓.png differ diff --git a/assets/gacha/武器/雨裁.png b/assets/gacha/武器/雨裁.png new file mode 100644 index 0000000..b3ccc4e Binary files /dev/null and b/assets/gacha/武器/雨裁.png differ diff --git a/assets/gacha/武器/雾切之回光.png b/assets/gacha/武器/雾切之回光.png new file mode 100644 index 0000000..2609b1e Binary files /dev/null and b/assets/gacha/武器/雾切之回光.png differ diff --git a/assets/gacha/武器/风鹰剑.png b/assets/gacha/武器/风鹰剑.png new file mode 100644 index 0000000..3f4adec Binary files /dev/null and b/assets/gacha/武器/风鹰剑.png differ diff --git a/assets/gacha/武器/飞天御剑.png b/assets/gacha/武器/飞天御剑.png new file mode 100644 index 0000000..7b3a6bc Binary files /dev/null and b/assets/gacha/武器/飞天御剑.png differ diff --git a/assets/gacha/武器/飞雷之弦振.png b/assets/gacha/武器/飞雷之弦振.png new file mode 100644 index 0000000..caba4a4 Binary files /dev/null and b/assets/gacha/武器/飞雷之弦振.png differ diff --git a/assets/gacha/武器/魔导绪论.png b/assets/gacha/武器/魔导绪论.png new file mode 100644 index 0000000..4d28eb8 Binary files /dev/null and b/assets/gacha/武器/魔导绪论.png differ diff --git a/assets/gacha/武器/鸦羽弓.png b/assets/gacha/武器/鸦羽弓.png new file mode 100644 index 0000000..f0c8533 Binary files /dev/null and b/assets/gacha/武器/鸦羽弓.png differ diff --git a/assets/gacha/武器/黎明神剑.png b/assets/gacha/武器/黎明神剑.png new file mode 100644 index 0000000..93d4555 Binary files /dev/null and b/assets/gacha/武器/黎明神剑.png differ diff --git a/assets/gacha/武器/黑缨枪.png b/assets/gacha/武器/黑缨枪.png new file mode 100644 index 0000000..f4237e3 Binary files /dev/null and b/assets/gacha/武器/黑缨枪.png differ diff --git a/assets/gacha/类型/单手剑.png b/assets/gacha/类型/单手剑.png new file mode 100644 index 0000000..4c157a2 Binary files /dev/null and b/assets/gacha/类型/单手剑.png differ diff --git a/assets/gacha/类型/双手剑.png b/assets/gacha/类型/双手剑.png new file mode 100644 index 0000000..af80a2e Binary files /dev/null and b/assets/gacha/类型/双手剑.png differ diff --git a/assets/gacha/类型/弓.png b/assets/gacha/类型/弓.png new file mode 100644 index 0000000..547db77 Binary files /dev/null and b/assets/gacha/类型/弓.png differ diff --git a/assets/gacha/类型/枪.png b/assets/gacha/类型/枪.png new file mode 100644 index 0000000..6525d2b Binary files /dev/null and b/assets/gacha/类型/枪.png differ diff --git a/assets/gacha/类型/法器.png b/assets/gacha/类型/法器.png new file mode 100644 index 0000000..a1ea711 Binary files /dev/null and b/assets/gacha/类型/法器.png differ diff --git a/assets/gacha/角色/七七.png b/assets/gacha/角色/七七.png new file mode 100644 index 0000000..f40e8b7 Binary files /dev/null and b/assets/gacha/角色/七七.png differ diff --git a/assets/gacha/角色/丽莎.png b/assets/gacha/角色/丽莎.png new file mode 100644 index 0000000..e63387f Binary files /dev/null and b/assets/gacha/角色/丽莎.png differ diff --git a/assets/gacha/角色/九条裟罗.png b/assets/gacha/角色/九条裟罗.png new file mode 100644 index 0000000..61c1e52 Binary files /dev/null and b/assets/gacha/角色/九条裟罗.png differ diff --git a/assets/gacha/角色/云堇.png b/assets/gacha/角色/云堇.png new file mode 100644 index 0000000..dc5af5e Binary files /dev/null and b/assets/gacha/角色/云堇.png differ diff --git a/assets/gacha/角色/五郎.png b/assets/gacha/角色/五郎.png new file mode 100644 index 0000000..608b763 Binary files /dev/null and b/assets/gacha/角色/五郎.png differ diff --git a/assets/gacha/角色/优菈.png b/assets/gacha/角色/优菈.png new file mode 100644 index 0000000..378869d Binary files /dev/null and b/assets/gacha/角色/优菈.png differ diff --git a/assets/gacha/角色/凝光.png b/assets/gacha/角色/凝光.png new file mode 100644 index 0000000..75d71cd Binary files /dev/null and b/assets/gacha/角色/凝光.png differ diff --git a/assets/gacha/角色/凯亚.png b/assets/gacha/角色/凯亚.png new file mode 100644 index 0000000..30c7f57 Binary files /dev/null and b/assets/gacha/角色/凯亚.png differ diff --git a/assets/gacha/角色/刻晴.png b/assets/gacha/角色/刻晴.png new file mode 100644 index 0000000..d163226 Binary files /dev/null and b/assets/gacha/角色/刻晴.png differ diff --git a/assets/gacha/角色/北斗.png b/assets/gacha/角色/北斗.png new file mode 100644 index 0000000..a30b853 Binary files /dev/null and b/assets/gacha/角色/北斗.png differ diff --git a/assets/gacha/角色/埃洛伊.png b/assets/gacha/角色/埃洛伊.png new file mode 100644 index 0000000..9c23a2c Binary files /dev/null and b/assets/gacha/角色/埃洛伊.png differ diff --git a/assets/gacha/角色/安柏.png b/assets/gacha/角色/安柏.png new file mode 100644 index 0000000..ce6a00c Binary files /dev/null and b/assets/gacha/角色/安柏.png differ diff --git a/assets/gacha/角色/宵宫.png b/assets/gacha/角色/宵宫.png new file mode 100644 index 0000000..6e82d93 Binary files /dev/null and b/assets/gacha/角色/宵宫.png differ diff --git a/assets/gacha/角色/托马.png b/assets/gacha/角色/托马.png new file mode 100644 index 0000000..821d918 Binary files /dev/null and b/assets/gacha/角色/托马.png differ diff --git a/assets/gacha/角色/早柚.png b/assets/gacha/角色/早柚.png new file mode 100644 index 0000000..a8d4f16 Binary files /dev/null and b/assets/gacha/角色/早柚.png differ diff --git a/assets/gacha/角色/烟绯.png b/assets/gacha/角色/烟绯.png new file mode 100644 index 0000000..f5e64f2 Binary files /dev/null and b/assets/gacha/角色/烟绯.png differ diff --git a/assets/gacha/角色/珊瑚宫心海.png b/assets/gacha/角色/珊瑚宫心海.png new file mode 100644 index 0000000..7b3736c Binary files /dev/null and b/assets/gacha/角色/珊瑚宫心海.png differ diff --git a/assets/gacha/角色/班尼特.png b/assets/gacha/角色/班尼特.png new file mode 100644 index 0000000..e5e640b Binary files /dev/null and b/assets/gacha/角色/班尼特.png differ diff --git a/assets/gacha/角色/琴.png b/assets/gacha/角色/琴.png new file mode 100644 index 0000000..fc75da6 Binary files /dev/null and b/assets/gacha/角色/琴.png differ diff --git a/assets/gacha/角色/甘雨.png b/assets/gacha/角色/甘雨.png new file mode 100644 index 0000000..580ab3b Binary files /dev/null and b/assets/gacha/角色/甘雨.png differ diff --git a/assets/gacha/角色/申鹤.png b/assets/gacha/角色/申鹤.png new file mode 100644 index 0000000..ac1c362 Binary files /dev/null and b/assets/gacha/角色/申鹤.png differ diff --git a/assets/gacha/角色/砂糖.png b/assets/gacha/角色/砂糖.png new file mode 100644 index 0000000..935292b Binary files /dev/null and b/assets/gacha/角色/砂糖.png differ diff --git a/assets/gacha/角色/神里绫华.png b/assets/gacha/角色/神里绫华.png new file mode 100644 index 0000000..0d8a51a Binary files /dev/null and b/assets/gacha/角色/神里绫华.png differ diff --git a/assets/gacha/角色/罗莎莉亚.png b/assets/gacha/角色/罗莎莉亚.png new file mode 100644 index 0000000..184d3a2 Binary files /dev/null and b/assets/gacha/角色/罗莎莉亚.png differ diff --git a/assets/gacha/角色/胡桃.png b/assets/gacha/角色/胡桃.png new file mode 100644 index 0000000..45448a4 Binary files /dev/null and b/assets/gacha/角色/胡桃.png differ diff --git a/assets/gacha/角色/芭芭拉.png b/assets/gacha/角色/芭芭拉.png new file mode 100644 index 0000000..2bc0875 Binary files /dev/null and b/assets/gacha/角色/芭芭拉.png differ diff --git a/assets/gacha/角色/荒泷一斗.png b/assets/gacha/角色/荒泷一斗.png new file mode 100644 index 0000000..125e8bd Binary files /dev/null and b/assets/gacha/角色/荒泷一斗.png differ diff --git a/assets/gacha/角色/莫娜.png b/assets/gacha/角色/莫娜.png new file mode 100644 index 0000000..a5090d7 Binary files /dev/null and b/assets/gacha/角色/莫娜.png differ diff --git a/assets/gacha/角色/菲谢尔.png b/assets/gacha/角色/菲谢尔.png new file mode 100644 index 0000000..9b832e1 Binary files /dev/null and b/assets/gacha/角色/菲谢尔.png differ diff --git a/assets/gacha/角色/行秋.png b/assets/gacha/角色/行秋.png new file mode 100644 index 0000000..1d9446f Binary files /dev/null and b/assets/gacha/角色/行秋.png differ diff --git a/assets/gacha/角色/诺艾尔.png b/assets/gacha/角色/诺艾尔.png new file mode 100644 index 0000000..ab446ac Binary files /dev/null and b/assets/gacha/角色/诺艾尔.png differ diff --git a/assets/gacha/角色/辛焱.png b/assets/gacha/角色/辛焱.png new file mode 100644 index 0000000..18b6487 Binary files /dev/null and b/assets/gacha/角色/辛焱.png differ diff --git a/assets/gacha/角色/达达利亚.png b/assets/gacha/角色/达达利亚.png new file mode 100644 index 0000000..55a9a6a Binary files /dev/null and b/assets/gacha/角色/达达利亚.png differ diff --git a/assets/gacha/角色/迪卢克.png b/assets/gacha/角色/迪卢克.png new file mode 100644 index 0000000..66a4fe8 Binary files /dev/null and b/assets/gacha/角色/迪卢克.png differ diff --git a/assets/gacha/角色/迪奥娜.png b/assets/gacha/角色/迪奥娜.png new file mode 100644 index 0000000..3f726a4 Binary files /dev/null and b/assets/gacha/角色/迪奥娜.png differ diff --git a/assets/gacha/角色/重云.png b/assets/gacha/角色/重云.png new file mode 100644 index 0000000..f31dcde Binary files /dev/null and b/assets/gacha/角色/重云.png differ diff --git a/assets/gacha/角色/钟离.png b/assets/gacha/角色/钟离.png new file mode 100644 index 0000000..2689ce1 Binary files /dev/null and b/assets/gacha/角色/钟离.png differ diff --git a/assets/gacha/角色/阿贝多.png b/assets/gacha/角色/阿贝多.png new file mode 100644 index 0000000..815c558 Binary files /dev/null and b/assets/gacha/角色/阿贝多.png differ diff --git a/assets/gacha/角色/雷泽.png b/assets/gacha/角色/雷泽.png new file mode 100644 index 0000000..05c4b50 Binary files /dev/null and b/assets/gacha/角色/雷泽.png differ diff --git a/assets/gacha/角色/雷电将军.png b/assets/gacha/角色/雷电将军.png new file mode 100644 index 0000000..fb33bdd Binary files /dev/null and b/assets/gacha/角色/雷电将军.png differ diff --git a/assets/gacha/角色/香菱.png b/assets/gacha/角色/香菱.png new file mode 100644 index 0000000..b4c8685 Binary files /dev/null and b/assets/gacha/角色/香菱.png differ diff --git a/assets/gacha/角色/魈.png b/assets/gacha/角色/魈.png new file mode 100644 index 0000000..50d5488 Binary files /dev/null and b/assets/gacha/角色/魈.png differ diff --git a/defs/gacha/gacha_info.py b/defs/gacha/gacha_info.py new file mode 100644 index 0000000..433f8bc --- /dev/null +++ b/defs/gacha/gacha_info.py @@ -0,0 +1,23 @@ +from defs.gacha.utils import Dict +from ci import client + +BASE_URL = 'https://webstatic.mihoyo.com/hk4e/gacha_info/cn_gf01/%s' + + +async def gacha_info_list(): + res = await client.get(BASE_URL % 'gacha/list.json') + json_data = res.json(object_hook=Dict) + + if json_data.retcode != 0: + raise Exception(json_data.message) + + return json_data.data.list + + +async def gacha_info(gacha_id): + res = await client.get(BASE_URL % gacha_id + '/zh-cn.json') + + if res.status_code != 200: + raise Exception("error gacha_id: %s" % gacha_id) + + return res.json(object_hook=Dict) diff --git a/defs/gacha/utils.py b/defs/gacha/utils.py new file mode 100644 index 0000000..c92d91d --- /dev/null +++ b/defs/gacha/utils.py @@ -0,0 +1,60 @@ +import datetime +import functools +import inspect +import json +import os +from sqlitedict import SqliteDict + + +class Dict(dict): + __setattr__ = dict.__setitem__ + __getattr__ = dict.__getitem__ + + +def dict_to_object(dict_obj): + if not isinstance(dict_obj, dict): + return dict_obj + inst = Dict() + for k, v in dict_obj.items(): + inst[k] = dict_to_object(v) + return inst + + +def filter_list(plist, func): + return list(filter(func, plist)) + + +def init_db(db_dir, db_name) -> SqliteDict: + return SqliteDict(os.path.join(db_dir, db_name), + encode=json.dumps, + decode=json.loads, + autocommit=True) + + +def cache(ttl=datetime.timedelta(hours=1), **kwargs): + def wrap(func): + cache_data = {} + + @functools.wraps(func) + async def wrapped(*args, **kw): + nonlocal cache_data + bound = inspect.signature(func).bind(*args, **kw) + bound.apply_defaults() + ins_key = '|'.join(['%s_%s' % (k, v) for k, v in bound.arguments.items()]) + default_data = {"time": None, "value": None} + data = cache_data.get(ins_key, default_data) + + now = datetime.datetime.now() + if not data['time'] or now - data['time'] > ttl: # noqa + try: + data['value'] = await func(*args, **kw) + data['time'] = now # noqa + cache_data[ins_key] = data + except Exception as e: + raise e + + return data['value'] + + return wrapped + + return wrap diff --git a/defs/gacha/wish.py b/defs/gacha/wish.py new file mode 100644 index 0000000..9586c79 --- /dev/null +++ b/defs/gacha/wish.py @@ -0,0 +1,139 @@ +import random +import re +from enum import Enum + +from defs.gacha.utils import dict_to_object +from defs.gacha.wish_user import wish_user + + +class GACHA_TYPE(Enum): + activity = 301 # 限定卡池 + activity2 = 400 # 限定卡池 + weapon = 302 # 武器卡池 + permanent = 200 # 常驻卡池 + + +def gacha_type_by_name(name): + if re.search(r'^[限活][定动]池?$', name, re.I): + return GACHA_TYPE.activity.value + if re.search(r'^[限活][定动]池?2$', name, re.I): + return GACHA_TYPE.activity2.value + if re.search(r'^[武][器]池?$', name, re.I): + return GACHA_TYPE.weapon.value + if re.search(r'^[常普][驻通规]池?$', name, re.I): + return GACHA_TYPE.permanent.value + return 0 + + +def is_character_gacha(gacha_type): + return gacha_type == GACHA_TYPE.activity.value or gacha_type == GACHA_TYPE.activity2.value or gacha_type == GACHA_TYPE.permanent.value + + +def random_int(): + return random.randint(1, 10000) + + +# 抽卡概率来自https://www.bilibili.com/read/cv10468091 +# 角色抽卡概率 +def character_probability(rank, count): + ret = 0 + if rank == 5 and count <= 73: + ret = 60 + elif rank == 5 and count >= 74: + ret = 60 + 600 * (count - 73) + elif rank == 4 and count <= 8: + ret = 510 + elif rank == 4 and count >= 9: + ret = 510 + 5100 * (count - 8) + return ret + + +# 武器抽卡概率 +def weapon_probability(rank, count): + ret = 0 + if rank == 5 and count <= 62: + ret = 70 + elif rank == 5 and count <= 73: + ret = 70 + 700 * (count - 62) + elif rank == 5 and count >= 74: + ret = 7770 + 350 * (count - 73) + elif rank == 4 and count <= 7: + ret = 600 + elif rank == 4 and count == 8: + ret = 6600 + elif rank == 4 and count >= 9: + ret = 6600 + 3000 * (count - 8) + return ret + + +class wish: + user: wish_user + + def __init__(self, uid, gacha_type, gacha_pool): + self.uid = uid + self.gacha_pool = gacha_pool + self.user = wish_user(uid, gacha_type) + self.gacha_type = gacha_type + self.probability_fn = is_character_gacha(gacha_type) and character_probability or weapon_probability + + def get_rank(self): + value = random_int() + index_5 = self.probability_fn(5, self.user.count_5) + index_4 = self.probability_fn(4, self.user.count_4) + index_5 + if value <= index_5: + return 5 + elif value <= index_4: + return 4 + else: + return 3 + + def is_up(self, rank): + if self.gacha_type == GACHA_TYPE.permanent.value: + return False + elif self.gacha_type == GACHA_TYPE.weapon.value: + return random_int() <= 7500 + else: + return random_int() <= 5000 or (rank == 5 and self.user.is_up) + + def once(self): + # 判定星级 + rank = self.get_rank() + # 是否为up + is_up = self.is_up(rank) + + if rank != 5: + # 不是5星则计数器+1 + self.user.inc_count(5) + if rank == 4: + # 如果是4星 则4星计数器重置 + self.user.count_4 = 1 + else: + self.user.inc_count(4) + else: + self.user.count_5 = 1 + self.user.inc_count(4) + if self.gacha_type == GACHA_TYPE.activity.value or self.gacha_type == GACHA_TYPE.activity2.value or self.gacha_type == GACHA_TYPE.weapon.value: + # 如果是限定池或者武器池 + self.user.is_up = not is_up + + res = { + 'rank': rank, + 'is_up': is_up, + 'count_5': self.user.count_5, + 'count_4': self.user.count_4 + } + if rank == 3: + res['data'] = random.choice(self.gacha_pool.r3_prob_list) + else: + if is_up: + res['data'] = random.choice(self.gacha_pool['r%s_up_items' % rank]) + else: + res['data'] = random.choice(self.gacha_pool['r%s_prob_list' % rank]) + + return dict_to_object(res) + + async def ten(self): + res = [] + for i in range(0, 10): + res.append(self.once()) + return res diff --git a/defs/gacha/wish_ui.py b/defs/gacha/wish_ui.py new file mode 100644 index 0000000..cf70d8a --- /dev/null +++ b/defs/gacha/wish_ui.py @@ -0,0 +1,108 @@ +import json +import copy +from os import sep +from pathlib import Path +from PIL import Image, PngImagePlugin +from defs.gacha.utils import filter_list + +assets_dir = f'assets{sep}gacha' + +with open(f'{assets_dir}{sep}type.json', 'r', encoding="utf-8") as fp: + type_json = json.load(fp) + +cache_img = {} +cache_item = {} + + +class wish_ui: + data: list + img: PngImagePlugin.PngImageFile + + def __init__(self, wish_result): + self.data = isinstance(wish_result, list) and wish_result or [wish_result] + self.sort_data() + self.img = wish_ui.get_assets('background.png') + + def sort_data(self): + new = sorted(self.data, key=lambda x: x.rank, reverse=True) + c = filter_list(new, lambda x: x.data.item_type == '角色') + w = filter_list(new, lambda x: x.data.item_type == '武器') + self.data = c + w + + @staticmethod + def get_assets(path) -> PngImagePlugin.PngImageFile: + base_path = assets_dir + + cache = cache_img.get(path) + if cache: + return copy.deepcopy(cache) + else: + cache_img[path] = Image.open(f'{base_path}{sep}{path}') + return wish_ui.get_assets(path) + + @staticmethod + def item_bg(rank): + return wish_ui.get_assets('%s_background.png' % str(rank)).resize((143, 845)) + + @staticmethod + def rank_icon(rank): + return wish_ui.get_assets('%s_star.png' % str(rank)) + + @staticmethod + async def create_item(rank, item_type, name, element): + if cache_item.get(name): + return cache_item[name] + bg = wish_ui.item_bg(rank) + item_img = wish_ui.get_assets(Path(item_type) / (name + '.png')) + rank_img = wish_ui.rank_icon(rank).resize((119, 30)) + + if item_type == '角色': + item_img = item_img.resize((item_img.size[0] + 12, item_img.size[1] + 45)) + item_img.alpha_composite(rank_img, (4, 510)) + + item_type_icon = wish_ui.get_assets(Path('元素') / (element + '.png')).resize((80, 80)) + item_img.alpha_composite(item_type_icon, (18, 420)) + bg.alpha_composite(item_img, (3, 125)) + + else: + bg.alpha_composite(item_img, (3, 240)) + bg.alpha_composite(rank_img, (9, 635)) + + item_type_icon = type_json.get(name) + if item_type_icon: + item_type_icon = wish_ui.get_assets(Path('类型') / (item_type_icon + '.png')).resize((100, 100)) + + bg.alpha_composite(item_type_icon, (18, 530)) + cache_item[name] = bg + return bg + + async def ten(self) -> PngImagePlugin.PngImageFile: + i = 0 + for wish in self.data: + i += 1 + rank = wish.rank + name = wish.data.item_name + item_type = wish.data.item_type + element = wish.data.get('item_attr') or type_json[name] + i_img = await wish_ui.create_item(rank, item_type, name, element) + self.img.alpha_composite(i_img, (105 + (i_img.size[0] * i), 123)) + self.img.thumbnail((1024, 768)) + + img = Image.new("RGB", self.img.size, (255, 255, 255)) + img.paste(self.img, mask=self.img.split()[3]) + return img + + @classmethod + async def ten_to_img(cls, wish_result): # 十连抽 + img = await cls(wish_result).ten() + img.save(f"temp{sep}gacha.png") + return f"temp{sep}gacha.png" + + @classmethod + async def ten_to_img_xn(cls, wish_result_xn): + img = Image.new("RGB", (1024, 575 * len(wish_result_xn)), (255, 255, 255)) + for index, wish_result in enumerate(wish_result_xn): + item_img = await cls(wish_result).ten() + img.paste(item_img, (0, 575 * index)) + img.save(f"temp{sep}gacha.png") + return f"temp{sep}gacha.png" diff --git a/defs/gacha/wish_user.py b/defs/gacha/wish_user.py new file mode 100644 index 0000000..4e2fa20 --- /dev/null +++ b/defs/gacha/wish_user.py @@ -0,0 +1,61 @@ +from defs.gacha.utils import init_db + +DB = init_db("temp", 'gacha.sqlite') + + +class wish_user: + def __init__(self, uid, gacha_type): + self.uid = uid + self.gacha_type = gacha_type + self._get_data() + + @property + def count_5(self) -> int: + return self.get_prob_info().get('count_5', 1) + + @property + def count_4(self) -> int: + return self.get_prob_info().get('count_4', 1) + + @count_5.setter + def count_5(self, count): + self.update_prob_info({'count_5': count}) + + @count_4.setter + def count_4(self, count): + self.update_prob_info({'count_4': count}) + + @property + def is_up(self): + return self.get_prob_info().get('is_up', False) + + @is_up.setter + def is_up(self, up): + self.update_prob_info({'is_up': up}) + + def inc_count(self, rank): + key = 'count_' + str(rank) + inc = self.get_prob_info().get(key, 1) + self.update_prob_info({key: inc + 1}) + + def _get_data(self): + self.data = DB.get('%s_%s' % (self.uid, self.gacha_type), {}) + + def save(self): + DB['%s_%s' % (self.uid, self.gacha_type)] = self.data + + def get_prob_info(self): + self._get_data() + return self.data.get('prob_info', {}) + + def set_prob_info(self, obj): + if self.data.get('prob_info'): + self.data['prob_info'].update(obj) + else: + self.data['prob_info'] = obj + + def update_prob_info(self, obj): + prob_info = self.get_prob_info() + prob_info.update(obj) + self.set_prob_info(prob_info) + self.save() diff --git a/defs/guess_voice.py b/defs/guess_voice.py index d1bc4c0..cdbdd15 100644 --- a/defs/guess_voice.py +++ b/defs/guess_voice.py @@ -8,20 +8,13 @@ from os.path import exists from apscheduler.triggers.date import DateTrigger from pyrogram import Client from pyrogram.types import Message -from sqlitedict import SqliteDict +from defs.gacha.utils import init_db from ci import scheduler, app data_path = os.path.join("assets", "voice") -def init_db(db_dir, db_name) -> SqliteDict: - return SqliteDict(os.path.join(db_dir, db_name), - encode=json.dumps, - decode=json.loads, - autocommit=True) - - def get_chars(data: list) -> list: data_ = [] for i in data: diff --git a/plugins/gacha.py b/plugins/gacha.py new file mode 100644 index 0000000..880c682 --- /dev/null +++ b/plugins/gacha.py @@ -0,0 +1,46 @@ +import traceback +from datetime import timedelta + +from pyrogram import Client +from pyrogram.types import Message +from defs.gacha.utils import filter_list, cache +from defs.gacha.gacha_info import gacha_info_list, gacha_info +from defs.gacha.wish import wish, gacha_type_by_name +from defs.gacha.wish_ui import wish_ui + + +async def gacha_msg(client: Client, message: Message): + try: + gacha_type, gacha_name, gacha_data = await handle_msg(client, message) + except Exception as e: + if str(e).find("不存在此卡池") != -1: + return await message.reply(str(e)) + else: + traceback.print_exc() + return await message.reply("出现错误,请联系管理员") + wish_info = await wish(message.from_user.id, gacha_type, gacha_data).ten() + img = await wish_ui.ten_to_img(wish_info) + await message.reply_photo(img) + + +async def handle_msg(client: Client, message: Message): + msg = message.text.replace("抽卡", "").strip() or '限定' + if msg == '2': + msg = '限定2' + gacha_type = gacha_type_by_name(msg) + if not gacha_type: + raise Exception('不存在此卡池: %s' % msg) + gacha_name, gacha_data = await gacha_pool(gacha_type=gacha_type) + return gacha_type, gacha_name, gacha_data + + +@cache(ttl=timedelta(hours=24)) +async def gacha_pool(gacha_type): + data = await gacha_info_list() + f = lambda x: x.gacha_type == gacha_type + gacha_data = sorted(filter_list(data, f), key=lambda x: x.end_time)[-1] + gacha_id = gacha_data.gacha_id + gacha_name = gacha_data.gacha_name + gacha_type = gacha_data.gacha_type + gacha_data = await gacha_info(gacha_id) + return gacha_name, gacha_data diff --git a/plugins/process.py b/plugins/process.py index 24a16e3..f617fb0 100644 --- a/plugins/process.py +++ b/plugins/process.py @@ -9,6 +9,7 @@ from pyrogram import filters as Filters from ci import me from defs.guess_voice import get_chars from plugins.enemies import enemies_msg +from plugins.gacha import gacha_msg from plugins.guess_voice import guess_voice, process_guess from plugins.mys2 import mys2_msg, mys2_qun_msg from plugins.mihoyo import mihoyo_msg, mihoyo_qun_msg @@ -132,7 +133,7 @@ async def process_group_msg(client: Client, message: Message): await log(client, message, '查询武器资料') return # 副本武器 - if text[-2:] == '武器': + if message.text == "武器": await wq_msg(client, message) await log(client, message, '查询副本武器') # 黄历 @@ -196,6 +197,8 @@ async def process_group_msg(client: Client, message: Message): await mihoyo_qun_msg(client, message) if text.startswith("猜语音"): await guess_voice(client, message) + if text.startswith("抽卡"): + await gacha_msg(client, message) # 处理猜语音游戏 await process_guess(client, message) diff --git a/plugins/start.py b/plugins/start.py index 48f3131..643defe 100644 --- a/plugins/start.py +++ b/plugins/start.py @@ -2,7 +2,7 @@ from ci import admin_id from pyrogram import Client from pyrogram.types import Message, CallbackQuery, InlineKeyboardMarkup, InlineKeyboardButton -HELP_MSG_PRE = 'PaimonBot 0.3.5beta By Xtao-Labs\n\n' \ +HELP_MSG_PRE = 'PaimonBot 0.3.6beta By Xtao-Labs\n\n' \ '🔅 以下是小派蒙我学会了的功能(部分):\n' HELP_MSG = """① [武器/今日武器] 查看今日武器材料和武器 ② [天赋/今日天赋] 查看今日天赋材料和角色 @@ -22,14 +22,18 @@ HELP_MSG = """① [武器/今日武器] 查看今日武器材料和武器 💠 食物查询 甜甜花/甜甜花酿鸡 ⑩ [圣遗物查询 圣遗物套装名] 查看圣遗物套装资料 💠 圣遗物查询 逆飞的流星 +(11) [抽卡] 抽卡 + 💠 抽卡 武器 + 💠 抽卡 常驻 ====== -(11) [原神黄历] 查看随机生成的原神黄历 -(12) [活动列表] 查看今日活动列表和祈愿列表 -(13) [圣遗物评分] 我也想拥有这种分数的圣遗物(切实) -(14) [哪里有 (资源名)] 查看资源的位置 -(15) [资源列表] 查看原神所有资源(私聊) -(16) [原神猜语音] 和群友一起玩猜语音小游戏吧!(群聊) -(17) [米游社/mihoyo] 米游社/mihoyo相关功能(替换) +(12) [原神黄历] 查看随机生成的原神黄历 +(13) [活动列表] 查看今日活动列表和祈愿列表 +(14) [圣遗物评分] 我也想拥有这种分数的圣遗物(切实) +(15) [哪里有 (资源名)] 查看资源的位置 +(16) [资源列表] 查看原神所有资源(私聊) +(17) [猜语音] 和群友一起玩猜语音小游戏吧!(群聊) + 💠 猜语音 无尽模式 +(18) [米游社/mihoyo] 米游社/mihoyo相关功能(替换) 💠 米游社添加(私聊) 💠 米游社推送开启/关闭 💠 米游社自动签到开启/关闭