feat: 重启时间显示

This commit is contained in:
远野千束 2024-04-10 23:47:10 +08:00
parent db0542279b
commit 38f658edf9
6 changed files with 111 additions and 55 deletions

View File

@ -15,7 +15,7 @@ weather-key # 和风天气的天气key
```
命令
```shell
weather <keywords...> # 查询目标地天气,例如:"天气 北京 海淀", "weather Tokyo Shinjuku"
weather <keywords...> # 查询目标地实时天气,例如:"天气 北京 海淀", "weather Tokyo Shinjuku"
bind-city <keywords...> # 绑定查询城市,个人全局生效
别名weather 天气
```

View File

@ -1,21 +1,22 @@
import asyncio
import base64
import time
from typing import Any
import nonebot
import pip
from git import Repo
from nonebot import Bot, require, get_driver
from nonebot import Bot, get_driver, require
from nonebot.exception import MockApiException
from nonebot.internal.matcher import Matcher
from nonebot.permission import SUPERUSER
from liteyuki.utils.config import config, load_from_yaml
from liteyuki.utils.data_manager import StoredConfig, common_db
from liteyuki.utils.config import load_from_yaml
from liteyuki.utils.data_manager import StoredConfig, TempConfig, common_db
from liteyuki.utils.language import get_user_lang
from liteyuki.utils.ly_typing import T_Bot, T_MessageEvent
from liteyuki.utils.message import Markdown as md
from liteyuki.utils.reloader import Reloader
from liteyuki.utils.resource import get_loaded_resource_packs, load_resources
require("nonebot_plugin_alconna"), require("nonebot_plugin_htmlrender")
from nonebot_plugin_alconna import on_alconna, Alconna, Args, Subcommand, Arparma
@ -84,9 +85,17 @@ async def _(bot: T_Bot, event: T_MessageEvent):
),
permission=SUPERUSER
).handle()
async def _(matcher: Matcher):
async def _(matcher: Matcher, bot: T_Bot, event: T_MessageEvent):
await matcher.send("Liteyuki reloading")
Reloader.reload(3)
temp_data = common_db.first(TempConfig(), default=TempConfig())
temp_data.data["reload"] = True
temp_data.data["reload_time"] = time.time()
temp_data.data["reload_bot_id"] = bot.self_id
temp_data.data["reload_session_type"] = event.message_type
temp_data.data["reload_session_id"] = event.group_id if event.message_type == "group" else event.user_id
temp_data.data["delta_time"] = 0
common_db.upsert(temp_data)
Reloader.reload(0)
@on_alconna(
@ -197,9 +206,34 @@ async def test_for_md_image(bot: T_Bot, api: str, data: dict):
@driver.on_startup
async def on_startup():
pass
temp_data = common_db.first(TempConfig(), default=TempConfig())
if temp_data.data.get("reload", False):
delta_time = time.time() - temp_data.data.get("reload_time", 0)
temp_data.data["delta_time"] = delta_time
common_db.upsert(temp_data) # 更新数据
@driver.on_shutdown
async def on_shutdown():
pass
@driver.on_bot_connect
async def _(bot: T_Bot):
temp_data = common_db.first(TempConfig(), default=TempConfig())
if temp_data.data.get("reload", False):
temp_data.data["reload"] = False
reload_bot_id = temp_data.data.get("reload_bot_id", 0)
if reload_bot_id != bot.self_id:
return
reload_session_type = temp_data.data.get("reload_session_type", "private")
reload_session_id = temp_data.data.get("reload_session_id", 0)
delta_time = temp_data.data.get("delta_time", 0)
common_db.upsert(temp_data) # 更新数据
await bot.call_api(
"send_msg",
message_type=reload_session_type,
user_id=reload_session_id,
group_id=reload_session_id,
message="Liteyuki reloaded in %.2f s" % delta_time
)

View File

@ -5,36 +5,48 @@ from liteyuki.utils.data import LiteModel
class Location(LiteModel):
name: str = ""
id: str = ""
lat: str = ""
lon: str = ""
adm2: str = ""
adm1: str = ""
country: str = ""
tz: str = ""
utcOffset: str = ""
isDst: str = ""
type: str = ""
rank: str = ""
fxLink: str = ""
sources: str = ""
license: str = ""
class CityLookupResponse(LiteModel):
code: str = ""
location: Location = Location()
class WeatherNow(LiteModel):
time: str = ""
city: str = ""
obsTime: str = ""
temp: str = ""
feelsLike: str = ""
icon: str = ""
text: str = ""
wind360: str = ""
windDir: str = ""
windScale: str = ""
windSpeed: str = ""
humidity: str = ""
precip: str = ""
pressure: str = ""
vis: str = ""
cloud: str = ""
dew: str = ""
sources: str = ""
license: str = ""
weather = on_command("weather", aliases={"天气", "查天气", "天气预报", "查天气预报"})
weather_now = on_command("weather_now", aliases={"实时天气", "查实时天气", "实时天气预报", "查实时天气预报"})
weather_forecast = on_command("weather_forecast", aliases={"天气预报", "查天气预报", "未来天气", "查未来天气"})
weather_warning = on_command("weather_warning", aliases={"天气预警", "查天气预警", "天气警告", "查天气警告"})
weather_life = on_command("weather_life", aliases={"生活指数", "查生活指数", "生活指数预报", "查生活指数预报"})
weather_air = on_command("weather_air", aliases={"空气质量", "查空气质量", "空气质量预报", "查空气质量预报"})
weather_rain = on_command("weather_rain", aliases={"降雨预报", "查降雨预报", "降雨量", "查降雨量"})
weather_snow = on_command("weather_snow", aliases={"降雪预报", "查降雪预报", "降雪量", "查降雪量"})
@weather.handle()
async def handle_weather(bot, event):
args = str(event.get_message()).strip()
if not args:
await weather.finish("请输入要查询的城市")
else:
pass
@weather_now.handle()
async def handle_weather_now(bot, event):
pass
@weather_forecast.handle()
async def handle_weather_forecast(bot, event):
pass
class WeatherNowResponse(LiteModel):
code: str = ""
updateTime: str = ""
fxLink: str = ""
now: WeatherNow = WeatherNow()

View File

@ -0,0 +1,15 @@
from nonebot import require
require("nonebot_plugin_alconna")
from nonebot_plugin_alconna import on_alconna, Alconna, Subcommand, Args, MultiVar, Arparma
@on_alconna(
aliases={"天气"},
command=Alconna(
"weather",
Args["keywords", MultiVar(str)],
),
).handle()
async def _(result: Arparma):
"""await alconna.send("weather", city)"""

View File

@ -1,10 +1,5 @@
// 存放格言
const mottos = [
{
"text": "人生自古谁无死,留取丹心照汗青。",
"author": "文天祥",
"source": "《正气歌》"
},
{
"text": "同是天涯沦落人,相逢何必曾相识。",
"author": "白居易",
@ -15,16 +10,6 @@ const mottos = [
"author": "王勃",
"source": "《送杜少府之任蜀州》"
},
{
"text": "人生到处知何似,应似飞鸿踏雪泥。",
"author": "苏轼",
"source": "《水调歌头》"
},
{
"text": "大鹏一日同风起,扶摇直上九万里。",
"author": "李白",
"source": "《将进酒》"
},
{
"text": "银烛秋光冷画屏,轻罗小扇扑流萤。",
"author": "陆游",
@ -32,8 +17,8 @@ const mottos = [
},
{
"text": "明月几时有,把酒问青天。",
"author": "辛弃疾",
"source": "《水龙吟》"
"author": "苏轼",
"source": "《水调歌头》"
},
{
"text": "逸一时,误一世,逸久逸久罢已龄",
@ -60,4 +45,9 @@ const mottos = [
"author": "SnowyKami",
"source": "轻雪文档"
},
{
"text": "你知道吗轻雪的主题是基于Vue.js开发的",
"author": "SnowyKami",
"source": "轻雪文档"
}
]

View File

@ -48,9 +48,14 @@ class StoredConfig(LiteModel):
config: dict = {}
class TempConfig(LiteModel):
"""储存临时键值对的表"""
TABLE_NAME = "temp_data"
data: dict = {}
def auto_migrate():
user_db.auto_migrate(User())
group_db.auto_migrate(Group())
plugin_db.auto_migrate(InstalledPlugin(), GlobalPlugin())
common_db.auto_migrate(GlobalPlugin(), StoredConfig())
common_db.auto_migrate(GlobalPlugin(), StoredConfig(), TempConfig())