✨ v0.2.0 支持圣遗物评分、地图资源查询
This commit is contained in:
parent
6c07eae843
commit
b314a6e69b
BIN
assets/icon/0.png
Normal file
BIN
assets/icon/0.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 14 KiB |
BIN
assets/icon/box.png
Normal file
BIN
assets/icon/box.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 9.5 KiB |
BIN
assets/icon/box_alpha.png
Normal file
BIN
assets/icon/box_alpha.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.9 KiB |
39
defs/artifact_rate.py
Normal file
39
defs/artifact_rate.py
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
import requests
|
||||||
|
import json
|
||||||
|
|
||||||
|
ocr_url = "https://api.genshin.pub/api/v1/app/ocr"
|
||||||
|
rate_url = "https://api.genshin.pub/api/v1/relic/rate"
|
||||||
|
head = {
|
||||||
|
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
||||||
|
"Chrome/92.0.4515.131 Safari/537.36 Edg/92.0.902.67 ",
|
||||||
|
"Content-Type": "application/json; charset=UTF-8",
|
||||||
|
"Connection": "close"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async def get_artifact_attr(b64_str):
|
||||||
|
upload_json = json.dumps(
|
||||||
|
{
|
||||||
|
"image": b64_str
|
||||||
|
}
|
||||||
|
)
|
||||||
|
try:
|
||||||
|
req = requests.post(ocr_url, data=upload_json, headers=head, timeout=8)
|
||||||
|
except requests.exceptions.RequestException as e:
|
||||||
|
raise e
|
||||||
|
data = json.loads(req.text)
|
||||||
|
if req.status_code != 200:
|
||||||
|
return {"err": "未知错误", "full": data}
|
||||||
|
return data
|
||||||
|
|
||||||
|
|
||||||
|
async def rate_artifact(artifact_attr: dict):
|
||||||
|
upload_json_str = json.dumps(artifact_attr, ensure_ascii=False).encode('utf-8')
|
||||||
|
try:
|
||||||
|
req = requests.post(rate_url, data=upload_json_str, headers=head, timeout=8)
|
||||||
|
except requests.exceptions.RequestException as e:
|
||||||
|
raise e
|
||||||
|
data = json.loads(req.text)
|
||||||
|
if req.status_code != 200:
|
||||||
|
return {"err": "未知错误", "full": data}
|
||||||
|
return data
|
315
defs/query_resource_points.py
Normal file
315
defs/query_resource_points.py
Normal file
@ -0,0 +1,315 @@
|
|||||||
|
from PIL import Image, ImageMath
|
||||||
|
from io import BytesIO
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
import time
|
||||||
|
import httpx
|
||||||
|
import asyncio
|
||||||
|
|
||||||
|
LABEL_URL = 'https://api-static.mihoyo.com/common/blackboard/ys_obc/v1/map/label/tree?app_sn=ys_obc'
|
||||||
|
POINT_LIST_URL = 'https://api-static.mihoyo.com/common/blackboard/ys_obc/v1/map/point/list?map_id=2&app_sn=ys_obc'
|
||||||
|
MAP_URL = "https://api-static.mihoyo.com/common/map_user/ys_obc/v1/map/info?map_id=2&app_sn=ys_obc&lang=zh-cn"
|
||||||
|
|
||||||
|
header = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'
|
||||||
|
|
||||||
|
FILE_PATH = "assets"
|
||||||
|
|
||||||
|
MAP_PATH = os.path.join(FILE_PATH, "icon", "map_icon.jpg")
|
||||||
|
Image.MAX_IMAGE_PIXELS = None
|
||||||
|
|
||||||
|
CENTER = None
|
||||||
|
MAP_ICON = None
|
||||||
|
|
||||||
|
zoom = 0.5
|
||||||
|
resource_icon_offset = (-int(150 * 0.5 * zoom), -int(150 * zoom))
|
||||||
|
|
||||||
|
data = {
|
||||||
|
"all_resource_type": {
|
||||||
|
# 这个字典保存所有资源类型,
|
||||||
|
# "1": {
|
||||||
|
# "id": 1,
|
||||||
|
# "name": "传送点",
|
||||||
|
# "icon": "",
|
||||||
|
# "parent_id": 0,
|
||||||
|
# "depth": 1,
|
||||||
|
# "node_type": 1,
|
||||||
|
# "jump_type": 0,
|
||||||
|
# "jump_target_id": 0,
|
||||||
|
# "display_priority": 0,
|
||||||
|
# "children": []
|
||||||
|
# },
|
||||||
|
},
|
||||||
|
"can_query_type_list": {
|
||||||
|
# 这个字典保存所有可以查询的资源类型名称和ID,这个字典只有名称和ID
|
||||||
|
# 上边字典里"depth": 2的类型才可以查询,"depth": 1的是1级目录,不能查询
|
||||||
|
# "七天神像":"2"
|
||||||
|
# "风神瞳":"5"
|
||||||
|
|
||||||
|
},
|
||||||
|
"all_resource_point_list": [
|
||||||
|
# 这个列表保存所有资源点的数据
|
||||||
|
# {
|
||||||
|
# "id": 2740,
|
||||||
|
# "label_id": 68,
|
||||||
|
# "x_pos": -1789,
|
||||||
|
# "y_pos": 2628,
|
||||||
|
# "author_name": "✟紫灵心✟",
|
||||||
|
# "ctime": "2020-10-29 10:41:21",
|
||||||
|
# "display_state": 1
|
||||||
|
# },
|
||||||
|
],
|
||||||
|
"date": "" # 记录上次更新"all_resource_point_list"的日期
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async def download_icon(url):
|
||||||
|
# 下载图片,返回Image对象
|
||||||
|
async with httpx.AsyncClient() as client:
|
||||||
|
resp = await client.get(url=url)
|
||||||
|
if resp.status_code != 200:
|
||||||
|
raise ValueError(f"获取图片数据失败,错误代码 {resp.status_code}")
|
||||||
|
icon = resp.content
|
||||||
|
return Image.open(BytesIO(icon))
|
||||||
|
|
||||||
|
|
||||||
|
async def download_json(url):
|
||||||
|
# 获取资源数据,返回 JSON
|
||||||
|
async with httpx.AsyncClient() as client:
|
||||||
|
resp = await client.get(url=url)
|
||||||
|
if resp.status_code != 200:
|
||||||
|
raise ValueError(f"获取资源点数据失败,错误代码 {resp.status_code}")
|
||||||
|
return resp.json()
|
||||||
|
|
||||||
|
|
||||||
|
async def up_icon_image(sublist):
|
||||||
|
# 检查是否有图标,没有图标下载保存到本地
|
||||||
|
id = sublist["id"]
|
||||||
|
icon_path = os.path.join(FILE_PATH, "icon", f"{id}.png")
|
||||||
|
|
||||||
|
if not os.path.exists(icon_path):
|
||||||
|
icon_url = sublist["icon"]
|
||||||
|
icon = await download_icon(icon_url)
|
||||||
|
icon = icon.resize((150, 150))
|
||||||
|
|
||||||
|
box_alpha = Image.open(os.path.join(FILE_PATH, "icon", "box_alpha.png")).getchannel("A")
|
||||||
|
box = Image.open(os.path.join(FILE_PATH, "icon", "box.png"))
|
||||||
|
|
||||||
|
try:
|
||||||
|
icon_alpha = icon.getchannel("A")
|
||||||
|
icon_alpha = ImageMath.eval("convert(a*b/256, 'L')", a=icon_alpha, b=box_alpha)
|
||||||
|
except ValueError:
|
||||||
|
# 米游社的图有时候会没有alpha导致报错,这时候直接使用box_alpha当做alpha就行
|
||||||
|
icon_alpha = box_alpha
|
||||||
|
|
||||||
|
icon2 = Image.new("RGBA", (150, 150), "#00000000")
|
||||||
|
icon2.paste(icon, (0, -10))
|
||||||
|
|
||||||
|
bg = Image.new("RGBA", (150, 150), "#00000000")
|
||||||
|
bg.paste(icon2, mask=icon_alpha)
|
||||||
|
bg.paste(box, mask=box)
|
||||||
|
|
||||||
|
with open(icon_path, "wb") as icon_file:
|
||||||
|
bg.save(icon_file)
|
||||||
|
|
||||||
|
|
||||||
|
async def up_label_and_point_list():
|
||||||
|
# 更新label列表和资源点列表
|
||||||
|
label_data = await download_json(LABEL_URL)
|
||||||
|
for label in label_data["data"]["tree"]:
|
||||||
|
data["all_resource_type"][str(label["id"])] = label
|
||||||
|
for sublist in label["children"]:
|
||||||
|
data["all_resource_type"][str(sublist["id"])] = sublist
|
||||||
|
data["can_query_type_list"][sublist["name"]] = str(sublist["id"])
|
||||||
|
await up_icon_image(sublist)
|
||||||
|
label["children"] = []
|
||||||
|
|
||||||
|
test = await download_json(POINT_LIST_URL)
|
||||||
|
data["all_resource_point_list"] = test["data"]["point_list"]
|
||||||
|
data["date"] = time.strftime("%d")
|
||||||
|
|
||||||
|
|
||||||
|
async def up_map():
|
||||||
|
# 更新地图文件 并按照资源点的范围自动裁切掉不需要的地方
|
||||||
|
# 裁切地图需要最新的资源点位置,所以要先调用 up_label_and_point_list 再更新地图
|
||||||
|
global CENTER
|
||||||
|
global MAP_ICON
|
||||||
|
map_info = await download_json(MAP_URL)
|
||||||
|
map_info = map_info["data"]["info"]["detail"]
|
||||||
|
map_info = json.loads(map_info)
|
||||||
|
|
||||||
|
map_url_list = map_info['slices'][0]
|
||||||
|
origin = map_info["origin"]
|
||||||
|
|
||||||
|
x_start = map_info['total_size'][1]
|
||||||
|
y_start = map_info['total_size'][1]
|
||||||
|
x_end = 0
|
||||||
|
y_end = 0
|
||||||
|
for resource_point in data["all_resource_point_list"]:
|
||||||
|
x_pos = resource_point["x_pos"] + origin[0]
|
||||||
|
y_pos = resource_point["y_pos"] + origin[1]
|
||||||
|
x_start = min(x_start, x_pos)
|
||||||
|
y_start = min(y_start, y_pos)
|
||||||
|
x_end = max(x_end, x_pos)
|
||||||
|
y_end = max(y_end, y_pos)
|
||||||
|
|
||||||
|
x_start -= 200
|
||||||
|
y_start -= 200
|
||||||
|
x_end += 200
|
||||||
|
y_end += 200
|
||||||
|
|
||||||
|
CENTER = [origin[0] - x_start, origin[1] - y_start]
|
||||||
|
x = int(x_end - x_start)
|
||||||
|
y = int(y_end - y_start)
|
||||||
|
MAP_ICON = Image.new("RGB", (x, y))
|
||||||
|
x_offset = 0
|
||||||
|
for i in map_url_list:
|
||||||
|
map_url = i["url"]
|
||||||
|
map_icon = await download_icon(map_url)
|
||||||
|
MAP_ICON.paste(map_icon,
|
||||||
|
(int(-x_start) + x_offset, int(-y_start)))
|
||||||
|
x_offset += map_icon.size[0]
|
||||||
|
|
||||||
|
|
||||||
|
async def init_point_list_and_map():
|
||||||
|
await up_label_and_point_list()
|
||||||
|
await up_map()
|
||||||
|
|
||||||
|
|
||||||
|
class Resource_map(object):
|
||||||
|
|
||||||
|
def __init__(self, resource_name):
|
||||||
|
self.resource_id = str(data["can_query_type_list"][resource_name])
|
||||||
|
|
||||||
|
# self.map_image = Image.open(MAP_PATH)
|
||||||
|
self.map_image = MAP_ICON.copy()
|
||||||
|
self.map_size = self.map_image.size
|
||||||
|
|
||||||
|
# 地图要要裁切的左上角和右下角坐标
|
||||||
|
# 这里初始化为地图的大小
|
||||||
|
self.x_start = self.map_size[0]
|
||||||
|
self.y_start = self.map_size[1]
|
||||||
|
self.x_end = 0
|
||||||
|
self.y_end = 0
|
||||||
|
|
||||||
|
self.resource_icon = Image.open(self.get_icon_path())
|
||||||
|
self.resource_icon = self.resource_icon.resize((int(150 * zoom), int(150 * zoom)))
|
||||||
|
|
||||||
|
self.resource_xy_list = self.get_resource_point_list()
|
||||||
|
|
||||||
|
def get_icon_path(self):
|
||||||
|
# 检查有没有图标,有返回正确图标,没有返回默认图标
|
||||||
|
icon_path = os.path.join(FILE_PATH, "icon", f"{self.resource_id}.png")
|
||||||
|
|
||||||
|
if os.path.exists(icon_path):
|
||||||
|
return icon_path
|
||||||
|
else:
|
||||||
|
return os.path.join(FILE_PATH, "icon", "0.png")
|
||||||
|
|
||||||
|
def get_resource_point_list(self):
|
||||||
|
temp_list = []
|
||||||
|
for resource_point in data["all_resource_point_list"]:
|
||||||
|
if str(resource_point["label_id"]) == self.resource_id:
|
||||||
|
# 获取xy坐标,然后加上中心点的坐标完成坐标转换
|
||||||
|
x = resource_point["x_pos"] + CENTER[0]
|
||||||
|
y = resource_point["y_pos"] + CENTER[1]
|
||||||
|
temp_list.append((int(x), int(y)))
|
||||||
|
return temp_list
|
||||||
|
|
||||||
|
def paste(self):
|
||||||
|
for x, y in self.resource_xy_list:
|
||||||
|
# 把资源图片贴到地图上
|
||||||
|
# 这时地图已经裁切过了,要以裁切后的地图左上角为中心再转换一次坐标
|
||||||
|
x -= self.x_start
|
||||||
|
y -= self.y_start
|
||||||
|
self.map_image.paste(self.resource_icon, (x + resource_icon_offset[0], y + resource_icon_offset[1]),
|
||||||
|
self.resource_icon)
|
||||||
|
|
||||||
|
def crop(self):
|
||||||
|
# 把大地图裁切到只保留资源图标位置
|
||||||
|
for x, y in self.resource_xy_list:
|
||||||
|
# 找出4个方向最远的坐标,用于后边裁切
|
||||||
|
self.x_start = min(x, self.x_start)
|
||||||
|
self.y_start = min(y, self.y_start)
|
||||||
|
self.x_end = max(x, self.x_end)
|
||||||
|
self.y_end = max(y, self.y_end)
|
||||||
|
|
||||||
|
# 先把4个方向扩展150像素防止把资源图标裁掉
|
||||||
|
self.x_start -= 150
|
||||||
|
self.y_start -= 150
|
||||||
|
self.x_end += 150
|
||||||
|
self.y_end += 150
|
||||||
|
|
||||||
|
# 如果图片裁切的太小会看不出资源的位置在哪,检查图片裁切的长和宽看够不够1000,不到1000的按1000裁切
|
||||||
|
if (self.x_end - self.x_start) < 1000:
|
||||||
|
center = int((self.x_end + self.x_start) / 2)
|
||||||
|
self.x_start = center - 500
|
||||||
|
self.x_end = center + 500
|
||||||
|
if (self.y_end - self.y_start) < 1000:
|
||||||
|
center = int((self.y_end + self.y_start) / 2)
|
||||||
|
self.y_start = center - 500
|
||||||
|
self.y_end = center + 500
|
||||||
|
|
||||||
|
self.map_image = self.map_image.crop((self.x_start, self.y_start, self.x_end, self.y_end))
|
||||||
|
|
||||||
|
def gen_jpg(self):
|
||||||
|
|
||||||
|
if not self.resource_xy_list:
|
||||||
|
return "没有这个资源的信息"
|
||||||
|
|
||||||
|
self.crop()
|
||||||
|
|
||||||
|
self.paste()
|
||||||
|
|
||||||
|
self.map_image.save(f'temp{os.sep}map.jpg', format='JPEG')
|
||||||
|
|
||||||
|
def get_resource_count(self):
|
||||||
|
return len(self.resource_xy_list)
|
||||||
|
|
||||||
|
|
||||||
|
async def get_resource_map_mes(name):
|
||||||
|
if data["date"] != time.strftime("%d"):
|
||||||
|
await init_point_list_and_map()
|
||||||
|
|
||||||
|
if not (name in data["can_query_type_list"]):
|
||||||
|
return f"没有 {name} 这种资源。\n发送 资源列表 查看所有资源名称"
|
||||||
|
|
||||||
|
map = Resource_map(name)
|
||||||
|
count = map.get_resource_count()
|
||||||
|
|
||||||
|
if not count:
|
||||||
|
return f"没有找到 {name} 资源的位置,可能米游社wiki还没更新。"
|
||||||
|
|
||||||
|
map.gen_jpg()
|
||||||
|
mes = f"资源 {name} 的位置如图所示"
|
||||||
|
mes += f"\n\n※ {name} 一共找到 {count} 个位置点\n※ 数据来源于米游社wiki"
|
||||||
|
|
||||||
|
return mes
|
||||||
|
|
||||||
|
|
||||||
|
def get_resource_list_mes():
|
||||||
|
temp = {}
|
||||||
|
|
||||||
|
for id in data["all_resource_type"].keys():
|
||||||
|
# 先找1级目录
|
||||||
|
if data["all_resource_type"][id]["depth"] == 1:
|
||||||
|
temp[id] = []
|
||||||
|
|
||||||
|
for id in data["all_resource_type"].keys():
|
||||||
|
# 再找2级目录
|
||||||
|
if data["all_resource_type"][id]["depth"] == 2:
|
||||||
|
temp[str(data["all_resource_type"][id]["parent_id"])].append(id)
|
||||||
|
|
||||||
|
mes = "当前资源列表如下:\n"
|
||||||
|
|
||||||
|
for resource_type_id in temp.keys():
|
||||||
|
|
||||||
|
if resource_type_id in ["1", "12", "50", "51", "95", "131"]:
|
||||||
|
# 在游戏里能查到的数据这里就不列举了,不然消息太长了
|
||||||
|
continue
|
||||||
|
|
||||||
|
mes += f"{data['all_resource_type'][resource_type_id]['name']}:"
|
||||||
|
for resource_id in temp[resource_type_id]:
|
||||||
|
mes += f"{data['all_resource_type'][resource_id]['name']},"
|
||||||
|
mes += "\n"
|
||||||
|
|
||||||
|
return mes
|
13
init.py
Normal file
13
init.py
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
from typing import Coroutine
|
||||||
|
import asyncio
|
||||||
|
from defs.query_resource_points import init_point_list_and_map
|
||||||
|
|
||||||
|
|
||||||
|
def sync(coroutine: Coroutine):
|
||||||
|
loop = asyncio.get_event_loop()
|
||||||
|
return loop.run_until_complete(coroutine)
|
||||||
|
|
||||||
|
|
||||||
|
print("初始化资源点列表和资源点映射...")
|
||||||
|
sync(init_point_list_and_map())
|
||||||
|
print("初始化完成")
|
44
plugins/artifact_rate.py
Normal file
44
plugins/artifact_rate.py
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
import requests
|
||||||
|
from pyrogram import Client
|
||||||
|
from pyrogram.types import Message
|
||||||
|
from defs.artifact_rate import *
|
||||||
|
from base64 import b64encode
|
||||||
|
from os import remove
|
||||||
|
|
||||||
|
|
||||||
|
def get_format_sub_item(artifact_attr):
|
||||||
|
msg = ""
|
||||||
|
for i in artifact_attr["sub_item"]:
|
||||||
|
msg += f'{i["name"]:\u3000<6} | {i["value"]}\n'
|
||||||
|
return msg
|
||||||
|
|
||||||
|
|
||||||
|
async def artifact_rate_msg(client: Client, message: Message):
|
||||||
|
if not message.photo:
|
||||||
|
return await message.reply("图呢?\n*请命令将与截图一起发送", quote=True)
|
||||||
|
msg = await message.reply("正在下载图片。。。", quote=True)
|
||||||
|
path = await message.download()
|
||||||
|
with open(path, "rb") as f:
|
||||||
|
image_b64 = b64encode(f.read()).decode()
|
||||||
|
remove(path)
|
||||||
|
try:
|
||||||
|
artifact_attr = await get_artifact_attr(image_b64)
|
||||||
|
except (requests.exceptions.ConnectionError, requests.exceptions.ReadTimeout):
|
||||||
|
return await msg.edit("连接超时")
|
||||||
|
if 'err' in artifact_attr.keys():
|
||||||
|
err_msg = artifact_attr["full"]["message"]
|
||||||
|
return await msg.edit(f"发生了点小错误:\n{err_msg}")
|
||||||
|
await msg.edit("识图成功!\n正在评分中...")
|
||||||
|
rate_result = await rate_artifact(artifact_attr)
|
||||||
|
if 'err' in rate_result.keys():
|
||||||
|
err_msg = rate_result["full"]["message"]
|
||||||
|
return await msg.edit(f"发生了点小错误:\n{err_msg}")
|
||||||
|
format_result = f'圣遗物评分结果:\n' \
|
||||||
|
f'主属性:{artifact_attr["main_item"]["name"]}\n' \
|
||||||
|
f'{get_format_sub_item(artifact_attr)}'\
|
||||||
|
f'`------------------------------`\n' \
|
||||||
|
f'总分:{rate_result["total_percent"]}\n'\
|
||||||
|
f'主词条:{rate_result["main_percent"]}\n' \
|
||||||
|
f'副词条:{rate_result["sub_percent"]}\n' \
|
||||||
|
f'评分、识图均来自 genshin.pub'
|
||||||
|
await msg.edit(format_result)
|
@ -7,6 +7,8 @@ from plugins.challenge import tf_msg, wq_msg, zb_msg
|
|||||||
from plugins.character import character_msg, mz_msg
|
from plugins.character import character_msg, mz_msg
|
||||||
from plugins.weapons import weapon_msg
|
from plugins.weapons import weapon_msg
|
||||||
from plugins.fortunate import fortunate_msg, set_fortunate_img
|
from plugins.fortunate import fortunate_msg, set_fortunate_img
|
||||||
|
from plugins.artifact_rate import artifact_rate_msg
|
||||||
|
from plugins.query_resource_points import inquire_resource_points, inquire_resource_list
|
||||||
from plugins.mys import mys_msg, promote_command
|
from plugins.mys import mys_msg, promote_command
|
||||||
from defs.log import log
|
from defs.log import log
|
||||||
|
|
||||||
@ -35,12 +37,12 @@ async def process_private_msg(client: Client, message: Message):
|
|||||||
# 天赋
|
# 天赋
|
||||||
if '天赋' in message.text:
|
if '天赋' in message.text:
|
||||||
await tf_msg(client, message)
|
await tf_msg(client, message)
|
||||||
await log(client, message, '查询角色天赋')
|
await log(client, message, '查询天赋副本')
|
||||||
# 武器查询
|
# # 武器查询
|
||||||
if '武器资料' in message.text or '武器查询' in message.text:
|
# if '武器资料' in message.text or '武器查询' in message.text:
|
||||||
await weapon_msg(client, message)
|
# await weapon_msg(client, message)
|
||||||
await log(client, message, '查询武器资料')
|
# await log(client, message, '查询武器资料')
|
||||||
return
|
# return
|
||||||
# 副本武器
|
# 副本武器
|
||||||
if '武器' in message.text:
|
if '武器' in message.text:
|
||||||
await wq_msg(client, message)
|
await wq_msg(client, message)
|
||||||
@ -49,14 +51,14 @@ async def process_private_msg(client: Client, message: Message):
|
|||||||
if message.text == '周本':
|
if message.text == '周本':
|
||||||
await zb_msg(client, message)
|
await zb_msg(client, message)
|
||||||
await log(client, message, '查询周本')
|
await log(client, message, '查询周本')
|
||||||
# 角色查询
|
# # 角色查询
|
||||||
if '角色资料' in message.text or '角色简介' in message.text or '角色查询' in message.text:
|
# if '角色资料' in message.text or '角色简介' in message.text or '角色查询' in message.text:
|
||||||
await character_msg(client, message)
|
# await character_msg(client, message)
|
||||||
await log(client, message, '查询角色资料')
|
# await log(client, message, '查询角色资料')
|
||||||
# 命座查询
|
# # 命座查询
|
||||||
if '命座' in message.text:
|
# if '命座' in message.text:
|
||||||
await mz_msg(client, message)
|
# await mz_msg(client, message)
|
||||||
await log(client, message, '查询角色命座')
|
# await log(client, message, '查询角色命座')
|
||||||
# 设置运势
|
# 设置运势
|
||||||
if '设置运势' in message.text:
|
if '设置运势' in message.text:
|
||||||
await set_fortunate_img(client, message)
|
await set_fortunate_img(client, message)
|
||||||
@ -66,6 +68,17 @@ async def process_private_msg(client: Client, message: Message):
|
|||||||
if '运势' in message.text:
|
if '运势' in message.text:
|
||||||
await fortunate_msg(client, message)
|
await fortunate_msg(client, message)
|
||||||
await log(client, message, '查询今日运势')
|
await log(client, message, '查询今日运势')
|
||||||
|
# 圣遗物评分
|
||||||
|
if '圣遗物评分' in message.text:
|
||||||
|
await message.reply("图呢?\n*请将命令与截图一起发送", quote=True)
|
||||||
|
# 资源查询
|
||||||
|
if '哪里有' in message.text:
|
||||||
|
await inquire_resource_points(client, message)
|
||||||
|
await log(client, message, '查询地图资源')
|
||||||
|
# 资源列表
|
||||||
|
if '资源列表' in message.text:
|
||||||
|
await inquire_resource_list(client, message)
|
||||||
|
await log(client, message, '查询资源列表')
|
||||||
# 账号信息(cookie 过期过快 不推荐启用)
|
# 账号信息(cookie 过期过快 不推荐启用)
|
||||||
# if '账号信息' in message.text or '用户信息' in message.text:
|
# if '账号信息' in message.text or '用户信息' in message.text:
|
||||||
# await mys_msg(client, message)
|
# await mys_msg(client, message)
|
||||||
@ -78,11 +91,11 @@ async def process_group_msg(client: Client, message: Message):
|
|||||||
# 帮助消息
|
# 帮助消息
|
||||||
if msg_list[0] == '/help':
|
if msg_list[0] == '/help':
|
||||||
await help_command(client, message)
|
await help_command(client, message)
|
||||||
# 武器查询
|
# # 武器查询
|
||||||
if text.startswith('武器查询') or text.startswith('武器资料'):
|
# if text.startswith('武器查询') or text.startswith('武器资料'):
|
||||||
await weapon_msg(client, message)
|
# await weapon_msg(client, message)
|
||||||
await log(client, message, '查询武器资料')
|
# await log(client, message, '查询武器资料')
|
||||||
return
|
# return
|
||||||
# 副本武器
|
# 副本武器
|
||||||
if text[-2:] == '武器':
|
if text[-2:] == '武器':
|
||||||
await wq_msg(client, message)
|
await wq_msg(client, message)
|
||||||
@ -94,19 +107,19 @@ async def process_group_msg(client: Client, message: Message):
|
|||||||
# 天赋
|
# 天赋
|
||||||
if text[-2:] == '天赋':
|
if text[-2:] == '天赋':
|
||||||
await tf_msg(client, message)
|
await tf_msg(client, message)
|
||||||
await log(client, message, '查询角色天赋')
|
await log(client, message, '查询天赋副本')
|
||||||
# 周本
|
# 周本
|
||||||
if message.text == '周本':
|
if message.text == '周本':
|
||||||
await zb_msg(client, message)
|
await zb_msg(client, message)
|
||||||
await log(client, message, '查询周本')
|
await log(client, message, '查询周本')
|
||||||
# 角色查询
|
# # 角色查询
|
||||||
if text.startswith('角色资料') or text.startswith('角色简介') or text.startswith('角色查询'):
|
# if text.startswith('角色资料') or text.startswith('角色简介') or text.startswith('角色查询'):
|
||||||
await character_msg(client, message)
|
# await character_msg(client, message)
|
||||||
await log(client, message, '查询角色资料')
|
# await log(client, message, '查询角色资料')
|
||||||
# 命座查询
|
# # 命座查询
|
||||||
if text.startswith('命座'):
|
# if text.startswith('命座'):
|
||||||
await mz_msg(client, message)
|
# await mz_msg(client, message)
|
||||||
await log(client, message, '查询角色命座')
|
# await log(client, message, '查询角色命座')
|
||||||
# 运势查询
|
# 运势查询
|
||||||
if text.startswith('运势') or text.startswith('今日运势'):
|
if text.startswith('运势') or text.startswith('今日运势'):
|
||||||
await fortunate_msg(client, message)
|
await fortunate_msg(client, message)
|
||||||
@ -115,6 +128,26 @@ async def process_group_msg(client: Client, message: Message):
|
|||||||
if text.startswith('设置运势'):
|
if text.startswith('设置运势'):
|
||||||
await set_fortunate_img(client, message)
|
await set_fortunate_img(client, message)
|
||||||
await log(client, message, '设置运势角色')
|
await log(client, message, '设置运势角色')
|
||||||
|
# 圣遗物评分
|
||||||
|
if text.startswith('圣遗物评分'):
|
||||||
|
await message.reply("图呢?\n*请将命令与截图一起发送")
|
||||||
|
# 资源查询
|
||||||
|
if text.startswith('哪里有') or text.endswith('哪里有'):
|
||||||
|
await inquire_resource_points(client, message)
|
||||||
|
await log(client, message, '查询地图资源')
|
||||||
|
# 资源列表
|
||||||
|
if text.startswith('资源列表'):
|
||||||
|
await inquire_resource_list(client, message)
|
||||||
|
await log(client, message, '查询资源列表')
|
||||||
|
|
||||||
|
|
||||||
|
@Client.on_message(Filters.photo)
|
||||||
|
async def process_photo(client: Client, message: Message):
|
||||||
|
text = message.caption if message.caption else ""
|
||||||
|
|
||||||
|
if text.startswith('圣遗物评分'):
|
||||||
|
await artifact_rate_msg(client, message)
|
||||||
|
await log(client, message, '圣遗物评分')
|
||||||
|
|
||||||
|
|
||||||
@Client.on_message(Filters.new_chat_members)
|
@Client.on_message(Filters.new_chat_members)
|
||||||
|
29
plugins/query_resource_points.py
Normal file
29
plugins/query_resource_points.py
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
from pyrogram import Client
|
||||||
|
from pyrogram.types import Message
|
||||||
|
from os import sep
|
||||||
|
from defs.query_resource_points import get_resource_map_mes, get_resource_list_mes, init_point_list_and_map
|
||||||
|
|
||||||
|
init_resource_map = False
|
||||||
|
|
||||||
|
|
||||||
|
async def inquire_resource_points(client: Client, message: Message):
|
||||||
|
global init_resource_map
|
||||||
|
if not init_resource_map:
|
||||||
|
await init_point_list_and_map()
|
||||||
|
init_resource_map = True
|
||||||
|
resource_name = message.text.replace("哪里有", "").strip()
|
||||||
|
if resource_name == "":
|
||||||
|
return await message.reply("没有想好要找的资源吗?试试 `资源列表`", quote=True)
|
||||||
|
text = await get_resource_map_mes(resource_name)
|
||||||
|
if text.find("没有") != -1:
|
||||||
|
return await message.reply(text, quote=True)
|
||||||
|
await message.reply_photo(f"temp{sep}map.jpg", caption=text, quote=True)
|
||||||
|
|
||||||
|
|
||||||
|
async def inquire_resource_list(client: Client, message: Message):
|
||||||
|
global init_resource_map
|
||||||
|
if not init_resource_map:
|
||||||
|
await init_point_list_and_map()
|
||||||
|
init_resource_map = True
|
||||||
|
text = get_resource_list_mes()
|
||||||
|
await message.reply(text, quote=True)
|
@ -7,12 +7,12 @@ from pyrogram.types import Message
|
|||||||
|
|
||||||
async def welcome_command(client: Client, message: Message):
|
async def welcome_command(client: Client, message: Message):
|
||||||
# 发送欢迎消息
|
# 发送欢迎消息
|
||||||
await message.reply('你好!我是原神小助手 - 派蒙 。')
|
await message.reply('你好!我是原神小助手 - 派蒙 。', quote=True)
|
||||||
|
|
||||||
|
|
||||||
async def ping_command(client: Client, message: Message):
|
async def ping_command(client: Client, message: Message):
|
||||||
# 提醒在线状态
|
# 提醒在线状态
|
||||||
await message.reply("poi~")
|
await message.reply("poi~", quote=True)
|
||||||
|
|
||||||
|
|
||||||
async def leave_command(client: Client, message: Message):
|
async def leave_command(client: Client, message: Message):
|
||||||
@ -39,19 +39,23 @@ async def leave_command(client: Client, message: Message):
|
|||||||
|
|
||||||
|
|
||||||
async def help_command(client: Client, message: Message):
|
async def help_command(client: Client, message: Message):
|
||||||
text = '<a href="https://git.io/JcbTD">PaimonBot</a> 0.1.1beta By Xtao-Labs\n\n' \
|
text = '<a href="https://git.io/JcbTD">PaimonBot</a> 0.2.0beta By Xtao-Labs\n\n' \
|
||||||
'🔅 以下是小派蒙我学会了的功能(部分):\n' \
|
'🔅 以下是小派蒙我学会了的功能(部分):\n' \
|
||||||
'1️⃣ [武器/今日武器] 查看今日武器材料和武器\n' \
|
'① [武器/今日武器] 查看今日武器材料和武器\n' \
|
||||||
'2️⃣ [天赋/今日天赋] 查看今日天赋材料和角色\n' \
|
'② [天赋/今日天赋] 查看今日天赋材料和角色\n' \
|
||||||
'3️⃣ [周本] 查看周本材料和人物\n' \
|
'③ [周本] 查看周本材料和人物\n' \
|
||||||
'4️⃣ [武器查询 武器名] 查看武器资料\n' \
|
'④ [运势 (名字)] 查看今日运势\n' \
|
||||||
' 💠 <code>武器查询 沐浴龙血的剑</code>\n' \
|
|
||||||
'5️⃣ [角色查询 名字] 查看人物简介\n' \
|
|
||||||
' 💠 <code>角色查询 重云</code>\n' \
|
|
||||||
'6️⃣ [命座 名字] 查看人物命座\n' \
|
|
||||||
' 💠 <code>命座 重云一命</code>\n' \
|
|
||||||
'7️⃣ [运势 (名字)] 查看今日运势\n' \
|
|
||||||
' 💠 <code>运势 (重云)</code>\n' \
|
' 💠 <code>运势 (重云)</code>\n' \
|
||||||
' 💠 <code>设置运势 (重云)</code>\n' \
|
' 💠 <code>设置运势 (重云)</code>\n' \
|
||||||
'8️⃣ [原神黄历] 查看随机生成的原神黄历'
|
'⑤ [原神黄历] 查看随机生成的原神黄历\n' \
|
||||||
|
'⑥ [圣遗物评分] 我也想拥有这种分数的圣遗物(切实)\n' \
|
||||||
|
'⑦ [哪里有 (资源名)] 查看资源的位置\n' \
|
||||||
|
'⑧ [资源列表] 查看原神所有资源'
|
||||||
await message.reply(text, quote=True, disable_web_page_preview=True)
|
await message.reply(text, quote=True, disable_web_page_preview=True)
|
||||||
|
|
||||||
|
# '④ [武器查询 武器名] 查看武器资料\n' \
|
||||||
|
# ' 💠 <code>武器查询 沐浴龙血的剑</code>\n' \
|
||||||
|
# '⑤ [角色查询 名字] 查看人物简介\n' \
|
||||||
|
# ' 💠 <code>角色查询 重云</code>\n' \
|
||||||
|
# '⑥ [命座 名字] 查看人物命座\n' \
|
||||||
|
# ' 💠 <code>命座 重云一命</code>\n' \
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
Pyrogram>=1.2.9
|
Pyrogram>=1.3.5
|
||||||
Tgcrypto>=1.2.2
|
Tgcrypto>=1.2.3
|
||||||
Pillow>=8.1.0
|
Pillow>=8.1.0
|
||||||
Redis>=3.5.3
|
Redis>=3.5.3
|
||||||
bs4>=0.0.1
|
bs4>=0.0.1
|
||||||
beautifulsoup4>=4.9.3
|
beautifulsoup4>=4.9.3
|
||||||
requests>=2.25.1
|
requests>=2.27.1
|
||||||
xpinyin>=0.7.6
|
xpinyin>=0.7.6
|
||||||
lxml>=4.6.3
|
lxml>=4.6.3
|
||||||
httpx>=0.18.2
|
httpx>=0.21.3
|
Loading…
Reference in New Issue
Block a user