mirror of
https://github.com/xuthus83/LittlePaimon.git
synced 2025-04-12 23:29:37 +08:00
83 lines
4.9 KiB
Python
83 lines
4.9 KiB
Python
import math
|
|
from typing import List
|
|
|
|
from LittlePaimon import __version__
|
|
from LittlePaimon.config import PluginInfo
|
|
from LittlePaimon.utils.files import load_image
|
|
from LittlePaimon.utils.image import PMImage, font_manager as fm
|
|
from LittlePaimon.utils.message import MessageBuild
|
|
from LittlePaimon.utils.path import RESOURCE_BASE_PATH
|
|
|
|
|
|
async def draw_plugin_card(plugin: PluginInfo):
|
|
matchers = plugin.matchers
|
|
matcher_groups = [matchers[i:i + 3] for i in range(0, len(matchers), 3)]
|
|
# 确定长度
|
|
total_height = 66
|
|
for matcher_group in matcher_groups:
|
|
max_length = max(len(matcher.pm_description) for matcher in matcher_group)
|
|
max_height = max_length // 13 * 22 + 59 + 15
|
|
total_height += max_height + 6
|
|
total_height -= 6
|
|
img = PMImage(size=(1080, total_height), color=(255, 255, 255, 0), mode='RGBA')
|
|
await img.paste
|
|
|
|
|
|
async def draw_help(plugin_list: List[PluginInfo]):
|
|
bg = PMImage(await load_image(RESOURCE_BASE_PATH / 'general' / 'bg.png'))
|
|
img = PMImage(size=(1080, 500 * len(plugin_list)), color=(255, 255, 255, 0), mode='RGBA')
|
|
orange_line = await load_image(RESOURCE_BASE_PATH / 'general' / 'orange.png')
|
|
orange_name_bg = await load_image(RESOURCE_BASE_PATH / 'general' / 'orange_card.png')
|
|
black_line = await load_image(RESOURCE_BASE_PATH / 'general' / 'black2.png')
|
|
black_name_bg = await load_image(RESOURCE_BASE_PATH / 'general' / 'black_card2.png')
|
|
orange_bord = await load_image(RESOURCE_BASE_PATH / 'general' / 'orange_bord.png')
|
|
black_bord = await load_image(RESOURCE_BASE_PATH / 'general' / 'black_bord.png')
|
|
await img.text('小派蒙帮助', 38, 40, fm.get('SourceHanSerifCN-Bold.otf', 72), 'black')
|
|
await img.text(f'V{__version__}', 1040, 75, fm.get('bahnschrift_regular', 36), 'black', 'right')
|
|
await img.text('<>内为必须,[]内为可选', 1040, 105, fm.get('SourceHanSerifCN-Bold.otf', 22), 'black', 'right')
|
|
await img.text('描述前带*号的需要绑定私人cookie', 1040, 130, fm.get('SourceHanSerifCN-Bold.otf', 22), 'black', 'right')
|
|
|
|
height_now = 172
|
|
for plugin in plugin_list:
|
|
if not plugin.status:
|
|
plugin_line = PMImage(black_line)
|
|
plugin_name_bg = PMImage(black_name_bg)
|
|
matcher_card = PMImage(black_bord)
|
|
else:
|
|
plugin_line = PMImage(orange_line)
|
|
plugin_name_bg = PMImage(orange_name_bg)
|
|
matcher_card = PMImage(orange_bord)
|
|
name_length = img.text_length(plugin.name, fm.get('SourceHanSerifCN-Bold.otf', 30))
|
|
await img.paste(plugin_line, (40, height_now))
|
|
await plugin_name_bg.stretch((23, plugin_name_bg.width - 36), int(name_length), 'width')
|
|
await img.paste(plugin_name_bg, (40, height_now))
|
|
await img.text(plugin.name, 63, height_now + 5, fm.get('SourceHanSerifCN-Bold.otf', 30), 'white')
|
|
height_now += plugin_line.height + 11
|
|
if plugin.matchers:
|
|
matcher_groups = [plugin.matchers[i:i + 3] for i in range(0, len(plugin.matchers), 3)]
|
|
for matcher_group in matcher_groups:
|
|
max_length = max(len(matcher.pm_description) if matcher.pm_description else 0 for matcher in matcher_group)
|
|
max_height = math.ceil(max_length / 16) * 22 + 40
|
|
await matcher_card.stretch((5, matcher_card.height - 5), max_height, 'height')
|
|
for matcher in matcher_group:
|
|
await img.paste(matcher_card, (40 + 336 * matcher_group.index(matcher), height_now))
|
|
await img.text(matcher.pm_usage, 40 + 336 * matcher_group.index(matcher) + 15, height_now + 10, fm.get('SourceHanSansCN-Bold.otf', 24), 'black')
|
|
if matcher.pm_description:
|
|
await img.text_box(matcher.pm_description.replace('\n', '^'), (40 + 336 * matcher_group.index(matcher) + 10, 40 + 336 * matcher_group.index(matcher) + matcher_card.width - 22),
|
|
(height_now + 44, height_now + max_height - 10), fm.get('SourceHanSansCN-Bold.otf', 18), '#40342d')
|
|
height_now += max_height + 10 + 6
|
|
elif plugin.usage:
|
|
text_height = len(plugin.usage) // 43 * 22 + 45
|
|
await matcher_card.stretch((5, matcher_card.width - 5), 990, 'width')
|
|
await matcher_card.stretch((5, matcher_card.height - 5), text_height, 'height')
|
|
await img.paste(matcher_card, (40, height_now))
|
|
await img.text_box(plugin.usage.replace('\n', '^'), (50, 1030), (height_now + 10, height_now + text_height - 10), fm.get('SourceHanSansCN-Bold.otf', 18), '#40342d')
|
|
height_now += matcher_card.height + 6
|
|
height_now += 19
|
|
await img.text('CREATED BY LITTLEPAIMON', (0, 1080), height_now + 8, fm.get('SourceHanSerifCN-Bold.otf', 24), 'black', 'center')
|
|
height_now += 70
|
|
await bg.stretch((50, bg.height - 50), height_now - 100, 'height')
|
|
await bg.paste(img, (0, 0))
|
|
|
|
return MessageBuild.Image(bg, quality=80, mode='RGB')
|