适配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.sv import SV
from gsuid_core.bot import Bot from gsuid_core.bot import Bot
from gsuid_core.models import Event from gsuid_core.models import Event
from gsuid_core.aps import scheduler 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 .backup_data import data_backup
from ..genshinuid_map.draw_genshinmap_card import MAP_DATA 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(): if item.is_file():
item.unlink() item.unlink()
await bot.send('操作成功完成!') 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.sv import SV
from gsuid_core.bot import Bot from gsuid_core.bot import Bot
from gsuid_core.models import Event from gsuid_core.models import Event
from gsuid_core.logger import logger 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帮助') sv_gs_help = SV('gs帮助')
@ -13,3 +15,6 @@ async def send_help_img(bot: Bot, ev: Event):
logger.info('开始执行[gs帮助]') logger.info('开始执行[gs帮助]')
im = await get_core_help() im = await get_core_help()
await bot.send(im) await bot.send(im)
register_help('GenshinUID', 'gs帮助', Image.open(ICON))

View File

@ -1,27 +1,32 @@
from pathlib import Path from pathlib import Path
from typing import Dict, Union, Optional from typing import Dict, Union
import aiofiles import aiofiles
from PIL import Image from PIL import Image
from msgspec import json as msgjson from msgspec import json as msgjson
from gsuid_core.help.model import PluginHelp from gsuid_core.help.model import PluginHelp
from gsuid_core.help.draw_plugin_help import get_help 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 ..genshinuid_config.gs_config import gsconfig
from ..utils.image.image_tools import get_color_bg
from ..version import Genshin_version, GenshinUID_version from ..version import Genshin_version, GenshinUID_version
from ..utils.fonts.genshin_fonts import genshin_font_origin 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' TEXT_PATH = Path(__file__).parent / 'texture2d'
HELP_DATA = Path(__file__).parent / 'help.json' 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]]: async def get_help_data() -> Dict[str, PluginHelp]:
if HELP_DATA.exists(): async with aiofiles.open(HELP_DATA, 'rb') as file:
async with aiofiles.open(HELP_DATA, 'rb') as file: return msgjson.decode(await file.read(), type=Dict[str, PluginHelp])
return msgjson.decode(
await file.read(), type=Dict[str, PluginHelp]
)
async def get_core_help() -> Union[bytes, str]: async def get_core_help() -> Union[bytes, str]:
@ -35,6 +40,24 @@ async def get_core_help() -> Union[bytes, str]:
else: else:
column = 6 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( img = await get_help(
'GenshinUID', 'GenshinUID',
f'版本号:{GenshinUID_version}', f'版本号:{GenshinUID_version}',
@ -51,3 +74,4 @@ async def get_core_help() -> Union[bytes, str]:
extra_message=[f'数据版本 {Genshin_version}'], extra_message=[f'数据版本 {Genshin_version}'],
) )
return img 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": "一些和其他账号相关的", "desc": "一些和其他账号相关的",
"data": [ "data": [
@ -18,14 +135,6 @@
"need_sk": false, "need_sk": false,
"need_admin": false "need_admin": false
}, },
{
"name": "扫码登陆",
"desc": "私聊扫码登陆,米游社扫码即可",
"eg": "扫码登陆",
"need_ck": false,
"need_sk": false,
"need_admin": false
},
{ {
"name": "刷新抽卡记录", "name": "刷新抽卡记录",
"desc": "更新抽卡记录需要SK", "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提供", "desc": "数据源由Enka提供",
"data": [ "data": [
@ -242,7 +250,7 @@
"need_admin": false "need_admin": false
}, },
{ {
"name": "查询xx", "name": "查询[角色]",
"desc": "查询角色面板", "desc": "查询角色面板",
"eg": "查询100740568心海", "eg": "查询100740568心海",
"need_ck": false, "need_ck": false,
@ -250,7 +258,7 @@
"need_admin": false "need_admin": false
}, },
{ {
"name": "查询x命xx", "name": "查询[数字]命[角色]",
"desc": "为自己的面板增加虚构数据", "desc": "为自己的面板增加虚构数据",
"eg": "查询六命公子", "eg": "查询六命公子",
"need_ck": false, "need_ck": false,
@ -258,7 +266,7 @@
"need_admin": false "need_admin": false
}, },
{ {
"name": "查询xx换xx", "name": "查询[角色]换[武器]",
"desc": "查询角色面板更换武器", "desc": "查询角色面板更换武器",
"eg": "查询六命心海换护摩", "eg": "查询六命心海换护摩",
"need_ck": false, "need_ck": false,
@ -266,7 +274,7 @@
"need_admin": false "need_admin": false
}, },
{ {
"name": "查询xx带xx换xx", "name": "[角色]带[武器]换[圣遗物]",
"desc": "查询不存在的角色", "desc": "查询不存在的角色",
"eg": "查询莱依拉带护摩换公子圣遗物", "eg": "查询莱依拉带护摩换公子圣遗物",
"need_ck": false, "need_ck": false,
@ -274,7 +282,7 @@
"need_admin": false "need_admin": false
}, },
{ {
"name": "查询xx换xx圣遗物", "name": "查询[角色]换[角色]圣遗物",
"desc": "更换角色圣遗物", "desc": "更换角色圣遗物",
"eg": "查询白术换公子圣遗物", "eg": "查询白术换公子圣遗物",
"need_ck": false, "need_ck": false,
@ -282,7 +290,7 @@
"need_admin": false "need_admin": false
}, },
{ {
"name": "查询xx成长曲线", "name": "查询[角色]成长曲线",
"desc": "输出当前角色成长表", "desc": "输出当前角色成长表",
"eg": "查询刻晴曲线", "eg": "查询刻晴曲线",
"need_ck": false, "need_ck": false,
@ -297,14 +305,6 @@
"need_sk": false, "need_sk": false,
"need_admin": false "need_admin": false
}, },
{
"name": "查询队伍 xx",
"desc": "查询队伍伤害",
"eg": "查询队伍 万叶 公子 ...",
"need_ck": false,
"need_sk": false,
"need_admin": false
},
{ {
"name": "毕业度统计", "name": "毕业度统计",
"desc": "查询所有已缓存角色的毕业度", "desc": "查询所有已缓存角色的毕业度",
@ -313,14 +313,6 @@
"need_sk": false, "need_sk": false,
"need_admin": false "need_admin": false
}, },
{
"name": "原图",
"desc": "开启随机图API之后可以查看原图",
"eg": "回复命令,原图",
"need_ck": false,
"need_sk": false,
"need_admin": false
},
{ {
"name": "圣遗物仓库", "name": "圣遗物仓库",
"desc": "查看自己已缓存的圣遗物列表", "desc": "查看自己已缓存的圣遗物列表",
@ -343,17 +335,9 @@
"need_admin": true "need_admin": true
}, },
{ {
"name": "排名列表", "name": "排名列表/统计",
"desc": "查看自己的排名图片", "desc": "查看自己的排名图片",
"eg": "排名列表", "eg": "排名列表、排名统计",
"need_ck": false,
"need_sk": false,
"need_admin": false
},
{
"name": "排名统计",
"desc": "查看自己的排名文字",
"eg": "排名统计",
"need_ck": false, "need_ck": false,
"need_sk": false, "need_sk": false,
"need_admin": false "need_admin": false
@ -365,6 +349,22 @@
"need_ck": false, "need_ck": false,
"need_sk": false, "need_sk": false,
"need_admin": 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": "获取一些没用的建议", "desc": "获取一些没用的建议",
"data": [ "data": [
{ {
"name": "xx用什么", "name": "[角色]用什么",
"desc": "角色该如何养成", "desc": "角色该如何养成",
"eg": "公子怎么养", "eg": "公子怎么养",
"need_ck": false, "need_ck": false,
@ -380,7 +380,7 @@
"need_admin": false "need_admin": false
}, },
{ {
"name": "xx给谁用", "name": "[武器]给谁用",
"desc": "武器/圣遗物能给谁用", "desc": "武器/圣遗物能给谁用",
"eg": "护摩谁能用", "eg": "护摩谁能用",
"need_ck": false, "need_ck": false,
@ -388,7 +388,7 @@
"need_admin": false "need_admin": false
}, },
{ {
"name": "xx攻略/推荐", "name": "[角色]攻略/推荐",
"desc": "西风驿站攻略图", "desc": "西风驿站攻略图",
"eg": "可莉推荐", "eg": "可莉推荐",
"need_ck": false, "need_ck": false,
@ -396,7 +396,7 @@
"need_admin": false "need_admin": false
}, },
{ {
"name": "参考面板xx", "name": "参考面板[角色]",
"desc": "角色的小毕业面板", "desc": "角色的小毕业面板",
"eg": "参考面板公子", "eg": "参考面板公子",
"need_ck": false, "need_ck": false,
@ -420,7 +420,7 @@
"need_admin": false "need_admin": false
}, },
{ {
"name": "任务xx", "name": "任务[地区]",
"desc": "某个任务的攻略", "desc": "某个任务的攻略",
"eg": "任务须弥", "eg": "任务须弥",
"need_ck": false, "need_ck": false,
@ -452,21 +452,13 @@
"need_admin": false "need_admin": false
}, },
{ {
"name": "订阅原神公告", "name": "(取消)订阅原神公告",
"desc": "在本群订阅原神公告", "desc": "在本群订阅原神公告",
"eg": "订阅原神公告", "eg": "订阅原神公告",
"need_ck": false, "need_ck": false,
"need_sk": false, "need_sk": false,
"need_admin": false "need_admin": false
}, },
{
"name": "取消订阅原神公告",
"desc": "在本群取消订阅原神公告",
"eg": "取消订阅原神公告",
"need_ck": false,
"need_sk": false,
"need_admin": false
},
{ {
"name": "版本深渊", "name": "版本深渊",
"desc": "获取当前版本深渊阵容", "desc": "获取当前版本深渊阵容",
@ -569,7 +561,7 @@
"need_admin": true "need_admin": true
}, },
{ {
"name": "哪里有xx", "name": "哪里有[资源]",
"desc": "查找地图资源点", "desc": "查找地图资源点",
"eg": "哪里有甜甜花", "eg": "哪里有甜甜花",
"need_ck": false, "need_ck": false,
@ -597,30 +589,6 @@
"数据模块": { "数据模块": {
"desc": "有关插件的一些数据", "desc": "有关插件的一些数据",
"data": [ "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配置", "name": "gs配置",
"desc": "查看全局的插件配置", "desc": "查看全局的插件配置",
@ -653,30 +621,6 @@
"need_sk": false, "need_sk": false,
"need_admin": true "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": "强制推送体力提醒", "name": "强制推送体力提醒",
"desc": "强制推送全部体力信息", "desc": "强制推送全部体力信息",
@ -699,17 +643,9 @@
"need_admin": false "need_admin": false
}, },
{ {
"name": "血量排行", "name": "血量排行/血量表",
"desc": "常见怪物的血量排行", "desc": "常见怪物的血量排行",
"eg": "血量排行", "eg": "血量排行、血量表",
"need_ck": false,
"need_sk": false,
"need_admin": false
},
{
"name": "血量表",
"desc": "所有怪物的血量",
"eg": "血量表",
"need_ck": false, "need_ck": false,
"need_sk": false, "need_sk": false,
"need_admin": false "need_admin": false
@ -739,58 +675,5 @@
"need_admin": false "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 return title
def get_footer():
return Image.open(TEXT_PATH / 'footer.png')
def add_footer( def add_footer(
img: Image.Image, img: Image.Image,
w: int = 0, w: int = 0,
offset_y: int = 0, offset_y: int = 0,
is_invert: bool = False, is_invert: bool = False,
): ):
footer = Image.open(TEXT_PATH / 'footer.png') footer = get_footer()
if is_invert: if is_invert:
r, g, b, a = footer.split() r, g, b, a = footer.split()
rgb_image = Image.merge('RGB', (r, g, b)) rgb_image = Image.merge('RGB', (r, g, b))

BIN
ICON.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB