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

3.1 KiB
Raw Blame History

name, description
name description
atri_cf_query 查询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: 查询用户基本信息

curl -s "https://codeforces.com/api/user.info?handles={handle}"

返回数据包括当前Rating、最高Rating、排名rank、头像、注册时间等。

Step 3: 查询Rating变化历史

curl -s "https://codeforces.com/api/user.rating?handle={handle}"

返回所有参赛记录包括比赛ID、时间、旧Rating、新Rating、排名。

Step 4: 查询提交记录

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

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
  • 生成图表时建议用英文标签避免字体渲染问题