SecRandom 新版本 - v2.0.0
v2.0 - Koharu(小鸟游星野) release 1
🚀 主要更新
- 新增 通知设置,可覆盖所有抽取功能
- 新增 日志等级设置,可自定义日志记录级别
- 新增 语言切换功能,支持多语言切换
- 新增 后台驻留功能,支持软件后台运行
- 新增 软件自动更新功能,支持自动检查和更新软件
- 新增 公平抽取覆盖,可覆盖所有抽取模式
- 新增 浮窗实时刷新,修改设置后即可实时刷新
- 新增 通知服务,可在所有抽取模式下使用
- 新增 通知浮窗显示器设置,可设置显示的显示器
- 新增 通知浮窗自定义设置,可设置透明度、垂直偏移、水平偏移、浮窗自动关闭时间
- 新增 通知浮窗快速关闭,连续点击3次即可关闭
- 新增 安全验证流程设置,可多轮验证
- 新增 安全验证覆盖范围,更多覆盖功能范围
- 新增 更新确认弹窗,弹窗提示用户是否立即安装更新,避免用户错误操作
- 新增 强制检查更新按钮,在检查更新下拉菜单中一键触发强制检查功能
- 新增 应用启动时自动检查更新,在应用启动时自动检查更新,及时获知新版本
- 新增 检测到更新时自动弹窗通知,弹窗提示有新版本可用,避免用户错过更新
- 新增 语音播报功能,在设置中开启语音播报,可在结果显示时同步播报(支持系统 TTS / Edge TTS)
- 新增 特定播报功能,在设置中开启特定播报,可根据配置播报结果
- 新增 闪抽功能,快速抽取模式,提升抽奖与点名效率
- 新增 浮窗可拖动功能,在设置中关闭浮窗可拖动,可防止老师不小心拖动浮窗
- 新增 启动时显示主窗口功能,在设置中关闭启动时显示主窗口,可在自启动时不显示主窗口
- 新增 浮窗贴边功能,在设置中开启浮窗贴边,可将浮窗固定在屏幕边缘
- 新增 语音功能开关,可关闭语音播报功能
- 新增 超过阈值时使用主窗口功能,当抽取奖数超过设定阈值时,只在主窗口显示结果,不显示浮窗通知
- 新增 默认抽取名单功能,用户可以设置默认使用的抽取名单,避免每次都需要手动选择
- 新增 安装更新脚本,支持重启应用程序与Linux系统适配
- 新增 上课时间禁用功能,用户可以设置上课时间,在非上课时间内抽取相关功能将被禁用
- 新增 CSES课程表模板导入功能,用户可以导入CSES课程表模板,方便设置非上课时间段
- 新增 音乐设置功能,用户可以设置抽取有关的音乐相关参数,如音量、渐入时长、渐出时长等
- 新增 公平抽取-平均值差值保护,结合平均值过滤和最大差距保护,避免不均抽取
- 新增 闪抽点击后禁用功能,点击后禁用时间设置,支持设置0-60s的禁用时间,防止频繁点击
- 新增 通知窗口字体设置,通知窗口支持独立的字体设置功能
- 新增 自动保存窗口大小设置,设置是否自动保存窗口大小功能
- 新增 预览设置开关,在安全设置页面新增控制是否在打开设置的验证过程中显示预览按钮的功能
- 新增 安全验证窗口参数传递机制,通过修改 PageTemplate 和 SimpleWindowTemplate 类,支持向页面组件传递额外参数
- 新增 ClassIsland数据接收功能,实现接收ClassIsland软件发送的JSON格式课程表数据,包含当前科目、下一节课、当前状态等信息
- 新增 IPC端口配置功能,在基本设置页面添加端口设置选项,支持1-65535范围内的端口自定义
- 新增 C# IPC通信示例,提供ClassIsland软件通过TCP Socket向SecRandom发送JSON数据的实现方法
- 新增 ClassIsland数据源切换功能,在时间设置中添加开关以选择使用CSES或ClassIsland数据判断课间时间
- 新增 ClassIsland状态处理机制,实现对ClassIsland传入数据的解析和课间状态的动态更新
- 新增 通知服务选择功能,在点名、闪抽和抽奖通知设置中增加下拉框选择SecRandom或ClassIsland通知服务
- 新增 通知显示时长设置,在点名、闪抽和抽奖通知设置中增加微调框设置通知显示时长(1-60秒)
- 新增 ClassIsland IPC通信,实现与ClassIsland应用程序的IPC通信功能,能够发送通知数据
- 新增 侧边栏浮窗管理功能,在侧边栏管理设置中添加了浮窗管理位置选项
- 新增 获取星期几功能,
_get_current_day_of_week()函数用于获取当前是星期几 - 新增 按星期几获取上课时间段功能,
get_class_times_by_day()和get_class_times_by_day_with_week()方法,支持按星期几和周数(单数/双数)获取上课时间段 - 新增 智能拖动识别系统,实现基于时间和距离的多因素拖动检测算法
- 新增 关于页面图标,按钮与版权信息图标显示
- 新增 浮窗大小设置,支持浮窗与收纳浮窗7档大小调节
- 新增 闪抽独立点名机制,复用
RollCallUtils并使用设置默认班级 - 新增 全局更新状态管理器,支持更新页面创建前后状态同步
- 新增 镜像源自动选择,支持延迟最低源自动选择与手动选择
- 新增 文件完整性检查,ZIP/DEB包完整性验证
💡 功能优化
- 优化 统一基础设置,整合基础设置项
- 优化 导出/导入软件数据功能,全新设计
- 优化 导出/导入软件设置功能,全新设计
- 优化 导出诊断数据功能,全新设计
- 优化 名单导入页面,全新设计
- 优化 点名/抽奖名单查看页面,全新设计
- 优化 历史记录管理页面,全新设计
- 优化 历史记录查看页面,全新设计
- 优化 公平抽取模式,全新设计,增加更多自定义
- 优化 浮窗,全新设计
- 优化 安全功能,全新设计,更加好的窗口显示
- 优化 页面管理实时生效,侧边栏/托盘管理设置即可实时生效
- 优化 启动速度,更加迅速,最快0.8s
- 优化 关于页面版本号,统一显示格式,提升信息可读性
- 优化 更新页面当前版本号,统一显示格式,保持版本信息一致
- 优化 语音播报功能,新结果出现后移除之前播放任务,避免新结果播报延迟
- 优化 内存管理,播放完成后内存回收机制,避免内存占用过高
- 优化 浮窗隐藏功能,解决浮窗隐藏不完全问题
- 优化 浮窗美观度,提升浮窗视觉效果
- 优化 导入名单功能,提高加载速度
- 优化 更新下载,解决下载超时导致失败问题
- 优化 窗口模板标题栏,调整字体样式使其更加美观
- 优化 历史记录管理,清除历史记录文件按钮的状态更新逻辑,避免无效点击
- 优化 范围设置,将多数范围设置的最大值调整为无上限
- 优化 抽取结果显示性能,提升结果渲染速度
- 优化 浮窗边缘检测,软件启动后浮窗显示时先检测边缘并自动收纳
- 优化 浮窗长按时间,将500ms改为100ms
- 优化 版权声明显示,根据发布年份与当前年份是否相同,自动切换显示格式为 "Copyright © 2025 The SECTL Authors." 或 "Copyright © 2025-2026 The SECTL Authors."
- 优化 更新检查架构,支持 amd64 架构 与 deb 打包方式
- 优化 设置界面内存占用,将完整加载占用从约 1.2GB 降至约 400MB
- 优化 其他界面内存占用,将总体内存控制在约 400MB 范围
- 优化 密码安全加固,将 TOTP/密码验证哈希算法升级为 SHA-512、PBKDF2-SHA512(100000 迭代)及 HMAC-SHA512,提高存储与生成安全性
- 优化 更新器代码风格,替换弃用标准库用法并提升可维护性
- 优化 闪抽动画关闭提示,在动画结束后同时显示"x秒后关闭"和"连续点击3下关闭"
- 优化 配置查看窗口,移除关闭按钮
- 优化 语音重试机制,针对不同错误类型设置差异化重试间隔,提升成功率
- 优化 界面显示逻辑,根据验证配置动态控制U盘验证组件的可见性
- 优化 界面同步机制,确保设置更改后界面正确反映实际配置状态
- 优化 阈值设置文本,将主窗口显示阈值改为浮窗通知阈值,并更新描述为"设置触发浮窗通知的人数/奖数阈值,超过此数值则不显示浮窗通知",使用户更容易理解功能作用
- 优化 通知窗口字体应用,优化字体设置应用方式,将字体设置正确应用到标签组件而非布局对象
- 优化 通知窗口字体同步,优化通知窗口根据类型使用相应功能的字体设置,确保与主界面保持一致
- 优化 预览功能,预览设置开关默认为开启状态,用户可控制是否在验证过程中显示预览按钮
- 优化 验证窗口显示逻辑,预览按钮只在打开设置操作时显示,其他验证场景不显示预览按钮
- 优化 安全操作组件状态管理,为 basic_safety_security_operations 类添加
_update_enabled_state方法,实现根据全局安全开关状态控制组件启用状态 - 优化 信号转发机制,修复URLHandler中ClassIsland数据信号转发问题,确保数据正确传递到UI界面
- 优化 端口配置逻辑,优先使用用户设置的端口值而非配置文件,实现端口变更时自动重启IPC服务器
- 优化 默认端口设置,将IPC端口默认值从0(动态分配)改为固定值11010,提高外部通信稳定性
- 优化 设置管理,添加class_island_source_enabled、current_class_island_break_status等新设置项及其默认值
- 优化 课间禁用逻辑,根据ClassIsland软件传入的课程表信息实时判断当前是否为课间时间的功能
- 优化 CSES解析功能,修改非上课时间判断逻辑,使用CSES解析器从CSES文件动态生成非上课时间段配置,替代原有的静态配置方式
- 优化 时间设置模块,从data/CSES目录读取YAML格式课程表文件功能,提升时间配置的灵活性和准确性
- 优化 通知浮窗拖动条美观,将拖动条宽度固定为80px,高度固定为5px,提升美观度
- 优化 通知处理机制,修改FloatingNotificationManager类根据用户设置动态选择通知服务类型
- 优化 代码复用性,通过ResultDisplayUtils.show_notification_if_enabled方法使所有通知功能支持新的通知服务选择功能
- 优化 历史表格字体设置,移除自定义字体加载和字体大小设置功能,使表格项使用软件默认字体显示
- 优化 权重保存逻辑,实现按顺序将权重值分配给对应奖品的功能
- 优化 侧边栏管理语言配置,为sidebar_management_settings和sidebar_management_window部分添加了"重启生效"提示文本
- 优化 "平均值保护"功能,默认关闭以避免人数、历史记录等因素导致的异常抽取结果
- 优化 时间判断逻辑,重构
_is_non_class_time()函数,改为直接判断当前时间是否在上课时间段内 - 优化 代码结构与复用性,
_sort_timeslots_by_time()、_build_subject_teacher_map()、_get_cses_parser()等方法,统一使用str | int格式替代Union[str, int] - 优化 extract.py代码结构,调整导入顺序为"标准库→第三方库→本地模块",按功能分组函数
- 优化 设置持久化功能,修复浮动窗口拖动开关和长按持续时间设置在应用重启后不生效的问题
- 优化 拖动检测算法,将基础拖动阈值从3px提高到8px,添加50ms最小拖动时间要求
- 优化 导入功能,传递下拉框中选中的班级名称和奖池名称到导入窗口
- 优化 通知服务设置,将通知显示时长设置从基础设置中分离,创建独立的classisland通知服务设置分类
- 优化 UI稳定性,为每个UI操作添加独立异常处理,确保对象删除时不会崩溃,文件监视器响应机制更安全
- 优化 CSES文件导入管理,统一保存文件名为
cses_schedule.yml,每次导入自动覆盖旧文件 - 优化 浮窗显示效果,字体随大小动态调整,收纳浮窗位置边缘距离动态调整
- 优化 更新状态同步,使用Qt信号机制实现实时通知,支持更新页面实时显示下载状态
- 优化 自动下载进度,丰富下载进度信息量,增加进度显示
- 优化 取消更新功能,未下载文件自动删除功能,避免下载中断后遗留文件
- 优化 通知浮窗透明度,从60%改为80%,提高可读性
🐛 修复问题
- 修复 其余v1版本已知问题,提升整体稳定性与兼容性
- 修复 软件当前目录获取,解决获取路径异常问题
- 修复 点名、抽奖下拉框,补充缺失的提示文本显示
- 修复 Linux包构建,修复 Linux 包构建失败问题,提升跨平台可用性
- 修复 进程管理,修复另开进程无法运行问题,保证多实例稳定启动
- 修复 版本更新,修复更新版本号失败问题,确保版本信息准确展示
- 修复 资源目录问题,解决软件无法打开的问题
- 修复 剩余名单显示,解决显示失败问题
- 修复 构建问题,解决软件无法打开的问题
- 修复 剩余名单显示,解决无法显示的问题
- 修复 导出名单功能,解决无法使用的问题
- 修复 闪抽动画,解决无法正常使用的问题
- 修复 闪抽&即抽动画模式,解决未移除"手动停止动画"选项的问题
- 修复 闪抽样式设置,解决设置无效的问题
- 修复 闪抽动画结果标签,解决颜色强制统一的问题
- 修复 闪抽历史记录,解决无法记录历史记录&临时记录的问题
- 修复 浮窗周期性置顶,解决功能未生效的问题
- 修复 重复模式剩余人数,解决直接显示结果时剩余人数不更新的问题
- 修复 名单设置界面逻辑,解决 班级名称和奖池名称同时为空 及 未设置班级仍可点击其他按钮 的问题
- 修复 结果显示触屏问题,解决点击结果后无法正常滑动滚动结果的修复
- 修复 长按抽取数量控制,触屏适配长按快速增减数量功能
- 修复 历史记录删除问题,补上了删除历史记录文件功能
- 修复 浮窗矩形排列样式,样式不与竖直排列&横向排列样式一致
- 修复 浮窗矩仅文字样式,解决与图文模式样式不一致的问题
- 修复 强制更新检查功能,解决无法强制检查更新的问题
- 修复 自动检查更新功能,解决先获取更新信息后再判断是否检查更新的问题
- 修复 抽奖中的抽取方式,删除了误增加在抽奖过程中切换抽取方式的功能
- 修复 构建 deb 包,修正文件名相关问题并提升打包稳定性
- 修复 Changelog 镜像源文件名,解决文件名异常问题
- 修复 更新器,修复临时脚本文件泄露、Windows 路径处理、竞态条件、根目录验证缺失等 10 项问题
- 修复 无法导入CSES通用课表格式问题,修复导入CSES文件时,文件内数据格式错误导致的解析异常问题
- 修复 闪抽无法保存历史记录问题,修复在闪抽模式下,无法保存历史记录的问题
- 修复 语言播放速度范围错误,修复在设置中调整播放速度时,导致的范围最大值错误问题
- 修复 无法设置名单,修复在设置中设置名单中某数据时,由于下拉框选项无法写入导致的设置班级错误问题
- 修复 "图标""箭头"收纳样式无法使用问题,修复在设置中选择"图标""箭头"收纳样式时,无法正常使用的问题
- 修复 收纳浮窗拖拽,限制收纳浮窗只能在y轴移动,x轴位置固定,不会因拖拽或超出屏幕而改变
- 修复 Edge TTS语音生成,优化NoAudioReceived错误处理
- 修复 语音缓存系统,WebSocketError异常处理增强连接稳定性
- 修复 Edge TTS库版本,升级到最新版本 7.2.7,解决无法生成语音的问题
- 修复 Windows平台文件隐藏功能,返回值检查和错误码记录功能
- 修复 U盘绑定功能,对Windows API调用的错误处理和异常捕获机制
- 修复 ComboBox数据获取,优化当
currentData()返回None时从显示文本中提取盘符信息的后备方案 - 修复 文件写入权限,使用临时文件策略避免secrets.json写入时的权限拒绝问题
- 修复 U盘验证布局,优化仅在需要U盘验证时才显示相关控件(状态标签和刷新按钮)
- 修复 安全验证流程,验证通过后刷新下拉框显示状态的功能
- 修复 预览设置开关稳定性,解决开关操作可能导致软件卡退的问题,改进UI状态处理逻辑避免闪烁
- 修复 页面创建错误,解决 VerifyPasswordWindow 构造函数参数传递问题,通过工厂函数方式正确传递 operation_type 参数
- 修复 安全设置组件缺失方法,为 basic_safety_security_operations 类补充
_update_enabled_state方法,解决属性不存在错误 - 修复 AttributeError错误,在safety_settings.py中添加_missing属性初始化,解决'_busy'属性不存在问题
- 修复 IPC服务器重启问题,修改MainWindow初始化方法传递url_handler实例,解决无法访问URLHandler实例错误
- 修复 Python语法错误,移除main.py中不必要global声明,解决变量使用前声明的语法问题
- 修复 通知服务单一问题,解决之前只能使用SecRandom内置通知的限制,ClassIsland通知服务,用户可根据需要选择不同的通知服务
- 修复 连接失败处理,实现智能回退机制,当ClassIsland不可用时自动回退到SecRandom通知确保功能可用性
- 修复 奖品权重加载功能,修改为只显示权重数值而不显示奖品名称
- 修复 数据格式处理,确保加载和保存时只处理权重数值部分
- 修复 权重数据类型转换,将整数转换改为浮点数转换以支持小数权重值
- 修复 主窗口大小保存功能,修复主窗口大小无法正确保存和恢复的问题
- 修复 侧边栏显示控制,修复侧边栏设置中的"不显示"选项无效问题
- 修复 课间禁用功能失效问题,修复由于时间段排序错误、星期几分组错误和时间解析失败导致的功能异常
- 修复 时间段排序与解析问题,修复按字符串排序导致的时间顺序错误,改为按实际时间值(秒数)排序,修复整数时间解析问题
- 修复 异步函数与模块导入问题,修复
readme_settings_async导致的 coroutine 对象问题,将shutil、os等导入移至适当位置 - 修复 拖动功能问题,解决即使禁用拖动功能仍然可以拖动窗口的问题,解决按钮点击容易被误识别为拖动操作的问题,修复DraggableWidget组件未正确继承主窗口拖动权限的问题
- 修复 收纳浮窗显示问题,修复文本颜色、透明度计算、背景色、CSS样式冲突、圆角效果等问题
- 修复 名单统计与管理界面,过滤标记为"不存在"的学生/奖品,确保剩余数量显示准确,优化UI组件操作的安全性
- 修复 倒计时逻辑,确保显示数字与实际关闭时间一致,修复倒计时显示0后立即关闭问题
- 修复 头像图片显示,修正学生头像路径为student_images,奖品图片prize_images路径支持
- 修复 更新功能问题,解决新版本检查后文本未更新、下载进度无法实时显示、文件已存在处理错误、取消更新等待问题
🔧 其它变更
- 移除 自定义抽功能
- 移除 即抽 功能
- 优化 英文翻译文本,更新部分英文翻译内容,提升多语言体验一致性
自 v1.3.2-alpha.6 以来的更新日志
🚀 主要更新
- 新增 获取星期几功能,
_get_current_day_of_week()函数用于获取当前是星期几 - 新增 按星期几获取上课时间段功能,
get_class_times_by_day()和get_class_times_by_day_with_week()方法,支持按星期几和周数(单数/双数)获取上课时间段 - 新增 智能拖动识别系统,实现基于时间和距离的多因素拖动检测算法
- 新增 关于页面图标,按钮与版权信息图标显示
- 新增 浮窗大小设置,支持浮窗与收纳浮窗7档大小调节
- 新增 闪抽独立点名机制,复用
RollCallUtils并使用设置默认班级 - 新增 全局更新状态管理器,支持更新页面创建前后状态同步
- 新增 镜像源自动选择,支持延迟最低源自动选择与手动选择
- 新增 文件完整性检查,ZIP/DEB包完整性验证
💡 功能优化
- 优化 时间判断逻辑,重构
_is_non_class_time()函数,改为直接判断当前时间是否在上课时间段内 - 优化 代码结构与复用性,
_sort_timeslots_by_time()、_build_subject_teacher_map()、_get_cses_parser()等方法,统一使用str | int格式替代Union[str, int] - 优化 extract.py代码结构,调整导入顺序为"标准库→第三方库→本地模块",按功能分组函数
- 优化 设置持久化功能,修复浮动窗口拖动开关和长按持续时间设置在应用重启后不生效的问题
- 优化 拖动检测算法,将基础拖动阈值从3px提高到8px,添加50ms最小拖动时间要求
- 优化 导入功能,传递下拉框中选中的班级名称和奖池名称到导入窗口
- 优化 通知服务设置,将通知显示时长设置从基础设置中分离,创建独立的classisland通知服务设置分类
- 优化 UI稳定性,为每个UI操作添加独立异常处理,确保对象删除时不会崩溃,文件监视器响应机制更安全
- 优化 CSES文件导入管理,统一保存文件名为
cses_schedule.yml,每次导入自动覆盖旧文件 - 优化 浮窗显示效果,字体随大小动态调整,收纳浮窗位置边缘距离动态调整
- 优化 更新状态同步,使用Qt信号机制实现实时通知,支持更新页面实时显示下载状态
- 优化 自动下载进度,丰富下载进度信息量,增加进度显示
- 优化 取消更新功能,未下载文件自动删除功能,避免下载中断后遗留文件
- 优化 通知浮窗透明度,从60%改为80%,提高可读性
🐛 修复问题
- 修复 主窗口大小保存功能,修复主窗口大小无法正确保存和恢复的问题
- 修复 侧边栏显示控制,修复侧边栏设置中的"不显示"选项无效问题
- 修复 课间禁用功能失效问题,修复由于时间段排序错误、星期几分组错误和时间解析失败导致的功能异常
- 修复 时间段排序与解析问题,修复按字符串排序导致的时间顺序错误,改为按实际时间值(秒数)排序,修复整数时间解析问题
- 修复 异步函数与模块导入问题,修复
readme_settings_async导致的 coroutine 对象问题,将shutil、os等导入移至适当位置 - 修复 拖动功能问题,解决即使禁用拖动功能仍然可以拖动窗口的问题,解决按钮点击容易被误识别为拖动操作的问题,修复DraggableWidget组件未正确继承主窗口拖动权限的问题
- 修复 收纳浮窗显示问题,修复文本颜色、透明度计算、背景色、CSS样式冲突、圆角效果等问题
- 修复 名单统计与管理界面,过滤标记为"不存在"的学生/奖品,确保剩余数量显示准确,优化UI组件操作的安全性
- 修复 倒计时逻辑,确保显示数字与实际关闭时间一致,修复倒计时显示0后立即关闭问题
- 修复 头像图片显示,修正学生头像路径为student_images,奖品图片prize_images路径支持
- 修复 更新功能问题,解决新版本检查后文本未更新、下载进度无法实时显示、文件已存在处理错误、取消更新等待问题
🔧 其它变更
- 无
💝 感谢所有贡献者为 SecRandom 项目付出的努力!
国内 下载链接
| 平台/打包方式 | 支持架构 | 完整版 |
|---|---|---|
| Windows | x64 | 下载 |
| Linux | x64 | 下载 |
Github 镜像 下载链接
| 镜像源 | 平台 | 支持架构 | 完整版 |
|---|---|---|---|
| ghfast.top | Windows | x64 | 下载 v2.0.0 |
| ghfast.top | Linux | x64 | 下载 v2.0.0 |
| gh-proxy.com | Windows | x64 | 下载 v2.0.0 |
| gh-proxy.com | Linux | x64 | 下载 v2.0.0 |
SHA256 校验值-请核对下载的文件的SHA256值是否正确
| 文件名 | SHA256 值 |
|---|---|
| SHA256SUMS.txt | 01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b |
| SecRandom-linux-2.0.0-amd64-deb.deb | e72f7c60b07becff259822980749048d21689e1dce57b449f78ea9aab77992c6 |
| SecRandom-windows-v2.0.0-x64-dir.zip | fb8d711e47ae7ad3955953d59cd3e67c55497d4834112511a7b3602bdb019db3 |