mirror of
https://github.com/xuthus83/LittlePaimon.git
synced 2024-12-16 13:40:53 +08:00
✨ ysc
支持获取原图
This commit is contained in:
parent
1285cb7a74
commit
3504937891
@ -51,5 +51,10 @@ GREET_CONFIG = Path() / 'config' / 'paimon_greet.yml'
|
|||||||
GREET_CONFIG_DEFAULT = Path() / 'config' / 'paimon_greet_default.yml'
|
GREET_CONFIG_DEFAULT = Path() / 'config' / 'paimon_greet_default.yml'
|
||||||
# 群聊学习配置文件
|
# 群聊学习配置文件
|
||||||
LEARNING_CHAT_CONFIG = Path() / 'config' / 'learning_chat.yml'
|
LEARNING_CHAT_CONFIG = Path() / 'config' / 'learning_chat.yml'
|
||||||
|
# 米游社帖子订阅文件,未用上
|
||||||
|
MIHOYO_BBS_POST_PATH = Path() / 'data' / 'LittlePaimon' / '米游社帖子订阅.json'
|
||||||
|
# ysc原图临时目录
|
||||||
|
YSC_TEMP_IMG_PATH = Path() / 'data' / 'LittlePaimon' / 'temp_img'
|
||||||
|
YSC_TEMP_IMG_PATH.mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import datetime
|
import datetime
|
||||||
|
from LittlePaimon.config import YSC_TEMP_IMG_PATH
|
||||||
from LittlePaimon.utils import scheduler, logger
|
from LittlePaimon.utils import scheduler, logger
|
||||||
from LittlePaimon.database.models import GuessVoiceRank, PluginStatistics, DailyNoteSub, CookieCache, PublicCookie
|
from LittlePaimon.database.models import GuessVoiceRank, PluginStatistics, DailyNoteSub, CookieCache, PublicCookie
|
||||||
|
|
||||||
@ -20,3 +21,7 @@ async def _():
|
|||||||
if now.weekday() == 0:
|
if now.weekday() == 0:
|
||||||
logger.info('原神猜语音', '清空每周排行榜')
|
logger.info('原神猜语音', '清空每周排行榜')
|
||||||
await GuessVoiceRank.all().delete()
|
await GuessVoiceRank.all().delete()
|
||||||
|
|
||||||
|
if YSC_TEMP_IMG_PATH.exists():
|
||||||
|
YSC_TEMP_IMG_PATH.unlink()
|
||||||
|
YSC_TEMP_IMG_PATH.mkdir(parents=True, exist_ok=True)
|
||||||
|
@ -1,12 +1,14 @@
|
|||||||
from nonebot import on_command
|
from nonebot import on_command
|
||||||
from nonebot.adapters.onebot.v11 import Message, MessageEvent, MessageSegment
|
from nonebot.adapters.onebot.v11 import Message, MessageEvent, MessageSegment
|
||||||
from nonebot.adapters.onebot.v11.helpers import HandleCancellation
|
from nonebot.adapters.onebot.v11.helpers import HandleCancellation
|
||||||
|
from nonebot.rule import Rule
|
||||||
from nonebot.params import ArgPlainText, CommandArg
|
from nonebot.params import ArgPlainText, CommandArg
|
||||||
from nonebot.plugin import PluginMetadata
|
from nonebot.plugin import PluginMetadata
|
||||||
from nonebot.typing import T_State
|
from nonebot.typing import T_State
|
||||||
|
|
||||||
from LittlePaimon import NICKNAME
|
from LittlePaimon import NICKNAME
|
||||||
from LittlePaimon.database.models import PlayerAlias
|
from LittlePaimon.database.models import PlayerAlias
|
||||||
|
from LittlePaimon.config import YSC_TEMP_IMG_PATH
|
||||||
from LittlePaimon.utils import logger
|
from LittlePaimon.utils import logger
|
||||||
from LittlePaimon.utils.message import CommandPlayer, CommandCharacter, CommandUID
|
from LittlePaimon.utils.message import CommandPlayer, CommandCharacter, CommandUID
|
||||||
from LittlePaimon.utils.genshin import GenshinInfoManager
|
from LittlePaimon.utils.genshin import GenshinInfoManager
|
||||||
@ -29,6 +31,11 @@ __plugin_meta__ = PluginMetadata(
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def has_raw_rule(event: MessageEvent) -> bool:
|
||||||
|
return bool(event.reply and (YSC_TEMP_IMG_PATH / f'{event.reply.message_id}.jpg').exists())
|
||||||
|
|
||||||
|
|
||||||
ys = on_command('ys', aliases={'原神卡片', '个人卡片'}, priority=10, block=True, state={
|
ys = on_command('ys', aliases={'原神卡片', '个人卡片'}, priority=10, block=True, state={
|
||||||
'pm_name': 'ys',
|
'pm_name': 'ys',
|
||||||
'pm_description': '查看原神个人信息卡片',
|
'pm_description': '查看原神个人信息卡片',
|
||||||
@ -77,6 +84,12 @@ show_alias = on_command('查看别名', priority=10, block=True, state={
|
|||||||
'pm_usage': '查看别名',
|
'pm_usage': '查看别名',
|
||||||
'pm_priority': 9
|
'pm_priority': 9
|
||||||
})
|
})
|
||||||
|
raw_img_cmd = on_command('原图', priority=10, block=True, rule=Rule(has_raw_rule), state={
|
||||||
|
'pm_name': 'ysc原图',
|
||||||
|
'pm_description': '获取ysc指令卡片中的原神同人图',
|
||||||
|
'pm_usage': '(回复ysc消息) 原图',
|
||||||
|
'pm_priority': 10
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
@ys.handle()
|
@ys.handle()
|
||||||
@ -139,6 +152,7 @@ async def _(event: MessageEvent, players=CommandPlayer(2)):
|
|||||||
async def _(event: MessageEvent, players=CommandPlayer(only_cn=False), characters=CommandCharacter()):
|
async def _(event: MessageEvent, players=CommandPlayer(only_cn=False), characters=CommandCharacter()):
|
||||||
logger.info('原神角色卡片', '开始执行')
|
logger.info('原神角色卡片', '开始执行')
|
||||||
msg = Message()
|
msg = Message()
|
||||||
|
temp_img = None
|
||||||
if len(players) == 1:
|
if len(players) == 1:
|
||||||
# 当查询对象只有一个时,查询所有角色
|
# 当查询对象只有一个时,查询所有角色
|
||||||
gim = GenshinInfoManager(players[0].user_id, players[0].uid)
|
gim = GenshinInfoManager(players[0].user_id, players[0].uid)
|
||||||
@ -150,7 +164,7 @@ async def _(event: MessageEvent, players=CommandPlayer(only_cn=False), character
|
|||||||
logger.info('原神角色卡片', '➤➤', {'角色': character}, '没有该角色信息,发送随机图', True)
|
logger.info('原神角色卡片', '➤➤', {'角色': character}, '没有该角色信息,发送随机图', True)
|
||||||
msg += MessageSegment.image(f'http://img.genshin.cherishmoon.fun/{character}')
|
msg += MessageSegment.image(f'http://img.genshin.cherishmoon.fun/{character}')
|
||||||
else:
|
else:
|
||||||
img = await draw_chara_card(character_info)
|
img, temp_img = await draw_chara_card(character_info)
|
||||||
logger.info('原神角色卡片', '➤➤', {'角色': character}, '制图完成', True)
|
logger.info('原神角色卡片', '➤➤', {'角色': character}, '制图完成', True)
|
||||||
msg += img
|
msg += img
|
||||||
else:
|
else:
|
||||||
@ -164,10 +178,18 @@ async def _(event: MessageEvent, players=CommandPlayer(only_cn=False), character
|
|||||||
logger.info('原神角色卡片', '➤➤', {'角色': characters[0]}, '没有该角色信息,发送随机图', True)
|
logger.info('原神角色卡片', '➤➤', {'角色': characters[0]}, '没有该角色信息,发送随机图', True)
|
||||||
msg += MessageSegment.image(f'http://img.genshin.cherishmoon.fun/{characters[0]}')
|
msg += MessageSegment.image(f'http://img.genshin.cherishmoon.fun/{characters[0]}')
|
||||||
else:
|
else:
|
||||||
img = await draw_chara_card(character_info)
|
img, temp_img = await draw_chara_card(character_info)
|
||||||
logger.info('原神角色卡片', '➤➤', {'角色': characters[0]}, '制图完成', True)
|
logger.info('原神角色卡片', '➤➤', {'角色': characters[0]}, '制图完成', True)
|
||||||
msg += img
|
msg += img
|
||||||
await ysd.finish(msg, at_sender=True)
|
send_result = await ysd.send(msg, at_sender=True)
|
||||||
|
if temp_img:
|
||||||
|
temp_img.convert('RGB').save(YSC_TEMP_IMG_PATH / f'{send_result["message_id"]}.jpg', )
|
||||||
|
|
||||||
|
|
||||||
|
@raw_img_cmd.handle()
|
||||||
|
async def _(event: MessageEvent):
|
||||||
|
with open(YSC_TEMP_IMG_PATH / f'{event.reply.message_id}.jpg', 'rb') as f:
|
||||||
|
await raw_img_cmd.finish(MessageSegment.image(f.read()))
|
||||||
|
|
||||||
|
|
||||||
@ysd.handle()
|
@ysd.handle()
|
||||||
@ -240,7 +262,8 @@ async def _(event: MessageEvent, state: T_State, msg: Message = CommandArg()):
|
|||||||
state['alias'] = Message(msg[1])
|
state['alias'] = Message(msg[1])
|
||||||
|
|
||||||
|
|
||||||
@add_alias.got('alias', prompt=Message.template('你想把{chara}设置为你的谁呢?'), parameterless=[HandleCancellation(f'好吧,有事再找{NICKNAME}吧')])
|
@add_alias.got('alias', prompt=Message.template('你想把{chara}设置为你的谁呢?'),
|
||||||
|
parameterless=[HandleCancellation(f'好吧,有事再找{NICKNAME}吧')])
|
||||||
async def _(event: MessageEvent, chara: str = ArgPlainText('chara'), alias: str = ArgPlainText('alias')):
|
async def _(event: MessageEvent, chara: str = ArgPlainText('chara'), alias: str = ArgPlainText('alias')):
|
||||||
await PlayerAlias.update_or_create(user_id=str(event.user_id), alias=alias, defaults={'character': chara})
|
await PlayerAlias.update_or_create(user_id=str(event.user_id), alias=alias, defaults={'character': chara})
|
||||||
await add_alias.finish(f'设置成功,{NICKNAME}知道{chara}是你的{alias}啦..')
|
await add_alias.finish(f'设置成功,{NICKNAME}知道{chara}是你的{alias}啦..')
|
||||||
@ -251,12 +274,14 @@ async def _(event: MessageEvent, state: T_State, msg: Message = CommandArg()):
|
|||||||
if msg:
|
if msg:
|
||||||
state['alias'] = msg
|
state['alias'] = msg
|
||||||
elif aliases := await PlayerAlias.filter(user_id=str(event.user_id)).all():
|
elif aliases := await PlayerAlias.filter(user_id=str(event.user_id)).all():
|
||||||
state['msg'] = '你已设置以下别名:\n' + '\n'.join([f'{i.alias} -> {i.character}' for i in aliases]) + '\n请输入你想删除的别名或发送"全部"删除全部别名'
|
state['msg'] = '你已设置以下别名:\n' + '\n'.join(
|
||||||
|
[f'{i.alias} -> {i.character}' for i in aliases]) + '\n请输入你想删除的别名或发送"全部"删除全部别名'
|
||||||
else:
|
else:
|
||||||
await delete_alias.finish('你还没有设置任何别名哦')
|
await delete_alias.finish('你还没有设置任何别名哦')
|
||||||
|
|
||||||
|
|
||||||
@delete_alias.got('alias', prompt=Message.template('{msg}'), parameterless=[HandleCancellation(f'好吧,有事再找{NICKNAME}吧')])
|
@delete_alias.got('alias', prompt=Message.template('{msg}'),
|
||||||
|
parameterless=[HandleCancellation(f'好吧,有事再找{NICKNAME}吧')])
|
||||||
async def _(event: MessageEvent, msg: str = ArgPlainText('alias')):
|
async def _(event: MessageEvent, msg: str = ArgPlainText('alias')):
|
||||||
if msg == '全部':
|
if msg == '全部':
|
||||||
await PlayerAlias.filter(user_id=str(event.user_id)).delete()
|
await PlayerAlias.filter(user_id=str(event.user_id)).delete()
|
||||||
|
@ -29,7 +29,7 @@ talent_color = [('#d5f2b6', '#6d993d'), ('#d5f2b6', '#6d993d'), ('#d5f2b6', '#6d
|
|||||||
async def draw_chara_card(info: Character):
|
async def draw_chara_card(info: Character):
|
||||||
img = await aiorequests.get_img(f'http://img.genshin.cherishmoon.fun/{info.name}', mode='RGBA')
|
img = await aiorequests.get_img(f'http://img.genshin.cherishmoon.fun/{info.name}', mode='RGBA')
|
||||||
if img == 'No Such File':
|
if img == 'No Such File':
|
||||||
return '暂时没有这个角色的同人图哦~'
|
return '暂时没有这个角色的同人图哦~', None
|
||||||
# 新建卡片
|
# 新建卡片
|
||||||
card = PMImage(size=(385, 500), color=(0, 0, 0, 0), mode='RGBA')
|
card = PMImage(size=(385, 500), color=(0, 0, 0, 0), mode='RGBA')
|
||||||
await card.draw_rounded_rectangle2((0, 0), (card.width, card.height), 80, (0, 0, 0, 153), ['ur'])
|
await card.draw_rounded_rectangle2((0, 0), (card.width, card.height), 80, (0, 0, 0, 153), ['ur'])
|
||||||
@ -133,6 +133,7 @@ async def draw_chara_card(info: Character):
|
|||||||
per = 1 / ((card.width / img.width) / 0.4)
|
per = 1 / ((card.width / img.width) / 0.4)
|
||||||
|
|
||||||
await card.resize(per)
|
await card.resize(per)
|
||||||
|
raw_img = img.copy()
|
||||||
|
|
||||||
img.alpha_composite(card.image, (0, img.height - card.height))
|
img.alpha_composite(card.image, (0, img.height - card.height))
|
||||||
return MessageBuild.Image(img, mode='RGB')
|
return MessageBuild.Image(img, mode='RGB'), raw_img
|
||||||
|
Loading…
x
Reference in New Issue
Block a user