🎨 优化头像获取, logger调用, 重复资源利用
@ -3,6 +3,7 @@ import re
|
|||||||
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.utils.database.api import get_uid
|
from gsuid_core.utils.database.api import get_uid
|
||||||
from gsuid_core.utils.database.models import GsBind
|
from gsuid_core.utils.database.models import GsBind
|
||||||
|
|
||||||
@ -26,18 +27,18 @@ async def send_srabyss_info(bot: Bot, ev: Event):
|
|||||||
if name:
|
if name:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
await bot.logger.info("开始执行[sr查询深渊信息]")
|
logger.info("开始执行[sr查询深渊信息]")
|
||||||
uid, user_id = await get_uid(bot, ev, GsBind, "sr", True)
|
uid, user_id = await get_uid(bot, ev, GsBind, "sr", True)
|
||||||
if uid is None:
|
if uid is None:
|
||||||
return await bot.send(UID_HINT)
|
return await bot.send(UID_HINT)
|
||||||
await bot.logger.info(f"[sr查询深渊信息]uid: {uid}")
|
logger.info(f"[sr查询深渊信息]uid: {uid}")
|
||||||
|
|
||||||
if "上期" in ev.command:
|
if "上期" in ev.command:
|
||||||
schedule_type = "2"
|
schedule_type = "2"
|
||||||
else:
|
else:
|
||||||
schedule_type = "1"
|
schedule_type = "1"
|
||||||
await bot.logger.info(f"[sr查询深渊信息]深渊期数: {schedule_type}")
|
logger.info(f"[sr查询深渊信息]深渊期数: {schedule_type}")
|
||||||
|
|
||||||
im = await draw_abyss_img(user_id, uid, ev.sender, schedule_type)
|
im = await draw_abyss_img(ev, uid, schedule_type)
|
||||||
await bot.send(im)
|
await bot.send(im)
|
||||||
return None
|
return None
|
||||||
|
@ -1,16 +1,17 @@
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any, Dict, Union
|
from typing import Union
|
||||||
|
|
||||||
from PIL import Image, ImageDraw
|
from PIL import Image, ImageDraw
|
||||||
|
from gsuid_core.models import Event
|
||||||
from gsuid_core.logger import logger
|
from gsuid_core.logger import logger
|
||||||
from gsuid_core.utils.error_reply import get_error
|
from gsuid_core.utils.error_reply import get_error
|
||||||
from gsuid_core.utils.image.convert import convert_img
|
from gsuid_core.utils.image.convert import convert_img
|
||||||
from gsuid_core.utils.image.image_tools import (
|
from gsuid_core.utils.image.image_tools import draw_pic_with_ring
|
||||||
draw_pic_with_ring,
|
|
||||||
get_qq_avatar,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
from ..utils.mys_api import mys_api
|
||||||
from ..sruid_utils.api.mys.models import AbyssAvatar
|
from ..sruid_utils.api.mys.models import AbyssAvatar
|
||||||
|
from ..utils.resource.get_pic_from import get_roleinfo_icon
|
||||||
|
from ..utils.image.image_tools import elements, _get_event_avatar
|
||||||
from ..utils.fonts.starrail_fonts import (
|
from ..utils.fonts.starrail_fonts import (
|
||||||
sr_font_22,
|
sr_font_22,
|
||||||
sr_font_28,
|
sr_font_28,
|
||||||
@ -18,8 +19,6 @@ from ..utils.fonts.starrail_fonts import (
|
|||||||
sr_font_34,
|
sr_font_34,
|
||||||
sr_font_42,
|
sr_font_42,
|
||||||
)
|
)
|
||||||
from ..utils.mys_api import mys_api
|
|
||||||
from ..utils.resource.get_pic_from import get_roleinfo_icon
|
|
||||||
|
|
||||||
TEXT_PATH = Path(__file__).parent / "texture2D"
|
TEXT_PATH = Path(__file__).parent / "texture2D"
|
||||||
white_color = (255, 255, 255)
|
white_color = (255, 255, 255)
|
||||||
@ -32,16 +31,6 @@ rank_bg = Image.open(TEXT_PATH / "rank_bg.png").convert("RGBA")
|
|||||||
star_yes = Image.open(TEXT_PATH / "star.png").convert("RGBA")
|
star_yes = Image.open(TEXT_PATH / "star.png").convert("RGBA")
|
||||||
star_gray = Image.open(TEXT_PATH / "star_gray.png").convert("RGBA")
|
star_gray = Image.open(TEXT_PATH / "star_gray.png").convert("RGBA")
|
||||||
|
|
||||||
elements = {
|
|
||||||
"ice": Image.open(TEXT_PATH / "IconNatureColorIce.png").convert("RGBA"),
|
|
||||||
"fire": Image.open(TEXT_PATH / "IconNatureColorFire.png").convert("RGBA"),
|
|
||||||
"imaginary": Image.open(TEXT_PATH / "IconNatureColorImaginary.png").convert("RGBA"),
|
|
||||||
"quantum": Image.open(TEXT_PATH / "IconNatureColorQuantum.png").convert("RGBA"),
|
|
||||||
"lightning": Image.open(TEXT_PATH / "IconNatureColorThunder.png").convert("RGBA"),
|
|
||||||
"wind": Image.open(TEXT_PATH / "IconNatureColorWind.png").convert("RGBA"),
|
|
||||||
"physical": Image.open(TEXT_PATH / "IconNaturePhysical.png").convert("RGBA"),
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
async def get_abyss_star_pic(star: int) -> Image.Image:
|
async def get_abyss_star_pic(star: int) -> Image.Image:
|
||||||
return Image.open(TEXT_PATH / f"star{star}.png")
|
return Image.open(TEXT_PATH / f"star{star}.png")
|
||||||
@ -117,9 +106,8 @@ async def _draw_floor_card(
|
|||||||
|
|
||||||
|
|
||||||
async def draw_abyss_img(
|
async def draw_abyss_img(
|
||||||
qid: Union[str, int],
|
ev: Event,
|
||||||
uid: str,
|
uid: str,
|
||||||
sender: Dict[str, Any],
|
|
||||||
schedule_type: str = "1",
|
schedule_type: str = "1",
|
||||||
) -> Union[bytes, str]:
|
) -> Union[bytes, str]:
|
||||||
raw_abyss_data = await mys_api.get_abyss_info(uid, schedule_type)
|
raw_abyss_data = await mys_api.get_abyss_info(uid, schedule_type)
|
||||||
@ -132,7 +120,9 @@ async def draw_abyss_img(
|
|||||||
return "你还没有挑战本期深渊!\n可以使用[sr上期深渊]命令查询上期~"
|
return "你还没有挑战本期深渊!\n可以使用[sr上期深渊]命令查询上期~"
|
||||||
# 过滤掉 is_fast (快速通关) 为 True 的项
|
# 过滤掉 is_fast (快速通关) 为 True 的项
|
||||||
floor_detail = [
|
floor_detail = [
|
||||||
detail for detail in raw_abyss_data.all_floor_detail if not detail.is_fast
|
detail
|
||||||
|
for detail in raw_abyss_data.all_floor_detail
|
||||||
|
if not detail.is_fast
|
||||||
]
|
]
|
||||||
floor_num = len(floor_detail)
|
floor_num = len(floor_detail)
|
||||||
|
|
||||||
@ -145,13 +135,7 @@ async def draw_abyss_img(
|
|||||||
img.paste(abyss_title, (0, 0), abyss_title)
|
img.paste(abyss_title, (0, 0), abyss_title)
|
||||||
|
|
||||||
# 获取头像
|
# 获取头像
|
||||||
_id = str(qid)
|
char_pic = await _get_event_avatar(ev)
|
||||||
if _id.startswith("http"):
|
|
||||||
char_pic = await get_qq_avatar(avatar_url=_id)
|
|
||||||
elif sender.get("avatar") is not None:
|
|
||||||
char_pic = await get_qq_avatar(avatar_url=sender["avatar"])
|
|
||||||
else:
|
|
||||||
char_pic = await get_qq_avatar(qid=qid)
|
|
||||||
char_pic = await draw_pic_with_ring(char_pic, 250, None, False)
|
char_pic = await draw_pic_with_ring(char_pic, 250, None, False)
|
||||||
|
|
||||||
img.paste(char_pic, (325, 132), char_pic)
|
img.paste(char_pic, (325, 132), char_pic)
|
||||||
|
@ -3,6 +3,7 @@ import re
|
|||||||
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.utils.database.api import get_uid
|
from gsuid_core.utils.database.api import get_uid
|
||||||
from gsuid_core.utils.database.models import GsBind
|
from gsuid_core.utils.database.models import GsBind
|
||||||
|
|
||||||
@ -26,18 +27,18 @@ async def send_srabyss_info(bot: Bot, ev: Event):
|
|||||||
if name:
|
if name:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
await bot.logger.info("开始执行[sr查询末日幻影信息]")
|
logger.info("开始执行[sr查询末日幻影信息]")
|
||||||
uid, user_id = await get_uid(bot, ev, GsBind, "sr", True)
|
uid, user_id = await get_uid(bot, ev, GsBind, "sr", True)
|
||||||
if uid is None:
|
if uid is None:
|
||||||
return await bot.send(UID_HINT)
|
return await bot.send(UID_HINT)
|
||||||
await bot.logger.info(f"[sr查询末日幻影信息]uid: {uid}")
|
logger.info(f"[sr查询末日幻影信息]uid: {uid}")
|
||||||
|
|
||||||
if "上期" in ev.command:
|
if "上期" in ev.command:
|
||||||
schedule_type = "2"
|
schedule_type = "2"
|
||||||
else:
|
else:
|
||||||
schedule_type = "1"
|
schedule_type = "1"
|
||||||
await bot.logger.info(f"[sr查询末日幻影信息]末日幻影期数: {schedule_type}")
|
logger.info(f"[sr查询末日幻影信息]末日幻影期数: {schedule_type}")
|
||||||
|
|
||||||
im = await draw_abyss_img(user_id, uid, ev.sender, schedule_type)
|
im = await draw_abyss_img(ev, uid, schedule_type)
|
||||||
await bot.send(im)
|
await bot.send(im)
|
||||||
return None
|
return None
|
||||||
|
@ -1,16 +1,17 @@
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any, Dict, Union
|
from typing import Union
|
||||||
|
|
||||||
from PIL import Image, ImageDraw
|
from PIL import Image, ImageDraw
|
||||||
|
from gsuid_core.models import Event
|
||||||
from gsuid_core.logger import logger
|
from gsuid_core.logger import logger
|
||||||
from gsuid_core.utils.error_reply import get_error
|
from gsuid_core.utils.error_reply import get_error
|
||||||
from gsuid_core.utils.image.convert import convert_img
|
from gsuid_core.utils.image.convert import convert_img
|
||||||
from gsuid_core.utils.image.image_tools import (
|
from gsuid_core.utils.image.image_tools import draw_pic_with_ring
|
||||||
draw_pic_with_ring,
|
|
||||||
get_qq_avatar,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
from ..utils.mys_api import mys_api
|
||||||
from ..sruid_utils.api.mys.models import AbyssAvatar
|
from ..sruid_utils.api.mys.models import AbyssAvatar
|
||||||
|
from ..utils.resource.get_pic_from import get_roleinfo_icon
|
||||||
|
from ..utils.image.image_tools import elements, _get_event_avatar
|
||||||
from ..utils.fonts.starrail_fonts import (
|
from ..utils.fonts.starrail_fonts import (
|
||||||
sr_font_22,
|
sr_font_22,
|
||||||
sr_font_28,
|
sr_font_28,
|
||||||
@ -18,8 +19,6 @@ from ..utils.fonts.starrail_fonts import (
|
|||||||
sr_font_34,
|
sr_font_34,
|
||||||
sr_font_42,
|
sr_font_42,
|
||||||
)
|
)
|
||||||
from ..utils.mys_api import mys_api
|
|
||||||
from ..utils.resource.get_pic_from import get_roleinfo_icon
|
|
||||||
|
|
||||||
TEXT_PATH = Path(__file__).parent / "texture2D"
|
TEXT_PATH = Path(__file__).parent / "texture2D"
|
||||||
white_color = (255, 255, 255)
|
white_color = (255, 255, 255)
|
||||||
@ -32,16 +31,6 @@ rank_bg = Image.open(TEXT_PATH / "rank_bg.png").convert("RGBA")
|
|||||||
star_yes = Image.open(TEXT_PATH / "star.png").convert("RGBA")
|
star_yes = Image.open(TEXT_PATH / "star.png").convert("RGBA")
|
||||||
star_gray = Image.open(TEXT_PATH / "star_gray.png").convert("RGBA")
|
star_gray = Image.open(TEXT_PATH / "star_gray.png").convert("RGBA")
|
||||||
|
|
||||||
elements = {
|
|
||||||
"ice": Image.open(TEXT_PATH / "IconNatureColorIce.png").convert("RGBA"),
|
|
||||||
"fire": Image.open(TEXT_PATH / "IconNatureColorFire.png").convert("RGBA"),
|
|
||||||
"imaginary": Image.open(TEXT_PATH / "IconNatureColorImaginary.png").convert("RGBA"),
|
|
||||||
"quantum": Image.open(TEXT_PATH / "IconNatureColorQuantum.png").convert("RGBA"),
|
|
||||||
"lightning": Image.open(TEXT_PATH / "IconNatureColorThunder.png").convert("RGBA"),
|
|
||||||
"wind": Image.open(TEXT_PATH / "IconNatureColorWind.png").convert("RGBA"),
|
|
||||||
"physical": Image.open(TEXT_PATH / "IconNaturePhysical.png").convert("RGBA"),
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
async def get_abyss_star_pic(star: int) -> Image.Image:
|
async def get_abyss_star_pic(star: int) -> Image.Image:
|
||||||
return Image.open(TEXT_PATH / f"star{star}.png")
|
return Image.open(TEXT_PATH / f"star{star}.png")
|
||||||
@ -122,9 +111,8 @@ async def _draw_floor_card(
|
|||||||
|
|
||||||
|
|
||||||
async def draw_abyss_img(
|
async def draw_abyss_img(
|
||||||
qid: Union[str, int],
|
ev: Event,
|
||||||
uid: str,
|
uid: str,
|
||||||
sender: Dict[str, Any],
|
|
||||||
schedule_type: str = "1",
|
schedule_type: str = "1",
|
||||||
) -> Union[bytes, str]:
|
) -> Union[bytes, str]:
|
||||||
raw_abyss_data = await mys_api.get_abyss_boss_info(uid, schedule_type)
|
raw_abyss_data = await mys_api.get_abyss_boss_info(uid, schedule_type)
|
||||||
@ -136,7 +124,9 @@ async def draw_abyss_img(
|
|||||||
return "你还没有挑战本期末日幻影!\n可以使用[sr上期末日幻影]命令查询上期~"
|
return "你还没有挑战本期末日幻影!\n可以使用[sr上期末日幻影]命令查询上期~"
|
||||||
# 过滤掉 is_fast (快速通关) 为 True 的项
|
# 过滤掉 is_fast (快速通关) 为 True 的项
|
||||||
floor_detail = [
|
floor_detail = [
|
||||||
detail for detail in raw_abyss_data.all_floor_detail if not detail.is_fast
|
detail
|
||||||
|
for detail in raw_abyss_data.all_floor_detail
|
||||||
|
if not detail.is_fast
|
||||||
]
|
]
|
||||||
floor_num = len(floor_detail)
|
floor_num = len(floor_detail)
|
||||||
|
|
||||||
@ -149,13 +139,7 @@ async def draw_abyss_img(
|
|||||||
img.paste(abyss_title, (0, 0), abyss_title)
|
img.paste(abyss_title, (0, 0), abyss_title)
|
||||||
|
|
||||||
# 获取头像
|
# 获取头像
|
||||||
_id = str(qid)
|
char_pic = await _get_event_avatar(ev)
|
||||||
if _id.startswith("http"):
|
|
||||||
char_pic = await get_qq_avatar(avatar_url=_id)
|
|
||||||
elif sender.get("avatar") is not None:
|
|
||||||
char_pic = await get_qq_avatar(avatar_url=sender["avatar"])
|
|
||||||
else:
|
|
||||||
char_pic = await get_qq_avatar(qid=qid)
|
|
||||||
char_pic = await draw_pic_with_ring(char_pic, 250, None, False)
|
char_pic = await draw_pic_with_ring(char_pic, 250, None, False)
|
||||||
|
|
||||||
img.paste(char_pic, (325, 132), char_pic)
|
img.paste(char_pic, (325, 132), char_pic)
|
||||||
|
@ -3,6 +3,7 @@ import re
|
|||||||
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.utils.database.api import get_uid
|
from gsuid_core.utils.database.api import get_uid
|
||||||
from gsuid_core.utils.database.models import GsBind
|
from gsuid_core.utils.database.models import GsBind
|
||||||
|
|
||||||
@ -28,18 +29,18 @@ async def send_srabyss_info(bot: Bot, ev: Event):
|
|||||||
if name:
|
if name:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
await bot.logger.info("开始执行[sr查询虚构叙事信息]")
|
logger.info("开始执行[sr查询虚构叙事信息]")
|
||||||
uid, user_id = await get_uid(bot, ev, GsBind, "sr", True)
|
uid, user_id = await get_uid(bot, ev, GsBind, "sr", True)
|
||||||
if uid is None:
|
if uid is None:
|
||||||
return await bot.send(UID_HINT)
|
return await bot.send(UID_HINT)
|
||||||
await bot.logger.info(f"[sr查询虚构叙事信息]uid: {uid}")
|
logger.info(f"[sr查询虚构叙事信息]uid: {uid}")
|
||||||
|
|
||||||
if "sq" in ev.command or "上期" in ev.command:
|
if "sq" in ev.command or "上期" in ev.command:
|
||||||
schedule_type = "2"
|
schedule_type = "2"
|
||||||
else:
|
else:
|
||||||
schedule_type = "1"
|
schedule_type = "1"
|
||||||
await bot.logger.info(f"[sr查询虚构叙事信息]虚构叙事期数: {schedule_type}")
|
logger.info(f"[sr查询虚构叙事信息]虚构叙事期数: {schedule_type}")
|
||||||
|
|
||||||
im = await draw_abyss_img(user_id, uid, ev.sender, schedule_type)
|
im = await draw_abyss_img(ev, uid, schedule_type)
|
||||||
await bot.send(im)
|
await bot.send(im)
|
||||||
return None
|
return None
|
||||||
|
@ -1,16 +1,17 @@
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any, Dict, Union
|
from typing import Union
|
||||||
|
|
||||||
from PIL import Image, ImageDraw
|
from PIL import Image, ImageDraw
|
||||||
|
from gsuid_core.models import Event
|
||||||
from gsuid_core.logger import logger
|
from gsuid_core.logger import logger
|
||||||
from gsuid_core.utils.error_reply import get_error
|
from gsuid_core.utils.error_reply import get_error
|
||||||
from gsuid_core.utils.image.convert import convert_img
|
from gsuid_core.utils.image.convert import convert_img
|
||||||
from gsuid_core.utils.image.image_tools import (
|
from gsuid_core.utils.image.image_tools import draw_pic_with_ring
|
||||||
draw_pic_with_ring,
|
|
||||||
get_qq_avatar,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
from ..utils.mys_api import mys_api
|
||||||
from ..sruid_utils.api.mys.models import AbyssAvatar
|
from ..sruid_utils.api.mys.models import AbyssAvatar
|
||||||
|
from ..utils.resource.get_pic_from import get_roleinfo_icon
|
||||||
|
from ..utils.image.image_tools import elements, _get_event_avatar
|
||||||
from ..utils.fonts.starrail_fonts import (
|
from ..utils.fonts.starrail_fonts import (
|
||||||
sr_font_22,
|
sr_font_22,
|
||||||
sr_font_28,
|
sr_font_28,
|
||||||
@ -18,8 +19,6 @@ from ..utils.fonts.starrail_fonts import (
|
|||||||
sr_font_34,
|
sr_font_34,
|
||||||
sr_font_42,
|
sr_font_42,
|
||||||
)
|
)
|
||||||
from ..utils.mys_api import mys_api
|
|
||||||
from ..utils.resource.get_pic_from import get_roleinfo_icon
|
|
||||||
|
|
||||||
TEXT_PATH = Path(__file__).parent / "texture2D"
|
TEXT_PATH = Path(__file__).parent / "texture2D"
|
||||||
white_color = (255, 255, 255)
|
white_color = (255, 255, 255)
|
||||||
@ -32,16 +31,6 @@ rank_bg = Image.open(TEXT_PATH / "rank_bg.png").convert("RGBA")
|
|||||||
star_yes = Image.open(TEXT_PATH / "star.png").convert("RGBA")
|
star_yes = Image.open(TEXT_PATH / "star.png").convert("RGBA")
|
||||||
star_gray = Image.open(TEXT_PATH / "star_gray.png").convert("RGBA")
|
star_gray = Image.open(TEXT_PATH / "star_gray.png").convert("RGBA")
|
||||||
|
|
||||||
elements = {
|
|
||||||
"ice": Image.open(TEXT_PATH / "IconNatureColorIce.png").convert("RGBA"),
|
|
||||||
"fire": Image.open(TEXT_PATH / "IconNatureColorFire.png").convert("RGBA"),
|
|
||||||
"imaginary": Image.open(TEXT_PATH / "IconNatureColorImaginary.png").convert("RGBA"),
|
|
||||||
"quantum": Image.open(TEXT_PATH / "IconNatureColorQuantum.png").convert("RGBA"),
|
|
||||||
"lightning": Image.open(TEXT_PATH / "IconNatureColorThunder.png").convert("RGBA"),
|
|
||||||
"wind": Image.open(TEXT_PATH / "IconNatureColorWind.png").convert("RGBA"),
|
|
||||||
"physical": Image.open(TEXT_PATH / "IconNaturePhysical.png").convert("RGBA"),
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
async def get_abyss_star_pic(star: int) -> Image.Image:
|
async def get_abyss_star_pic(star: int) -> Image.Image:
|
||||||
return Image.open(TEXT_PATH / f"star{star}.png")
|
return Image.open(TEXT_PATH / f"star{star}.png")
|
||||||
@ -137,9 +126,8 @@ async def _draw_floor_card(
|
|||||||
|
|
||||||
|
|
||||||
async def draw_abyss_img(
|
async def draw_abyss_img(
|
||||||
qid: Union[str, int],
|
ev: Event,
|
||||||
uid: str,
|
uid: str,
|
||||||
sender: Dict[str, Any],
|
|
||||||
schedule_type: str = "1",
|
schedule_type: str = "1",
|
||||||
) -> Union[bytes, str]:
|
) -> Union[bytes, str]:
|
||||||
raw_abyss_data = await mys_api.get_abyss_story_info(uid, schedule_type)
|
raw_abyss_data = await mys_api.get_abyss_story_info(uid, schedule_type)
|
||||||
@ -151,7 +139,9 @@ async def draw_abyss_img(
|
|||||||
return "你还没有挑战本期虚构叙事!\n可以使用[sr上期虚构叙事]命令查询上期~"
|
return "你还没有挑战本期虚构叙事!\n可以使用[sr上期虚构叙事]命令查询上期~"
|
||||||
# 过滤掉 is_fast (快速通关) 为 True 的项
|
# 过滤掉 is_fast (快速通关) 为 True 的项
|
||||||
floor_detail = [
|
floor_detail = [
|
||||||
detail for detail in raw_abyss_data.all_floor_detail if not detail.is_fast
|
detail
|
||||||
|
for detail in raw_abyss_data.all_floor_detail
|
||||||
|
if not detail.is_fast
|
||||||
]
|
]
|
||||||
floor_num = len(floor_detail)
|
floor_num = len(floor_detail)
|
||||||
|
|
||||||
@ -164,13 +154,7 @@ async def draw_abyss_img(
|
|||||||
img.paste(abyss_title, (0, 0), abyss_title)
|
img.paste(abyss_title, (0, 0), abyss_title)
|
||||||
|
|
||||||
# 获取头像
|
# 获取头像
|
||||||
_id = str(qid)
|
char_pic = await _get_event_avatar(ev)
|
||||||
if _id.startswith("http"):
|
|
||||||
char_pic = await get_qq_avatar(avatar_url=_id)
|
|
||||||
elif sender.get("avatar") is not None:
|
|
||||||
char_pic = await get_qq_avatar(avatar_url=sender["avatar"])
|
|
||||||
else:
|
|
||||||
char_pic = await get_qq_avatar(qid=qid)
|
|
||||||
char_pic = await draw_pic_with_ring(char_pic, 250, None, False)
|
char_pic = await draw_pic_with_ring(char_pic, 250, None, False)
|
||||||
|
|
||||||
img.paste(char_pic, (325, 132), char_pic)
|
img.paste(char_pic, (325, 132), char_pic)
|
||||||
|
@ -6,6 +6,7 @@ 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.message_models import Button
|
from gsuid_core.message_models import Button
|
||||||
from gsuid_core.utils.database.api import get_uid
|
from gsuid_core.utils.database.api import get_uid
|
||||||
from gsuid_core.utils.database.models import GsBind
|
from gsuid_core.utils.database.models import GsBind
|
||||||
@ -69,7 +70,7 @@ async def _get_char_info(bot: Bot, ev: Event, text: str):
|
|||||||
if not msg:
|
if not msg:
|
||||||
return None
|
return None
|
||||||
# 获取角色名
|
# 获取角色名
|
||||||
await bot.logger.info("开始执行[查询角色面板]")
|
logger.info("开始执行[查询角色面板]")
|
||||||
# 获取uid
|
# 获取uid
|
||||||
if "换" in msg or "拿" in msg or "带" in msg:
|
if "换" in msg or "拿" in msg or "带" in msg:
|
||||||
uid = await get_uid(bot, ev, GsBind, "sr", False)
|
uid = await get_uid(bot, ev, GsBind, "sr", False)
|
||||||
@ -78,7 +79,7 @@ async def _get_char_info(bot: Bot, ev: Event, text: str):
|
|||||||
msg = " ".join(re.findall("[\u4e00-\u9fa5]+", text))
|
msg = " ".join(re.findall("[\u4e00-\u9fa5]+", text))
|
||||||
if uid is None:
|
if uid is None:
|
||||||
return await bot.send(UID_HINT)
|
return await bot.send(UID_HINT)
|
||||||
await bot.logger.info(f"[查询角色面板]uid: {uid}")
|
logger.info(f"[查询角色面板]uid: {uid}")
|
||||||
|
|
||||||
return await draw_char_info_img(msg, uid)
|
return await draw_char_info_img(msg, uid)
|
||||||
|
|
||||||
@ -88,9 +89,9 @@ async def send_card_info(bot: Bot, ev: Event):
|
|||||||
uid = await get_uid(bot, ev, GsBind, "sr")
|
uid = await get_uid(bot, ev, GsBind, "sr")
|
||||||
if uid is None:
|
if uid is None:
|
||||||
return await bot.send(UID_HINT)
|
return await bot.send(UID_HINT)
|
||||||
await bot.logger.info(f"[sr强制刷新]uid: {uid}")
|
logger.info(f"[sr强制刷新]uid: {uid}")
|
||||||
im = await api_to_card(uid)
|
im = await api_to_card(uid)
|
||||||
await bot.logger.info(f"UID{uid}获取角色数据成功!")
|
logger.info(f"UID{uid}获取角色数据成功!")
|
||||||
if isinstance(im, Tuple):
|
if isinstance(im, Tuple):
|
||||||
buttons = [
|
buttons = [
|
||||||
Button(
|
Button(
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
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.utils.database.api import get_uid
|
from gsuid_core.utils.database.api import get_uid
|
||||||
from gsuid_core.utils.database.models import GsBind
|
from gsuid_core.utils.database.models import GsBind
|
||||||
|
|
||||||
from ..utils.sr_prefix import PREFIX
|
|
||||||
from ..utils.error_reply import UID_HINT
|
from ..utils.error_reply import UID_HINT
|
||||||
from .get_gachalogs import save_gachalogs
|
from .get_gachalogs import save_gachalogs
|
||||||
from .draw_gachalogs import draw_gachalogs_img
|
from .draw_gachalogs import draw_gachalogs_img
|
||||||
@ -13,20 +13,20 @@ sv_gacha_log = SV("sr抽卡记录")
|
|||||||
sv_get_gachalog_by_link = SV("sr导入抽卡链接", area="DIRECT")
|
sv_get_gachalog_by_link = SV("sr导入抽卡链接", area="DIRECT")
|
||||||
|
|
||||||
|
|
||||||
@sv_gacha_log.on_fullmatch(f"抽卡记录")
|
@sv_gacha_log.on_fullmatch(("抽卡记录", "抽卡纪录"))
|
||||||
async def send_gacha_log_card_info(bot: Bot, ev: Event):
|
async def send_gacha_log_card_info(bot: Bot, ev: Event):
|
||||||
await bot.logger.info("开始执行[sr抽卡记录]")
|
logger.info("开始执行[sr抽卡记录]")
|
||||||
uid, user_id = await get_uid(bot, ev, GsBind, "sr", True)
|
uid, user_id = await get_uid(bot, ev, GsBind, "sr", True)
|
||||||
if uid is None:
|
if uid is None:
|
||||||
return await bot.send(UID_HINT)
|
return await bot.send(UID_HINT)
|
||||||
im = await draw_gachalogs_img(uid, user_id)
|
im = await draw_gachalogs_img(uid, ev)
|
||||||
await bot.send(im)
|
await bot.send(im)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
@sv_get_gachalog_by_link.on_command(("导入抽卡链接", "导入抽卡记录", "导入抽卡连接"))
|
@sv_get_gachalog_by_link.on_command(("导入抽卡链接", "导入抽卡记录", "导入抽卡连接"))
|
||||||
async def get_gachalog_by_link(bot: Bot, ev: Event):
|
async def get_gachalog_by_link(bot: Bot, ev: Event):
|
||||||
await bot.logger.info("开始执行[sr导入抽卡链接]")
|
logger.info("开始执行[sr导入抽卡链接]")
|
||||||
uid = await get_uid(bot, ev, GsBind, "sr", False, None)
|
uid = await get_uid(bot, ev, GsBind, "sr", False, None)
|
||||||
if uid is None:
|
if uid is None:
|
||||||
return await bot.send(UID_HINT)
|
return await bot.send(UID_HINT)
|
||||||
@ -35,7 +35,7 @@ async def get_gachalog_by_link(bot: Bot, ev: Event):
|
|||||||
return await bot.send("请给出正确的抽卡记录链接")
|
return await bot.send("请给出正确的抽卡记录链接")
|
||||||
is_force = False
|
is_force = False
|
||||||
if ev.command.startswith("强制"):
|
if ev.command.startswith("强制"):
|
||||||
await bot.logger.info("[WARNING]本次为强制刷新")
|
logger.info("[WARNING] 本次为强制刷新")
|
||||||
is_force = True
|
is_force = True
|
||||||
await bot.send(f"UID{uid}开始执行[刷新抽卡记录],需要一定时间...请勿重复触发!")
|
await bot.send(f"UID{uid}开始执行[刷新抽卡记录],需要一定时间...请勿重复触发!")
|
||||||
im = await save_gachalogs(uid, gacha_url, None, is_force)
|
im = await save_gachalogs(uid, gacha_url, None, is_force)
|
||||||
|
@ -1,18 +1,22 @@
|
|||||||
import asyncio
|
|
||||||
import datetime
|
|
||||||
import json
|
import json
|
||||||
|
import asyncio
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
from datetime import datetime
|
||||||
from typing import List, Tuple, Union
|
from typing import List, Tuple, Union
|
||||||
|
|
||||||
from PIL import Image, ImageDraw
|
from PIL import Image, ImageDraw
|
||||||
|
from gsuid_core.models import Event
|
||||||
from gsuid_core.logger import logger
|
from gsuid_core.logger import logger
|
||||||
from gsuid_core.utils.image.convert import convert_img
|
from gsuid_core.utils.image.convert import convert_img
|
||||||
from gsuid_core.utils.image.image_tools import (
|
from gsuid_core.utils.image.image_tools import get_color_bg, draw_pic_with_ring
|
||||||
draw_pic_with_ring,
|
|
||||||
get_color_bg,
|
|
||||||
get_qq_avatar,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
from ..utils.image.image_tools import _get_event_avatar
|
||||||
|
from ..utils.name_covert import name_to_avatar_id, name_to_weapon_id
|
||||||
|
from ..utils.resource.RESOURCE_PATH import (
|
||||||
|
PLAYER_PATH,
|
||||||
|
WEAPON_PATH,
|
||||||
|
CHAR_ICON_PATH,
|
||||||
|
)
|
||||||
from ..utils.fonts.starrail_fonts import (
|
from ..utils.fonts.starrail_fonts import (
|
||||||
sr_font_20,
|
sr_font_20,
|
||||||
sr_font_24,
|
sr_font_24,
|
||||||
@ -20,12 +24,6 @@ from ..utils.fonts.starrail_fonts import (
|
|||||||
sr_font_38,
|
sr_font_38,
|
||||||
sr_font_40,
|
sr_font_40,
|
||||||
)
|
)
|
||||||
from ..utils.name_covert import name_to_avatar_id, name_to_weapon_id
|
|
||||||
from ..utils.resource.RESOURCE_PATH import (
|
|
||||||
CHAR_ICON_PATH,
|
|
||||||
PLAYER_PATH,
|
|
||||||
WEAPON_PATH,
|
|
||||||
)
|
|
||||||
|
|
||||||
TEXT_PATH = Path(__file__).parent / "texture2d"
|
TEXT_PATH = Path(__file__).parent / "texture2d"
|
||||||
EMO_PATH = Path(__file__).parent / "texture2d" / "emo"
|
EMO_PATH = Path(__file__).parent / "texture2d" / "emo"
|
||||||
@ -86,15 +84,13 @@ async def _draw_card(
|
|||||||
text_point = (100, 165)
|
text_point = (100, 165)
|
||||||
if card_type == "角色":
|
if card_type == "角色":
|
||||||
_id = await name_to_avatar_id(name)
|
_id = await name_to_avatar_id(name)
|
||||||
item_pic = (
|
item_pic = Image.open(CHAR_ICON_PATH / f"{_id}.png")
|
||||||
Image.open(CHAR_ICON_PATH / f"{_id}.png").convert("RGBA").resize((105, 105))
|
item_pic = item_pic.convert("RGBA").resize((105, 105))
|
||||||
)
|
|
||||||
else:
|
else:
|
||||||
name = await name_to_weapon_id(name)
|
name = await name_to_weapon_id(name)
|
||||||
# _id = await weapon_id_to_en_name(name)
|
# _id = await weapon_id_to_en_name(name)
|
||||||
item_pic = (
|
item_pic = Image.open(WEAPON_PATH / f"{name}.png")
|
||||||
Image.open(WEAPON_PATH / f"{name}.png").convert("RGBA").resize((124, 124))
|
item_pic = item_pic.convert("RGBA").resize((124, 124))
|
||||||
)
|
|
||||||
point = (37, 24)
|
point = (37, 24)
|
||||||
card_img.paste(item_pic, point, item_pic)
|
card_img.paste(item_pic, point, item_pic)
|
||||||
if gacha_num >= 81:
|
if gacha_num >= 81:
|
||||||
@ -103,7 +99,13 @@ async def _draw_card(
|
|||||||
text_color = green_color
|
text_color = green_color
|
||||||
else:
|
else:
|
||||||
text_color = brown_color
|
text_color = brown_color
|
||||||
card_img_draw.text(text_point, f"{gacha_num}抽", text_color, sr_font_24, "mm")
|
card_img_draw.text(
|
||||||
|
text_point,
|
||||||
|
f"{gacha_num}抽",
|
||||||
|
text_color,
|
||||||
|
sr_font_24,
|
||||||
|
"mm"
|
||||||
|
)
|
||||||
if is_up:
|
if is_up:
|
||||||
logger.info(f"up: {name}")
|
logger.info(f"up: {name}")
|
||||||
# card_img.paste(up_tag, (47, -2), up_tag)
|
# card_img.paste(up_tag, (47, -2), up_tag)
|
||||||
@ -132,16 +134,16 @@ def check_up(name: str, _time: str) -> bool:
|
|||||||
for char in UP_LIST:
|
for char in UP_LIST:
|
||||||
if char == name:
|
if char == name:
|
||||||
time = UP_LIST[char]
|
time = UP_LIST[char]
|
||||||
s_time = datetime.datetime(*time[0])
|
s_time = datetime(*time[0])
|
||||||
e_time = datetime.datetime(*time[1])
|
e_time = datetime(*time[1])
|
||||||
gacha_time = datetime.datetime.strptime(_time, "%Y-%m-%d %H:%M:%S")
|
gacha_time = datetime.strptime(_time, "%Y-%m-%d %H:%M:%S")
|
||||||
if gacha_time < s_time or gacha_time > e_time:
|
if gacha_time < s_time or gacha_time > e_time:
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
async def draw_gachalogs_img(uid: str, user_id: str) -> Union[bytes, str]:
|
async def draw_gachalogs_img(uid: str, ev: Event) -> Union[bytes, str]:
|
||||||
path = PLAYER_PATH / str(uid) / "gacha_logs.json"
|
path = PLAYER_PATH / str(uid) / "gacha_logs.json"
|
||||||
if not path.exists():
|
if not path.exists():
|
||||||
return "你还没有跃迁数据噢~\n请使用命令`sr导入抽卡链接`更新跃迁数据~"
|
return "你还没有跃迁数据噢~\n请使用命令`sr导入抽卡链接`更新跃迁数据~"
|
||||||
@ -174,23 +176,21 @@ async def draw_gachalogs_img(uid: str, user_id: str) -> Union[bytes, str]:
|
|||||||
# 开始初始化抽卡数
|
# 开始初始化抽卡数
|
||||||
num = 1
|
num = 1
|
||||||
# 从后面开始循环
|
# 从后面开始循环
|
||||||
temp_time = datetime.datetime(2023, 4, 26, 8, 0, 0)
|
temp_time = datetime(2023, 4, 26, 8, 0, 0)
|
||||||
for index, data in enumerate(data_list[::-1]):
|
for index, data in enumerate(data_list[::-1]):
|
||||||
# 计算抽卡时间跨度
|
# 计算抽卡时间跨度
|
||||||
if index == 0:
|
if index == 0:
|
||||||
total_data[i]["time_range"] = data["time"]
|
total_data[i]["time_range"] = data["time"]
|
||||||
if index == len(data_list) - 1:
|
if index == len(data_list) - 1:
|
||||||
total_data[i]["all_time"] = (
|
_fm = "%Y-%m-%d %H:%M:%S"
|
||||||
datetime.datetime.strptime(data["time"], "%Y-%m-%d %H:%M:%S")
|
t1 = datetime.strptime(data["time"], _fm)
|
||||||
- datetime.datetime.strptime(
|
t2 = datetime.strptime(total_data[i]["time_range"], _fm)
|
||||||
total_data[i]["time_range"], "%Y-%m-%d %H:%M:%S"
|
total_data[i]["all_time"] = (t1-t2).total_seconds()
|
||||||
)
|
|
||||||
).total_seconds()
|
|
||||||
total_data[i]["time_range"] += "~" + data["time"]
|
total_data[i]["time_range"] += "~" + data["time"]
|
||||||
|
|
||||||
# 计算时间间隔
|
# 计算时间间隔
|
||||||
if index != 0:
|
if index != 0:
|
||||||
now_time = datetime.datetime.strptime(data["time"], "%Y-%m-%d %H:%M:%S")
|
now_time = datetime.strptime(data["time"], "%Y-%m-%d %H:%M:%S")
|
||||||
dis = (now_time - temp_time).total_seconds()
|
dis = (now_time - temp_time).total_seconds()
|
||||||
temp_time = now_time
|
temp_time = now_time
|
||||||
if dis <= 5000:
|
if dis <= 5000:
|
||||||
@ -200,7 +200,7 @@ async def draw_gachalogs_img(uid: str, user_id: str) -> Union[bytes, str]:
|
|||||||
total_data[i]["long_gacha_data"]["num"] += 1
|
total_data[i]["long_gacha_data"]["num"] += 1
|
||||||
total_data[i]["long_gacha_data"]["time"] += dis
|
total_data[i]["long_gacha_data"]["time"] += dis
|
||||||
else:
|
else:
|
||||||
temp_time = datetime.datetime.strptime(
|
temp_time = datetime.strptime(
|
||||||
data["time"], "%Y-%m-%d %H:%M:%S"
|
data["time"], "%Y-%m-%d %H:%M:%S"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -307,16 +307,15 @@ async def draw_gachalogs_img(uid: str, user_id: str) -> Union[bytes, str]:
|
|||||||
weapon_y = (1 + ((total_data["光锥跃迁"]["total"] - 1) // 5)) * single_y
|
weapon_y = (1 + ((total_data["光锥跃迁"]["total"] - 1) // 5)) * single_y
|
||||||
|
|
||||||
# 获取背景图片各项参数
|
# 获取背景图片各项参数
|
||||||
_id = str(user_id)
|
char_pic = await _get_event_avatar(ev)
|
||||||
if _id.startswith("http"):
|
|
||||||
char_pic = await get_qq_avatar(avatar_url=_id)
|
|
||||||
else:
|
|
||||||
char_pic = await get_qq_avatar(qid=user_id)
|
|
||||||
char_pic = await draw_pic_with_ring(char_pic, 206, None, False)
|
char_pic = await draw_pic_with_ring(char_pic, 206, None, False)
|
||||||
|
|
||||||
# 获取背景图片各项参数
|
# 获取背景图片各项参数
|
||||||
img = Abg3_img.copy()
|
img = Abg3_img.copy()
|
||||||
img = await get_color_bg(800, 1600 + 400 + normal_y + char_y + weapon_y + begin_y)
|
img = await get_color_bg(
|
||||||
|
800,
|
||||||
|
1600 + 400 + normal_y + char_y + weapon_y + begin_y,
|
||||||
|
)
|
||||||
gacha_title = bg1_img.copy()
|
gacha_title = bg1_img.copy()
|
||||||
gacha_title.paste(char_pic, (297, 81), char_pic)
|
gacha_title.paste(char_pic, (297, 81), char_pic)
|
||||||
img.paste(gacha_title, (0, 0), gacha_title)
|
img.paste(gacha_title, (0, 0), gacha_title)
|
||||||
@ -392,7 +391,12 @@ async def draw_gachalogs_img(uid: str, user_id: str) -> Union[bytes, str]:
|
|||||||
"mm",
|
"mm",
|
||||||
)
|
)
|
||||||
y_extend += (
|
y_extend += (
|
||||||
(1 + ((total_data[type_list[index - 1]]["total"] - 1) // 5)) * single_y
|
(
|
||||||
|
1
|
||||||
|
+ (
|
||||||
|
(total_data[type_list[index - 1]]["total"] - 1) // 5
|
||||||
|
)
|
||||||
|
) * single_y
|
||||||
if index != 0
|
if index != 0
|
||||||
else 0
|
else 0
|
||||||
)
|
)
|
||||||
|
@ -29,7 +29,7 @@ async def send_monthly_data(bot: Bot, ev: Event):
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
async def send_monthly_pic(bot: Bot, ev: Event):
|
async def send_monthly_pic(bot: Bot, ev: Event):
|
||||||
await bot.logger.info("开始执行[sr开拓月历]")
|
logger.info("开始执行[sr开拓月历]")
|
||||||
sr_uid = await get_uid(bot, ev, GsBind, "sr")
|
sr_uid = await get_uid(bot, ev, GsBind, "sr")
|
||||||
if sr_uid is None:
|
if sr_uid is None:
|
||||||
return await bot.send(UID_HINT)
|
return await bot.send(UID_HINT)
|
||||||
|
@ -3,6 +3,7 @@ import re
|
|||||||
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.utils.database.api import get_uid
|
from gsuid_core.utils.database.api import get_uid
|
||||||
from gsuid_core.utils.database.models import GsBind
|
from gsuid_core.utils.database.models import GsBind
|
||||||
|
|
||||||
@ -32,17 +33,17 @@ async def send_srabyss_info(bot: Bot, ev: Event):
|
|||||||
if name:
|
if name:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
await bot.logger.info("开始执行[sr查询模拟宇宙信息]")
|
logger.info("开始执行[sr查询模拟宇宙信息]")
|
||||||
uid, user_id = await get_uid(bot, ev, GsBind, "sr", True)
|
uid, user_id = await get_uid(bot, ev, GsBind, "sr", True)
|
||||||
if uid is None:
|
if uid is None:
|
||||||
return await bot.send(UID_HINT)
|
return await bot.send(UID_HINT)
|
||||||
await bot.logger.info(f"[sr查询模拟宇宙信息]uid: {uid}")
|
logger.info(f"[sr查询模拟宇宙信息]uid: {uid}")
|
||||||
|
|
||||||
if "sq" in ev.command or "上期" in ev.command:
|
if "sq" in ev.command or "上期" in ev.command:
|
||||||
schedule_type = "2"
|
schedule_type = "2"
|
||||||
else:
|
else:
|
||||||
schedule_type = "3"
|
schedule_type = "3"
|
||||||
await bot.logger.info(f"[sr查询模拟宇宙信息]模拟宇宙期数: {schedule_type}")
|
logger.info(f"[sr查询模拟宇宙信息]模拟宇宙期数: {schedule_type}")
|
||||||
|
|
||||||
if ev.text in ["一", "二", "三", "四", "五", "六"]:
|
if ev.text in ["一", "二", "三", "四", "五", "六"]:
|
||||||
floor = (
|
floor = (
|
||||||
@ -59,8 +60,8 @@ async def send_srabyss_info(bot: Bot, ev: Event):
|
|||||||
floor = int(floor)
|
floor = int(floor)
|
||||||
else:
|
else:
|
||||||
floor = None
|
floor = None
|
||||||
await bot.logger.info(f"[sr查询模拟宇宙信息]模拟宇宙世界数: {floor}")
|
logger.info(f"[sr查询模拟宇宙信息]模拟宇宙世界数: {floor}")
|
||||||
im = await draw_rogue_img(user_id, uid, ev.sender, floor, schedule_type)
|
im = await draw_rogue_img(ev, uid, floor, schedule_type)
|
||||||
await bot.send(im)
|
await bot.send(im)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@ -79,11 +80,11 @@ async def send_srabyss_locust_info(bot: Bot, ev: Event):
|
|||||||
if name:
|
if name:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
await bot.logger.info("开始执行[sr查询寰宇蝗灾信息]")
|
logger.info("开始执行[sr查询寰宇蝗灾信息]")
|
||||||
uid, user_id = await get_uid(bot, ev, GsBind, "sr", True)
|
uid, user_id = await get_uid(bot, ev, GsBind, "sr", True)
|
||||||
if uid is None:
|
if uid is None:
|
||||||
return await bot.send(UID_HINT)
|
return await bot.send(UID_HINT)
|
||||||
await bot.logger.info(f"[sr查询寰宇蝗灾信息]uid: {uid}")
|
logger.info(f"[sr查询寰宇蝗灾信息]uid: {uid}")
|
||||||
im = await draw_rogue_locust_img(user_id, uid, ev.sender)
|
im = await draw_rogue_locust_img(ev, uid)
|
||||||
await bot.send(im)
|
await bot.send(im)
|
||||||
return None
|
return None
|
||||||
|
@ -1,30 +1,29 @@
|
|||||||
import math
|
import math
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any, Dict, List, Optional, Union
|
from typing import List, Union, Optional
|
||||||
|
|
||||||
from PIL import Image, ImageDraw
|
from PIL import Image, ImageDraw
|
||||||
|
from gsuid_core.models import Event
|
||||||
from gsuid_core.logger import logger
|
from gsuid_core.logger import logger
|
||||||
from gsuid_core.utils.error_reply import get_error
|
from gsuid_core.utils.error_reply import get_error
|
||||||
from gsuid_core.utils.image.convert import convert_img
|
from gsuid_core.utils.image.convert import convert_img
|
||||||
from gsuid_core.utils.image.image_tools import (
|
from gsuid_core.utils.image.image_tools import draw_pic_with_ring
|
||||||
draw_pic_with_ring,
|
|
||||||
get_qq_avatar,
|
|
||||||
)
|
|
||||||
|
|
||||||
from ..sruid_utils.api.mys.models import (
|
from ..utils.mys_api import mys_api
|
||||||
LocustBlocks,
|
from ..utils.resource.get_pic_from import get_roleinfo_icon
|
||||||
RogueAvatar,
|
from ..utils.image.image_tools import elements, _get_event_avatar
|
||||||
RogueBuffitems,
|
|
||||||
RogueMiracles,
|
|
||||||
)
|
|
||||||
from ..utils.fonts.starrail_fonts import (
|
from ..utils.fonts.starrail_fonts import (
|
||||||
sr_font_22,
|
sr_font_22,
|
||||||
sr_font_28,
|
sr_font_28,
|
||||||
sr_font_34,
|
sr_font_34,
|
||||||
sr_font_42,
|
sr_font_42,
|
||||||
)
|
)
|
||||||
from ..utils.mys_api import mys_api
|
from ..sruid_utils.api.mys.models import (
|
||||||
from ..utils.resource.get_pic_from import get_roleinfo_icon
|
RogueAvatar,
|
||||||
|
LocustBlocks,
|
||||||
|
RogueMiracles,
|
||||||
|
RogueBuffitems,
|
||||||
|
)
|
||||||
|
|
||||||
TEXT_PATH = Path(__file__).parent / "texture2D"
|
TEXT_PATH = Path(__file__).parent / "texture2D"
|
||||||
white_color = (255, 255, 255)
|
white_color = (255, 255, 255)
|
||||||
@ -36,15 +35,6 @@ char_bg_5 = Image.open(TEXT_PATH / "char5_bg.png").convert("RGBA")
|
|||||||
rank_bg = Image.open(TEXT_PATH / "rank_bg.png").convert("RGBA")
|
rank_bg = Image.open(TEXT_PATH / "rank_bg.png").convert("RGBA")
|
||||||
content_center = Image.open(TEXT_PATH / "center.png").convert("RGBA")
|
content_center = Image.open(TEXT_PATH / "center.png").convert("RGBA")
|
||||||
|
|
||||||
elements = {
|
|
||||||
"ice": Image.open(TEXT_PATH / "IconNatureColorIce.png").convert("RGBA"),
|
|
||||||
"fire": Image.open(TEXT_PATH / "IconNatureColorFire.png").convert("RGBA"),
|
|
||||||
"imaginary": Image.open(TEXT_PATH / "IconNatureColorImaginary.png").convert("RGBA"),
|
|
||||||
"quantum": Image.open(TEXT_PATH / "IconNatureColorQuantum.png").convert("RGBA"),
|
|
||||||
"lightning": Image.open(TEXT_PATH / "IconNatureColorThunder.png").convert("RGBA"),
|
|
||||||
"wind": Image.open(TEXT_PATH / "IconNatureColorWind.png").convert("RGBA"),
|
|
||||||
"physical": Image.open(TEXT_PATH / "IconNaturePhysical.png").convert("RGBA"),
|
|
||||||
}
|
|
||||||
|
|
||||||
progresslist = {
|
progresslist = {
|
||||||
1: "第一世界",
|
1: "第一世界",
|
||||||
@ -117,7 +107,8 @@ async def _draw_rogue_buff(
|
|||||||
is_evoluted = 1
|
is_evoluted = 1
|
||||||
else:
|
else:
|
||||||
is_evoluted = 0
|
is_evoluted = 0
|
||||||
buff_bg = Image.open(TEXT_PATH / f"zhufu_{item.rank}_{is_evoluted}.png")
|
buff_bg_str = TEXT_PATH / f"zhufu_{item.rank}_{is_evoluted}.png"
|
||||||
|
buff_bg = Image.open(buff_bg_str)
|
||||||
buff_bg = buff_bg.resize((233, 35))
|
buff_bg = buff_bg.resize((233, 35))
|
||||||
z_left = 90 + 240 * zb_list[jishu][1]
|
z_left = 90 + 240 * zb_list[jishu][1]
|
||||||
z_top = buff_height + 450 + 55 * zb_list[jishu][0]
|
z_top = buff_height + 450 + 55 * zb_list[jishu][0]
|
||||||
@ -181,7 +172,8 @@ async def _draw_rogue_miracles(
|
|||||||
zb_list.append([m, n])
|
zb_list.append([m, n])
|
||||||
jishu = 0
|
jishu = 0
|
||||||
for miracle in miracles:
|
for miracle in miracles:
|
||||||
miracles_icon = (await get_roleinfo_icon(miracle.icon)).resize((80, 80))
|
miracles_icon = await get_roleinfo_icon(miracle.icon)
|
||||||
|
miracles_icon = miracles_icon.resize((80, 80))
|
||||||
z_left = 90 + 90 * zb_list[jishu][1]
|
z_left = 90 + 90 * zb_list[jishu][1]
|
||||||
z_top = buff_height + 470 + 90 * zb_list[jishu][0]
|
z_top = buff_height + 470 + 90 * zb_list[jishu][0]
|
||||||
jishu = jishu + 1
|
jishu = jishu + 1
|
||||||
@ -236,9 +228,8 @@ async def _draw_rogue_card(
|
|||||||
|
|
||||||
|
|
||||||
async def draw_rogue_img(
|
async def draw_rogue_img(
|
||||||
qid: Union[str, int],
|
ev: Event,
|
||||||
uid: str,
|
uid: str,
|
||||||
sender: Dict[str, Any],
|
|
||||||
floor: Optional[int] = None,
|
floor: Optional[int] = None,
|
||||||
schedule_type: str = "3",
|
schedule_type: str = "3",
|
||||||
) -> Union[bytes, str]:
|
) -> Union[bytes, str]:
|
||||||
@ -313,13 +304,7 @@ async def draw_rogue_img(
|
|||||||
img.paste(rogue_title, (0, 0), rogue_title)
|
img.paste(rogue_title, (0, 0), rogue_title)
|
||||||
|
|
||||||
# 获取头像
|
# 获取头像
|
||||||
_id = str(qid)
|
char_pic = await _get_event_avatar(ev)
|
||||||
if _id.startswith("http"):
|
|
||||||
char_pic = await get_qq_avatar(avatar_url=_id)
|
|
||||||
elif sender.get("avatar") is not None:
|
|
||||||
char_pic = await get_qq_avatar(avatar_url=sender["avatar"])
|
|
||||||
else:
|
|
||||||
char_pic = await get_qq_avatar(qid=qid)
|
|
||||||
char_pic = await draw_pic_with_ring(char_pic, 250, None, False)
|
char_pic = await draw_pic_with_ring(char_pic, 250, None, False)
|
||||||
|
|
||||||
img.paste(char_pic, (325, 132), char_pic)
|
img.paste(char_pic, (325, 132), char_pic)
|
||||||
@ -393,16 +378,19 @@ async def draw_rogue_img(
|
|||||||
floor_pic = Image.open(TEXT_PATH / "detail_bg.png").convert("RGBA")
|
floor_pic = Image.open(TEXT_PATH / "detail_bg.png").convert("RGBA")
|
||||||
floor_pic = floor_pic.resize((900, detail_h_list[index_floor]))
|
floor_pic = floor_pic.resize((900, detail_h_list[index_floor]))
|
||||||
|
|
||||||
floor_top_pic = Image.open(TEXT_PATH / "floor_bg_top.png").convert("RGBA")
|
floor_top_pic = Image.open(TEXT_PATH / "floor_bg_top.png")
|
||||||
|
floor_top_pic = floor_top_pic.convert("RGBA")
|
||||||
floor_pic.paste(floor_top_pic, (0, 0), floor_top_pic)
|
floor_pic.paste(floor_top_pic, (0, 0), floor_top_pic)
|
||||||
|
|
||||||
floor_center_pic = Image.open(TEXT_PATH / "floor_bg_center.png").convert("RGBA")
|
floor_center_pic = Image.open(TEXT_PATH / "floor_bg_center.png")
|
||||||
|
floor_center_pic = floor_center_pic.convert("RGBA")
|
||||||
floor_center_pic = floor_center_pic.resize(
|
floor_center_pic = floor_center_pic.resize(
|
||||||
(900, detail_h_list[index_floor] - 170)
|
(900, detail_h_list[index_floor] - 170)
|
||||||
)
|
)
|
||||||
floor_pic.paste(floor_center_pic, (0, 100), floor_center_pic)
|
floor_pic.paste(floor_center_pic, (0, 100), floor_center_pic)
|
||||||
|
|
||||||
floor_bot_pic = Image.open(TEXT_PATH / "floor_bg_bot.png").convert("RGBA")
|
floor_bot_pic = Image.open(TEXT_PATH / "floor_bg_bot.png")
|
||||||
|
floor_bot_pic = floor_bot_pic.convert("RGBA")
|
||||||
floor_pic.paste(
|
floor_pic.paste(
|
||||||
floor_bot_pic, (0, detail_h_list[index_floor] - 70), floor_bot_pic
|
floor_bot_pic, (0, detail_h_list[index_floor] - 70), floor_bot_pic
|
||||||
)
|
)
|
||||||
@ -490,7 +478,11 @@ async def draw_rogue_img(
|
|||||||
sr_font_34,
|
sr_font_34,
|
||||||
"lm",
|
"lm",
|
||||||
)
|
)
|
||||||
floor_pic.paste(content_center, (0, 370 + buff_height + 80), content_center)
|
floor_pic.paste(
|
||||||
|
content_center,
|
||||||
|
(0, 370 + buff_height + 80),
|
||||||
|
content_center
|
||||||
|
)
|
||||||
await _draw_rogue_miracles(
|
await _draw_rogue_miracles(
|
||||||
detail.miracles,
|
detail.miracles,
|
||||||
floor_pic,
|
floor_pic,
|
||||||
@ -516,9 +508,8 @@ async def draw_rogue_img(
|
|||||||
|
|
||||||
|
|
||||||
async def draw_rogue_locust_img(
|
async def draw_rogue_locust_img(
|
||||||
qid: Union[str, int],
|
ev: Event,
|
||||||
uid: str,
|
uid: str,
|
||||||
sender: Dict[str, Any],
|
|
||||||
) -> Union[bytes, str]:
|
) -> Union[bytes, str]:
|
||||||
raw_rogue_data = await mys_api.get_rogue_locust_info(uid, "3")
|
raw_rogue_data = await mys_api.get_rogue_locust_info(uid, "3")
|
||||||
|
|
||||||
@ -591,13 +582,7 @@ async def draw_rogue_locust_img(
|
|||||||
img.paste(rogue_title, (0, 0), rogue_title)
|
img.paste(rogue_title, (0, 0), rogue_title)
|
||||||
|
|
||||||
# 获取头像
|
# 获取头像
|
||||||
_id = str(qid)
|
char_pic = await _get_event_avatar(ev)
|
||||||
if _id.startswith("http"):
|
|
||||||
char_pic = await get_qq_avatar(avatar_url=_id)
|
|
||||||
elif sender.get("avatar") is not None:
|
|
||||||
char_pic = await get_qq_avatar(avatar_url=sender["avatar"])
|
|
||||||
else:
|
|
||||||
char_pic = await get_qq_avatar(qid=qid)
|
|
||||||
char_pic = await draw_pic_with_ring(char_pic, 250, None, False)
|
char_pic = await draw_pic_with_ring(char_pic, 250, None, False)
|
||||||
|
|
||||||
img.paste(char_pic, (325, 132), char_pic)
|
img.paste(char_pic, (325, 132), char_pic)
|
||||||
@ -665,16 +650,19 @@ async def draw_rogue_locust_img(
|
|||||||
floor_pic = Image.open(TEXT_PATH / "detail_bg.png").convert("RGBA")
|
floor_pic = Image.open(TEXT_PATH / "detail_bg.png").convert("RGBA")
|
||||||
floor_pic = floor_pic.resize((900, detail_h_list[index_floor]))
|
floor_pic = floor_pic.resize((900, detail_h_list[index_floor]))
|
||||||
|
|
||||||
floor_top_pic = Image.open(TEXT_PATH / "floor_bg_top.png").convert("RGBA")
|
floor_top_pic = Image.open(TEXT_PATH / "floor_bg_top.png")
|
||||||
|
floor_top_pic = floor_top_pic.convert("RGBA")
|
||||||
floor_pic.paste(floor_top_pic, (0, 0), floor_top_pic)
|
floor_pic.paste(floor_top_pic, (0, 0), floor_top_pic)
|
||||||
|
|
||||||
floor_center_pic = Image.open(TEXT_PATH / "floor_bg_center.png").convert("RGBA")
|
floor_center_pic = Image.open(TEXT_PATH / "floor_bg_center.png")
|
||||||
|
floor_center_pic = floor_center_pic.convert("RGBA")
|
||||||
floor_center_pic = floor_center_pic.resize(
|
floor_center_pic = floor_center_pic.resize(
|
||||||
(900, detail_h_list[index_floor] - 170)
|
(900, detail_h_list[index_floor] - 170)
|
||||||
)
|
)
|
||||||
floor_pic.paste(floor_center_pic, (0, 100), floor_center_pic)
|
floor_pic.paste(floor_center_pic, (0, 100), floor_center_pic)
|
||||||
|
|
||||||
floor_bot_pic = Image.open(TEXT_PATH / "floor_bg_bot.png").convert("RGBA")
|
floor_bot_pic = Image.open(TEXT_PATH / "floor_bg_bot.png")
|
||||||
|
floor_bot_pic = floor_bot_pic.convert("RGBA")
|
||||||
floor_pic.paste(
|
floor_pic.paste(
|
||||||
floor_bot_pic, (0, detail_h_list[index_floor] - 70), floor_bot_pic
|
floor_bot_pic, (0, detail_h_list[index_floor] - 70), floor_bot_pic
|
||||||
)
|
)
|
||||||
|
@ -24,8 +24,8 @@ async def send_role_info(bot: Bot, ev: Event):
|
|||||||
return "你还没有绑定UID噢,请使用[sr绑定uid123]完成绑定!"
|
return "你还没有绑定UID噢,请使用[sr绑定uid123]完成绑定!"
|
||||||
|
|
||||||
logger.info(f"[sr查询信息]UID: {uid}")
|
logger.info(f"[sr查询信息]UID: {uid}")
|
||||||
await bot.logger.info("开始执行[sr查询信息]")
|
logger.info("开始执行[sr查询信息]")
|
||||||
await bot.send(await get_role_img(uid))
|
await bot.send(await get_role_img(ev, uid))
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
@ -39,6 +39,6 @@ async def send_detail_info(bot: Bot, ev: Event):
|
|||||||
return await bot.send(UID_HINT)
|
return await bot.send(UID_HINT)
|
||||||
|
|
||||||
logger.info(f"[sr查询信息]UID: {uid}")
|
logger.info(f"[sr查询信息]UID: {uid}")
|
||||||
await bot.logger.info("开始执行[sr查询信息]")
|
logger.info("开始执行[sr查询信息]")
|
||||||
await bot.send(await get_detail_img(user_id, uid, ev.sender))
|
await bot.send(await get_detail_img(ev, uid))
|
||||||
return None
|
return None
|
||||||
|
@ -1,24 +1,18 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any, Dict, Generator, List, Optional, TypeVar, Union
|
from typing import Dict, List, Union, TypeVar, Optional, Generator
|
||||||
|
|
||||||
from PIL import Image, ImageDraw
|
from PIL import Image, ImageDraw
|
||||||
|
from gsuid_core.models import Event
|
||||||
from gsuid_core.logger import logger
|
from gsuid_core.logger import logger
|
||||||
from gsuid_core.utils.error_reply import get_error
|
from gsuid_core.utils.error_reply import get_error
|
||||||
from gsuid_core.utils.image.convert import convert_img
|
from gsuid_core.utils.image.convert import convert_img
|
||||||
from gsuid_core.utils.image.image_tools import (
|
from gsuid_core.utils.image.image_tools import draw_pic_with_ring
|
||||||
draw_pic_with_ring,
|
|
||||||
get_qq_avatar,
|
|
||||||
)
|
|
||||||
|
|
||||||
from ..sruid_utils.api.mys.models import (
|
from ..utils.mys_api import mys_api
|
||||||
AvatarDetail,
|
|
||||||
AvatarListItem,
|
|
||||||
AvatarListItemDetail,
|
|
||||||
RoleBasicInfo,
|
|
||||||
Stats,
|
|
||||||
)
|
|
||||||
from ..utils.fonts.first_world import fw_font_24
|
from ..utils.fonts.first_world import fw_font_24
|
||||||
|
from ..utils.resource.get_pic_from import get_roleinfo_icon
|
||||||
|
from ..utils.image.image_tools import elements, _get_event_avatar
|
||||||
from ..utils.fonts.starrail_fonts import (
|
from ..utils.fonts.starrail_fonts import (
|
||||||
sr_font_22,
|
sr_font_22,
|
||||||
sr_font_24,
|
sr_font_24,
|
||||||
@ -26,15 +20,20 @@ from ..utils.fonts.starrail_fonts import (
|
|||||||
sr_font_30,
|
sr_font_30,
|
||||||
sr_font_36,
|
sr_font_36,
|
||||||
)
|
)
|
||||||
from ..utils.mys_api import mys_api
|
from ..sruid_utils.api.mys.models import (
|
||||||
from ..utils.resource.get_pic_from import get_roleinfo_icon
|
Stats,
|
||||||
|
AvatarDetail,
|
||||||
|
RoleBasicInfo,
|
||||||
|
AvatarListItem,
|
||||||
|
AvatarListItemDetail,
|
||||||
|
)
|
||||||
|
|
||||||
TEXT_PATH = Path(__file__).parent / "texture2D"
|
TEXT_PATH = Path(__file__).parent / "texture2D"
|
||||||
|
|
||||||
bg1 = Image.open(TEXT_PATH / "bg1.png")
|
bg1 = Image.open(TEXT_PATH / "bg1.png")
|
||||||
bg2 = Image.open(TEXT_PATH / "bg2.png")
|
bg2 = Image.open(TEXT_PATH / "bg2.png")
|
||||||
bg3 = Image.open(TEXT_PATH / "bg3.png")
|
bg3 = Image.open(TEXT_PATH / "bg3.png")
|
||||||
user_avatar = Image.open(TEXT_PATH / "200101.png").resize((220, 220)).convert("RGBA")
|
|
||||||
char_bg_4 = Image.open(TEXT_PATH / "rarity4_bg.png").convert("RGBA")
|
char_bg_4 = Image.open(TEXT_PATH / "rarity4_bg.png").convert("RGBA")
|
||||||
char_bg_5 = Image.open(TEXT_PATH / "rarity5_bg.png").convert("RGBA")
|
char_bg_5 = Image.open(TEXT_PATH / "rarity5_bg.png").convert("RGBA")
|
||||||
circle = Image.open(TEXT_PATH / "char_weapon_bg.png").convert("RGBA")
|
circle = Image.open(TEXT_PATH / "char_weapon_bg.png").convert("RGBA")
|
||||||
@ -45,23 +44,16 @@ white_color = (255, 255, 255)
|
|||||||
color_color = (40, 18, 7)
|
color_color = (40, 18, 7)
|
||||||
first_color = (22, 8, 31)
|
first_color = (22, 8, 31)
|
||||||
|
|
||||||
elements = {
|
|
||||||
"ice": Image.open(TEXT_PATH / "IconNatureColorIce.png").convert("RGBA"),
|
async def get_role_img(ev: Event, uid: str) -> Union[bytes, str]:
|
||||||
"fire": Image.open(TEXT_PATH / "IconNatureColorFire.png").convert("RGBA"),
|
return await draw_role_card(ev, uid)
|
||||||
"imaginary": Image.open(TEXT_PATH / "IconNatureColorImaginary.png").convert("RGBA"),
|
|
||||||
"quantum": Image.open(TEXT_PATH / "IconNatureColorQuantum.png").convert("RGBA"),
|
|
||||||
"lightning": Image.open(TEXT_PATH / "IconNatureColorThunder.png").convert("RGBA"),
|
|
||||||
"wind": Image.open(TEXT_PATH / "IconNatureColorWind.png").convert("RGBA"),
|
|
||||||
"physical": Image.open(TEXT_PATH / "IconNaturePhysical.png").convert("RGBA"),
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
async def get_role_img(uid: str) -> Union[bytes, str]:
|
async def get_detail_img(
|
||||||
return await draw_role_card(uid)
|
ev: Event,
|
||||||
|
uid: str,
|
||||||
|
) -> Union[bytes, str]:
|
||||||
async def get_detail_img(qid: Union[str, int], uid: str, sender) -> Union[bytes, str]:
|
return await get_detail_card(ev, uid)
|
||||||
return await get_detail_card(qid, uid, sender)
|
|
||||||
|
|
||||||
|
|
||||||
def _lv(level: int) -> str:
|
def _lv(level: int) -> str:
|
||||||
@ -73,11 +65,11 @@ T = TypeVar("T")
|
|||||||
|
|
||||||
def wrap_list(lst: List[T], n: int) -> Generator[List[T], None, None]:
|
def wrap_list(lst: List[T], n: int) -> Generator[List[T], None, None]:
|
||||||
for i in range(0, len(lst), n):
|
for i in range(0, len(lst), n):
|
||||||
yield lst[i : i + n]
|
yield lst[i : i + n] # noqa: E203
|
||||||
|
|
||||||
|
|
||||||
async def _draw_card_1(
|
async def _draw_card_1(
|
||||||
sr_uid: str, role_basic_info: RoleBasicInfo, stats: Stats
|
ev: Event, sr_uid: str, role_basic_info: RoleBasicInfo, stats: Stats
|
||||||
) -> Image.Image:
|
) -> Image.Image:
|
||||||
# 名称
|
# 名称
|
||||||
nickname = role_basic_info.nickname
|
nickname = role_basic_info.nickname
|
||||||
@ -96,7 +88,13 @@ async def _draw_card_1(
|
|||||||
bg1_draw = ImageDraw.Draw(img_bg1)
|
bg1_draw = ImageDraw.Draw(img_bg1)
|
||||||
|
|
||||||
# 写Nickname
|
# 写Nickname
|
||||||
bg1_draw.text((400, 85), nickname, font=sr_font_36, fill=white_color, anchor="mm")
|
bg1_draw.text(
|
||||||
|
(400, 85),
|
||||||
|
nickname,
|
||||||
|
font=sr_font_36,
|
||||||
|
fill=white_color,
|
||||||
|
anchor="mm"
|
||||||
|
)
|
||||||
# 写UID
|
# 写UID
|
||||||
bg1_draw.text(
|
bg1_draw.text(
|
||||||
(400, 165),
|
(400, 165),
|
||||||
@ -106,6 +104,8 @@ async def _draw_card_1(
|
|||||||
anchor="mm",
|
anchor="mm",
|
||||||
)
|
)
|
||||||
# 贴头像
|
# 贴头像
|
||||||
|
user_avatar = await _get_event_avatar(ev)
|
||||||
|
user_avatar = await draw_pic_with_ring(user_avatar, 128, None, False)
|
||||||
img_bg1.paste(user_avatar, (286, 213), mask=user_avatar)
|
img_bg1.paste(user_avatar, (286, 213), mask=user_avatar)
|
||||||
|
|
||||||
# 写基本信息
|
# 写基本信息
|
||||||
@ -208,7 +208,10 @@ async def _draw_card_2(
|
|||||||
) -> Image.Image:
|
) -> Image.Image:
|
||||||
# 角色部分 每五个一组
|
# 角色部分 每五个一组
|
||||||
lines = await asyncio.gather(
|
lines = await asyncio.gather(
|
||||||
*[_draw_line(five_avatars, equips) for five_avatars in wrap_list(avatars, 5)]
|
*[
|
||||||
|
_draw_line(five_avatars, equips)
|
||||||
|
for five_avatars in wrap_list(avatars, 5)
|
||||||
|
]
|
||||||
)
|
)
|
||||||
img_card_2 = Image.new("RGBA", (800, len(lines) * 200))
|
img_card_2 = Image.new("RGBA", (800, len(lines) * 200))
|
||||||
|
|
||||||
@ -219,7 +222,7 @@ async def _draw_card_2(
|
|||||||
return img_card_2
|
return img_card_2
|
||||||
|
|
||||||
|
|
||||||
async def draw_role_card(sr_uid: str) -> Union[bytes, str]:
|
async def draw_role_card(ev: Event, sr_uid: str) -> Union[bytes, str]:
|
||||||
role_index = await mys_api.get_role_index(sr_uid)
|
role_index = await mys_api.get_role_index(sr_uid)
|
||||||
# deal with hoyolab with no nickname and level api
|
# deal with hoyolab with no nickname and level api
|
||||||
if int(str(sr_uid)[0]) < 6:
|
if int(str(sr_uid)[0]) < 6:
|
||||||
@ -251,7 +254,7 @@ async def draw_role_card(sr_uid: str) -> Union[bytes, str]:
|
|||||||
# 绘制总图
|
# 绘制总图
|
||||||
img1, img2 = await asyncio.gather(
|
img1, img2 = await asyncio.gather(
|
||||||
*[
|
*[
|
||||||
_draw_card_1(sr_uid, role_basic_info, stats), # type: ignore
|
_draw_card_1(ev, sr_uid, role_basic_info, stats), # type: ignore
|
||||||
_draw_card_2(avatars, equips),
|
_draw_card_2(avatars, equips),
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
@ -336,7 +339,8 @@ async def _draw_detail_card(
|
|||||||
)
|
)
|
||||||
|
|
||||||
if avatar.equip:
|
if avatar.equip:
|
||||||
equip_icon = (await get_roleinfo_icon(avatar.equip.icon)).resize((50, 50))
|
equip_icon = await get_roleinfo_icon(avatar.equip.icon)
|
||||||
|
equip_icon = equip_icon.resize((50, 50))
|
||||||
avatar_img.paste(equip_icon, (595, 5), mask=equip_icon)
|
avatar_img.paste(equip_icon, (595, 5), mask=equip_icon)
|
||||||
|
|
||||||
avatar_draw.text(
|
avatar_draw.text(
|
||||||
@ -368,9 +372,7 @@ async def _draw_detail_card(
|
|||||||
return char_info
|
return char_info
|
||||||
|
|
||||||
|
|
||||||
async def get_detail_card(
|
async def get_detail_card(ev: Event, sr_uid: str) -> Union[bytes, str]:
|
||||||
qid: Union[str, int], sr_uid: str, sender: Dict[str, Any]
|
|
||||||
) -> Union[bytes, str]:
|
|
||||||
# 获取角色列表
|
# 获取角色列表
|
||||||
avatar_list = await mys_api.get_avatar_info(sr_uid, 1001)
|
avatar_list = await mys_api.get_avatar_info(sr_uid, 1001)
|
||||||
if isinstance(avatar_list, int):
|
if isinstance(avatar_list, int):
|
||||||
@ -388,19 +390,19 @@ async def get_detail_card(
|
|||||||
char_info.paste(char_title, (0, 0), char_title)
|
char_info.paste(char_title, (0, 0), char_title)
|
||||||
|
|
||||||
# 获取头像
|
# 获取头像
|
||||||
_id = str(qid)
|
char_pic = await _get_event_avatar(ev)
|
||||||
if _id.startswith("http"):
|
|
||||||
char_pic = await get_qq_avatar(avatar_url=_id)
|
|
||||||
elif sender.get("avatar") is not None:
|
|
||||||
char_pic = await get_qq_avatar(avatar_url=sender["avatar"])
|
|
||||||
else:
|
|
||||||
char_pic = await get_qq_avatar(qid=qid)
|
|
||||||
char_pic = await draw_pic_with_ring(char_pic, 250, None, False)
|
char_pic = await draw_pic_with_ring(char_pic, 250, None, False)
|
||||||
|
|
||||||
char_info.paste(char_pic, (400, 88), char_pic)
|
char_info.paste(char_pic, (400, 88), char_pic)
|
||||||
|
|
||||||
# 绘制抬头
|
# 绘制抬头
|
||||||
char_img_draw.text((525, 420), f"UID {sr_uid}", white_color, sr_font_28, "mm")
|
char_img_draw.text(
|
||||||
|
(525, 420),
|
||||||
|
f"UID {sr_uid}",
|
||||||
|
white_color,
|
||||||
|
sr_font_28,
|
||||||
|
"mm",
|
||||||
|
)
|
||||||
|
|
||||||
title_img = Image.open(TEXT_PATH / "bar_title.png")
|
title_img = Image.open(TEXT_PATH / "bar_title.png")
|
||||||
char_info.paste(title_img, (0, 515), mask=title_img)
|
char_info.paste(title_img, (0, 515), mask=title_img)
|
||||||
@ -418,9 +420,11 @@ async def get_detail_card(
|
|||||||
)
|
)
|
||||||
|
|
||||||
# 写底层文字
|
# 写底层文字
|
||||||
|
text1 = 'SR skill statistics by StarrailUID'
|
||||||
|
text2 = 'Code by jiluoQAQ & Power by GsCore'
|
||||||
char_img_draw.text(
|
char_img_draw.text(
|
||||||
(525, img_height - 45),
|
(525, img_height - 45),
|
||||||
"--SR skill statistics by StarrailUID & Code by jiluoQAQ & Power by GsCore--",
|
f"--{text1} & {text2}--",
|
||||||
(255, 255, 255),
|
(255, 255, 255),
|
||||||
fw_font_24,
|
fw_font_24,
|
||||||
"mm",
|
"mm",
|
||||||
|
@ -30,7 +30,7 @@ async def get_sign_func(bot: Bot, ev: Event):
|
|||||||
|
|
||||||
@sv_sign_config.on_fullmatch("全部重签")
|
@sv_sign_config.on_fullmatch("全部重签")
|
||||||
async def recheck(bot: Bot, ev: Event):
|
async def recheck(bot: Bot, ev: Event):
|
||||||
await bot.logger.info("开始执行[全部重签]")
|
logger.info("开始执行[全部重签]")
|
||||||
await bot.send("[星穹铁道] [全部重签] 已开始执行!")
|
await bot.send("[星穹铁道] [全部重签] 已开始执行!")
|
||||||
result = await daily_sign("sr")
|
result = await daily_sign("sr")
|
||||||
if not IS_REPORT:
|
if not IS_REPORT:
|
||||||
|
@ -22,11 +22,11 @@ sv_get_stamina_admin = SV("sr强制推送", pm=1)
|
|||||||
|
|
||||||
@sv_get_stamina.on_fullmatch("当前状态")
|
@sv_get_stamina.on_fullmatch("当前状态")
|
||||||
async def send_daily_info(bot: Bot, ev: Event):
|
async def send_daily_info(bot: Bot, ev: Event):
|
||||||
await bot.logger.info("开始执行[sr每日信息文字版]")
|
logger.info("开始执行[sr每日信息文字版]")
|
||||||
uid = await get_uid(bot, ev, GsBind, "sr")
|
uid = await get_uid(bot, ev, GsBind, "sr")
|
||||||
if uid is None:
|
if uid is None:
|
||||||
return await bot.send(UID_HINT)
|
return await bot.send(UID_HINT)
|
||||||
await bot.logger.info(f"[sr每日信息文字版]UID: {uid}")
|
logger.info(f"[sr每日信息文字版]UID: {uid}")
|
||||||
|
|
||||||
im = await get_stamina_text(uid)
|
im = await get_stamina_text(uid)
|
||||||
await bot.send(im)
|
await bot.send(im)
|
||||||
@ -35,7 +35,7 @@ async def send_daily_info(bot: Bot, ev: Event):
|
|||||||
|
|
||||||
@sv_get_stamina_admin.on_fullmatch("强制推送体力提醒")
|
@sv_get_stamina_admin.on_fullmatch("强制推送体力提醒")
|
||||||
async def force_notice_job(bot: Bot, ev: Event):
|
async def force_notice_job(bot: Bot, ev: Event):
|
||||||
await bot.logger.info("开始执行[sr强制推送体力信息]")
|
logger.info("开始执行[sr强制推送体力信息]")
|
||||||
await sr_notice_job()
|
await sr_notice_job()
|
||||||
|
|
||||||
|
|
||||||
@ -80,9 +80,9 @@ async def sr_notice_job():
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
async def send_daily_info_pic(bot: Bot, ev: Event):
|
async def send_daily_info_pic(bot: Bot, ev: Event):
|
||||||
await bot.logger.info("开始执行[sr每日信息]")
|
logger.info("开始执行[sr每日信息]")
|
||||||
user_id = ev.at if ev.at else ev.user_id
|
user_id = ev.at if ev.at else ev.user_id
|
||||||
await bot.logger.info(f"[sr每日信息]QQ号: {user_id}")
|
logger.info(f"[sr每日信息]QQ号: {user_id}")
|
||||||
|
|
||||||
im = await get_stamina_img(bot.bot_id, user_id)
|
im = await get_stamina_img(bot.bot_id, user_id)
|
||||||
await bot.send(im)
|
await bot.send(im)
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
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.utils.database.models import GsBind
|
from gsuid_core.utils.database.models import GsBind
|
||||||
|
|
||||||
from ..utils.message import send_diff_msg
|
from ..utils.message import send_diff_msg
|
||||||
@ -12,11 +13,11 @@ sv_user_info = SV("sr用户信息")
|
|||||||
|
|
||||||
@sv_user_info.on_fullmatch("绑定信息")
|
@sv_user_info.on_fullmatch("绑定信息")
|
||||||
async def send_bind_card(bot: Bot, ev: Event):
|
async def send_bind_card(bot: Bot, ev: Event):
|
||||||
await bot.logger.info("sr开始执行[查询用户绑定状态]")
|
logger.info("sr开始执行[查询用户绑定状态]")
|
||||||
uid_list = await get_user_card(ev.bot_id, ev.user_id)
|
uid_list = await get_user_card(ev.bot_id, ev.user_id)
|
||||||
if not uid_list:
|
if not uid_list:
|
||||||
return await bot.send("你还没有绑定SR_UID哦!")
|
return await bot.send("你还没有绑定SR_UID哦!")
|
||||||
await bot.logger.info("sr[查询用户绑定状态]完成!等待图片发送中...")
|
logger.info("sr[查询用户绑定状态]完成!等待图片发送中...")
|
||||||
await bot.send(uid_list)
|
await bot.send(uid_list)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@ -34,9 +35,9 @@ async def send_bind_card(bot: Bot, ev: Event):
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
async def send_link_uid_msg(bot: Bot, ev: Event):
|
async def send_link_uid_msg(bot: Bot, ev: Event):
|
||||||
await bot.logger.info("sr开始执行[绑定/解绑用户信息]")
|
logger.info("sr开始执行[绑定/解绑用户信息]")
|
||||||
qid = ev.user_id
|
qid = ev.user_id
|
||||||
await bot.logger.info(f"sr[绑定/解绑]UserID: {qid}")
|
logger.info(f"sr[绑定/解绑]UserID: {qid}")
|
||||||
|
|
||||||
sr_uid = ev.text.strip()
|
sr_uid = ev.text.strip()
|
||||||
if sr_uid and not sr_uid.isdigit():
|
if sr_uid and not sr_uid.isdigit():
|
||||||
|
@ -3,6 +3,7 @@ import re
|
|||||||
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.utils.image.convert import convert_img
|
from gsuid_core.utils.image.convert import convert_img
|
||||||
|
|
||||||
from ..utils.name_covert import (
|
from ..utils.name_covert import (
|
||||||
@ -28,7 +29,7 @@ sv_sr_guide = SV("星铁攻略")
|
|||||||
@sv_sr_wiki.on_prefix("角色图鉴")
|
@sv_sr_wiki.on_prefix("角色图鉴")
|
||||||
async def send_role_wiki_pic(bot: Bot, ev: Event):
|
async def send_role_wiki_pic(bot: Bot, ev: Event):
|
||||||
char_name = " ".join(re.findall("[\u4e00-\u9fa5]+", ev.text))
|
char_name = " ".join(re.findall("[\u4e00-\u9fa5]+", ev.text))
|
||||||
await bot.logger.info(f"开始获取{char_name}图鉴")
|
logger.info(f"开始获取{char_name}图鉴")
|
||||||
if "开拓者" in str(char_name):
|
if "开拓者" in str(char_name):
|
||||||
char_name = "开拓者"
|
char_name = "开拓者"
|
||||||
char_id = await name_to_avatar_id(char_name)
|
char_id = await name_to_avatar_id(char_name)
|
||||||
@ -38,16 +39,16 @@ async def send_role_wiki_pic(bot: Bot, ev: Event):
|
|||||||
img = WIKI_ROLE_PATH / f"{char_id}.png"
|
img = WIKI_ROLE_PATH / f"{char_id}.png"
|
||||||
if img.exists():
|
if img.exists():
|
||||||
img = await convert_img(img)
|
img = await convert_img(img)
|
||||||
await bot.logger.info(f"获得{char_name}图鉴图片成功!")
|
logger.info(f"获得{char_name}图鉴图片成功!")
|
||||||
await bot.send(img)
|
await bot.send(img)
|
||||||
else:
|
else:
|
||||||
await bot.logger.warning(f"未找到{char_name}图鉴图片")
|
logger.warning(f"未找到{char_name}图鉴图片")
|
||||||
|
|
||||||
|
|
||||||
@sv_sr_guide.on_prefix("角色攻略")
|
@sv_sr_guide.on_prefix("角色攻略")
|
||||||
async def send_role_guide_pic(bot: Bot, ev: Event):
|
async def send_role_guide_pic(bot: Bot, ev: Event):
|
||||||
char_name = " ".join(re.findall("[\u4e00-\u9fa5]+", ev.text))
|
char_name = " ".join(re.findall("[\u4e00-\u9fa5]+", ev.text))
|
||||||
await bot.logger.info(f"开始获取{char_name}图鉴")
|
logger.info(f"开始获取{char_name}图鉴")
|
||||||
char_id = await alias_to_char_id(char_name)
|
char_id = await alias_to_char_id(char_name)
|
||||||
if char_id is None:
|
if char_id is None:
|
||||||
if "开拓者" in str(char_name):
|
if "开拓者" in str(char_name):
|
||||||
@ -59,44 +60,44 @@ async def send_role_guide_pic(bot: Bot, ev: Event):
|
|||||||
img = GUIDE_CHARACTER_PATH / f"{char_id}.png"
|
img = GUIDE_CHARACTER_PATH / f"{char_id}.png"
|
||||||
if img.exists():
|
if img.exists():
|
||||||
img = await convert_img(img)
|
img = await convert_img(img)
|
||||||
await bot.logger.info(f"获得{char_id}图鉴图片成功!")
|
logger.info(f"获得{char_id}图鉴图片成功!")
|
||||||
await bot.send(img)
|
await bot.send(img)
|
||||||
else:
|
else:
|
||||||
await bot.logger.warning(f"未找到{char_id}图鉴图片")
|
logger.warning(f"未找到{char_id}图鉴图片")
|
||||||
|
|
||||||
|
|
||||||
@sv_sr_guide.on_prefix("光锥攻略")
|
@sv_sr_guide.on_prefix("光锥攻略")
|
||||||
async def send_weapon_guide_pic(bot: Bot, ev: Event):
|
async def send_weapon_guide_pic(bot: Bot, ev: Event):
|
||||||
msg = " ".join(re.findall("[\u4e00-\u9fa5]+", ev.text))
|
msg = " ".join(re.findall("[\u4e00-\u9fa5]+", ev.text))
|
||||||
await bot.logger.info(f"开始获取{msg}图鉴")
|
logger.info(f"开始获取{msg}图鉴")
|
||||||
light_cone_id = await name_to_weapon_id(msg)
|
light_cone_id = await name_to_weapon_id(msg)
|
||||||
img = GUIDE_LIGHT_CONE_PATH / f"{light_cone_id}.png"
|
img = GUIDE_LIGHT_CONE_PATH / f"{light_cone_id}.png"
|
||||||
if img.exists():
|
if img.exists():
|
||||||
img = await convert_img(img)
|
img = await convert_img(img)
|
||||||
await bot.logger.info(f"获得{light_cone_id}光锥图片成功!")
|
logger.info(f"获得{light_cone_id}光锥图片成功!")
|
||||||
await bot.send(img)
|
await bot.send(img)
|
||||||
else:
|
else:
|
||||||
await bot.logger.warning(f"未找到{light_cone_id}光锥图片")
|
logger.warning(f"未找到{light_cone_id}光锥图片")
|
||||||
|
|
||||||
|
|
||||||
@sv_sr_wiki.on_prefix("遗器")
|
@sv_sr_wiki.on_prefix("遗器")
|
||||||
async def send_relic_wiki_pic(bot: Bot, ev: Event):
|
async def send_relic_wiki_pic(bot: Bot, ev: Event):
|
||||||
msg = " ".join(re.findall("[\u4e00-\u9fa5]+", ev.text))
|
msg = " ".join(re.findall("[\u4e00-\u9fa5]+", ev.text))
|
||||||
await bot.logger.info(f"开始获取{msg}遗器")
|
logger.info(f"开始获取{msg}遗器")
|
||||||
set_id = await name_to_relic_set_id(msg)
|
set_id = await name_to_relic_set_id(msg)
|
||||||
img = WIKI_RELIC_PATH / f"{set_id}.png"
|
img = WIKI_RELIC_PATH / f"{set_id}.png"
|
||||||
if img.exists():
|
if img.exists():
|
||||||
img = await convert_img(img)
|
img = await convert_img(img)
|
||||||
await bot.logger.info(f"获得{msg}遗器图片成功!")
|
logger.info(f"获得{msg}遗器图片成功!")
|
||||||
await bot.send(img)
|
await bot.send(img)
|
||||||
else:
|
else:
|
||||||
await bot.logger.warning(f"未找到{msg}遗器图片")
|
logger.warning(f"未找到{msg}遗器图片")
|
||||||
|
|
||||||
|
|
||||||
@sv_sr_wiki.on_prefix("突破材料")
|
@sv_sr_wiki.on_prefix("突破材料")
|
||||||
async def send_material_for_role_wiki_pic(bot: Bot, ev: Event):
|
async def send_material_for_role_wiki_pic(bot: Bot, ev: Event):
|
||||||
char_name = " ".join(re.findall("[\u4e00-\u9fa5]+", ev.text))
|
char_name = " ".join(re.findall("[\u4e00-\u9fa5]+", ev.text))
|
||||||
await bot.logger.info(f"开始获取{char_name}突破材料")
|
logger.info(f"开始获取{char_name}突破材料")
|
||||||
if "开拓者" in str(char_name):
|
if "开拓者" in str(char_name):
|
||||||
char_name = "开拓者"
|
char_name = "开拓者"
|
||||||
char_id = await name_to_avatar_id(char_name)
|
char_id = await name_to_avatar_id(char_name)
|
||||||
@ -106,21 +107,21 @@ async def send_material_for_role_wiki_pic(bot: Bot, ev: Event):
|
|||||||
img = WIKI_MATERIAL_FOR_ROLE / f"{char_id}.png"
|
img = WIKI_MATERIAL_FOR_ROLE / f"{char_id}.png"
|
||||||
if img.exists():
|
if img.exists():
|
||||||
img = await convert_img(img)
|
img = await convert_img(img)
|
||||||
await bot.logger.info(f"获得{char_name}突破材料图片成功!")
|
logger.info(f"获得{char_name}突破材料图片成功!")
|
||||||
await bot.send(img)
|
await bot.send(img)
|
||||||
else:
|
else:
|
||||||
await bot.logger.warning(f"未找到{char_name}突破材料图片")
|
logger.warning(f"未找到{char_name}突破材料图片")
|
||||||
|
|
||||||
|
|
||||||
@sv_sr_wiki.on_prefix("武器")
|
@sv_sr_wiki.on_prefix("武器")
|
||||||
async def send_light_cone_wiki_pic(bot: Bot, ev: Event):
|
async def send_light_cone_wiki_pic(bot: Bot, ev: Event):
|
||||||
msg = " ".join(re.findall("[\u4e00-\u9fa5]+", ev.text))
|
msg = " ".join(re.findall("[\u4e00-\u9fa5]+", ev.text))
|
||||||
await bot.logger.info(f"开始获取{msg}武器")
|
logger.info(f"开始获取{msg}武器")
|
||||||
light_cone_id = await name_to_weapon_id(msg)
|
light_cone_id = await name_to_weapon_id(msg)
|
||||||
img = WIKI_LIGHT_CONE_PATH / f"{light_cone_id}.png"
|
img = WIKI_LIGHT_CONE_PATH / f"{light_cone_id}.png"
|
||||||
if img.exists():
|
if img.exists():
|
||||||
img = await convert_img(img)
|
img = await convert_img(img)
|
||||||
await bot.logger.info(f"获得{msg}武器图片成功!")
|
logger.info(f"获得{msg}武器图片成功!")
|
||||||
await bot.send(img)
|
await bot.send(img)
|
||||||
else:
|
else:
|
||||||
await bot.logger.warning(f"未找到{msg}武器图片")
|
logger.warning(f"未找到{msg}武器图片")
|
||||||
|
BIN
StarRailUID/utils/image/icon_nature/IconNatureColorFire.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
StarRailUID/utils/image/icon_nature/IconNatureColorIce.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
StarRailUID/utils/image/icon_nature/IconNatureColorImaginary.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
StarRailUID/utils/image/icon_nature/IconNatureColorQuantum.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
StarRailUID/utils/image/icon_nature/IconNatureColorThunder.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
StarRailUID/utils/image/icon_nature/IconNatureColorWind.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
StarRailUID/utils/image/icon_nature/IconNaturePhysical.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
@ -2,13 +2,39 @@ from pathlib import Path
|
|||||||
from typing import Union
|
from typing import Union
|
||||||
|
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
from gsuid_core.utils.image.image_tools import CustomizeImage
|
from gsuid_core.models import Event
|
||||||
|
from gsuid_core.utils.image.image_tools import CustomizeImage, get_event_avatar
|
||||||
|
|
||||||
from ..resource.RESOURCE_PATH import CU_BG_PATH
|
from ..resource.RESOURCE_PATH import CU_BG_PATH, CHAR_ICON_PATH
|
||||||
|
|
||||||
BG_PATH = Path(__file__).parent / "bg"
|
BG_PATH = Path(__file__).parent / "bg"
|
||||||
NM_BG_PATH = BG_PATH / "nm_bg"
|
NM_BG_PATH = BG_PATH / "nm_bg"
|
||||||
TEXT_PATH = Path(__file__).parent / "texture2d"
|
TEXT_PATH = Path(__file__).parent / "texture2d"
|
||||||
|
NATURE_ICON_PATH = Path(__file__).parent / "icon_nature"
|
||||||
|
|
||||||
|
elements = {
|
||||||
|
"ice": Image.open(
|
||||||
|
NATURE_ICON_PATH / "IconNatureColorIce.png"
|
||||||
|
).convert("RGBA"),
|
||||||
|
"fire": Image.open(
|
||||||
|
NATURE_ICON_PATH / "IconNatureColorFire.png"
|
||||||
|
).convert("RGBA"),
|
||||||
|
"imaginary": Image.open(
|
||||||
|
NATURE_ICON_PATH / "IconNatureColorImaginary.png"
|
||||||
|
).convert("RGBA"),
|
||||||
|
"quantum": Image.open(
|
||||||
|
NATURE_ICON_PATH / "IconNatureColorQuantum.png"
|
||||||
|
).convert("RGBA"),
|
||||||
|
"lightning": Image.open(
|
||||||
|
NATURE_ICON_PATH / "IconNatureColorThunder.png"
|
||||||
|
).convert("RGBA"),
|
||||||
|
"wind": Image.open(
|
||||||
|
NATURE_ICON_PATH / "IconNatureColorWind.png"
|
||||||
|
).convert("RGBA"),
|
||||||
|
"physical": Image.open(
|
||||||
|
NATURE_ICON_PATH / "IconNaturePhysical.png"
|
||||||
|
).convert("RGBA"),
|
||||||
|
}
|
||||||
|
|
||||||
if list(CU_BG_PATH.iterdir()) != []:
|
if list(CU_BG_PATH.iterdir()) != []:
|
||||||
bg_path = CU_BG_PATH
|
bg_path = CU_BG_PATH
|
||||||
@ -30,3 +56,7 @@ async def get_simple_bg(
|
|||||||
|
|
||||||
def get_footer():
|
def get_footer():
|
||||||
return Image.open(TEXT_PATH / 'footer.png')
|
return Image.open(TEXT_PATH / 'footer.png')
|
||||||
|
|
||||||
|
|
||||||
|
async def _get_event_avatar(event: Event) -> Image.Image:
|
||||||
|
return await get_event_avatar(event, CHAR_ICON_PATH)
|
||||||
|