This commit is contained in:
@ -117,22 +117,18 @@ async def _(target: DepLongTaskTarget, temp: Optional[Union[int, float]] = 1):
|
||||
await send_ac_image(evt, ac)
|
||||
return
|
||||
await ac.update_ac(temperature_delta=temp)
|
||||
if ac.temperature > 40:
|
||||
# 根据温度随机出是否爆炸,40度开始,呈指数增长
|
||||
possibility = -math.e ** ((40-ac.temperature) / 50) + 1
|
||||
if random.random() < possibility:
|
||||
# 打开爆炸图片
|
||||
with open(ASSETS_PATH / "img" / "other" / "boom.jpg", "rb") as f:
|
||||
output = BytesIO()
|
||||
# 爆炸抖动
|
||||
frames = wiggle_transform(np.array(Image.open(f)), intensity=5)
|
||||
pil_frames = [Image.fromarray(frame) for frame in frames]
|
||||
pil_frames[0].save(output, format="GIF", save_all=True, append_images=pil_frames[1:], loop=0, duration=35, disposal=2)
|
||||
output.seek(0)
|
||||
await evt.send(await UniMessage().image(raw=output).export())
|
||||
await ac.broke_ac(CrashType.BURNT)
|
||||
await evt.send("太热啦,空调炸了!")
|
||||
return
|
||||
if ac.burnt:
|
||||
# 打开爆炸图片
|
||||
with open(ASSETS_PATH / "img" / "other" / "boom.jpg", "rb") as f:
|
||||
output = BytesIO()
|
||||
# 爆炸抖动
|
||||
frames = wiggle_transform(np.array(Image.open(f)), intensity=5)
|
||||
pil_frames = [Image.fromarray(frame) for frame in frames]
|
||||
pil_frames[0].save(output, format="GIF", save_all=True, append_images=pil_frames[1:], loop=0, duration=35, disposal=2)
|
||||
output.seek(0)
|
||||
await evt.send(await UniMessage().image(raw=output).export())
|
||||
await evt.send("太热啦,空调炸了!")
|
||||
return
|
||||
await send_ac_image(evt, ac)
|
||||
|
||||
evt = on_alconna(Alconna(
|
||||
@ -152,11 +148,6 @@ async def _(target: DepLongTaskTarget, temp: Optional[Union[int, float]] = 1):
|
||||
await send_ac_image(evt, ac)
|
||||
return
|
||||
await ac.update_ac(temperature_delta=-temp)
|
||||
if ac.temperature < 0:
|
||||
# 根据温度随机出是否冻结,0度开始,呈指数增长
|
||||
possibility = -math.e ** (ac.temperature / 50) + 1
|
||||
if random.random() < possibility:
|
||||
await ac.broke_ac(CrashType.FROZEN)
|
||||
await send_ac_image(evt, ac)
|
||||
|
||||
evt = on_alconna(Alconna(
|
||||
@ -202,3 +193,36 @@ async def _(target: DepLongTaskTarget):
|
||||
params=params
|
||||
)
|
||||
await evt.send(await UniMessage().image(raw=image).export())
|
||||
|
||||
evt = on_alconna(Alconna(
|
||||
"空调最高峰",
|
||||
), use_cmd_start=True, use_cmd_sep=False, skip_for_unmatch=True)
|
||||
|
||||
@evt.handle()
|
||||
async def _(target: DepLongTaskTarget):
|
||||
result = await db_manager.query_by_sql_file(
|
||||
ROOT_PATH / "sql" / "query_peak.sql"
|
||||
)
|
||||
if len(result) == 0:
|
||||
await evt.send("没有空调记录!")
|
||||
return
|
||||
max_temp = result[0].get("max")
|
||||
min_temp = result[0].get("min")
|
||||
his_max = result[0].get("his_max")
|
||||
his_min = result[0].get("his_min")
|
||||
# 再从内存里的空调池中获取最高温度和最低温度
|
||||
for ac in AirConditioner.InstancesPool.values():
|
||||
if ac.on and not ac.burnt and not ac.frozen:
|
||||
if max_temp is None or min_temp is None:
|
||||
max_temp = ac.temperature
|
||||
min_temp = ac.temperature
|
||||
max_temp = max(max_temp, ac.temperature)
|
||||
min_temp = min(min_temp, ac.temperature)
|
||||
if max_temp is None or min_temp is None:
|
||||
await evt.send(f"目前全部空调都被炸掉了!")
|
||||
else:
|
||||
await evt.send(f"全球在线空调最高温度为 {'%.1f' % max_temp}°C,最低温度为 {'%.1f' % min_temp}°C!")
|
||||
if his_max is None or his_min is None:
|
||||
pass
|
||||
else:
|
||||
await evt.send(f"历史最高温度为 {'%.1f' % his_max}°C,最低温度为 {'%.1f' % his_min}°C!\n(要进入历史记录,温度需至少保持 5 分钟)")
|
||||
Reference in New Issue
Block a user