1
0
forked from bot/app

snowy 进行的更改

This commit is contained in:
2024-03-22 12:41:38 +08:00
parent 367b8a5e5d
commit 0bd415961c
15 changed files with 207 additions and 85 deletions

View File

@ -0,0 +1,14 @@
from nonebot.plugin import PluginMetadata
__plugin_meta__ = PluginMetadata(
name="轻雪小游戏",
description="内置了一些小游戏",
usage="",
type="application",
homepage="https://github.com/snowykami/LiteyukiBot",
extra={
"liteyuki": True,
"toggleable" : True,
"default_enable" : True,
}
)

View File

@ -59,8 +59,7 @@ async def _(result: Arparma, event: T_MessageEvent, bot: T_Bot):
ulang = get_user_lang(str(event.user_id))
if not os.path.exists("data/liteyuki/plugins.json"):
shutil.copy(get_res('unsorted/plugins.json'), "data/liteyuki/plugins.json")
nonebot.logger.info("Please update plugin store data file.")
await npm_update()
if result.subcommands.get("update"):
r = await npm_update()

View File

@ -1,3 +1,5 @@
import os
import nonebot.plugin
from nonebot import on_command
from nonebot.internal.matcher import Matcher
@ -11,7 +13,7 @@ from src.utils.permission import GROUP_ADMIN, GROUP_OWNER
from src.utils.typing import T_Bot, T_MessageEvent
from src.utils.language import get_user_lang
from .common import get_plugin_can_be_toggle, get_plugin_current_enable, get_plugin_default_enable
from .installer import get_store_plugin
from .installer import get_store_plugin, npm_update
list_plugins = on_command("list-plugin", aliases={"列出插件", "插件列表"}, priority=0)
# toggle_plugin = on_command("enable-plugin", aliases={"启用插件", "停用插件", "disable-plugin"}, priority=0)
@ -25,6 +27,8 @@ toggle_plugin = on_alconna(
@list_plugins.handle()
async def _(event: T_MessageEvent, bot: T_Bot):
if not os.path.exists("data/liteyuki/plugins.json"):
await npm_update()
lang = get_user_lang(str(event.user_id))
reply = f"# {lang.get('npm.loaded_plugins')} | {lang.get('npm.total', TOTAL=len(nonebot.get_loaded_plugins()))} \n***\n"
for plugin in nonebot.get_loaded_plugins():
@ -71,6 +75,8 @@ async def _(event: T_MessageEvent, bot: T_Bot):
@toggle_plugin.handle()
async def _(result: Arparma, event: T_MessageEvent, bot: T_Bot):
if not os.path.exists("data/liteyuki/plugins.json"):
await npm_update()
# 判断会话类型
ulang = get_user_lang(str(event.user_id))
plugin_module_name = result.args.get("plugin_name")

View File

@ -1,39 +1,101 @@
from typing import Optional
from arclet.alconna import Arparma
from nonebot import on_command
from nonebot.params import CommandArg
from nonebot_plugin_alconna import on_alconna, Alconna, Args, Arparma, Option, Subcommand
from src.utils.data import LiteModel
from src.utils.typing import T_Bot, T_Message, T_MessageEvent
from src.utils.data_manager import User, user_db
from src.utils.language import get_user_lang
from src.utils.message import Markdown as md, send_markdown
profile_alc = on_alconna(
Alconna(
["profile", "个人信息"],
Subcommand(
"set",
Args["key", str]["value", str, Optional],
alias=["s", "设置"],
),
Subcommand(
"get",
Args["key", str],
alias=["g", "查询"],
),
)
)
attr_map = {
"lang" : ["lang", "language", "语言"],
"username": ["username", "昵称", "用户名"] # Bot称呼用户的昵称
}
attr_cmd = on_command("profile", aliases={"个人设置"}, priority=0)
# json储存
class Profile(LiteModel):
lang: str = "zh-CN"
nickname: str = ""
timezone: str = "Asia/Shanghai"
location: str = ""
@attr_cmd.handle()
async def _(bot: T_Bot, event: T_MessageEvent, args: T_Message = CommandArg()):
user = user_db.first(User, "user_id = ?", str(event.user_id), default=User(user_id=str(event.user_id)))
@profile_alc.handle()
async def _(result: Arparma, event: T_MessageEvent, bot: T_Bot):
user: User = user_db.first(User, "user_id = ?", event.user_id, default=User(user_id=str(event.user_id)))
ulang = get_user_lang(str(event.user_id))
if result.subcommands.get("set"):
if result.subcommands["set"].args.get("value"):
# TODO
pass
else:
# 没有值尝试呼出菜单若菜单为none则提示用户输入值再次尝试
# TODO
pass
args = str(args).split(" ", 1)
input_key = args[0]
attr_key = "username"
for attr_key, attr_values in attr_map.items():
if input_key in attr_values:
break
user.profile[result.args["key"]] = result.args["value"]
if len(args) == 1:
# 查询
value = user.__dict__[attr_key]
await attr_cmd.finish(f"{ulang.get('user.profile_manager.query', ATTR=attr_key, VALUE=value)}")
elif result.subcommands.get("get"):
if result.args["key"] in user.profile:
await profile_alc.finish(user.profile[result.args["key"]])
else:
await profile_alc.finish("无此键值")
else:
# 设置
value = args[1]
user.__dict__[attr_key] = value
user_db.save(user)
await attr_cmd.finish(f"{ulang.get('user.profile_manager.set', ATTR=attr_key, VALUE=value)}")
profile = Profile(**user.profile)
for k, v in user.profile:
profile.__setattr__(k, v)
reply = f"# {ulang.get("user.profile.settings")}\n***\n"
hidden_attr = ["id"]
enter_attr = ["lang", "timezone"]
for key in sorted(profile.dict().keys()):
if key in hidden_attr:
continue
val = profile.dict()[key]
key_text = ulang.get(f"user.profile.{key}")
btn_set = md.button(ulang.get("user.profile.edit"), f"profile set {key}",
enter=True if key in enter_attr else False)
reply += (f"\n**{key_text}** **{val}**\n"
f"\n > {btn_set} {ulang.get(f'user.profile.{key}.desc')}\n\n***\n")
await send_markdown(reply, bot, event=event)
def get_profile_menu(key: str) -> str:
"""获取属性的markdown菜单
Args:
key:
Returns:
"""
def set_profile(key: str, value: str) -> bool:
"""设置属性使用if分支对每一个合法性进行检查
Args:
key:
value:
Returns:
是否成功设置输入合法性不通过返回False
"""

View File

@ -0,0 +1,15 @@
from nonebot.plugin import PluginMetadata
__plugin_meta__ = PluginMetadata(
name="轻雪天气",
description="基于和风天气api的天气插件",
usage="",
type="application",
homepage="https://github.com/snowykami/LiteyukiBot",
extra={
"liteyuki": True,
"toggleable" : True,
"default_enable" : True,
}
)