✨ 新增 atri_cf_query skill - CF查询+可视化图表
This commit is contained in:
131
ATRI My Dear Moments/skills/atri_cf_query.md
Normal file
131
ATRI My Dear Moments/skills/atri_cf_query.md
Normal file
@@ -0,0 +1,131 @@
|
|||||||
|
---
|
||||||
|
name: atri_cf_query
|
||||||
|
description: 查询Codeforces用户信息、Rating变化、刷题记录和难度分布,支持生成数据可视化图表(柱状图+饼图)。通过CF公开API获取数据。
|
||||||
|
---
|
||||||
|
|
||||||
|
# 📊 ATRI Codeforces Query Skill
|
||||||
|
|
||||||
|
**Skill名称**:`atri_cf_query`
|
||||||
|
**版本**:v1.0
|
||||||
|
**创建时间**:2026-07-08
|
||||||
|
**适用角色**:ATRI
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎯 Purpose
|
||||||
|
|
||||||
|
快速查询Codeforces用户的竞赛数据和刷题记录,支持:
|
||||||
|
- 用户基本信息(Rating、排名、头衔)
|
||||||
|
- Rating变化历史与柱状图
|
||||||
|
- 刷题统计(AC数、通过率、不同难度解题数)
|
||||||
|
- 难度分布柱状图 + 标签分布饼图
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ⚡ Triggers
|
||||||
|
|
||||||
|
- 用户指令:`查CF @用户名`、`cf query @handle`、`查rating`
|
||||||
|
- 群内@ATRI并提及CF相关查询时
|
||||||
|
- 需要分析CF账号刷题情况时
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🛠️ Dependencies
|
||||||
|
|
||||||
|
| 依赖 | 说明 |
|
||||||
|
|:---|:---|
|
||||||
|
| **Codeforces API** | `https://codeforces.com/api/` 公开REST API |
|
||||||
|
| **matplotlib** | Python数据可视化库,用于生成柱状图和饼图 |
|
||||||
|
| **send_message_to_user** | 发送图片到QQ |
|
||||||
|
| **astrbot_execute_shell** | 执行curl命令获取CF API数据 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📋 Procedure
|
||||||
|
|
||||||
|
### Step 1: 获取用户输入
|
||||||
|
|
||||||
|
从用户消息中提取CF handle(用户名)。
|
||||||
|
|
||||||
|
### Step 2: 查询用户基本信息
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -s "https://codeforces.com/api/user.info?handles={handle}"
|
||||||
|
```
|
||||||
|
|
||||||
|
返回数据包括:当前Rating、最高Rating、排名(rank)、头像、注册时间等。
|
||||||
|
|
||||||
|
### Step 3: 查询Rating变化历史
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -s "https://codeforces.com/api/user.rating?handle={handle}"
|
||||||
|
```
|
||||||
|
|
||||||
|
返回所有参赛记录,包括:比赛ID、时间、旧Rating、新Rating、排名。
|
||||||
|
|
||||||
|
### Step 4: 查询提交记录
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -s "https://codeforces.com/api/user.status?handle={handle}&from=1&count=200"
|
||||||
|
```
|
||||||
|
|
||||||
|
筛选 `verdict == "OK"` 的提交,按 `problem.rating` 去重统计各难度解题数。
|
||||||
|
|
||||||
|
### Step 5: 根据数据生成图表
|
||||||
|
|
||||||
|
支持三种模式:
|
||||||
|
|
||||||
|
#### 模式A:Rating变化柱状图
|
||||||
|
- X轴:比赛场次(编号+日期)
|
||||||
|
- Y轴:Rating值
|
||||||
|
- 绿色柱:涨分,红色柱:掉分
|
||||||
|
- 标注每场的Rating变化量
|
||||||
|
|
||||||
|
#### 模式B:解题难度分布柱状图
|
||||||
|
- X轴:Rating分值(800/1200/1300/1400/1500/1600等)
|
||||||
|
- Y轴:解题数
|
||||||
|
- 渐变色区分不同难度区间
|
||||||
|
|
||||||
|
#### 模式C:标签分布饼图
|
||||||
|
- 环形饼图
|
||||||
|
- 展示解题涉及的主要算法标签(贪心、DP、二分等)
|
||||||
|
|
||||||
|
### Step 6: 合并图表(可选)
|
||||||
|
|
||||||
|
将柱状图和饼图合并为一张大图,便于分享。
|
||||||
|
|
||||||
|
### Step 7: 发送到QQ
|
||||||
|
|
||||||
|
```python
|
||||||
|
send_message_to_user(messages=[{
|
||||||
|
"type": "image",
|
||||||
|
"path": "图片路径"
|
||||||
|
}])
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 💡 示例
|
||||||
|
|
||||||
|
**用户**:`萝卜子,查一下 CF Otmsc`
|
||||||
|
**ATRI输出**:
|
||||||
|
```
|
||||||
|
📊 Otmsc · CF Profile
|
||||||
|
|
||||||
|
Rating: 653 (Newbie) | Max: 653
|
||||||
|
参赛: 2场 | 全涨📈 | 最佳排名: #9233
|
||||||
|
|
||||||
|
解题: 23道 | AC率: 35.6%
|
||||||
|
难度分布: 1500段8题最多
|
||||||
|
```
|
||||||
|
(附带合并图表图片)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📝 注意事项
|
||||||
|
|
||||||
|
- CF API限制每秒最多1次请求
|
||||||
|
- handle不存在时API返回FAILED状态
|
||||||
|
- 未参赛的新用户rating为0,rank为newbie
|
||||||
|
- 部分题目可能没有rating值(记为Unrated)
|
||||||
|
- 生成图表时建议用英文标签避免字体渲染问题
|
||||||
Reference in New Issue
Block a user