mirror of
https://github.com/Shu-Ying/main_plugin_farm.git
synced 2026-10-27 20:50:06 +08:00
59 lines
2.1 KiB
Python
59 lines
2.1 KiB
Python
"""从当前命令注册表离线生成帮助菜单图片,不访问玩家数据库。"""
|
||
|
||
import argparse
|
||
from pathlib import Path
|
||
import sys
|
||
|
||
|
||
ROOT = Path(__file__).resolve().parents[1]
|
||
sys.path.insert(0, str(ROOT / 'src'))
|
||
|
||
from ci_font import choose_font
|
||
from farm_core.commands import command_specs
|
||
from farm_render import FarmRenderer
|
||
from farm_render.help import render_help
|
||
|
||
|
||
PLATFORMS = ('zhenxun', 'nonebot', 'astrbot')
|
||
|
||
|
||
def main(argv=None):
|
||
parser = argparse.ArgumentParser(description=__doc__)
|
||
parser.add_argument(
|
||
'--platform', choices=(*PLATFORMS, 'all'), default='all',
|
||
help='目标平台;默认一次生成三个平台的菜单。',
|
||
)
|
||
parser.add_argument(
|
||
'--output', type=Path, default=ROOT / 'images',
|
||
help='图片输出目录;默认主仓库 images。',
|
||
)
|
||
parser.add_argument('--font', type=Path, help='中文字体文件路径。')
|
||
parser.add_argument(
|
||
'--format', choices=('PNG', 'JPEG', 'WEBP'), default='PNG',
|
||
type=str.upper, help='默认PNG无损图片。',
|
||
)
|
||
parser.add_argument('--quality', type=int, default=75,
|
||
help='JPEG/WebP质量,1~95;PNG不受影响。')
|
||
args = parser.parse_args(argv)
|
||
if not 1 <= args.quality <= 95:
|
||
parser.error('--quality 必须为1~95的整数')
|
||
try:
|
||
renderer = FarmRenderer(str(args.font) if args.font else choose_font())
|
||
except (OSError, ValueError, RuntimeError) as error:
|
||
parser.error(f'无法加载字体或素材,请用 --font 指定中文字体:{error}')
|
||
platforms = PLATFORMS if args.platform == 'all' else (args.platform,)
|
||
extension = {'PNG': 'png', 'JPEG': 'jpg', 'WEBP': 'webp'}[args.format]
|
||
args.output.mkdir(parents=True, exist_ok=True)
|
||
for platform in platforms:
|
||
picture = render_help(
|
||
renderer, command_specs(platform), platform,
|
||
image_format=args.format, quality=args.quality,
|
||
)
|
||
target = args.output / f'help-{platform}.{extension}'
|
||
target.write_bytes(picture)
|
||
print(f'{target.resolve()} ({len(picture)} bytes)')
|
||
|
||
|
||
if __name__ == '__main__':
|
||
main()
|