mirror of
https://github.com/LiteyukiStudio/LiteyukiBot.git
synced 2024-11-14 13:47:24 +08:00
🐛 修复npm无法显示的问题
This commit is contained in:
parent
598bff8c49
commit
9e2bbe2e5c
@ -25,7 +25,9 @@ from ..utils.base.ly_function import get_function
|
|||||||
|
|
||||||
require("nonebot_plugin_alconna")
|
require("nonebot_plugin_alconna")
|
||||||
require("nonebot_plugin_apscheduler")
|
require("nonebot_plugin_apscheduler")
|
||||||
from nonebot_plugin_alconna import on_alconna, Alconna, Args, Arparma, MultiVar
|
require("nonebot_plugin_htmlrender")
|
||||||
|
from nonebot_plugin_htmlrender import md_to_pic
|
||||||
|
from nonebot_plugin_alconna import UniMessage, on_alconna, Alconna, Args, Arparma, MultiVar
|
||||||
from nonebot_plugin_apscheduler import scheduler
|
from nonebot_plugin_apscheduler import scheduler
|
||||||
|
|
||||||
driver = get_driver()
|
driver = get_driver()
|
||||||
@ -54,7 +56,7 @@ async def _(bot: T_Bot, matcher: Matcher, result: Arparma):
|
|||||||
permission=SUPERUSER
|
permission=SUPERUSER
|
||||||
).handle()
|
).handle()
|
||||||
# Satori OK
|
# Satori OK
|
||||||
async def _(bot: T_Bot, event: T_MessageEvent):
|
async def _(bot: T_Bot, event: T_MessageEvent, matcher: Matcher):
|
||||||
# 使用git pull更新
|
# 使用git pull更新
|
||||||
|
|
||||||
ulang = get_user_lang(str(event.user.id if isinstance(event, satori.event.Event) else event.user_id))
|
ulang = get_user_lang(str(event.user.id if isinstance(event, satori.event.Event) else event.user_id))
|
||||||
@ -64,7 +66,9 @@ async def _(bot: T_Bot, event: T_MessageEvent):
|
|||||||
btn_restart = md.btn_cmd(ulang.get("liteyuki.restart_now"), "reload-liteyuki")
|
btn_restart = md.btn_cmd(ulang.get("liteyuki.restart_now"), "reload-liteyuki")
|
||||||
pip.main(["install", "-r", "requirements.txt"])
|
pip.main(["install", "-r", "requirements.txt"])
|
||||||
reply += f"{ulang.get('liteyuki.update_restart', RESTART=btn_restart)}"
|
reply += f"{ulang.get('liteyuki.update_restart', RESTART=btn_restart)}"
|
||||||
await md.send_md(reply, bot)
|
# await md.send_md(reply, bot)
|
||||||
|
img_bytes = await md_to_pic(reply)
|
||||||
|
await UniMessage.send(UniMessage.image(raw=img_bytes))
|
||||||
|
|
||||||
|
|
||||||
@on_alconna(
|
@on_alconna(
|
||||||
|
@ -1,125 +0,0 @@
|
|||||||
import nonebot
|
|
||||||
from nonebot import on_message, require
|
|
||||||
from nonebot.plugin import PluginMetadata
|
|
||||||
|
|
||||||
from src.utils.base.data import Database, LiteModel
|
|
||||||
from src.utils.base.ly_typing import T_Bot, T_MessageEvent
|
|
||||||
from src.utils.message.message import MarkdownMessage as md
|
|
||||||
|
|
||||||
require("nonebot_plugin_alconna")
|
|
||||||
from nonebot_plugin_alconna import on_alconna
|
|
||||||
from arclet.alconna import Arparma, Alconna, Args, Option, Subcommand
|
|
||||||
|
|
||||||
|
|
||||||
class Node(LiteModel):
|
|
||||||
TABLE_NAME: str = "node"
|
|
||||||
bot_id: str = ""
|
|
||||||
session_type: str = ""
|
|
||||||
session_id: str = ""
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return f"{self.bot_id}.{self.session_type}.{self.session_id}"
|
|
||||||
|
|
||||||
|
|
||||||
class Push(LiteModel):
|
|
||||||
TABLE_NAME: str = "push"
|
|
||||||
source: Node = Node()
|
|
||||||
target: Node = Node()
|
|
||||||
inde: int = 0
|
|
||||||
|
|
||||||
|
|
||||||
pushes_db = Database("data/pushes.ldb")
|
|
||||||
pushes_db.auto_migrate(Push(), Node())
|
|
||||||
|
|
||||||
alc = Alconna(
|
|
||||||
"lep",
|
|
||||||
Subcommand(
|
|
||||||
"add",
|
|
||||||
Args["source", str],
|
|
||||||
Args["target", str],
|
|
||||||
Option("bidirectional", Args["bidirectional", bool])
|
|
||||||
),
|
|
||||||
Subcommand(
|
|
||||||
"rm",
|
|
||||||
Args["index", int],
|
|
||||||
|
|
||||||
),
|
|
||||||
Subcommand(
|
|
||||||
"list",
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
add_push = on_alconna(alc)
|
|
||||||
|
|
||||||
|
|
||||||
@add_push.handle()
|
|
||||||
async def _(result: Arparma):
|
|
||||||
"""bot_id.session_type.session_id"""
|
|
||||||
if result.subcommands.get("add"):
|
|
||||||
source = result.subcommands["add"].args.get("source")
|
|
||||||
target = result.subcommands["add"].args.get("target")
|
|
||||||
if source and target:
|
|
||||||
source = source.split(".")
|
|
||||||
target = target.split(".")
|
|
||||||
push1 = Push(
|
|
||||||
source=Node(bot_id=source[0], session_type=source[1], session_id=source[2]),
|
|
||||||
target=Node(bot_id=target[0], session_type=target[1], session_id=target[2]),
|
|
||||||
inde=len(pushes_db.where_all(Push(), default=[]))
|
|
||||||
)
|
|
||||||
pushes_db.save(push1)
|
|
||||||
|
|
||||||
if result.subcommands["add"].args.get("bidirectional"):
|
|
||||||
push2 = Push(
|
|
||||||
source=Node(bot_id=target[0], session_type=target[1], session_id=target[2]),
|
|
||||||
target=Node(bot_id=source[0], session_type=source[1], session_id=source[2]),
|
|
||||||
inde=len(pushes_db.where_all(Push(), default=[]))
|
|
||||||
)
|
|
||||||
pushes_db.save(push2)
|
|
||||||
await add_push.finish("添加成功")
|
|
||||||
else:
|
|
||||||
await add_push.finish("参数缺失")
|
|
||||||
elif result.subcommands.get("rm"):
|
|
||||||
index = result.subcommands["rm"].args.get("index")
|
|
||||||
if index is not None:
|
|
||||||
try:
|
|
||||||
pushes_db.delete(Push(), "inde = ?", index)
|
|
||||||
await add_push.finish("删除成功")
|
|
||||||
except IndexError:
|
|
||||||
await add_push.finish("索引错误")
|
|
||||||
else:
|
|
||||||
await add_push.finish("参数缺失")
|
|
||||||
elif result.subcommands.get("list"):
|
|
||||||
await add_push.finish(
|
|
||||||
"\n".join([f"{push.inde} {push.source.bot_id}.{push.source.session_type}.{push.source.session_id} -> "
|
|
||||||
f"{push.target.bot_id}.{push.target.session_type}.{push.target.session_id}" for i, push in
|
|
||||||
enumerate(pushes_db.where_all(Push(), default=[]))]))
|
|
||||||
else:
|
|
||||||
await add_push.finish("参数错误")
|
|
||||||
|
|
||||||
|
|
||||||
@on_message(block=False).handle()
|
|
||||||
async def _(event: T_MessageEvent, bot: T_Bot):
|
|
||||||
for push in pushes_db.where_all(Push(), default=[]):
|
|
||||||
if str(push.source) == f"{bot.self_id}.{event.message_type}.{event.user_id if event.message_type == 'private' else event.group_id}":
|
|
||||||
bot2 = nonebot.get_bot(push.target.bot_id)
|
|
||||||
msg_formatted = ""
|
|
||||||
for line in str(event.message).split("\n"):
|
|
||||||
msg_formatted += f"**{line.strip()}**\n"
|
|
||||||
push_message = (
|
|
||||||
f"> From {event.sender.nickname}@{push.source.session_type}.{push.source.session_id}\n> Bot {bot.self_id}\n\n"
|
|
||||||
f"{msg_formatted}")
|
|
||||||
await md.send_md(push_message, bot2, message_type=push.target.session_type,
|
|
||||||
session_id=push.target.session_id)
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
__author__ = "snowykami"
|
|
||||||
__plugin_meta__ = PluginMetadata(
|
|
||||||
name="轻雪事件推送",
|
|
||||||
description="事件推送插件,支持单向和双向推送,支持跨Bot推送",
|
|
||||||
usage="",
|
|
||||||
homepage="https://github.com/snowykami/LiteyukiBot",
|
|
||||||
extra={
|
|
||||||
"liteyuki": True,
|
|
||||||
}
|
|
||||||
)
|
|
@ -1,52 +0,0 @@
|
|||||||
from nonebot import on_command, require
|
|
||||||
from nonebot.adapters.onebot.v11 import MessageSegment
|
|
||||||
from nonebot.params import CommandArg
|
|
||||||
from nonebot.permission import SUPERUSER
|
|
||||||
from nonebot.plugin import PluginMetadata
|
|
||||||
|
|
||||||
from src.utils.base.ly_typing import T_Bot, T_MessageEvent, v11
|
|
||||||
from src.utils.message.message import MarkdownMessage as md, broadcast_to_superusers
|
|
||||||
from src.utils.message.html_tool import *
|
|
||||||
|
|
||||||
md_test = on_command("mdts", permission=SUPERUSER)
|
|
||||||
btn_test = on_command("btnts", permission=SUPERUSER)
|
|
||||||
latex_test = on_command("latex", permission=SUPERUSER)
|
|
||||||
|
|
||||||
|
|
||||||
@md_test.handle()
|
|
||||||
async def _(bot: T_Bot, event: T_MessageEvent, arg: v11.Message = CommandArg()):
|
|
||||||
await md.send_md(
|
|
||||||
v11.utils.unescape(str(arg)),
|
|
||||||
bot,
|
|
||||||
message_type=event.message_type,
|
|
||||||
session_id=event.user_id if event.message_type == "private" else event.group_id
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@btn_test.handle()
|
|
||||||
async def _(bot: T_Bot, event: T_MessageEvent, arg: v11.Message = CommandArg()):
|
|
||||||
await md.send_btn(
|
|
||||||
str(arg),
|
|
||||||
bot,
|
|
||||||
message_type=event.message_type,
|
|
||||||
session_id=event.user_id if event.message_type == "private" else event.group_id
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@latex_test.handle()
|
|
||||||
async def _(bot: T_Bot, event: T_MessageEvent, arg: v11.Message = CommandArg()):
|
|
||||||
latex_text = f"$${v11.utils.unescape(str(arg))}$$"
|
|
||||||
img = await md_to_pic(latex_text)
|
|
||||||
await bot.send(event=event, message=MessageSegment.image(img))
|
|
||||||
|
|
||||||
|
|
||||||
__author__ = "snowykami"
|
|
||||||
__plugin_meta__ = PluginMetadata(
|
|
||||||
name="轻雪Markdown测试",
|
|
||||||
description="用于测试Markdown的插件",
|
|
||||||
usage="",
|
|
||||||
homepage="https://github.com/snowykami/LiteyukiBot",
|
|
||||||
extra={
|
|
||||||
"liteyuki": True,
|
|
||||||
}
|
|
||||||
)
|
|
@ -1,15 +0,0 @@
|
|||||||
from nonebot.plugin import PluginMetadata
|
|
||||||
from .minesweeper import *
|
|
||||||
|
|
||||||
__plugin_meta__ = PluginMetadata(
|
|
||||||
name="轻雪小游戏",
|
|
||||||
description="内置了一些小游戏",
|
|
||||||
usage="",
|
|
||||||
type="application",
|
|
||||||
homepage="https://github.com/snowykami/LiteyukiBot",
|
|
||||||
extra={
|
|
||||||
"liteyuki": True,
|
|
||||||
"toggleable" : True,
|
|
||||||
"default_enable" : True,
|
|
||||||
}
|
|
||||||
)
|
|
@ -1,168 +0,0 @@
|
|||||||
import random
|
|
||||||
from pydantic import BaseModel
|
|
||||||
from src.utils.message.message import MarkdownMessage as md
|
|
||||||
|
|
||||||
class Dot(BaseModel):
|
|
||||||
row: int
|
|
||||||
col: int
|
|
||||||
mask: bool = True
|
|
||||||
value: int = 0
|
|
||||||
flagged: bool = False
|
|
||||||
|
|
||||||
|
|
||||||
class Minesweeper:
|
|
||||||
# 0-8: number of mines around, 9: mine, -1: undefined
|
|
||||||
NUMS = "⓪①②③④⑤⑥⑦⑧🅑⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳"
|
|
||||||
MASK = "🅜"
|
|
||||||
FLAG = "🅕"
|
|
||||||
MINE = "🅑"
|
|
||||||
|
|
||||||
def __init__(self, rows, cols, num_mines, session_type, session_id):
|
|
||||||
assert rows > 0 and cols > 0 and 0 < num_mines < rows * cols
|
|
||||||
self.session_type = session_type
|
|
||||||
self.session_id = session_id
|
|
||||||
self.rows = rows
|
|
||||||
self.cols = cols
|
|
||||||
self.num_mines = num_mines
|
|
||||||
self.board: list[list[Dot]] = [[Dot(row=i, col=j) for j in range(cols)] for i in range(rows)]
|
|
||||||
self.is_first = True
|
|
||||||
|
|
||||||
def reveal(self, row, col) -> bool:
|
|
||||||
"""
|
|
||||||
展开
|
|
||||||
Args:
|
|
||||||
row:
|
|
||||||
col:
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
游戏是否继续
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
if self.is_first:
|
|
||||||
# 第一次展开,生成地雷
|
|
||||||
self.generate_board(self.board[row][col])
|
|
||||||
self.is_first = False
|
|
||||||
|
|
||||||
if self.board[row][col].value == 9:
|
|
||||||
self.board[row][col].mask = False
|
|
||||||
return False
|
|
||||||
|
|
||||||
if not self.board[row][col].mask:
|
|
||||||
return True
|
|
||||||
|
|
||||||
self.board[row][col].mask = False
|
|
||||||
|
|
||||||
if self.board[row][col].value == 0:
|
|
||||||
self.reveal_neighbors(row, col)
|
|
||||||
return True
|
|
||||||
|
|
||||||
def is_win(self) -> bool:
|
|
||||||
"""
|
|
||||||
是否胜利
|
|
||||||
Returns:
|
|
||||||
"""
|
|
||||||
for row in range(self.rows):
|
|
||||||
for col in range(self.cols):
|
|
||||||
if self.board[row][col].mask and self.board[row][col].value != 9:
|
|
||||||
return False
|
|
||||||
return True
|
|
||||||
|
|
||||||
def generate_board(self, first_dot: Dot):
|
|
||||||
"""
|
|
||||||
避开第一个点,生成地雷
|
|
||||||
Args:
|
|
||||||
first_dot: 第一个点
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
|
|
||||||
"""
|
|
||||||
generate_count = 0
|
|
||||||
while generate_count < self.num_mines:
|
|
||||||
row = random.randint(0, self.rows - 1)
|
|
||||||
col = random.randint(0, self.cols - 1)
|
|
||||||
if self.board[row][col].value == 9 or (row, col) == (first_dot.row, first_dot.col):
|
|
||||||
continue
|
|
||||||
self.board[row][col] = Dot(row=row, col=col, mask=True, value=9)
|
|
||||||
generate_count += 1
|
|
||||||
|
|
||||||
for row in range(self.rows):
|
|
||||||
for col in range(self.cols):
|
|
||||||
if self.board[row][col].value != 9:
|
|
||||||
self.board[row][col].value = self.count_adjacent_mines(row, col)
|
|
||||||
|
|
||||||
def count_adjacent_mines(self, row, col):
|
|
||||||
"""
|
|
||||||
计算周围地雷数量
|
|
||||||
Args:
|
|
||||||
row:
|
|
||||||
col:
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
|
|
||||||
"""
|
|
||||||
count = 0
|
|
||||||
for r in range(max(0, row - 1), min(self.rows, row + 2)):
|
|
||||||
for c in range(max(0, col - 1), min(self.cols, col + 2)):
|
|
||||||
if self.board[r][c].value == 9:
|
|
||||||
count += 1
|
|
||||||
return count
|
|
||||||
|
|
||||||
def reveal_neighbors(self, row, col):
|
|
||||||
"""
|
|
||||||
递归展开,使用深度优先搜索
|
|
||||||
Args:
|
|
||||||
row:
|
|
||||||
col:
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
|
|
||||||
"""
|
|
||||||
for r in range(max(0, row - 1), min(self.rows, row + 2)):
|
|
||||||
for c in range(max(0, col - 1), min(self.cols, col + 2)):
|
|
||||||
if self.board[r][c].mask:
|
|
||||||
self.board[r][c].mask = False
|
|
||||||
if self.board[r][c].value == 0:
|
|
||||||
self.reveal_neighbors(r, c)
|
|
||||||
|
|
||||||
def mark(self, row, col) -> bool:
|
|
||||||
"""
|
|
||||||
标记
|
|
||||||
Args:
|
|
||||||
row:
|
|
||||||
col:
|
|
||||||
Returns:
|
|
||||||
是否标记成功,如果已经展开则无法标记
|
|
||||||
"""
|
|
||||||
if self.board[row][col].mask:
|
|
||||||
self.board[row][col].flagged = not self.board[row][col].flagged
|
|
||||||
return self.board[row][col].flagged
|
|
||||||
|
|
||||||
def board_markdown(self) -> str:
|
|
||||||
"""
|
|
||||||
打印地雷板
|
|
||||||
Returns:
|
|
||||||
"""
|
|
||||||
dis = " "
|
|
||||||
start = "> " if self.cols >= 10 else ""
|
|
||||||
text = start + self.NUMS[0] + dis*2
|
|
||||||
# 横向两个雷之间的间隔字符
|
|
||||||
# 生成横向索引
|
|
||||||
for i in range(self.cols):
|
|
||||||
text += f"{self.NUMS[i]}" + dis
|
|
||||||
text += "\n\n"
|
|
||||||
for i, row in enumerate(self.board):
|
|
||||||
text += start + f"{self.NUMS[i]}" + dis*2
|
|
||||||
for dot in row:
|
|
||||||
if dot.mask and not dot.flagged:
|
|
||||||
text += md.btn_cmd(self.MASK, f"minesweeper reveal {dot.row} {dot.col}")
|
|
||||||
elif dot.flagged:
|
|
||||||
text += md.btn_cmd(self.FLAG, f"minesweeper mark {dot.row} {dot.col}")
|
|
||||||
else:
|
|
||||||
text += self.NUMS[dot.value]
|
|
||||||
text += dis
|
|
||||||
text += "\n"
|
|
||||||
btn_mark = md.btn_cmd("标记", f"minesweeper mark ", enter=False)
|
|
||||||
btn_end = md.btn_cmd("结束", "minesweeper end", enter=True)
|
|
||||||
text += f" {btn_mark} {btn_end}"
|
|
||||||
return text
|
|
@ -1,103 +0,0 @@
|
|||||||
from nonebot import require
|
|
||||||
|
|
||||||
from src.utils.base.ly_typing import T_Bot, T_MessageEvent
|
|
||||||
from src.utils.message.message import MarkdownMessage as md
|
|
||||||
|
|
||||||
require("nonebot_plugin_alconna")
|
|
||||||
from .game import Minesweeper
|
|
||||||
|
|
||||||
from nonebot_plugin_alconna import Alconna, on_alconna, Subcommand, Args, Arparma
|
|
||||||
|
|
||||||
minesweeper = on_alconna(
|
|
||||||
aliases={"扫雷"},
|
|
||||||
command=Alconna(
|
|
||||||
"minesweeper",
|
|
||||||
Subcommand(
|
|
||||||
"start",
|
|
||||||
Args["row", int, 8]["col", int, 8]["mines", int, 10],
|
|
||||||
alias=["开始"],
|
|
||||||
|
|
||||||
),
|
|
||||||
Subcommand(
|
|
||||||
"end",
|
|
||||||
alias=["结束"]
|
|
||||||
),
|
|
||||||
Subcommand(
|
|
||||||
"reveal",
|
|
||||||
Args["row", int]["col", int],
|
|
||||||
alias=["展开"]
|
|
||||||
|
|
||||||
),
|
|
||||||
Subcommand(
|
|
||||||
"mark",
|
|
||||||
Args["row", int]["col", int],
|
|
||||||
alias=["标记"]
|
|
||||||
),
|
|
||||||
),
|
|
||||||
)
|
|
||||||
|
|
||||||
minesweeper_cache: list[Minesweeper] = []
|
|
||||||
|
|
||||||
|
|
||||||
def get_minesweeper_cache(event: T_MessageEvent) -> Minesweeper | None:
|
|
||||||
for i in minesweeper_cache:
|
|
||||||
if i.session_type == event.message_type:
|
|
||||||
if i.session_id == event.user_id or i.session_id == event.group_id:
|
|
||||||
return i
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
|
||||||
@minesweeper.handle()
|
|
||||||
async def _(event: T_MessageEvent, result: Arparma, bot: T_Bot):
|
|
||||||
game = get_minesweeper_cache(event)
|
|
||||||
if result.subcommands.get("start"):
|
|
||||||
if game:
|
|
||||||
await minesweeper.finish("当前会话不能同时进行多个扫雷游戏")
|
|
||||||
else:
|
|
||||||
try:
|
|
||||||
new_game = Minesweeper(
|
|
||||||
rows=result.subcommands["start"].args["row"],
|
|
||||||
cols=result.subcommands["start"].args["col"],
|
|
||||||
num_mines=result.subcommands["start"].args["mines"],
|
|
||||||
session_type=event.message_type,
|
|
||||||
session_id=event.user_id if event.message_type == "private" else event.group_id,
|
|
||||||
)
|
|
||||||
minesweeper_cache.append(new_game)
|
|
||||||
await minesweeper.send("游戏开始")
|
|
||||||
await md.send_md(new_game.board_markdown(), bot)
|
|
||||||
except AssertionError:
|
|
||||||
await minesweeper.finish("参数错误")
|
|
||||||
elif result.subcommands.get("end"):
|
|
||||||
if game:
|
|
||||||
minesweeper_cache.remove(game)
|
|
||||||
await minesweeper.finish("游戏结束")
|
|
||||||
else:
|
|
||||||
await minesweeper.finish("当前没有扫雷游戏")
|
|
||||||
elif result.subcommands.get("reveal"):
|
|
||||||
if not game:
|
|
||||||
await minesweeper.finish("当前没有扫雷游戏")
|
|
||||||
else:
|
|
||||||
row = result.subcommands["reveal"].args["row"]
|
|
||||||
col = result.subcommands["reveal"].args["col"]
|
|
||||||
if not (0 <= row < game.rows and 0 <= col < game.cols):
|
|
||||||
await minesweeper.finish("参数错误")
|
|
||||||
if not game.reveal(row, col):
|
|
||||||
minesweeper_cache.remove(game)
|
|
||||||
await md.send_md(game.board_markdown(), bot)
|
|
||||||
await minesweeper.finish("游戏结束")
|
|
||||||
await md.send_md(game.board_markdown(), bot)
|
|
||||||
if game.is_win():
|
|
||||||
minesweeper_cache.remove(game)
|
|
||||||
await minesweeper.finish("游戏胜利")
|
|
||||||
elif result.subcommands.get("mark"):
|
|
||||||
if not game:
|
|
||||||
await minesweeper.finish("当前没有扫雷游戏")
|
|
||||||
else:
|
|
||||||
row = result.subcommands["mark"].args["row"]
|
|
||||||
col = result.subcommands["mark"].args["col"]
|
|
||||||
if not (0 <= row < game.rows and 0 <= col < game.cols):
|
|
||||||
await minesweeper.finish("参数错误")
|
|
||||||
game.board[row][col].flagged = not game.board[row][col].flagged
|
|
||||||
await md.send_md(game.board_markdown(), bot)
|
|
||||||
else:
|
|
||||||
await minesweeper.finish("参数错误")
|
|
@ -14,6 +14,7 @@ from nonebot.permission import SUPERUSER
|
|||||||
from nonebot.plugin import Plugin, PluginMetadata
|
from nonebot.plugin import Plugin, PluginMetadata
|
||||||
from nonebot.utils import run_sync
|
from nonebot.utils import run_sync
|
||||||
|
|
||||||
|
|
||||||
from src.utils.base.data_manager import InstalledPlugin
|
from src.utils.base.data_manager import InstalledPlugin
|
||||||
from src.utils.base.language import get_user_lang
|
from src.utils.base.language import get_user_lang
|
||||||
from src.utils.base.ly_typing import T_Bot
|
from src.utils.base.ly_typing import T_Bot
|
||||||
@ -24,8 +25,10 @@ from src.utils.message.tools import clamp
|
|||||||
from .common import *
|
from .common import *
|
||||||
|
|
||||||
require("nonebot_plugin_alconna")
|
require("nonebot_plugin_alconna")
|
||||||
|
require("nonebot_plugin_htmlrender")
|
||||||
|
from nonebot_plugin_htmlrender import md_to_pic
|
||||||
from nonebot_plugin_alconna import (
|
from nonebot_plugin_alconna import (
|
||||||
on_alconna,
|
UniMessage, on_alconna,
|
||||||
Alconna,
|
Alconna,
|
||||||
Args,
|
Args,
|
||||||
Arparma,
|
Arparma,
|
||||||
@ -292,7 +295,8 @@ async def _(result: Arparma, event: T_MessageEvent, bot: T_Bot, npm: Matcher):
|
|||||||
reply += f"\n{ulang.get('npm.too_many_results', HIDE_NUM=len(rs) - max_show)}"
|
reply += f"\n{ulang.get('npm.too_many_results', HIDE_NUM=len(rs) - max_show)}"
|
||||||
else:
|
else:
|
||||||
reply = ulang.get("npm.search_no_result")
|
reply = ulang.get("npm.search_no_result")
|
||||||
await md.send_md(reply, bot)
|
img_bytes = await md_to_pic(reply)
|
||||||
|
await UniMessage.send(UniMessage.image(raw=img_bytes))
|
||||||
|
|
||||||
elif sc.get("install") and perm_s:
|
elif sc.get("install") and perm_s:
|
||||||
plugin_name: str = result.subcommands["install"].args.get("plugin_name")
|
plugin_name: str = result.subcommands["install"].args.get("plugin_name")
|
||||||
@ -320,7 +324,7 @@ async def _(result: Arparma, event: T_MessageEvent, bot: T_Bot, npm: Matcher):
|
|||||||
info = md.escape(
|
info = md.escape(
|
||||||
ulang.get("npm.install_success", NAME=store_plugin.name)
|
ulang.get("npm.install_success", NAME=store_plugin.name)
|
||||||
) # markdown转义
|
) # markdown转义
|
||||||
await md.send_md(f"{info}\n\n" f"```\n{log}\n```", bot)
|
await npm.send(f"{info}\n\n" + f"\n{log}\n")
|
||||||
else:
|
else:
|
||||||
await npm.finish(
|
await npm.finish(
|
||||||
ulang.get(
|
ulang.get(
|
||||||
@ -331,12 +335,12 @@ async def _(result: Arparma, event: T_MessageEvent, bot: T_Bot, npm: Matcher):
|
|||||||
info = ulang.get(
|
info = ulang.get(
|
||||||
"npm.load_failed", NAME=plugin_name, HOMEPAGE=homepage_btn
|
"npm.load_failed", NAME=plugin_name, HOMEPAGE=homepage_btn
|
||||||
).replace("_", r"\\_")
|
).replace("_", r"\\_")
|
||||||
await md.send_md(f"{info}\n\n" f"```\n{log}\n```\n", bot)
|
await npm.finish(f"{info}\n\n" f"```\n{log}\n```\n")
|
||||||
else:
|
else:
|
||||||
info = ulang.get(
|
info = ulang.get(
|
||||||
"npm.install_failed", NAME=plugin_name, HOMEPAGE=homepage_btn
|
"npm.install_failed", NAME=plugin_name, HOMEPAGE=homepage_btn
|
||||||
).replace("_", r"\\_")
|
).replace("_", r"\\_")
|
||||||
await md.send_md(f"{info}\n\n" f"```\n{log}\n```", bot)
|
await npm.send(f"{info}\n\n" f"```\n{log}\n```")
|
||||||
|
|
||||||
elif sc.get("uninstall") and perm_s:
|
elif sc.get("uninstall") and perm_s:
|
||||||
plugin_name: str = result.subcommands["uninstall"].args.get("plugin_name") # type: ignore
|
plugin_name: str = result.subcommands["uninstall"].args.get("plugin_name") # type: ignore
|
||||||
@ -464,7 +468,8 @@ async def _(result: Arparma, event: T_MessageEvent, bot: T_Bot, npm: Matcher):
|
|||||||
else ulang.get("npm.next_page")
|
else ulang.get("npm.next_page")
|
||||||
)
|
)
|
||||||
reply += f"\n{btn_prev} {page}/{total} {btn_next}"
|
reply += f"\n{btn_prev} {page}/{total} {btn_next}"
|
||||||
await md.send_md(reply, bot)
|
img_bytes = await md_to_pic(reply)
|
||||||
|
await UniMessage.send(UniMessage.image(raw=img_bytes))
|
||||||
|
|
||||||
else:
|
else:
|
||||||
if await SUPERUSER(bot, event):
|
if await SUPERUSER(bot, event):
|
||||||
@ -517,7 +522,8 @@ async def _(result: Arparma, event: T_MessageEvent, bot: T_Bot, npm: Matcher):
|
|||||||
f"\n\n>page为页数,num为每页显示数量"
|
f"\n\n>page为页数,num为每页显示数量"
|
||||||
f"\n\n>*{md.escape('npm list [page] [num]')}*"
|
f"\n\n>*{md.escape('npm list [page] [num]')}*"
|
||||||
)
|
)
|
||||||
await md.send_md(reply, bot)
|
img_bytes = await md_to_pic(reply)
|
||||||
|
await UniMessage.send(UniMessage.image(raw=img_bytes))
|
||||||
else:
|
else:
|
||||||
|
|
||||||
btn_list = md.btn_cmd(
|
btn_list = md.btn_cmd(
|
||||||
@ -539,7 +545,8 @@ async def _(result: Arparma, event: T_MessageEvent, bot: T_Bot, npm: Matcher):
|
|||||||
f"\n\n>page为页数,num为每页显示数量"
|
f"\n\n>page为页数,num为每页显示数量"
|
||||||
f"\n\n>*{md.escape('npm list [page] [num]')}*"
|
f"\n\n>*{md.escape('npm list [page] [num]')}*"
|
||||||
)
|
)
|
||||||
await md.send_md(reply, bot)
|
img_bytes = await md_to_pic(reply)
|
||||||
|
await UniMessage.send(UniMessage.image(raw=img_bytes))
|
||||||
|
|
||||||
|
|
||||||
@on_alconna(
|
@on_alconna(
|
||||||
@ -679,7 +686,7 @@ async def _(result: Arparma, matcher: Matcher, event: T_MessageEvent, bot: T_Bot
|
|||||||
else mdc.paragraph(ulang.get("npm.homepage"))
|
else mdc.paragraph(ulang.get("npm.homepage"))
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
await md.send_md(compile_md(reply), bot)
|
await matcher.finish(compile_md(reply))
|
||||||
else:
|
else:
|
||||||
await matcher.finish(ulang.get("npm.plugin_not_found", NAME=plugin_name))
|
await matcher.finish(ulang.get("npm.plugin_not_found", NAME=plugin_name))
|
||||||
else:
|
else:
|
||||||
|
@ -181,6 +181,6 @@ async def _(bot: T_Bot, event: T_MessageEvent, result: Arparma, matcher: Matcher
|
|||||||
else:
|
else:
|
||||||
pass
|
pass
|
||||||
if send_as_md:
|
if send_as_md:
|
||||||
await md.send_md(reply, bot)
|
await matcher.send(reply)
|
||||||
else:
|
else:
|
||||||
await matcher.finish(reply)
|
await matcher.finish(reply)
|
||||||
|
@ -12,7 +12,9 @@ from .const import representative_timezones_list
|
|||||||
from src.utils import event as event_utils
|
from src.utils import event as event_utils
|
||||||
|
|
||||||
require("nonebot_plugin_alconna")
|
require("nonebot_plugin_alconna")
|
||||||
|
require("nonebot_plugin_htmlrender")
|
||||||
from nonebot_plugin_alconna import Alconna, Args, Arparma, Subcommand, on_alconna
|
from nonebot_plugin_alconna import Alconna, Args, Arparma, Subcommand, on_alconna
|
||||||
|
from nonebot_plugin_htmlrender import md_to_pic
|
||||||
|
|
||||||
profile_alc = on_alconna(
|
profile_alc = on_alconna(
|
||||||
Alconna(
|
Alconna(
|
||||||
@ -65,7 +67,8 @@ async def _(result: Arparma, event: T_MessageEvent, bot: T_Bot):
|
|||||||
# 未输入值,尝试呼出菜单
|
# 未输入值,尝试呼出菜单
|
||||||
menu = get_profile_menu(result.args["key"], ulang)
|
menu = get_profile_menu(result.args["key"], ulang)
|
||||||
if menu:
|
if menu:
|
||||||
await md.send_md(menu, bot)
|
img_bytes = await md_to_pic(menu)
|
||||||
|
await profile_alc.finish(menu)
|
||||||
else:
|
else:
|
||||||
await profile_alc.finish(ulang.get("user.profile.input_value", ATTR=ulang.get(f"user.profile.{result.args['key']}")))
|
await profile_alc.finish(ulang.get("user.profile.input_value", ATTR=ulang.get(f"user.profile.{result.args['key']}")))
|
||||||
|
|
||||||
@ -97,7 +100,8 @@ async def _(result: Arparma, event: T_MessageEvent, bot: T_Bot):
|
|||||||
reply += (f"\n**{key_text}** **{val}**\n"
|
reply += (f"\n**{key_text}** **{val}**\n"
|
||||||
f"\n> {ulang.get(f'user.profile.{key}.desc')}"
|
f"\n> {ulang.get(f'user.profile.{key}.desc')}"
|
||||||
f"\n> {btn_set} \n\n***\n")
|
f"\n> {btn_set} \n\n***\n")
|
||||||
await md.send_md(reply, bot)
|
img_bytes = await md_to_pic(reply)
|
||||||
|
await profile_alc.finish(reply)
|
||||||
|
|
||||||
|
|
||||||
def get_profile_menu(key: str, ulang: Language) -> Optional[str]:
|
def get_profile_menu(key: str, ulang: Language) -> Optional[str]:
|
||||||
|
@ -19,9 +19,6 @@ from nonebot_plugin_htmlrender import md_to_pic
|
|||||||
|
|
||||||
config = load_from_yaml("config.yml")
|
config = load_from_yaml("config.yml")
|
||||||
|
|
||||||
can_send_markdown = {} # 用于存储机器人是否支持发送markdown消息,id->bool
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
async def broadcast_to_superusers(message: str | T_Message, markdown: bool = False):
|
async def broadcast_to_superusers(message: str | T_Message, markdown: bool = False):
|
||||||
"""广播消息给超级用户"""
|
"""广播消息给超级用户"""
|
||||||
@ -57,14 +54,7 @@ class MarkdownMessage:
|
|||||||
width=540,
|
width=540,
|
||||||
device_scale_factor=4
|
device_scale_factor=4
|
||||||
)
|
)
|
||||||
if md_image_bytes is None:
|
print(md_image_bytes)
|
||||||
data = await bot.send_msg(
|
|
||||||
message_type=message_type,
|
|
||||||
group_id=session_id,
|
|
||||||
user_id=session_id,
|
|
||||||
message=markdown,
|
|
||||||
)
|
|
||||||
return data
|
|
||||||
data = await bot.send_msg(
|
data = await bot.send_msg(
|
||||||
message_type=message_type,
|
message_type=message_type,
|
||||||
group_id=session_id,
|
group_id=session_id,
|
||||||
|
Loading…
Reference in New Issue
Block a user