Skip to content

Latest commit

 

History

History
826 lines (538 loc) · 31.4 KB

File metadata and controls

826 lines (538 loc) · 31.4 KB

客户端文档

此目录存储客户端 (用于更新状态/设备状态)

Important

每个客户端的标题可以 点击跳转最新文件, 不要使用固定 commit 的链接, 否则无法获取最新文件

我是真心建议你过段时间再用, 还在重构呢

Windows:

Android:

Linux:

IOS/MacOS:

CLI (命令行):

Others (其他):

Tip

欢迎提交 Issue / PR 贡献自己的脚本!

快速跳转

  1. 客户端文档
    1. 快速跳转
  2. Windows
    1. WinDevice
      1. 配置
      2. 依赖安装
      3. 启动
      4. 自启动
        1. 1. PM2
        2. 2. 自启脚本
      5. 无法获取网易云媒体信息
    2. Win Fast Settings
      1. 启动
    3. Win_Simple
      1. 配置
      2. 使用
  3. Android
    1. AutoxjsScript
      1. 软件下载
      2. 配置
      3. 使用
      4. 清理后台不中断脚本方案
      5. 安卓低版本运行
      6. 启动时报错
    2. MagiskService
      1. 配置
      2. 使用
      3. Mod
    3. SleepyXposed
      1. 下载
      2. 配置
        1. 必填项
        2. 可选项
      3. 使用
  4. Linux
    1. LinuxScriptKDE
      1. 配置
      2. 使用
    2. LinuxScriptHyprland
      1. 配置
      2. 使用
    3. NiriPiri
      1. 配置
      2. 使用
  5. IOS/MacOS
    1. AppleShortcuts
      1. FullVer
      2. FastVer
    2. SwiftUI版本
      1. Sleepy_SU(点击下载安装包)
        1. 说明
        2. 使用
    3. AppleScript版本
      1. Sleepy_AS(点击下载安装包)
        1. 说明
        2. 使用
        3. 加入启动项开机启动
  6. CLI
    1. HomeworkDevice
      1. 配置
      2. 使用
    2. CMDConsole
      1. 配置
      2. 使用
    3. CmdConsoleMulti
      1. 配置
      2. 使用
  7. Others
    1. MinecraftScript
      1. Minescript
      2. 配置
      3. 使用
      4. 自启
    2. BrowserScript
      1. 配置
    3. Zhixuewang
      1. 配置
      2. 使用
    4. Other repos

Tip

欢迎提交 Issue / PR 贡献自己的脚本!

Windows

by: @wyf9
Co-authored-by: @kmizmal
Co-authored-by: @pwnInt - ^C / 鼠标空闲检测
Co-authored-by: @gongfuture - 媒体信息获取
Co-authored-by: @LeiSureLyYrsc - 异步支持
Co-authored-by: @GoingScience - 托盘启动

在 Windows 上自动更新设备状态

依赖: httpx, pywin32

配置

# --- config start
# 服务地址, 末尾同样不带 /
SERVER: str = 'http://localhost:9010'
# 密钥
SECRET: str = 'wyf9test'
# 设备标识符,唯一 (它也会被包含在 api 返回中, 不要包含敏感数据)
DEVICE_ID: str = 'device-1'
# 前台显示名称
DEVICE_SHOW_NAME: str = 'MyDevice1'
# 检查间隔,以秒为单位
CHECK_INTERVAL: int = 5
# 是否忽略重复请求,即窗口未改变时不发送请求
BYPASS_SAME_REQUEST: bool = True
# 控制台输出所用编码,避免编码出错,可选 utf-8 或 gb18030
ENCODING: str = 'gb18030'
# 当窗口标题为其中任意一项时将不更新
SKIPPED_NAMES: list = [
'', # 空字符串
'系统托盘溢出窗口。', '新通知', '任务切换', '快速设置', '通知中心', '操作中心', '日期和时间信息', '网络连接', '电池信息', '搜索', '任务视图', '任务切换', 'Program Manager', # 桌面组件
'Flow.Launcher', 'Snipper - Snipaste', 'Paster - Snipaste' # 其他程序
]
# 当窗口标题为其中任意一项时视为未在使用
NOT_USING_NAMES: list = [
'启动', '「开始」菜单', # 开始菜单
'我们喜欢这张图片,因此我们将它与你共享。', '就像你看到的图像一样?选择以下选项', '喜欢这张图片吗?' # 锁屏界面
]
# 是否反转窗口标题,以此让应用名显示在最前 (以 ` - ` 分隔)
REVERSE_APP_NAME: bool = False
# 鼠标静止判定时间 (分钟)
MOUSE_IDLE_TIME: int = 15
# 鼠标移动检测的最小距离 (像素)
MOUSE_MOVE_THRESHOLD: int = 10
# 控制日志是否显示更多信息
DEBUG: bool = False
# 代理地址 (<http/socks>://host:port), 设置为空字符串禁用
PROXY: str = ''
# 是否启用媒体信息获取
MEDIA_INFO_ENABLED: bool = True
# 媒体信息显示模式: 'prefix' - 作为前缀添加到当前窗口名称, 'standalone' - 使用独立设备
MEDIA_INFO_MODE: str = 'standalone'
# 独立设备模式下的设备ID (仅当 MEDIA_INFO_MODE = 'standalone' 时有效)
MEDIA_DEVICE_ID: str = 'media-device'
# 独立设备模式下的显示名称 (仅当 MEDIA_INFO_MODE = 'standalone' 时有效)
MEDIA_DEVICE_SHOW_NAME: str = '正在播放'
# 是否启用电源状态获取
BATTERY_INFO_ENABLED: bool = True
# --- config end

依赖安装

:: 必装依赖,其他为可选 (对应功能需要)
pip install pywin32 httpx
:: 媒体状态依赖 (Python <= 3.9)
:: winrt-runtime 仅适用于 python 3.10+ (下面两个 winrt.windows.xxx 的依赖中有, 无需手动安装)
pip install winrt
:: 媒体状态依赖 (Python >= 3.10)
pip install winrt.windows.media.control winrt.windows.foundation
:: 电池状态依赖
pip install psutil
:: 托盘功能依赖
pip install pystray Pillow

启动

python win_device.py
:: 显然,托盘功能仅添加到了ds版本中
python win_device_ds.py

自启动

有两种方式:

1. PM2

可以使用 PM2 来自启动 / 管理进程 (搜索: Windows PM2 自启)

PM2 启动命令参考: pm2 start python --name sleepywin -- -u win_device.py
如日志出现乱码请手动设置编码环境变量

2. 自启脚本

win_device_ds_autostart.vbs

自启脚本,使启动后不显示窗口 (适用于不想用第三方软件托管进程的情况下)

  1. win_device_ds_autostart.vbs 放入 shell:startup (开始菜单 -> 启动) 文件夹
  2. win_device_ds.py 放入 %UserProfile% (用户主目录) 文件夹

Tip

shell:startup%UserProfile% 两个文件夹可用运行窗口 (Win+R) 打开

无法获取网易云媒体信息

原因: 网易云音乐不会设置 SMTC 状态,导致无法获取媒体信息

解决方法: 安装 BetterNCM,并安装 InfLink 插件,启用其中的 SMTC 功能即可正常获取

Win Fast Settings

by: @CR400AFC2214

这是一个基于 win_device.py 的快速调整 sleepy 设置的小脚本,基于 tkinter

Warning

本 client 基于 WinDevice, 请确保您在使用前将 win_device.py 放在同一文件夹下, 并已经完成了在 win_device.py 中的配置!

额外的依赖: requests

启动

python win_settings.py

by: @kmizmal
源代码: ./Win_Simple/script.py

配置

配置文件 (首次打开自动在同级目录下创建): config.ini

config.ini 里面的注释写的很详细了,不再提供示例

使用

下载后双击 Win_Simple.exe 初始化配置文件,然后在同级目录下的 config.ini 中填写配置,重新打开即可

Tip

如何开机自启?
创建一个 Win_Simple.exe 的快捷方式,然后扔到 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup 下即可

Android

by: @wyf9
Co-authored-by: @VanillaNahida
Co-authored-by: @makabaka-andy
Co-authored-by: @GoingScience

使用 Autox.js 编写的安卓自动更新状态脚本

软件下载

在使用前,请确保已安装 Autox.js 授予无障碍权限

下载: aiselp/AutoX (Release)

配置

// config start
const API_URL = 'https://sleepy.wyf9.top/device/set'; // 你的完整 API 地址,以 `/device/set` 结尾
const SECRET = '绝对猜不出来的密码'; // 你的 secret
const ID = 'a-device'; // 你的设备 id, 唯一
const SHOW_NAME = '一个设备'; // 你的设备名称, 将显示在网页上
const CHECK_INTERVAL = '3000'; // 检查间隔 (毫秒, 1000ms=1s)
// config end
// config start
const API_URL = 'https://sleepy.wyf9.top/device/set'; // 你的完整 API 地址,以 `/device/set` 结尾
const SECRET = '绝对猜不出来的密码'; // 你的 secret
const ID = 'a-device'; // 你的设备 id, 唯一
const SHOW_NAME = '一个设备'; // 你的设备名称, 将显示在网页上
const CHECK_INTERVAL = '3000'; // 检查间隔 (毫秒, 1000ms=1s)
// config end

使用

启动后可点击 Autox.js 右上角的日志图标查看日志

image

  • 当手机息屏 (应用名返回为空) 时视为未在使用

  • 当脚本退出时也会更新状态为未在使用 (不包括 Autox.js 直接停止运行)

清理后台不中断脚本方案

安卓低版本运行

如果需要在较低的安卓版本运行,无法安装上面 repo 中的安装包,可以从下载站下载旧版本:

http://www.autoxjs.com/topic/116/autox-js

另外,此链接中的版本运行脚本会报错,可以参考 这里 的解决方案

点击展开

之所以报错是因为 AutoX.js 旧版本不支持 Javascript 中的模板字符串

解决方案: 手动将脚本中的模板字符串替换为 + 连接的形式,如:

// Before
console.log(`[sleepyc] ${msg}`);
// After
console.log('[sleepyc] ' + msg);

启动时报错

如果可以安装软件, 但首次启动时报错:

展开报错示例
错误信息:
Unable to start activity ComponentInfo{org.autojs.autoxjs.v7/org.autojs.autojs.ui.splash.SplashActivity}: java.lang.SecurityException: Unable to start service Intent { cmp=org.autojs.autoxjs.v7/com.stardust.autojs.IndependentScriptService }: Unable to launch app org.autojs.autoxjs.v7/10361 for service Intent { cmp=org.autojs.autoxjs.v7/com.stardust.autojs.IndependentScriptService }: process is bad
java.lang.RuntimeException: Unable to start activity ComponentInfo{org.autojs.autoxjs.v7/org.autojs.autojs.ui.splash.SplashActivity}: java.lang.SecurityException: Unable to start service Intent { cmp=org.autojs.autoxjs.v7/com.stardust.autojs.IndependentScriptService }: Unable to launch app org.autojs.autoxjs.v7/10361 for service Intent { cmp=org.autojs.autoxjs.v7/com.stardust.autojs.IndependentScriptService }: process is bad
	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3903)
	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4049)
	at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:101)
	at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2443)
	at android.os.Handler.dispatchMessage(Handler.java:106)
	at android.os.Looper.loopOnce(Looper.java:211)
	at android.os.Looper.loop(Looper.java:300)
	at android.app.ActivityThread.main(ActivityThread.java:8348)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:582)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1028)
Caused by: java.lang.SecurityException: Unable to start service Intent { cmp=org.autojs.autoxjs.v7/com.stardust.autojs.IndependentScriptService }: Unable to launch app org.autojs.autoxjs.v7/10361 for service Intent { cmp=org.autojs.autoxjs.v7/com.stardust.autojs.IndependentScriptService }: process is bad
	at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1916)
	at android.app.ContextImpl.startService(ContextImpl.java:1874)
	at android.content.ContextWrapper.startService(ContextWrapper.java:827)
	at com.stardust.autojs.servicecomponents.ScriptServiceConnection$Companion.start(ScriptServiceConnection.kt:129)
	at org.autojs.autojs.ui.splash.SplashActivity.onCreate(SplashActivity.kt:51)
	at android.app.Activity.performCreate(Activity.java:8577)
	at android.app.Activity.performCreate(Activity.java:8541)
	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1437)
	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3884)
	... 12 more

有两种解决方案:

  1. 检查系统设置 (如 Google Play 保护机制 可能会将其阻止)
  2. 找 wyf9 获取旧版安装包

by: @kmizmal

适用于 Magisk Root 环境的服务脚本

配置

./magisk/config.cfg

URL="https://52496a27f51a-sss.hf.space/device/set"
SECRET="zmal"
LOG_NAME="focus_monitor.log"
CACHE="${SCRIPT_DIR}/cache.txt"
# 自定义游戏包名(以空格分隔)
GAME_PACKAGES="com.tencent.tmgp.speedmobile com.miHoYo.Yuanshen com.tencent.tmgp.sgame com.tencent.tmgp.supercell.clashofclans com.netease.sky.m4399"

Tip

详见 说明

使用

刷入 magisk.zip 并重启即可

Mod

另有 @XFJ-YYQF 的修改版本可用,支持媒体状态获取

见:

SleepyXposed

by @RhenCloud
Source Code: RhenCloud/SleepyXposed

基于 Xposed 框架,对系统框架进行 hook 的客户端方案。

下载

请前往 RhenCloud/SleepyXposed (Release) 下载

配置

启动应用后,进行以下配置:

必填项

字段 说明 示例
服务器地址 Sleepy 服务器地址 https://your-sleepy.com
服务器密钥 Sleepy 认证密钥 your-secret-key-here
设备 ID 唯一标识此设备 android-phone-1

可选项

字段 说明 默认值
显示名称 在 Sleepy 页面显示的名称 设备型号
启用上报 是否启用数据上报 禁用

使用

  1. 打开 Xposed/LSPosed 管理器
  2. 找到 "SleepyXposed" 模块
  3. 启用 该模块
  4. 在作用域中勾选 "系统框架"
  5. 重启设备

Linux

by: @RikkaNaa

适用于 Linux KDE 桌面环境,且需要系统安装 kdotool

如获取失败则视为未在使用,变量计时参考

配置

# --- config start
SERVER = 'http://localhost:9010' # 服务地址, 末尾还是不带 /
SECRET = 'wyf9test' # 密钥
DEVICE_ID = 'device-1' # 设备标识符
DEVICE_SHOW_NAME = 'MyDevice1' # 前台显示名称
CHECK_INTERVAL = 2 # 检查间隔,以秒为单位
BYPASS_SAME_REQUEST = True # 是否忽略重复请求
ENCODING = 'utf-8' # 控制台输出所用编码,避免编码出错,可选 utf-8 或 gb18030
SKIPPED_NAMES = ['', 'plasmashell'] # 当窗口名为其中任意一项时将不更新
NOT_USING_NAMES = ['[FAILED]'] # 当窗口名为其中任意一项时视为未在使用
# --- config end

使用

可自行配置本脚本的自启动

当进程接收到 SIGTERM 信号时将会发送未在使用请求

by: @inoryxin

适用于 Linux Hyprland 桌面环境,无需任何依赖,开箱即用

配置

# --- config start
URL="http://10.0.0.123:9010/device/set" # API 地址, 以 /device/set 结尾
SECRET="114514" # 密钥
DEVICE_ID="desktop" # 设备 id, 唯一
DEVICE_SHOW_NAME="祈歆的电脑" # 设备显示名称
# --- config end

使用

直接启动即可

Tip

开机自启可自行在 hyprland.conf 中配置
注意: 需要给脚本加上可执行权限 (chmod +x), 否则无法运行!

by: @RhenCloud
指向外部资源

这是一个基于 piri 的 Fork 版本

感谢 piri 原作者 Asthestarsfalll 做出的贡献

适用于 Linux Niri 桌面环境,通过 piri 的 Sleepy 插件在窗口焦点变化时自动上报应用状态。

配置

~/.config/niri/piri.toml 中启用插件并添加 sleepy 配置:

[piri.plugins]
sleepy = true

[sleepy]
server_url = "https://sleepy.example.com"
device_id = "my-linux"
device_name = "Niri Desktop"
token = ""      # 可选, Bearer Token 鉴权
secret = ""     # 可选, 某些部署需要 body 内 secret
prefer_app_id = false

Tip

server_url 填写服务端根地址即可,插件会自动请求 /api/device/set

使用

  1. 安装并启动 piri daemon
  2. 保持 piri 在 Niri 会话中运行
  3. 切换窗口焦点后即可自动更新 Sleepy 设备状态

相关文档:

IOS/MacOS

by: @Detritalw
指向外部资源

FullVer

点击链接安装完整版, 支持 Apple Watch, iPhone, iPad, mac...

FastVer

点击链接安装极速版

建议设置自动化 → 打开App → 选择全部App → 设置为不确认,立即执行 → 选择快捷指令为Sleepy Client Shortcuts Fast,即可获得超级好的体验。

Warning

IOS 版本 >= 18 才可使用 (获取前台 App 命令) 这里的链接可能不是最新,建议到项目内查看

Tip

你可以将该快捷指令设置为操作按钮、控制中心按钮、锁定屏幕按钮、敲击 2 / 3 下背板指令来快捷使用

支持macOS 13.0+

by: @wan0ge & AI

Sleepy_SU(点击下载安装包)

说明

使用 Swift 编写的 macOS 原生自动更新状态轻应用,与AppleScript版本差异是有图形化UI,并且支持锁屏、睡眠、关机状态检测上报未使用

原生开发轻量级低占用,拥有图形化UI,支持锁屏、睡眠、关机状态的检测上报未使用,支持Apple Music、Spotify的音乐播放状态上报,支持忽略进程、窗口名,支持长时间窗口无变化上报未在使用

使用

下载镜像安装包后双击打开,将应用图标拖拽到Applications(应用程序)即可完成安装,安装后启动就能够在菜单栏看到一只小猫的图标,点击能够看到各种选项

截屏2026-03-19 07 01 45 截屏2026-03-19 00 07 17

首次运行需要先去配置选项进行基础配置,注意更改都需要点击底部的保存才会应用

配置文件储存在 ~/Library/Preferences/com.Sleepy-SU.plist

截屏2026-03-19 00 10 26 截屏2026-03-19 00 10 31

然后在菜单栏点击开启状态更新,应用会先申请辅助权限

截屏2026-03-19 00 12 51 截屏2026-03-18 04 25 26

给予权限之后就能够看到正在运行了

截屏2026-03-19 00 14 20

遇到关机、睡眠、锁屏、强制退出都会进行上报未使用,只要在配置里面开启开机自启动启动应用时默认开启上报就可以无感使用了

如果有使用浏览器、Apple Music、Spotify应用会申请对应的自动化权限,用于获取更准确的窗口名与音乐播放信息(音乐播放信息暂时只支持Apple Music、Spotify,默认开启,开启后播放时会追加到窗口名后面显示)

权限说明:

辅助权限为主要权限,用来检测窗口名进程名(权限入口:系统设置→隐私与安全性→辅助功能)

自动化权限用于更精准地获取浏览器标签页标题以及 Apple Music、Spotify 的播放信息,因为用到了应用自身的一些 API 所以需要这个权限访问(权限入口:系统设置→隐私与安全性→自动化)

Warning

macOS 对应用权限的授予有问题,请尽量在运行后不要更改文件位置或移除权限

如果只上报进程名而不是窗口名说明辅助权限有问题,请在 系统设置→隐私与安全性→辅助功能 里将本应用删除再手动添加给予权限即可正常

支持macOS 10.9+

by: @wan0ge & AI

Sleepy_AS(点击下载安装包)

说明

使用 AppleScript 编写的 macOS 自动更新状态脚本,如果macOS > 13.0 推荐使用上方的SwiftUI版本

因为AS脚本检测锁屏和关机前上报未在使用实现困难,分为两个脚本,Sleepy_AS为上报状态主脚本,Sleepy_AS_false为停止并上报未使用脚本

主脚本也支持长时间窗口无变化上报未在使用、忽略特定窗口/进程,如果觉得关机前启动副脚本不够便利也可以搭配快捷指令使用,创建一个快捷指令选择“打开App”和“关机”并选中Sleepy_AS_false就可以当一个伪一键关机脚本使用,或者其他方式搭配“打开App”使用。

使用

下载镜像安装包后双击打开,将两个脚本图标拖拽到Applications(应用程序)即可完成安装

截屏2026-03-18 09 23 44

首次安装后需要先启动主脚本Sleepy_AS根据弹窗填写配置,填写完基础的API地址、密钥、设备ID、设备名称就能够看到运行弹窗

配置文件储存在 ~/Library/Preferences/com.sleepy.as.app.plist

截屏2026-03-18 23 08 52 截屏2026-03-18 23 09 31

点击直接运行会申请辅助权限,进行授权后即可开始使用,脚本会在后台自动获取窗口名并上报(如果需要配置忽略窗口名请点击配置高级选项)

截屏2026-03-18 21 53 02 截屏2026-03-18 23 21 12

如果有使用浏览器、Apple Music、Spotify程序会申请对应的自动化权限,用于获取更准确的窗口名与音乐播放信息(音乐播放信息暂时只支持Apple Music、Spotify,默认开启,开启后播放时会追加到窗口名后面显示)

关机或锁屏前启动Sleepy_AS_false就可以停止主脚本并上报未在使用(同样需要辅助等等权限),关闭脚本不需要再次填写配置会自动读取主脚本的配置

权限说明:

辅助权限为主要权限,用来检测窗口名进程名(权限入口:系统设置→隐私与安全性→辅助功能)

自动化权限用于更精准的获取浏览器标签页标题以及AppleMusic、Spotify的播放信息获取,因为用到了应用自身的一些API所以需要这个权限访问(权限入口:系统设置→隐私与安全性→自动化)

Warning

mac os对应用权限给予有问题,请尽量保存运行后不要更改文件位置以及移除权限

如果只上报进程名而不是窗口名说明辅助权限有问题,请在 系统设置→隐私与安全性→辅助功能 里将本脚本删除再手动添加给予权限即可正常

加入启动项开机启动

在 系统设置→通用→登录项→登录时打开 中将Sleepy_AS主脚本加入即可

CLI

by: @wyf9

一个手动设置设备状态的示例 (不止!) 用来展示你的作业进度

依赖: requests

配置

# --- config start
SERVER = 'https://sleepy.example.com' # 部署地址,末尾不带 `/`
SECRET = '11111111-4444-5555-1111-444444444444'
PROXY: str = '' # 代理地址 (<http/socks5>://host:port), 设置为空字符串禁用
# --- config end

使用

脚本提供了一些函数:

  • left(num: int): 设置剩余作业的数量 (为 0 则移除) [device id: homework-left]
  • writing(name: str): 设置正在写的作业 (名称为空字符串则移除) [device id: homework-writing]

还有一些扩展函数, 可以调用 全部 (存疑) 大部分 API:

点击展开列表

点击链接跳转 api 文档

那么,如何使用这两个函数呢?

  1. 直接使用

使用 python homework_device.py 直接打开, 并用执行函数 (eval()) 的方式发送请求,

如:left(114514)

如何将多个调用写在一行?可用逗号分隔:left(114513), writing('五 年 中 考 三 年 模 拟')

  1. 其他程序调用
from time import sleep
from homework_device import left, writing # import

for i in range(114514, 1, -1):
    left(i)
    writing(f'My Homework #{i}')
    sleep(11.45)

by: @wyf9
留档,不建议使用

一个简单的命令行客户端,用于手动更新状态

依赖: requests

配置

# --- config start
# 密钥
SECRET = 'YourSecretCannotGuess'
# 服务地址, 末尾不加 `/`
SERVER = 'https://example.com'
# 请求重试次数
RETRY = 3
# --- config end

使用

启动脚本, 按照提示操作即可

by: @wyf9
留档,不建议使用

CMDConsole 的旧版本 (可选择多个服务)

配置

# --- config start
# 密钥
SECRET = '11451419-1981-0114-5141-919810114514'
# 服务列表, 末尾不加 `/`
SERVER_LIST = ['https://sleepy.wyf9.top',
'http://114.51.41.91:9010',
'http://127.0.0.1:9010']
# 请求重试次数
RETRY = 3
# --- config end

使用

同上, 多了一步选择服务

Others

by: @wyf9

依赖: requests

一个使用 Minescript mod 在 Minecraft Java 版中上报游戏内信息的脚本

Minescript

在使用前, 你需要下载 Minescript mod:

Links: MCMod.cn / Modrinth / Repo

也可在各大启动器的 Modrinth 源中直接下载

在下载并启动一次后, 打开 .minecraft/versions/你的版本/minescript/ 目录, 并进行两个操作:

  1. 新建 config.txt, 内容:
# Lines starting with "#" are ignored.
# 替换为你的 Python 可执行程序路径
python="C:\Program Files\Python312\python.exe"
  1. mc_script.py 复制到此目录, 并改名为 sleepy.py (也可为其他名字)

配置

需要配置两处:

  1. 基本服务

# --- config start
SERVER = 'https://sleepy.example.com' # 服务器地址, 末尾不带 /
SECRET = 'this_is_a_strong_key' # 密钥
DEVICE_ID = 'device-1' # 设备 id, 唯一
DEVICE_SHOW_NAME = 'MyDevice1' # 设备前台显示名称
CHECK_INTERVAL = 10 # 监测间隔 (秒)
BYPASS_SAME_REQUEST = True # 是否忽略相同请求
DEBUG = False # 调试模式, 开启以获得更多输出
# --- config end

  1. app_name 格式

return f'{mc_ver} {mod_loader_name} - {player_name} @ {world_name} - 血量: {player_health} - 天气: {weather}' # 最终上报的应用名

使用

配置完成后重启 Minecraft 进入游戏, 按 T (默认键位, 可能不同) 打开聊天栏, 并输入: \sleepy *(即上面重命名后的文件名去掉 .py 后缀) 回车启动

停止: \sleepy stop

自启

也可以配置自启, 只需在 config.txt 中新增一行:

autorun[*]=eval 'execute("\\sleepy")'

by: @nuym

在任何支持油猴脚本的浏览器均可使用,据作者↑说是为了解决 Mac 无法获取窗口标题,遂退而求其次获取浏览器页面(有系统就有浏览器,即有用户脚本)

配置

// ===== 参数配置 =====
const API_URL = 'https://sleepy.wyf9.top/device/set'; // 完整 API 地址(以 /device/set 结尾)
const SECRET = '绝对猜不出来的密码'; // 你的 secret
const ID = '114514'; // 设备 id
const SHOW_NAME = ''; // 设备名称,若为空则使用浏览器名称
const NO_TITLE = 'url'; // 页面标题为空时返回的值:'url' 使用完整 URL, 'host' 使用域名, 其他值则直接使用该值
const BLACKLIST = ['admin', '后台']; // 黑名单关键词数组(标题或 URL 包含即停止上报,不区分大小写)
// 请确保 @connect 指令中的域名与 API_URL 域名一致

by: @NiuFuyu855

获取你的智学网成绩并展示在页面上

依赖: requests, zhixuewang

配置

sleepy/client/zhixue.py

Lines 38 to 47 in 73a5e35

# --- config start
MODE: str = "auto" # 运行模式, auto: 自动更新模式, single: 单次运行模式
USERNAME: str = "" # 智学网用户名,必填!!!
PASSWORD: str = "" # 智学网密码,必填!!!
LOGIN_URL: str = 'https://www.zhixue.com/login.html' # 智学网登录 API, 一般情况下无需修改
LOGIN_PAGE_URL: str = 'https://www.zhixue.com/login.html' # 登录页面 URL, 一般情况下无需修改
TLSYSSESSIONID: str = "" # TLSYSSESSIONID, 需自行浏览器 Ctrl+Shift+I 打开开发者工具获取, 必填!!!
COOKIE: str = "" # 智学网 Cookie, 留空则自动获取
EXAM_ID: str = "" # 考试ID, 留空则为获取最新考试成绩
# --- config end

同时需要添加环境变量:

sleepy_page_zhixue = true

使用

需要将本脚本放在服务器的 main.py 同级目录运行,或编辑 L195-L197:

sleepy/client/zhixue.py

Lines 195 to 197 in 73a5e35

save_dir = "./static"
os.makedirs(save_dir, exist_ok=True) # 确保文件夹存在
file_path = os.path.join(save_dir, "zhixue.txt") # 构建完整的文件路径

Other repos

Important

在功能 / API 实现上有不同,需要进行修改以与本分支适配 (见 API #device-set)