mirror of
https://github.com/ClovertaTheTrilobita/SanYeCao-Nonebot.git
synced 2026-04-01 22:04:51 +00:00
57 lines
2.2 KiB
Python
57 lines
2.2 KiB
Python
|
|
import requests
|
|||
|
|
from nonebot.plugin import on_command
|
|||
|
|
from nonebot.rule import to_me
|
|||
|
|
from nonebot.adapters.qq import Message, MessageEvent, MessageSegment
|
|||
|
|
from pathlib import Path
|
|||
|
|
from src.configs.path_config import path
|
|||
|
|
|
|||
|
|
cf_query = on_command("cf", rule=to_me(), priority=10, block=True)
|
|||
|
|
@cf_query.handle()
|
|||
|
|
async def get_cf_rounds():
|
|||
|
|
await cf_query.send("正在为您整理近期比赛信息哦~\n请稍等💭💡🎈")
|
|||
|
|
try:
|
|||
|
|
result = requests.get('https://codeforces.com/api/contest.list?gym=false').json()
|
|||
|
|
except BaseException:
|
|||
|
|
await cf_query.finish("API请求失败,这绝对不是咱的错,绝对不是!")
|
|||
|
|
all_matches = ""
|
|||
|
|
for matches in result['result']:
|
|||
|
|
phase = get_match_phase(matches["phase"])
|
|||
|
|
one_match = ("\n比赛:" + str(matches["name"]) + "\n状态:" + phase + "\n时长:" + str(int(matches["durationSeconds"]) / 3600) +"h\n")
|
|||
|
|
all_matches = "".join([all_matches, one_match])
|
|||
|
|
if phase == "未开始":
|
|||
|
|
until_start_time_min = 0 - int(matches["relativeTimeSeconds"]) / 60
|
|||
|
|
until_start = get_until_start_time(until_start_time_min)
|
|||
|
|
all_matches = "".join([all_matches, until_start])
|
|||
|
|
if matches["phase"] == "FINISHED":
|
|||
|
|
break
|
|||
|
|
|
|||
|
|
cf_image_path = path + "/image/codeforces/cfContestQR.png"
|
|||
|
|
msg = Message([
|
|||
|
|
MessageSegment.file_image(Path(cf_image_path)),
|
|||
|
|
MessageSegment.text(all_matches),
|
|||
|
|
])
|
|||
|
|
|
|||
|
|
await cf_query.finish(msg)
|
|||
|
|
|
|||
|
|
|
|||
|
|
def get_match_phase(phase):
|
|||
|
|
phase_map = {
|
|||
|
|
"BEFORE": "未开始",
|
|||
|
|
"FINISHED": "已结束",
|
|||
|
|
"CODING": "进行中",
|
|||
|
|
"PENDING_SYSTEM_TEST": "等待判题",
|
|||
|
|
"SYSTEM_TEST": "判题中",
|
|||
|
|
}
|
|||
|
|
return phase_map.get(phase, "未知")
|
|||
|
|
|
|||
|
|
|
|||
|
|
def get_until_start_time(until_start_time_min):
|
|||
|
|
if until_start_time_min <= 180:
|
|||
|
|
return "距开始:" + str(int(until_start_time_min)) + "min\n"
|
|||
|
|
elif 180 < until_start_time_min <= 1440:
|
|||
|
|
return "距开始:" + str(int(until_start_time_min / 60)) + "h\n"
|
|||
|
|
elif until_start_time_min > 1440:
|
|||
|
|
return "距开始:" + str(int(until_start_time_min / 60 / 24)) + "days\n"
|
|||
|
|
else:
|
|||
|
|
return "距开始:未知\n"
|