Files
konabot/konabot/plugins/solar_terms/__init__.py
passthem 392c699b33
All checks were successful
continuous-integration/drone/push Build is passing
移动 poster 模块到 common
2026-03-09 14:40:27 +08:00

100 lines
3.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from borax.calendars import LunarDate
from nonebot import on_command
from nonebot.internal.adapter.event import Event
from nonebot_plugin_alconna import UniMessage
from nonebot_plugin_apscheduler import scheduler
from konabot.common.subscribe import PosterInfo, register_poster_info, broadcast
register_poster_info(
"二十四节气",
PosterInfo(
{"节气", "24节气"},
"当有新的节气时,报告节气信息",
),
)
# 二十四节气的内置口号
# Generated by claude-opus-4.6
SOLAR_TERM_SLOGANS: dict[str, str] = {
"立春": "春回大地,万物复苏!",
"雨水": "春雨绵绵,润物无声!",
"惊蛰": "春雷惊蛰,万物生长!",
"春分": "昼夜平分,春意盎然!",
"清明": "清明时节,踏青赏春!",
"谷雨": "谷雨时节,播种希望!",
"立夏": "立夏之日,夏意渐浓!",
"小满": "小满时节,麦穗渐满!",
"芒种": "芒种农忙,收获在望!",
"夏至": "夏至日长,骄阳似火!",
"小暑": "小暑炎炎,清凉为伴!",
"大暑": "大暑酷热,防暑降温!",
"立秋": "立秋时节,暑去凉来!",
"处暑": "处暑时节,秋高气爽!",
"白露": "白露降临,秋意渐浓!",
"秋分": "秋分时节,硕果累累!",
"寒露": "寒露凝结,秋意正浓!",
"霜降": "霜降时节,秋收冬藏!",
"立冬": "立冬之日,冬意渐起!",
"小雪": "小雪飘飘,寒意渐浓!",
"大雪": "大雪纷飞,银装素裹!",
"冬至": "冬至日短,数九寒天!",
"小寒": "小寒时节,天寒地冻!",
"大寒": "大寒岁末,辞旧迎新!",
}
@scheduler.scheduled_job("cron", hour="8")
async def _():
today = LunarDate.today()
term: str | None = today.term
if term is not None:
slogan = SOLAR_TERM_SLOGANS.get(term, "")
await broadcast(
"二十四节气", UniMessage.text(f"【今日节气】今天是 {term} 哦!{slogan}")
)
cmd_next_term = on_command("下一个节气")
@cmd_next_term.handle()
async def _(event: Event):
date = LunarDate.today()
day_counter = 0
while date.term is None:
date = date.after(day_delta=1)
day_counter += 1
if day_counter > 365:
await UniMessage.text("哇呀...查询出错了!").send(event)
return
d_cn_format = date.strftime("%M月%D") # 相当于正月初一这样的格式
date_solar = date.to_solar_date()
d_glob_format = f"{date_solar.month}{date_solar.day}"
msg = UniMessage.text(
f"下一个节气是{date.term},在 {day_counter} 天后的 {d_glob_format}(农历{d_cn_format}"
)
await msg.send(event)
cmd_current_term = on_command("当前节气", aliases={"获取节气", "节气"})
@cmd_current_term.handle()
async def _(event: Event):
date = LunarDate.today()
day_counter = 0
while date.term is None:
date = date.before(day_delta=1)
day_counter += 1
if day_counter > 365:
await UniMessage.text("哇呀...查询出错了!").send(event)
return
msg = UniMessage.text(f"现在的节气是{date.term}")
await msg.send(event)