misiektoja/steam_monitor
GitHub: misiektoja/steam_monitor
Steam 玩家活动实时追踪工具,支持上下线检测、游戏时长统计、资料变更监控及邮件通知。
Stars: 51 | Forks: 5
# steam_monitor
-u "your_steam_web_api_key"
```
或者如果您是[手动安装](#manual-installation)的:
```
python3 steam_monitor.py -u "your_steam_web_api_key"
```
获取所有受支持的命令行参数/标志列表:
```
steam_monitor --help
```
## 配置
### 配置文件
大多数设置可以通过命令行参数进行配置。
如果您想持久化存储配置,可以生成一个默认的配置模板并将其保存到名为 `steam_monitor.conf` 的文件中:
```
# 在 macOS、Linux 或 Windows Command Prompt (cmd.exe) 上
steam_monitor --generate-config > steam_monitor.conf
# 在 Windows PowerShell 上(推荐使用以避免编码问题)
steam_monitor --generate-config steam_monitor.conf
```
编辑 `steam_monitor.conf` 文件并更改任何所需的配置选项(每个选项都有详细的注释说明)。
### Steam Web API key
您可以从这里获取 Steam Web API key:[http://steamcommunity.com/dev/apikey](http://steamcommunity.com/dev/apikey)
使用以下任一方法提供 `STEAM_API_KEY` 密钥:
- 在运行时使用 `-u` / `--steam-api-key` 传入
- 将其设置为[环境变量](#storing-secrets)(例如 `export STEAM_API_KEY=...`)
- 将其添加到 [.env 文件](#storing-secrets)(`STEAM_API_KEY=...`)中以供持久使用
后备方案:
- 在代码或配置文件中硬编码
如果您将 `STEAM_API_KEY` 存储在 dotenv 文件中,您可以更新其值并向进程发送 `SIGHUP` 信号以重新加载包含新 API key 的文件,而无需重启工具。更多信息请参阅[存储密钥](#storing-secrets)和[信号控制 (macOS/Linux/Unix)](#signal-controls-macoslinuxunix)。
### 用户隐私设置
为了监控 Steam 用户活动,需要在被监控的用户账户上启用适当的隐私设置。
用户应前往 [Steam 隐私设置](https://steamcommunity.com/my/edit/settings)。
**我的个人资料 → 游戏详情** 中的值应设置为 **仅限好友** 或 **公开**。
### SMTP 设置
如果您想使用电子邮件通知功能,请在 `steam_monitor.conf` 文件中配置 SMTP 设置。
使用 `--send-test-email` 标志验证您的 SMTP 设置(该工具将尝试发送一封测试电子邮件通知):
```
steam_monitor --send-test-email
```
### 存储密钥
建议将 `STEAM_API_KEY` 或 `SMTP_PASSWORD` 等密钥存储为环境变量或在 dotenv 文件中。
在 **Linux/Unix/macOS/WSL** 系统上使用 `export` 设置环境变量:
```
export STEAM_API_KEY="your_steam_web_api_key"
export SMTP_PASSWORD="your_smtp_password"
```
在 **Windows 命令提示符** 上使用 `set` 替代 `export`,在 **Windows PowerShell** 上使用 `$env`。
或者将它们持久化存储在 dotenv 文件中(推荐):
```
STEAM_API_KEY="your_steam_web_api_key"
SMTP_PASSWORD="your_smtp_password"
```
默认情况下,工具会自动在当前目录及其上级目录中查找名为 `.env` 的 dotenv 文件。
您可以使用 `DOTENV_FILE` 或 `--env-file` 标志指定自定义文件:
```
steam_monitor --env-file /path/.env-steam_monitor
```
您也可以使用 `DOTENV_FILE = "none"` 或 `--env-file none` 禁用 `.env` 自动搜索:
```
steam_monitor --env-file none
```
作为后备方案,您也可以将密钥存储在配置文件或源代码中。
## 用法
### 详细用户信息显示模式
要在不启动监控的情况下显示用户的全面 Steam 个人资料信息,请输入玩家的 Steam64 ID(在以下示例中为 `steam_user_id`)并使用 `-i` / `--info` 标志:
```
steam_monitor -i
```
或者使用 Steam 社区 URL:
```
steam_monitor -r "https://steamcommunity.com/id/steam_username/" -i
```
如果您尚未设置 `STEAM_API_KEY` 密钥,可以使用 `-u` 标志:
```
steam_monitor -i -u "your_steam_web_api_key"
# 或
steam_monitor -r "https://steamcommunity.com/id/steam_username/" -i -u "your_steam_web_api_key"
```
此模式显示的详细信息包括:
- Steam64 ID、显示名称、真实姓名
- 国家/地区
- 当前状态和个人资料可见性
- 账户创建日期
- 个人资料 URL
- Steam 等级、获得的徽章和 XP 统计
- 封禁状态(VAC、社区、交易)
- 好友数量(使用 `--list-friends` 时,还会显示完整列表,包括每段好友关系开始的时间)
- 按总游戏时长排名的顶级游戏
- 带有游玩时长统计的最近玩过的游戏
- 过去 2 周内的游玩时长
或者,您也可以使用 `--name-history` 标志显示**昵称(显示)名称历史记录**:
```
steam_monitor -i --name-history
```
这会列出用户以前的显示名称及其更改日期(由 Steam 报告)。
或者,您也可以使用 `--achievements` 标志显示**近期获得的成就**:
```
steam_monitor -i --achievements # show recent achievements (default: 10)
steam_monitor -i --achievements -n 20 # show up to 20 recent achievements
steam_monitor -i --achievements --achievements-all-games # check all owned games instead of only recently played
```
近期成就显示游戏名称、成就名称、描述(如果有)以及获得时间。
**工作原理:**
- 默认情况下,该工具会从用户最近玩过的游戏中检查成就(最多 15 个游戏)。
- 如果最近玩过的游戏列表为空或被隐藏,它会自动回退到检查所有拥有的游戏。
- 使用 `--achievements-all-games` 可强制检查所有拥有的游戏,而不仅仅是最近玩过的游戏。这对于最近没有玩游戏的用户非常有用,因为他们的最近游戏列表可能受限,并且可能会遗漏带有成就的旧游戏。
- 成就会按解锁时间排序(最近的在前),并限制为由 `-n` 指定的数量(默认:10)。
成就的可见性取决于用户针对游戏详情的 Steam 隐私设置。如果游戏详情设置为“私密”,则可能无法访问成就。
该工具显示此信息后即退出(不启动监控)。
### 监控模式
要监控特定用户活动,只需输入玩家的 Steam64 ID(在以下示例中为 `steam_user_id`):
```
steam_monitor
```
如果您尚未设置 `STEAM_API_KEY` 密钥,可以使用 `-u` 标志:
```
steam_monitor -u "your_steam_web_api_key"
```
如果您不知道用户的 Steam64 ID,但您知道 Steam 个人资料/社区 URL(用户可以自定义),您也可以使用 `-r` 标志运行该工具,它会自动将其解析为 Steam64 ID:
```
steam_monitor -r "https://steamcommunity.com/id/steam_username/"
```
当监控开始时,该工具会显示用户信息,包括 Steam64 ID、显示名称、真实姓名(如果有)、国家/地区、当前状态、个人资料可见性、账户创建日期和个人资料 URL。
默认情况下,该工具会在以下位置查找名为 `steam_monitor.conf` 的配置文件:
- 当前目录
- 主目录 (`~`)
- 脚本目录
如果您按照[配置](#configuration)中的说明生成了配置文件,但将其保存在了不同的名称或不同的目录下,您可以使用 `--config-file` 标志指定其位置:
```
steam_monitor --config-file /path/steam_monitor_new.conf
```
该工具会一直运行直到被中断(`Ctrl+C`)。可以使用 `tmux` 或 `screen` 来保持持久运行。
您可以通过运行脚本的多个实例来监控多个 Steam 玩家。
该工具会自动将其输出保存到 `steam_monitor_.log` 文件中。日志文件名可以通过 `ST_LOGFILE` 配置选项进行更改,其后缀可以通过 `FILE_SUFFIX` / `-y` 标志更改。可以通过 `DISABLE_LOGGING` / `-d` 标志完全禁用日志记录。
该工具还会将时间戳和最后状态(在每次更改后)保存到 `steam__last_status.json` 文件中,以便在工具重启后获取最后的状态。当启用游戏库追踪时,该库的快照(游戏数量和 app ID)会存储在 `steam__games.json` 中,且仅报告变化情况。
要追踪用户的 **Steam 等级和总 XP** 变化:
- 将 `STEAM_LEVEL_XP_CHECK` 设置为 `True`
- 或使用 `--check-level-xp` 标志
要追踪用户**好友列表**的变化(数量以及如果可用 - 添加/移除的好):
- 将 `FRIENDS_CHECK` 设置为 `True`
- 或使用 `--check-friends` 标志
要追踪用户**游戏库**的变化(游戏数量以及添加/移除的游戏):
- 将 `GAMES_LIBRARY_CHECK` 设置为 `True`
- 或使用 `--check-games` 标志
用户的**显示(昵称)名称**会自动追踪,无需额外配置。无论何时发生更改,该工具都会记录旧名称和新名称,并且(在配置了配置文件 CSV 时)记录一条 `name_change` 行。要在发生此类更改时也接收电子邮件,请使用 `--notify-name-change`(请参阅[电子邮件通知](#email-notifications))。
### 电子邮件通知
要在用户上线或下线时启用电子邮件通知:
- 将 `ACTIVE_INACTIVE_NOTIFICATION` 设置为 `True`
- 或使用 `-a` 标志
```
steam_monitor -a
```
要在用户开始、停止或更改正在玩的游戏时收到通知:
- 将 `GAME_CHANGE_NOTIFICATION` 设置为 `True`
- 或使用 `-g` 标志
```
steam_monitor -g
```
要获取有关用户状态任何变化(在线/离开/打盹/下线)的电子邮件通知:
- 将 `STATUS_NOTIFICATION` 设置为 `True`
- 或使用 `-s` 标志
```
steam_monitor -s
```
要在用户的**显示(昵称)名称**更改时获取电子邮件通知:
- 将 `NAME_CHANGE_NOTIFICATION` 设置为 `True`
- 或使用 `--notify-name-change` 标志
显示名称的变化总是会被检测到并记录到控制台、日志文件和个人资料 CSV 中。此标志仅控制是否也发送电子邮件。
```
steam_monitor --notify-name-change
```
要在用户的 **Steam 等级和总 XP** 发生变化时获取电子邮件通知:
- 将 `STEAM_LEVEL_XP_NOTIFICATION` 设置为 `True`
- 或使用 `--notify-level-xp` 标志
它需要启用 Steam 等级和总 XP 追踪(`STEAM_LEVEL_XP_CHECK` / `--check-level-xp`)。
```
steam_monitor --check-level-xp --notify-level-xp
```
要在用户的**好友列表**发生更改时获取电子邮件通知:
- 将 `FRIENDS_NOTIFICATION` 设置为 `True`
- 或使用 `--notify-friends` 标志
它需要启用好友追踪(`FRIENDS_CHECK` / `--check-friends`)。
```
steam_monitor --check-friends --notify-friends
```
要在用户的**游戏库**发生更改时获取电子邮件通知:
- 将 `GAMES_LIBRARY_NOTIFICATION` 设置为 `True`
- 或使用 `--notify-games` 标志
它需要启用游戏库追踪(`GAMES_LIBRARY_CHECK` / `--check-games`)。
```
steam_monitor --check-games --notify-games
```
要在发生错误时禁用发送电子邮件(默认启用):
- 将 `ERROR_NOTIFICATION` 设置为 `False`
- 或使用 `-e` 标志
```
steam_monitor -e
```
请确保您之前已经定义了 SMTP 设置(请参阅 [SMTP 设置](#smtp-settings))。
示例电子邮件:
-b steam_user_id.csv
```
如果该文件不存在,将会自动创建。
如果您想将**与配置文件相关的更改**(Steam 等级更改、总 XP 更改、显示名称更改、好友数量更改、游戏库更改以及单个添加/移除的好友)保存到**单独的 CSV 文件**中,请设置 `PROFILE_CSV_FILE` 或使用 `--profile-csv-file` 标志:
```
steam_monitor --profile-csv-file steam_user_id_profile.csv
```
每一行都包含时间戳、事件类型和相关联的值(例如:旧的/新的 Steam 等级或 XP、好友数量增量,或者在可用的情况下,每行一个添加/移除的好友)。
### 检查间隔
如果您想自定义轮询间隔,请使用 `-k` 和 `-c` 标志(或相应的配置选项):
```
steam_monitor -k 30 -c 120
```
* `STEAM_ACTIVE_CHECK_INTERVAL`, `-k`: 用户在线、离开或打盹时的检查间隔(秒)
* `STEAM_CHECK_INTERVAL`, `-c`: 用户离线时的检查间隔(秒)
### 信号控制 (macOS/Linux/Unix)
该工具实现了多个信号处理程序,允许在不使用新配置选项/标志重启的情况下更改工具的行为。
支持的信号列表:
| 信号 | 描述 |
| ----------- | ----------- |
| USR1 | 切换用户上线或下线时的电子邮件通知 (-a) |
| USR2 | 切换用户开始/停止/更改游戏时的电子邮件通知 (-g) |
| CONT | 切换所有用户状态更改(在线/离开/打盹/下线)的电子邮件通知 (-s) |
| URG | 切换 Steam 等级/XP 变化的电子邮件通知 (--notify-level-xp) |
| PIPE | 切换好友列表变化的电子邮件通知 (--notify-friends) |
| VTALRM | 切换显示名称变化的电子邮件通知 (--notify-name-change) |
| TRAP | 当用户在线/离开/打盹时增加玩家活动的检查定时器(增加 30 秒) |
| ABRT | 当用户在线/离开/打盹时减少玩家活动的检查定时器(减少 30 秒) |
| HUP | 从 .env 文件重新加载密钥 |
使用 `kill` 或 `pkill` 发送信号,例如:
```
pkill -USR1 -f "steam_monitor "
```
由于 Windows 支持的信号数量有限,此功能仅在 Linux/Unix/macOS 上可用。
### 使用 GRC 为日志输出着色
自 v1.5 起,该工具原生支持终端**彩色输出**(请参阅 `COLORED_OUTPUT` 和 `COLOR_THEME` 配置选项),但您也可以使用 [GRC](https://github.com/garabik/grc) 为日志着色。
添加到您的 GRC 配置 (`~/.grc/grc.conf`) 中:
```
# 监控日志文件
.*_monitor_.*\.log
conf.monitor_logs
```
现在将 [conf.monitor_logs](https://raw.githubusercontent.com/misiektoja/steam_monitor/refs/heads/main/grc/conf.monitor_logs) 复制到您的 `~/.grc/` 目录下,这样在使用 `grc` 工具时,日志文件应该会被漂亮地着色。
示例:
```
grc tail -F -n 100 steam_monitor_.log
```
## 更新日志
详情请参阅 [RELEASE_NOTES.md](https://github.com/misiektoja/steam_monitor/blob/main/RELEASE_NOTES.md)。
## 许可证
根据 GPLv3 授权。请参阅 [LICENSE](https://github.com/misiektoja/steam_monitor/blob/main/LICENSE)。
标签:逆向工具