{"id":25072369,"url":"https://github.com/islatri/funky_lesson_core","last_synced_at":"2025-10-04T02:02:11.259Z","repository":{"id":269187326,"uuid":"906674511","full_name":"Islatri/funky_lesson_core","owner":"Islatri","description":"Rust写的吉林大学抢课脚本，支持no-wasm、wasm以及proxy，也支持tui和gui","archived":false,"fork":false,"pushed_at":"2025-09-01T02:10:28.000Z","size":878,"stargazers_count":7,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-01T03:42:09.204Z","etag":null,"topics":["funky-lesson","gloo-net","multi-platform","multi-process","reqwest","rust","tui","wasm"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Islatri.png","metadata":{"files":{"readme":"Readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-12-21T15:19:44.000Z","updated_at":"2025-09-01T02:10:31.000Z","dependencies_parsed_at":null,"dependency_job_id":"3755d90c-d7b6-49b1-a38e-0f1cc38450aa","html_url":"https://github.com/Islatri/funky_lesson_core","commit_stats":null,"previous_names":["zoneherobrine/funky_lesson_core","islatri/funky_lesson_core"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/Islatri/funky_lesson_core","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Islatri%2Ffunky_lesson_core","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Islatri%2Ffunky_lesson_core/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Islatri%2Ffunky_lesson_core/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Islatri%2Ffunky_lesson_core/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Islatri","download_url":"https://codeload.github.com/Islatri/funky_lesson_core/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Islatri%2Ffunky_lesson_core/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278254467,"owners_count":25956600,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-04T02:00:05.491Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["funky-lesson","gloo-net","multi-platform","multi-process","reqwest","rust","tui","wasm"],"created_at":"2025-02-06T22:19:10.482Z","updated_at":"2025-10-04T02:02:11.251Z","avatar_url":"https://github.com/Islatri.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!-- markdownlint-disable MD036 MD029 --\u003e\n# 🚀 Funky Lesson Core\n\n[![Rust](https://img.shields.io/badge/language-Rust-orange.svg)](https://rust-lang.org)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Version](https://img.shields.io/badge/version-0.1.0-blue.svg)](https://github.com/Islatri/funky_lesson_core)\n[![CI](https://github.com/Islatri/funky_lesson_core/actions/workflows/ci.yml/badge.svg)](https://github.com/Islatri/funky_lesson_core/actions/workflows/ci.yml)\n[![Release](https://github.com/Islatri/funky_lesson_core/actions/workflows/release.yml/badge.svg)](https://github.com/Islatri/funky_lesson_core/actions/workflows/release.yml)\n\n**高性能、多线程的吉林大学抢课自动化工具**\n\n一个基于 Rust 开发的高效抢课脚本，提供稳定的多线程选课支持和自动重连功能。\n\n![funky_lesson_core GIF演示](./funky-lesson-core.gif)\n\n## ✨ 特性\n\n- 🔥 **高性能多线程**: 默认8线程并发轮询，大大提高选课成功率\n- 🔄 **智能轮询**: 每个线程从不同课程开始轮询，避免冲突\n- 🌐 **自动重连**: 网络中断自动重连，保持持续选课\n- 🛡️ **安全加密**: 使用AES加密保护用户凭据\n- 📱 **跨平台**: 支持 Windows、macOS、Linux\n- 🎯 **精准控制**: 500ms请求间隔，平衡效率与服务器负载\n- 🔧 **灵活配置**: 支持WASM和原生两种运行模式\n\n## 🏗️ 技术架构\n\n本项目是 [funky-lesson](https://github.com/ZoneHerobrine/funky-lesson) 的核心库，采用现代化技术栈：\n\n- **核心语言**: Rust (Edition 2024)\n- **异步运行时**: Tokio\n- **HTTP客户端**: Reqwest (支持 rustls-tls)\n- **加密算法**: AES-128-ECB\n- **序列化**: Serde + JSON\n- **GUI版本**: FunkyLesson 基于 Leptos + Actix + Tauri 的纯 Rust 实现\n\n### 📦 GUI版本\n\n完整的图形界面版本已经发布！\n\n- 🎯 **下载地址**: [FunkyLesson Release](https://github.com/ZoneHerobrine/funky-lesson/releases/tag/release)\n- 🖥️ **技术栈**: Leptos + Actix + Tauri\n- 📱 **开箱即用**: 无需配置环境，下载即可使用\n\n## 📋 项目起源\n\n本项目基于 [MoonWX](https://github.com/MoonWX/Fuck-Lesson) 从 [H4ckF0rFun](https://github.com/H4ckF0rFun) 同学的 Python 抢课脚本重写而成。\n\n- 📁 **原版脚本**: `raw.py` (保留原始Python实现)\n- 🦀 **Rust重写**: `examples/standalone.rs` (单文件Rust实现)\n- 📚 **库版本**: `src/` (模块化库实现，适配GUI应用)\n\n## 🙏 致谢\n\n感谢以下开发者的贡献：\n\n- **[H4ckF0rFun](https://github.com/H4ckF0rFun)**: 原始Python抢课脚本的创作者\n- **[MoonWX](https://github.com/MoonWX/Fuck-Lesson)**: Python脚本的优化和维护者\n\n\u003e 注：由于原仓库未附带开源许可证，在此进行口头致谢。原Python脚本已完整保留在 `raw.py` 文件中。\n\n## 🚀 快速开始\n\n### 前置准备\n\n1. **添加课程到收藏**: 在教务系统网站上将要选的课程添加到收藏列表\n2. **获取选课信息**: 确认选课轮次（从0开始计数）\n\n### 方式一：开发者模式 (源码运行)\n\n#### 环境要求\n\n- 📦 **Rust环境**: 请先安装 Rust 工具链\n  - 官方安装指南: [https://www.rust-lang.org/learn/get-started](https://www.rust-lang.org/learn/get-started)\n  - 推荐版本: Rust 1.85.0 或更高版本\n\n#### 运行步骤\n\n1. **克隆仓库**\n\n```bash\ngit clone https://github.com/Islatri/funky_lesson_core.git\ncd funky_lesson_core\n```\n\n2. **运行程序**\n\n```bash\ncargo run \u003c用户名\u003e \u003c密码\u003e \u003c选课轮次\u003e [是否循环]\n```\n\n**参数说明**:\n\n- `\u003c用户名\u003e`: 教务系统登录用户名\n- `\u003c密码\u003e`: 教务系统登录密码  \n- `\u003c选课轮次\u003e`: 选课轮次编号（从0开始）\n- `[是否循环]`: 可选参数，填写任意数字启用循环模式\n\n**示例**:\n\n```bash\n# 单次选课\ncargo run 114514 1919810 0\n\n# 循环选课模式\ncargo run 114514 1919810 0 1\n```\n\n1. **输入验证码**\n   - 程序会自动下载验证码图片到 `captcha.png`\n   - 在终端中输入验证码（不区分大小写）\n   - 程序开始自动选课\n\n### 方式二：可执行文件模式\n\n#### 下载预编译版本\n\n1. **下载**: 从 [Releases](https://github.com/Islatri/funky_lesson_core/releases) 页面下载最新版本\n2. **解压**: 将 `funky_lesson_core.exe` 解压到任意目录\n\n#### 运行命令\n\n**PowerShell** (推荐):\n\n```powershell\n./funky_lesson_core.exe \u003c用户名\u003e \u003c密码\u003e \u003c选课轮次\u003e [是否循环]\n```\n\n**命令提示符 (CMD)**:\n\n```cmd\nfunky_lesson_core.exe \u003c用户名\u003e \u003c密码\u003e \u003c选课轮次\u003e [是否循环]\n```\n\n**使用示例**:\n\n```powershell\n# PowerShell - 循环模式\n./funky_lesson_core.exe 114514 1919810 0 1\n\n# CMD - 单次模式  \nfunky_lesson_core.exe 114514 1919810 0\n```\n\n## ⚡ 性能特性\n\n- **🔥 多线程并发**: 8个工作线程同时运行\n- **🎯 智能调度**: 各线程从不同课程开始，避免竞争\n- **⏱️ 精确间隔**: 500ms请求间隔，平衡效率与稳定性\n- **🔄 自动恢复**: 网络异常自动重连，无需手动重启\n- **📊 实时反馈**: 详细的运行状态和错误信息\n\n## 📚 API文档\n\n### 库特性 (Features)\n\n- `default = [\"no-wasm\", \"tui\"]`: 默认特性\n- `no-wasm`: 原生环境支持 (Tokio + Reqwest)\n- `wasm`: WebAssembly支持 (Gloo + Web-sys)  \n- `tui`: 命令行界面\n- `gui`: 图形界面支持\n- `proxy`: 代理支持\n\n## ⚠️ 重要提醒\n\n\u003e **⚠️ 使用须知**\n\u003e\n\u003e - 📈 **成功率**: 程序无法保证100%选课成功，请保持理性预期\n\u003e - 🌐 **网络依赖**: 教务系统服务器不够稳定，严重网络中断可能随时发生\n\u003e - 🔄 **备用方案**: 如遇脚本无响应，请同时准备浏览器手动选课\n\u003e - ⏰ **时机把握**: 在选课开放的黄金时间段使用效果最佳\n\u003e - 🔒 **账号安全**: 请勿在公共设备上使用，注意保护个人凭据\n\n## 📄 免责声明\n\n### 重要法律声明\n\n- 🎓 **用途限制**: 本软件仅供学习和研究使用，请勿用于违反学校规定或法律法规的行为\n- 🚫 **风险承担**: 使用本软件所产生的一切后果均由用户自行承担，开发者不承担任何直接或间接责任\n- ⚖️ **合规使用**: 用户必须遵守所在机构及国家的相关法律法规，违规责任自负\n- 🏛️ **非官方软件**: 本软件未经吉林大学官方授权，与吉林大学无任何官方关联\n- ✅ **协议同意**: 使用本程序即代表您完全理解并同意本免责声明\n\n## 🤝 贡献指南\n\n欢迎提交Issue和Pull Request！\n\n1. Fork 本仓库\n2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)\n3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)\n4. 推送到分支 (`git push origin feature/AmazingFeature`)\n5. 创建 Pull Request\n\n## 📜 开源许可\n\n本项目采用 [MIT License](LICENSE) 开源协议。\n\n```text\nMIT License - Copyright (c) 2024 ChisatoZone\n```\n\n---\n\n**⭐ 如果这个项目对你有帮助，请给一个Star！**\n\n[🐛 报告问题](https://github.com/Islatri/funky_lesson_core/issues) • [💡 功能建议](https://github.com/Islatri/funky_lesson_core/issues) • [📖 文档](https://github.com/Islatri/funky_lesson_core/wiki)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fislatri%2Ffunky_lesson_core","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fislatri%2Ffunky_lesson_core","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fislatri%2Ffunky_lesson_core/lists"}