适配GsCore全新的帮助系统gs帮助, 注册至帮助

This commit is contained in:
KimigaiiWuyi 2024-09-21 21:24:51 +08:00
parent 89166761b9
commit 438089eab2
87 changed files with 193 additions and 386 deletions

View File

@ -1,14 +1,8 @@
import random
import asyncio
from typing import List
from gsuid_core.sv import SV
from gsuid_core.bot import Bot
from gsuid_core.models import Event
from gsuid_core.aps import scheduler
from gsuid_core.utils.database.models import GsUser
from ..utils.mys_api import mys_api
from .backup_data import data_backup
from ..genshinuid_map.draw_genshinmap_card import MAP_DATA
@ -27,106 +21,3 @@ async def send_backup_msg(bot: Bot, ev: Event):
if item.is_file():
item.unlink()
await bot.send('操作成功完成!')
@sv_data_manger.on_fullmatch(('校验全部Cookies'))
async def send_check_cookie(bot: Bot, ev: Event):
user_list = await GsUser.get_all_user()
invalid_user: List[GsUser] = []
for user in user_list:
if user.cookie and user.mys_id and user.uid:
mys_data = await mys_api.get_mihoyo_bbs_info(
user.mys_id,
user.cookie,
True if int(user.uid[0]) > 5 else False,
)
if isinstance(mys_data, int):
await GsUser.update_data_by_uid(
user.uid, ev.bot_id, cookie=None
)
invalid_user.append(user)
continue
for i in mys_data:
if i['game_id'] != 2:
mys_data.remove(i)
if len(user_list) > 4:
im = f'正常Cookies数量: {len(user_list) - len(invalid_user)}'
invalid = '\n'.join(
[
f'uid{user.uid}的Cookies是异常的!已删除该条Cookies!\n'
for user in invalid_user
]
)
return_str = f'{im}\n{invalid if invalid else "无失效Cookie!"}'
else:
return_str = '\n'.join(
[
(
f'uid{user.uid}/mys{user.mys_id}的Cookies是正常的!'
if user not in invalid_user
else f'uid{user.uid}的Cookies是异常的!已删除该条Cookies!'
)
for user in user_list
]
)
await bot.send(return_str)
for i in invalid_user:
await bot.target_send(
f'您绑定的Cookiesuid{i.uid})已失效,以下功能将会受到影响:\n'
'查看完整信息列表\n查看深渊配队\n自动签到/当前状态/每月统计\n'
'请及时重新绑定Cookies并重新开关相应功能。',
'direct',
target_id=i.user_id,
)
await asyncio.sleep(3 + random.randint(1, 3))
@sv_data_manger.on_fullmatch(('校验全部Stoken'))
async def send_check_stoken(bot: Bot, ev: Event):
user_list = await GsUser.get_all_user()
invalid_user: List[GsUser] = []
for user in user_list:
if user.stoken and user.mys_id:
mys_data = await mys_api.get_cookie_token_by_stoken(
'', user.mys_id, user.stoken
)
if isinstance(mys_data, int) and user.uid:
await GsUser.update_data_by_uid(
user.uid, ev.bot_id, stoken=None
)
invalid_user.append(user)
continue
if len(user_list) > 4:
im = f'正常Stoken数量: {len(user_list) - len(invalid_user)}'
invalid = '\n'.join(
[
f'uid{user.uid}的Stoken是异常的!已清除Stoken!\n'
for user in invalid_user
]
)
return_str = f'{im}\n{invalid if invalid else "无失效Stoken!"}'
else:
return_str = '\n'.join(
[
(
f'uid{user.uid}/mys{user.mys_id}的Stoken是正常的!'
if user not in invalid_user
else f'uid{user.uid}的Stoken是异常的!已清除Stoken!'
)
for user in user_list
]
)
await bot.send(return_str)
for i in invalid_user:
await bot.target_send(
f'您绑定的Stokenuid{i.uid})已失效,以下功能将会受到影响:\n'
'gs开启自动米游币开始获取米游币。\n'
'重新添加后需要重新开启自动米游币。',
'direct',
target_id=i.user_id,
)
await asyncio.sleep(3 + random.randint(1, 3))

View File

@ -1,9 +1,11 @@
from PIL import Image
from gsuid_core.sv import SV
from gsuid_core.bot import Bot
from gsuid_core.models import Event
from gsuid_core.logger import logger
from gsuid_core.help.utils import register_help
from .get_help import get_core_help
from .get_help import ICON, get_core_help
sv_gs_help = SV('gs帮助')
@ -13,3 +15,6 @@ async def send_help_img(bot: Bot, ev: Event):
logger.info('开始执行[gs帮助]')
im = await get_core_help()
await bot.send(im)
register_help('GenshinUID', 'gs帮助', Image.open(ICON))

View File

@ -1,27 +1,32 @@
from pathlib import Path
from typing import Dict, Union, Optional
from typing import Dict, Union
import aiofiles
from PIL import Image
from msgspec import json as msgjson
from gsuid_core.help.model import PluginHelp
from gsuid_core.help.draw_plugin_help import get_help
from gsuid_core.help.draw_new_plugin_help import get_new_help
from ..genshinuid_config.gs_config import gsconfig
from ..utils.image.image_tools import get_color_bg
from ..version import Genshin_version, GenshinUID_version
from ..utils.fonts.genshin_fonts import genshin_font_origin
from ..utils.image.image_tools import get_footer, get_color_bg
ICON = Path(__file__).parent.parent.parent / 'ICON.png'
TEXT_PATH = Path(__file__).parent / 'texture2d'
HELP_DATA = Path(__file__).parent / 'help.json'
ICON_PATH = Path(__file__).parent / 'icon_path'
ITEM_BG = Image.open(TEXT_PATH / 'item_bg_dark.png')
CAG_BG = Image.open(TEXT_PATH / 'cag_bg.png')
BG = Image.open(TEXT_PATH / 'bg.jpg')
BANNER_BG = Image.open(TEXT_PATH / 'banner_bg.jpg')
async def get_help_data() -> Optional[Dict[str, PluginHelp]]:
if HELP_DATA.exists():
async with aiofiles.open(HELP_DATA, 'rb') as file:
return msgjson.decode(
await file.read(), type=Dict[str, PluginHelp]
)
async def get_help_data() -> Dict[str, PluginHelp]:
async with aiofiles.open(HELP_DATA, 'rb') as file:
return msgjson.decode(await file.read(), type=Dict[str, PluginHelp])
async def get_core_help() -> Union[bytes, str]:
@ -35,6 +40,24 @@ async def get_core_help() -> Union[bytes, str]:
else:
column = 6
return await get_new_help(
plugin_name='GenshinUID',
plugin_info={f'v{GenshinUID_version}': ''},
plugin_icon=Image.open(ICON),
plugin_help=await get_help_data(),
plugin_prefix='',
help_mode='dark',
banner_bg=BANNER_BG,
cag_bg=CAG_BG,
banner_sub_text='向着星辰与深渊!',
help_bg=BG,
icon_path=ICON_PATH,
footer=get_footer(),
column=5,
item_bg=ITEM_BG,
enable_cache=True,
)
img = await get_help(
'GenshinUID',
f'版本号:{GenshinUID_version}',
@ -51,3 +74,4 @@ async def get_core_help() -> Union[bytes, str]:
extra_message=[f'数据版本 {Genshin_version}'],
)
return img
return img

View File

@ -1,4 +1,121 @@
{
"查询服务": {
"desc": "可加 [查询]前缀",
"data": [
{
"name": "查询",
"desc": "角色信息一览,后可跟UID",
"eg": "查询100740568",
"need_ck": true,
"need_sk": false,
"need_admin": false
},
{
"name": "[上期]深渊/sy",
"desc": "深渊信息一览,后可跟UID",
"eg": "深渊100740568",
"need_ck": true,
"need_sk": false,
"need_admin": false
},
{
"name": "收集/sj",
"desc": "收集百分比,后可跟UID",
"eg": "收集100740568",
"need_ck": true,
"need_sk": false,
"need_admin": false
},
{
"name": "探索/ts",
"desc": "探索百分比,后可跟UID",
"eg": "探索100740568",
"need_ck": true,
"need_sk": false,
"need_admin": false
},
{
"name": "完成度/wcd",
"desc": "完成度百分比,后可跟UID",
"eg": "wcd100740568",
"need_ck": true,
"need_sk": false,
"need_admin": false
},
{
"name": "角色列表",
"desc": "查看完整的角色列表",
"eg": "角色列表",
"need_ck": true,
"need_sk": false,
"need_admin": false
},
{
"name": "每日/mr",
"desc": "自己的游戏日常和树脂",
"eg": "便签",
"need_ck": true,
"need_sk": false,
"need_admin": false
},
{
"name": "签到",
"desc": "进行一次米游社签到",
"eg": "签到",
"need_ck": true,
"need_sk": false,
"need_admin": false
},
{
"name": "当前状态",
"desc": "游戏树脂和派遣状态",
"eg": "当前状态",
"need_ck": true,
"need_sk": false,
"need_admin": false
},
{
"name": "每月统计",
"desc": "每月的原石获取情况",
"eg": "每月统计",
"need_ck": true,
"need_sk": false,
"need_admin": false
},
{
"name": "原石札记/zj",
"desc": "原石获取状态图片版",
"eg": "当前信息",
"need_ck": true,
"need_sk": false,
"need_admin": false
},
{
"name": "七圣召唤/召唤",
"desc": "查询自己的七圣召唤进度",
"eg": "召唤100740568",
"need_ck": false,
"need_sk": false,
"need_admin": false
},
{
"name": "原神注册时间",
"desc": "获取自己的原神注册时间",
"eg": "原神注册时间",
"need_ck": true,
"need_sk": false,
"need_admin": false
},
{
"name": "我的卡组",
"desc": "后可以跟数字指定套牌",
"eg": "我的卡组2",
"need_ck": true,
"need_sk": false,
"need_admin": false
}
]
},
"个人服务": {
"desc": "一些和其他账号相关的",
"data": [
@ -18,14 +135,6 @@
"need_sk": false,
"need_admin": false
},
{
"name": "扫码登陆",
"desc": "私聊扫码登陆,米游社扫码即可",
"eg": "扫码登陆",
"need_ck": false,
"need_sk": false,
"need_admin": false
},
{
"name": "刷新抽卡记录",
"desc": "更新抽卡记录需要SK",
@ -129,107 +238,6 @@
}
]
},
"查询服务": {
"desc": "可加 [查询]前缀",
"data": [
{
"name": "查询",
"desc": "角色信息一览,后可跟UID",
"eg": "查询100740568",
"need_ck": true,
"need_sk": false,
"need_admin": false
},
{
"name": "[上期]深渊/sy",
"desc": "深渊信息一览,后可跟UID",
"eg": "深渊100740568",
"need_ck": true,
"need_sk": false,
"need_admin": false
},
{
"name": "收集/sj",
"desc": "收集百分比,后可跟UID",
"eg": "收集100740568",
"need_ck": true,
"need_sk": false,
"need_admin": false
},
{
"name": "探索/ts",
"desc": "探索百分比,后可跟UID",
"eg": "探索100740568",
"need_ck": true,
"need_sk": false,
"need_admin": false
},
{
"name": "每日/mr",
"desc": "自己的游戏日常和树脂",
"eg": "便签",
"need_ck": true,
"need_sk": false,
"need_admin": false
},
{
"name": "签到",
"desc": "进行一次米游社签到",
"eg": "签到",
"need_ck": true,
"need_sk": false,
"need_admin": false
},
{
"name": "当前状态",
"desc": "游戏树脂和派遣状态",
"eg": "当前状态",
"need_ck": true,
"need_sk": false,
"need_admin": false
},
{
"name": "每月统计",
"desc": "每月的原石获取情况",
"eg": "每月统计",
"need_ck": true,
"need_sk": false,
"need_admin": false
},
{
"name": "原石札记/zj",
"desc": "原石获取状态图片版",
"eg": "当前信息",
"need_ck": true,
"need_sk": false,
"need_admin": false
},
{
"name": "七圣召唤/召唤",
"desc": "查询自己的七圣召唤进度",
"eg": "召唤100740568",
"need_ck": false,
"need_sk": false,
"need_admin": false
},
{
"name": "原神注册时间",
"desc": "获取自己的原神注册时间",
"eg": "原神注册时间",
"need_ck": true,
"need_sk": false,
"need_admin": false
},
{
"name": "我的卡组",
"desc": "后可以跟数字指定套牌",
"eg": "我的卡组2",
"need_ck": true,
"need_sk": false,
"need_admin": false
}
]
},
"面板服务": {
"desc": "数据源由Enka提供",
"data": [
@ -242,7 +250,7 @@
"need_admin": false
},
{
"name": "查询xx",
"name": "查询[角色]",
"desc": "查询角色面板",
"eg": "查询100740568心海",
"need_ck": false,
@ -250,7 +258,7 @@
"need_admin": false
},
{
"name": "查询x命xx",
"name": "查询[数字]命[角色]",
"desc": "为自己的面板增加虚构数据",
"eg": "查询六命公子",
"need_ck": false,
@ -258,7 +266,7 @@
"need_admin": false
},
{
"name": "查询xx换xx",
"name": "查询[角色]换[武器]",
"desc": "查询角色面板更换武器",
"eg": "查询六命心海换护摩",
"need_ck": false,
@ -266,7 +274,7 @@
"need_admin": false
},
{
"name": "查询xx带xx换xx",
"name": "[角色]带[武器]换[圣遗物]",
"desc": "查询不存在的角色",
"eg": "查询莱依拉带护摩换公子圣遗物",
"need_ck": false,
@ -274,7 +282,7 @@
"need_admin": false
},
{
"name": "查询xx换xx圣遗物",
"name": "查询[角色]换[角色]圣遗物",
"desc": "更换角色圣遗物",
"eg": "查询白术换公子圣遗物",
"need_ck": false,
@ -282,7 +290,7 @@
"need_admin": false
},
{
"name": "查询xx成长曲线",
"name": "查询[角色]成长曲线",
"desc": "输出当前角色成长表",
"eg": "查询刻晴曲线",
"need_ck": false,
@ -297,14 +305,6 @@
"need_sk": false,
"need_admin": false
},
{
"name": "查询队伍 xx",
"desc": "查询队伍伤害",
"eg": "查询队伍 万叶 公子 ...",
"need_ck": false,
"need_sk": false,
"need_admin": false
},
{
"name": "毕业度统计",
"desc": "查询所有已缓存角色的毕业度",
@ -313,14 +313,6 @@
"need_sk": false,
"need_admin": false
},
{
"name": "原图",
"desc": "开启随机图API之后可以查看原图",
"eg": "回复命令,原图",
"need_ck": false,
"need_sk": false,
"need_admin": false
},
{
"name": "圣遗物仓库",
"desc": "查看自己已缓存的圣遗物列表",
@ -343,17 +335,9 @@
"need_admin": true
},
{
"name": "排名列表",
"name": "排名列表/统计",
"desc": "查看自己的排名图片",
"eg": "排名列表",
"need_ck": false,
"need_sk": false,
"need_admin": false
},
{
"name": "排名统计",
"desc": "查看自己的排名文字",
"eg": "排名统计",
"eg": "排名列表、排名统计",
"need_ck": false,
"need_sk": false,
"need_admin": false
@ -365,6 +349,22 @@
"need_ck": false,
"need_sk": false,
"need_admin": false
},
{
"name": "角色排行榜",
"desc": "查看该角色的全球排名",
"eg": "角色排行榜雷神",
"need_ck": false,
"need_sk": false,
"need_admin": false
},
{
"name": "圣遗物排行榜",
"desc": "查看圣遗物全球排名",
"eg": "圣遗物排行榜暴击伤害",
"need_ck": false,
"need_sk": false,
"need_admin": false
}
]
},
@ -372,7 +372,7 @@
"desc": "获取一些没用的建议",
"data": [
{
"name": "xx用什么",
"name": "[角色]用什么",
"desc": "角色该如何养成",
"eg": "公子怎么养",
"need_ck": false,
@ -380,7 +380,7 @@
"need_admin": false
},
{
"name": "xx给谁用",
"name": "[武器]给谁用",
"desc": "武器/圣遗物能给谁用",
"eg": "护摩谁能用",
"need_ck": false,
@ -388,7 +388,7 @@
"need_admin": false
},
{
"name": "xx攻略/推荐",
"name": "[角色]攻略/推荐",
"desc": "西风驿站攻略图",
"eg": "可莉推荐",
"need_ck": false,
@ -396,7 +396,7 @@
"need_admin": false
},
{
"name": "参考面板xx",
"name": "参考面板[角色]",
"desc": "角色的小毕业面板",
"eg": "参考面板公子",
"need_ck": false,
@ -420,7 +420,7 @@
"need_admin": false
},
{
"name": "任务xx",
"name": "任务[地区]",
"desc": "某个任务的攻略",
"eg": "任务须弥",
"need_ck": false,
@ -452,21 +452,13 @@
"need_admin": false
},
{
"name": "订阅原神公告",
"name": "(取消)订阅原神公告",
"desc": "在本群订阅原神公告",
"eg": "订阅原神公告",
"need_ck": false,
"need_sk": false,
"need_admin": false
},
{
"name": "取消订阅原神公告",
"desc": "在本群取消订阅原神公告",
"eg": "取消订阅原神公告",
"need_ck": false,
"need_sk": false,
"need_admin": false
},
{
"name": "版本深渊",
"desc": "获取当前版本深渊阵容",
@ -569,7 +561,7 @@
"need_admin": true
},
{
"name": "哪里有xx",
"name": "哪里有[资源]",
"desc": "查找地图资源点",
"eg": "哪里有甜甜花",
"need_ck": false,
@ -597,30 +589,6 @@
"数据模块": {
"desc": "有关插件的一些数据",
"data": [
{
"name": "校验全部Cookies",
"desc": "校验全部ck的状态",
"eg": "校验全部Cookies",
"need_ck": false,
"need_sk": false,
"need_admin": false
},
{
"name": "校验全部Stoken",
"desc": "校验全部sk的状态",
"eg": "校验全部Stoken",
"need_ck": false,
"need_sk": false,
"need_admin": false
},
{
"name": "清除无效用户",
"desc": "清理失效的用户",
"eg": "清除无效用户",
"need_ck": false,
"need_sk": false,
"need_admin": true
},
{
"name": "gs配置",
"desc": "查看全局的插件配置",
@ -653,30 +621,6 @@
"need_sk": false,
"need_admin": true
},
{
"name": "gs重启",
"desc": "重启你的Bot",
"eg": "gs重启",
"need_ck": false,
"need_sk": false,
"need_admin": true
},
{
"name": "刷新ck",
"desc": "通过sk重新获取ck",
"eg": "刷新ck",
"need_ck": true,
"need_sk": true,
"need_admin": false
},
{
"name": "刷新全部ck",
"desc": "刷新绑定的全部ck",
"eg": "刷新全部ck",
"need_ck": true,
"need_sk": true,
"need_admin": true
},
{
"name": "强制推送体力提醒",
"desc": "强制推送全部体力信息",
@ -699,17 +643,9 @@
"need_admin": false
},
{
"name": "血量排行",
"name": "血量排行/血量表",
"desc": "常见怪物的血量排行",
"eg": "血量排行",
"need_ck": false,
"need_sk": false,
"need_admin": false
},
{
"name": "血量表",
"desc": "所有怪物的血量",
"eg": "血量表",
"eg": "血量排行、血量表",
"need_ck": false,
"need_sk": false,
"need_admin": false
@ -739,58 +675,5 @@
"need_admin": false
}
]
},
"GsCore": {
"desc": "核心组件管理",
"data": [
{
"name": "启动core",
"desc": "能看到这想必不需要这个命令",
"eg": "启动core",
"need_ck": false,
"need_sk": false,
"need_admin": true
},
{
"name": "连接core",
"desc": "有时候意外失联",
"eg": "连接core",
"need_ck": false,
"need_sk": false,
"need_admin": true
},
{
"name": "gs关闭core",
"desc": "有时候只想单独关闭core",
"eg": "gs关闭core",
"need_ck": false,
"need_sk": false,
"need_admin": true
},
{
"name": "gs全部更新",
"desc": "更新core和v4插件",
"eg": "gs全部更新",
"need_ck": false,
"need_sk": false,
"need_admin": true
},
{
"name": "gs一键安装",
"desc": "能看到这想必不需要这个命令",
"eg": "gs一键安装",
"need_ck": false,
"need_sk": false,
"need_admin": true
},
{
"name": "重置core配置",
"desc": "如果机器人只会响应你的命令",
"eg": "重置core配置",
"need_ck": false,
"need_sk": false,
"need_admin": true
}
]
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 936 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

View File

@ -62,13 +62,17 @@ def get_v4_title(avatar: Image.Image, uid: str, title_data: IndexData):
return title
def get_footer():
return Image.open(TEXT_PATH / 'footer.png')
def add_footer(
img: Image.Image,
w: int = 0,
offset_y: int = 0,
is_invert: bool = False,
):
footer = Image.open(TEXT_PATH / 'footer.png')
footer = get_footer()
if is_invert:
r, g, b, a = footer.split()
rgb_image = Image.merge('RGB', (r, g, b))

BIN
ICON.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB