-
Notifications
You must be signed in to change notification settings - Fork 10
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
7 changed files
with
143 additions
and
14 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -27,6 +27,7 @@ | |
马娘漫画帮助 | ||
马娘限时任务帮助 | ||
马娘技能帮助 | ||
育成目标帮助 | ||
注:数据来自马娘官网和Bwiki | ||
'''.strip() | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
import os | ||
import json | ||
|
||
from hoshino import Service | ||
from .get_target import get_tar | ||
|
||
sv_help = ''' | ||
注:xxx是指要查的马娘名 | ||
[查目标 xxx] 查询该马娘的育成目标 | ||
[查目标 xxx-f] 某尾加上-f为强制重新生成图片 | ||
'''.strip() | ||
|
||
sv = Service('uma_target', help_ = sv_help) | ||
|
||
@sv.on_fullmatch('育成目标帮助') | ||
async def get_help(bot, ev): | ||
await bot.send(ev, sv_help) | ||
|
||
@sv.on_prefix('查目标') | ||
async def search_target(bot, ev): | ||
uma_name_tmp = str(ev.message).replace('-f', '') | ||
is_force = True if str(ev.message).endswith('-f') else False | ||
current_dir = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'uma_info/config.json') | ||
with open(current_dir, 'r', encoding = 'UTF-8') as f: | ||
f_data = json.load(f) | ||
with open(os.path.join(os.path.dirname(os.path.dirname(__file__)), 'uma_info/replace_dict.json'), 'r', encoding = 'UTF-8') as af: | ||
replace_data = json.load(af) | ||
uma_target = '' | ||
name_list = list(f_data.keys()) | ||
name_list.remove('current_chara') | ||
for uma_name in name_list: | ||
if f_data[uma_name]['category'] == 'umamusume': | ||
other_name_list = list(replace_data[uma_name]) | ||
if f_data[uma_name]['cn_name']: | ||
cn_name = f_data[uma_name]['cn_name'] | ||
else: | ||
continue | ||
if str(uma_name) == uma_name_tmp or str(cn_name) == uma_name_tmp or\ | ||
str(f_data[uma_name]['jp_name']) == uma_name_tmp or str(uma_name_tmp) in other_name_list: | ||
try: | ||
uma_target = await get_tar(cn_name, is_force) | ||
except: | ||
await bot.finish(ev, f'这只马娘不存在或暂时没有育成目标') | ||
if not uma_target: | ||
await bot.finish(ev, f'这只马娘不存在或暂时没有育成目标') | ||
await bot.send(ev, uma_target) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
import os | ||
import httpx | ||
from bs4 import BeautifulSoup | ||
from PIL import Image, ImageDraw, ImageFont, ImageColor | ||
|
||
from hoshino import R, logger | ||
|
||
# 获取育成目标的数据 | ||
async def get_tar_data(uma_name): | ||
url = f'https://wiki.biligame.com/umamusume/{uma_name}' | ||
res = httpx.get(url, timeout=10) | ||
soup = BeautifulSoup(res.text, 'lxml') | ||
target_tmp = soup.find_all('table', {"style":"width:100%;margin:0px"})[-1] | ||
row_list = target_tmp.find_all('tr') | ||
data, i = {}, 0 | ||
while (i <= 44 and row_list[i+1].find('td').text.strip()): | ||
race = row_list[i+3].find('td').text.strip().replace('\t', ' ').replace(' ', ' ').replace('\n', ' | ')\ | ||
.replace('\xa0', ' ') | ||
data[row_list[i].text.strip()] = { | ||
row_list[i+1].find('th').text.strip(): row_list[i+1].find('td').text.strip(), | ||
row_list[i+2].find('th').text.strip(): row_list[i+2].find('td').text.strip(), | ||
row_list[i+3].find('th').text.strip(): race | ||
} | ||
i += 4 | ||
return data | ||
|
||
# 制作图片 | ||
async def generate_img(uma_name): | ||
data = await get_tar_data(uma_name) | ||
target_list = list(data.keys()) | ||
end_img = Image.new('RGB', (1800, 136+309*len(target_list))) | ||
title_img = Image.open(os.path.abspath(os.path.join(os.path.dirname(__file__), 'title.png'))).convert("RGBA") | ||
target_img = Image.open(os.path.abspath(os.path.join(os.path.dirname(__file__), 'target.png'))).convert("RGBA") | ||
end_img.paste(title_img, (0, 0)) | ||
all_height = 136 | ||
font_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), f'simhei.ttf') | ||
font_rgb = ImageColor.getrgb('#8B4513') | ||
for target in target_list: | ||
img_font = ImageFont.truetype(font_path, 50, index=0) | ||
end_img.paste(target_img, (0, all_height)) | ||
draw_img = ImageDraw.Draw(end_img) | ||
# 调整居中 | ||
img_size = draw_img.multiline_textsize(target, font=img_font) | ||
start_width = 900 - img_size[0] / 2 | ||
if start_width < 0 : start_width = 15.45 | ||
draw_img.text(xy=(start_width, all_height+15.45), text=target, font=img_font, fill=font_rgb) | ||
draw_img.text(xy=(135, all_height+92.7), text='时间', font=img_font, fill=font_rgb) | ||
draw_img.text(xy=(135, all_height+169.95), text='条件', font=img_font, fill=font_rgb) | ||
draw_img.text(xy=(80, all_height+247.2), text='比赛描述', font=img_font, fill=font_rgb) | ||
draw_img.text(xy=(380, all_height+92.7), text=data[target]['时间'], font=img_font, fill=font_rgb) | ||
draw_img.text(xy=(380, all_height+169.95), text=data[target]['条件'], font=img_font, fill=font_rgb) | ||
if uma_name == '大和赤骥' and target.startswith('目标4'): | ||
img_font = ImageFont.truetype(font_path, 32, index=0) | ||
draw_img.text(xy=(380, all_height+247.2), text=data[target]['比赛描述'], font=img_font, fill=font_rgb) | ||
all_height += 309 | ||
return end_img | ||
|
||
# 返回目标图片 | ||
async def get_tar(uma_name, is_force): | ||
if not os.path.exists(os.path.join(R.img('umamusume').path, f'uma_target/')): | ||
os.mkdir(os.path.join(R.img('umamusume').path, f'uma_target/')) | ||
img_path = os.path.join(R.img('umamusume').path, f'uma_target/target_{uma_name}.png') | ||
if not os.path.exists(img_path) or is_force: | ||
img = await generate_img(uma_name) | ||
img.save(img_path, 'PNG') | ||
logger.info(f'{uma_name}的育成目标图片不存在,现已成功生成!') | ||
logger.info(f'{uma_name}的育成目标图片已存在,即将发送图片!') | ||
return f'[CQ:image,file=file:///{os.path.abspath(img_path)}]' |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.