mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2026-09-29 00:32:06 +08:00
update 0.0.6.0
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
from nonebot import on_command
|
||||
from nonebot.typing import T_State
|
||||
from nonebot.adapters.cqhttp import Bot, GroupMessageEvent, MessageEvent
|
||||
from utils.utils import get_message_text, is_number
|
||||
from .data_source import get_csgola_data, get_5e_data
|
||||
from services.log import logger
|
||||
|
||||
|
||||
__zx_plugin_name__ = "cs国服/平台信息查找"
|
||||
__plugin_usage__ = """
|
||||
usage:
|
||||
快速查询csgo战绩和数据
|
||||
指令:
|
||||
cs国服查询 [steam主页个人id]
|
||||
5e查询 [5e战绩个人名称]
|
||||
示例:cs国服查询 23848238483
|
||||
示例:5e查询 poster
|
||||
"""
|
||||
__plugin_des__ = "什么?你也是rush B玩家?"
|
||||
__plugin_cmd__ = ["cs国服查询 [steam主页个人id]", "5e查询 [5e战绩个人名称]"]
|
||||
__plugin_version__ = 0.1
|
||||
__plugin_author__ = "HibiKier"
|
||||
__plugin_settings__ = {
|
||||
"level": 5,
|
||||
"default_status": True,
|
||||
"limit_superuser": False,
|
||||
"cmd": ["csgo战绩查询", "cs国服查询", "5e查询"],
|
||||
}
|
||||
|
||||
csgola = on_command("cs国服查询", priority=5, block=True)
|
||||
|
||||
csgo5e = on_command("5e查询", priority=5, block=True)
|
||||
|
||||
|
||||
@csgola.handle()
|
||||
async def _(bot: Bot, event: MessageEvent, state: T_State):
|
||||
msg = get_message_text(event.json())
|
||||
if "http" in msg:
|
||||
msg = msg[:-1] if msg[-1] == "/" else msg
|
||||
msg = msg.split("/")[-1]
|
||||
if not is_number(msg):
|
||||
await csgola.finish("Id必须为数字!", at_sender=True)
|
||||
await csgola.send("开始查找...")
|
||||
img, code = await get_csgola_data(int(msg))
|
||||
if code == 200:
|
||||
await csgola.send(img, at_sender=True)
|
||||
logger.info(
|
||||
f"(USER {event.user_id}, GROUP "
|
||||
f"{event.group_id if isinstance(event, GroupMessageEvent) else 'private'})"
|
||||
f" 查询csgo国服战绩:{msg}"
|
||||
)
|
||||
else:
|
||||
await csgola.send(img, at_sender=True)
|
||||
|
||||
|
||||
@csgo5e.handle()
|
||||
async def _(bot: Bot, event: MessageEvent, state: T_State):
|
||||
msg = get_message_text(event.json())
|
||||
await csgola.send("开始查找...")
|
||||
img, code = await get_5e_data(msg)
|
||||
if code == 200:
|
||||
await csgo5e.send(img, at_sender=True)
|
||||
logger.info(
|
||||
f"(USER {event.user_id}, GROUP "
|
||||
f"{event.group_id if isinstance(event, GroupMessageEvent) else 'private'})"
|
||||
f" 查询csgo国服战绩:{msg}"
|
||||
)
|
||||
else:
|
||||
await csgo5e.send(img, at_sender=True)
|
||||
@@ -0,0 +1,130 @@
|
||||
from configs.path_config import IMAGE_PATH
|
||||
from utils.image_utils import CreateImg
|
||||
from utils.message_builder import image
|
||||
from services.log import logger
|
||||
from utils.browser import get_browser
|
||||
from playwright._impl._api_types import TimeoutError
|
||||
|
||||
csgola_url = "https://www.csgola.com/player/"
|
||||
_5e_url = "https://arena.5eplay.com/data/player/"
|
||||
|
||||
|
||||
async def get_csgola_data(uid: int) -> "str, int":
|
||||
page = None
|
||||
try:
|
||||
browser = await get_browser()
|
||||
if not browser:
|
||||
return "", 997
|
||||
page = await browser.new_page()
|
||||
for _ in range(3):
|
||||
try:
|
||||
await page.goto(f"{csgola_url}{uid}", wait_until="networkidle", timeout=10000)
|
||||
break
|
||||
except TimeoutError:
|
||||
pass
|
||||
else:
|
||||
return '连接超时...', 995
|
||||
await page.set_viewport_size({"width": 2560, "height": 1080})
|
||||
|
||||
data = await page.query_selector_all(".panel-body")
|
||||
if not data:
|
||||
return "未查询到该Id....", 999
|
||||
await data[0].screenshot(path=f"{IMAGE_PATH}/temp/{uid}_1.png", timeout=100000)
|
||||
await data[3].screenshot(path=f"{IMAGE_PATH}/temp/{uid}_2.png", timeout=100000)
|
||||
await data[5].screenshot(path=f"{IMAGE_PATH}/temp/{uid}_3.png", timeout=100000)
|
||||
await data[7].screenshot(path=f"{IMAGE_PATH}/temp/{uid}_5.png", timeout=100000)
|
||||
|
||||
ava = await page.query_selector("div.container:nth-child(4) > div:nth-child(1)")
|
||||
await ava.screenshot(path=f"{IMAGE_PATH}/temp/{uid}_0.png", timeout=100000)
|
||||
|
||||
weapon_data = await page.query_selector(".gun-stats-sec")
|
||||
await weapon_data.screenshot(
|
||||
path=f"{IMAGE_PATH}/temp/{uid}_4.png", timeout=100000
|
||||
)
|
||||
|
||||
ava = CreateImg(0, 0, background=f"{IMAGE_PATH}/temp/{uid}_0.png")
|
||||
statistical_data = CreateImg(0, 0, background=f"{IMAGE_PATH}/temp/{uid}_1.png")
|
||||
combined_data = CreateImg(0, 0, background=f"{IMAGE_PATH}/temp/{uid}_2.png")
|
||||
detailed_data = CreateImg(0, 0, background=f"{IMAGE_PATH}/temp/{uid}_3.png")
|
||||
weapon_data = CreateImg(0, 0, background=f"{IMAGE_PATH}/temp/{uid}_4.png")
|
||||
map_data = CreateImg(0, 0, background=f"{IMAGE_PATH}/temp/{uid}_5.png")
|
||||
if statistical_data.h > 300:
|
||||
statistical_data.crop((0, 0, statistical_data.w, 300))
|
||||
if combined_data.h > 260:
|
||||
combined_data.crop((0, 0, combined_data.w, 260))
|
||||
if detailed_data.h > 400:
|
||||
detailed_data.crop((0, 0, detailed_data.w, 400))
|
||||
weapon_data.crop((0, 100, weapon_data.w, weapon_data.h))
|
||||
map_data.crop((0, 310, map_data.w, map_data.h))
|
||||
height = (
|
||||
ava.h
|
||||
+ statistical_data.h
|
||||
+ combined_data.h
|
||||
+ detailed_data.h
|
||||
+ weapon_data.h
|
||||
+ map_data.h
|
||||
)
|
||||
bk = CreateImg(1168, height)
|
||||
current_h = 0
|
||||
for img in [
|
||||
ava,
|
||||
statistical_data,
|
||||
combined_data,
|
||||
detailed_data,
|
||||
weapon_data,
|
||||
map_data,
|
||||
]:
|
||||
bk.paste(img, (0, current_h))
|
||||
current_h += img.h
|
||||
bk.save(f"{IMAGE_PATH}/temp/csgo_{uid}.png")
|
||||
except Exception as e:
|
||||
logger.error(f"生成csgola图片错误 {type(e)}:{e}")
|
||||
if page:
|
||||
await page.close()
|
||||
return "发生了错误....", 998
|
||||
if page:
|
||||
await page.close()
|
||||
return image(f"csgo_{uid}.png", "temp"), 200
|
||||
|
||||
|
||||
async def get_5e_data(uname: str) -> "str, int":
|
||||
page = None
|
||||
try:
|
||||
browser = await get_browser()
|
||||
if not browser:
|
||||
return "", 997
|
||||
page = await browser.new_page()
|
||||
await page.goto(f"{_5e_url}{uname}", wait_until="networkidle", timeout=10000)
|
||||
if "HTTP ERROR 404" in await page.content():
|
||||
return "未查询到该玩家...", 999
|
||||
await page.set_viewport_size({"width": 2560, "height": 1080})
|
||||
body = await page.query_selector("body")
|
||||
await body.screenshot(
|
||||
path=f"{IMAGE_PATH}/temp/csgo_{uname}_0.png", timeout=100000
|
||||
)
|
||||
await page.click("a.match-tab-item:nth-child(2)")
|
||||
body = await page.query_selector("body")
|
||||
await body.screenshot(
|
||||
path=f"{IMAGE_PATH}/temp/csgo_{uname}_1.png", timeout=100000
|
||||
)
|
||||
await page.click("a.match-tab-item:nth-child(1)")
|
||||
body = await page.query_selector("body")
|
||||
await body.screenshot(
|
||||
path=f"{IMAGE_PATH}/temp/csgo_{uname}_2.png", timeout=100000
|
||||
)
|
||||
bk = CreateImg(1344 * 3, 2307)
|
||||
current_w = 0
|
||||
for i in range(3):
|
||||
body = CreateImg(0, 0, background=f"{IMAGE_PATH}/temp/csgo_{uname}_{i}.png")
|
||||
body.crop((600, 90, body.w - 600, body.h - 410))
|
||||
bk.paste(body, (current_w, 0))
|
||||
current_w += 1344
|
||||
bk.save(f"{IMAGE_PATH}/temp/csgo_{uname}.png")
|
||||
except Exception as e:
|
||||
logger.error(f"生成5e图片错误 {type(e)}:{e}")
|
||||
if page:
|
||||
await page.close()
|
||||
return "发生了错误...", 998
|
||||
if page:
|
||||
await page.close()
|
||||
return image(f"csgo_{uname}.png", "temp"), 200
|
||||
Reference in New Issue
Block a user