Merge pull request '添加节气报告功能' (#51) from feature/24-solar-terms-notification into master
All checks were successful
continuous-integration/drone/push Build is passing

Reviewed-on: #51
This commit is contained in:
2026-02-21 23:54:24 +08:00
3 changed files with 119 additions and 1 deletions

View File

@ -0,0 +1,101 @@
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.plugins.poster.poster_info import PosterInfo, register_poster_info
from konabot.plugins.poster.service import 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)

18
poetry.lock generated
View File

@ -750,6 +750,22 @@ type = "legacy"
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
reference = "mirrors"
[[package]]
name = "borax"
version = "4.1.3"
description = "A tool collections.(Chinese-Lunar-Calendars/Python-Patterns)"
optional = false
python-versions = ">=3.9"
groups = ["main"]
files = [
{file = "borax-4.1.3-py3-none-any.whl", hash = "sha256:bdba9abe1c3be4ba1b6a014b3b4a97a7ba254a08c7f40cd4428a13b84db02558"},
]
[package.source]
type = "legacy"
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
reference = "mirrors"
[[package]]
name = "brotli"
version = "1.2.0"
@ -5126,4 +5142,4 @@ reference = "mirrors"
[metadata]
lock-version = "2.1"
python-versions = ">=3.12,<4.0"
content-hash = "4caff431bad39bc7fb0dd2685ed64394f2bf960660b017897b8d00a8137d32f5"
content-hash = "15e51d7d14d091295e7d0ecabaa601fd65ae392fce28f90d5f3deb4718544e17"

View File

@ -33,6 +33,7 @@ dependencies = [
"pypinyin (>=0.55.0,<0.56.0)",
"shapely (>=2.1.2,<3.0.0)",
"mcstatus (>=12.2.1,<13.0.0)",
"borax (>=4.1.3,<5.0.0)",
]
[tool.poetry]