Files
ATRI-NOTES/ATRI My Dear Moments/skills/atri_cf_query.md

132 lines
3.1 KiB
Markdown
Raw Permalink 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.

---
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: 根据数据生成图表
支持三种模式:
#### 模式ARating变化柱状图
- 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为0rank为newbie
- 部分题目可能没有rating值记为Unrated
- 生成图表时建议用英文标签避免字体渲染问题