feat: 可以设置发送高清大图

This commit is contained in:
snowy 2024-04-01 12:29:04 +08:00
parent e43cb0ab07
commit 54cc57a2b2
3 changed files with 41 additions and 8 deletions

View File

@ -1,9 +1,11 @@
import base64
from typing import Any
import nonebot
import pip
from git import Repo
from nonebot import require, get_driver
from nonebot import Bot, require, get_driver
from nonebot.exception import MockApiException
from nonebot.permission import SUPERUSER
from liteyuki.utils.config import config, load_from_yaml
@ -13,12 +15,15 @@ from liteyuki.utils.ly_typing import T_Bot, T_MessageEvent
from liteyuki.utils.message import Markdown as md
from .reloader import Reloader
from liteyuki.utils import htmlrender
from ..utils.liteyuki_api import liteyuki_api
require("nonebot_plugin_alconna")
from nonebot_plugin_alconna import on_alconna, Alconna, Args, Subcommand, Arparma
driver = get_driver()
markdown_image = False
cmd_liteyuki = on_alconna(
Alconna(
"liteyuki"
@ -137,14 +142,43 @@ async def _(result: Arparma, event: T_MessageEvent, bot: T_Bot):
@switch_image_mode.handle()
async def _(bot: T_Bot, event: T_MessageEvent):
global markdown_image
# 切换图片模式False以图片形式发送True以markdown形式发送
ulang = get_user_lang(str(event.user_id))
stored_config: StoredConfig = common_db.first(StoredConfig(), default=StoredConfig())
stored_config.config["markdown_image"] = not stored_config.config.get("markdown_image", False)
markdown_image = stored_config.config["markdown_image"]
common_db.upsert(stored_config)
await switch_image_mode.finish(
f"{ulang.get('liteyuki.image_mode_switched', MODE=ulang.get('liteyuki.image_mode_on')
if stored_config.config.get('image_mode') else ulang.get('liteyuki.image_mode_off'))}")
await switch_image_mode.finish(ulang.get("liteyuki.image_mode_on" if stored_config.config["markdown_image"] else "liteyuki.image_mode_off"))
# system hook
@Bot.on_calling_api
async def test_for_md_image(bot: T_Bot, api: str, data: dict):
if api in ["send_msg", "send_private_msg", "send_group_msg"] and markdown_image:
if api == "send_msg" and data.get("message_type") == "private" or api == "send_private_msg":
session_type = "private"
session_id = data.get("user_id")
elif api == "send_msg" and data.get("message_type") == "group" or api == "send_group_msg":
session_type = "group"
session_id = data.get("group_id")
else:
return
if len(data.get("message", [])) == 1 and data["message"][0].get("type") == "image":
file: str = data["message"][0].data.get("file")
# file:// http:// base64://
if file.startswith("http"):
result = await md.send_md(await md.image_async(file), bot, message_type=session_type, session_id=session_id)
elif file.startswith("file"):
file = file.replace("file://", "")
result = await md.send_image(open(file, "rb").read(), bot, message_type=session_type, session_id=session_id)
elif file.startswith("base64"):
file_bytes = base64.b64decode(file.replace("base64://", ""))
result = await md.send_image(file_bytes, bot, message_type=session_type, session_id=session_id)
else:
return
raise MockApiException(result=result)
@driver.on_startup

View File

@ -93,6 +93,5 @@ user.profile.input_value=请输入 {ATTR} 的值
user.profile.set_success=成功将 {ATTR} 设置为 {VALUE}
user.profile.set_failed=设置 {ATTR} 失败,请检查输入是否合法
liteyuki.image_mode_switched=图片模式已切换为 {MODE}
liteyuki.image_mode_on=开启Markdown图片模式
liteyuki.image_mode_off=关闭Markdown图片模式

View File

@ -165,7 +165,7 @@ class Markdown:
@staticmethod
def image(url: str, size: tuple[int, int]) -> str:
"""生成图片
"""构建图片链接
Args:
size:
url: 图片链接
@ -178,12 +178,12 @@ class Markdown:
@staticmethod
async def image_async(url: str) -> str:
"""获取图片,自动获取大小
"""获取图片,自动请求获取大小,异步
Args:
url: 图片链接
Returns:
图片bytes
图片Markdown语法: ![image #{width}px #{height}px](link)
"""
try: