misiektoja/steam_monitor

GitHub: misiektoja/steam_monitor

Steam 玩家活动实时追踪工具,支持上下线检测、游戏时长统计、资料变更监控及邮件通知。

Stars: 51 | Forks: 5

# steam_monitor

GitHub Release PyPI Version GitHub Stars Python Versions License Last Commit Maintenance

实时追踪 **Steam 玩家活动** 的强大工具。 ### 🚀 快速安装 ``` pip install steam_monitor ```

steam_monitor_screenshot

## 功能 - **实时追踪** Steam 用户的游戏活动(包括检测用户何时上线/下线或玩游戏) - **用户活动的基础统计**(例如在不同状态下的时长、游戏时长、会话中的总时间及玩过的游戏数量等) - **详细用户信息**显示模式,提供全面的 Steam 个人资料洞察,包括**个人资料详情**、**Steam 等级和 XP 统计**、**获得的徽章**、**封禁状态**、**好友数量**(可选显示完整好友列表及好友关系建立时间)、**按总游戏时长排名的顶级游戏**、带有游玩时长统计的**最近玩过的游戏**、**过去 2 周内的游玩时长**,可选的**昵称历史记录**以及**近期成就**列表 - **Steam 社区 URL 解析** - 自动将 Steam 社区 URL 解析为 Steam64 ID(无需知道数字 ID) - **Steam 等级和总 XP 变化追踪** - **显示(昵称)名称变化追踪**(当受监控的用户重命名其账户时进行实时检测和记录) - **好友列表变化追踪**(好友数量,以及如果可用 - 添加/移除的好友) - **游戏库变化追踪**(游戏数量、添加/移除的游戏) - 针对不同事件的**电子邮件通知**(当玩家上线/离开/打盹/下线、开始/结束/更改游戏、Steam 等级和总 XP 发生变化、显示名称发生更改、好友列表发生变化或发生错误时) - 将**所有用户活动和配置文件更改**连同时间戳保存到 **CSV 文件**中 - **状态持久化** - 自动将最后状态保存到 JSON 文件中,以便在重启后恢复监控 - **智能会话连续性** - 处理短暂的下线中断并保留会话统计信息 - **灵活的配置** - 支持配置文件、dotenv 文件、环境变量和命令行参数 - **可配置的颜色主题** - 可自定义终端输出颜色和样式 - 可以通过信号**控制正在运行的**脚本副本 - **函数式、过程化 Python**(极少使用 OOP) ## 目录 1. [要求](#requirements) 2. [安装](#installation) * [从 PyPI 安装](#install-from-pypi) * [手动安装](#manual-installation) * [升级](#upgrading) 3. [快速开始](#quick-start) 4. [配置](#configuration) * [配置文件](#configuration-file) * [Steam Web API key](#steam-web-api-key) * [用户隐私设置](#user-privacy-settings) * [SMTP 设置](#smtp-settings) * [存储密钥](#storing-secrets) 5. [用法](#usage) * [详细用户信息显示模式](#detailed-user-information-display-mode) * [监控模式](#monitoring-mode) * [电子邮件通知](#email-notifications) * [CSV 导出](#csv-export) * [检查间隔](#check-intervals) * [信号控制 (macOS/Linux/Unix)](#signal-controls-macoslinuxunix) * [使用 GRC 为日志输出着色](#coloring-log-output-with-grc) 6. [更新日志](#change-log) 7. [许可证](#license) ## 要求 * Python 3.6 或更高版本 * 库:[steam](https://github.com/ValvePython/steam)、`requests`、`python-dateutil`、`python-dotenv` 已在以下平台测试: * **macOS**: Ventura, Sonoma, Sequoia, Tahoe * **Linux**: Raspberry Pi OS (Bullseye, Bookworm, Trixie), Ubuntu 24/25, Rocky Linux 8.x/9.x, Kali Linux 2024/2025 * **Windows**: 10, 11 它应该也可以在 macOS、Linux、Unix 和 Windows 的其他版本上运行。 ## 安装 ### 从 PyPI 安装 ``` pip install steam_monitor ``` ### 手动安装 将 *[steam_monitor.py](https://raw.githubusercontent.com/misiektoja/steam_monitor/refs/heads/main/steam_monitor.py)* 文件下载到所需位置。 通过 pip 安装依赖项: ``` pip install "steam[client]" requests python-dateutil python-dotenv ``` 或者,从下载的 *[requirements.txt](https://raw.githubusercontent.com/misiektoja/steam_monitor/refs/heads/main/requirements.txt)* 安装: ``` pip install -r requirements.txt ``` ### 升级 如果通过 PyPI 安装,请使用以下命令升级到最新版本: ``` pip install steam_monitor -U ``` 如果您是手动安装的,请下载最新的 *[steam_monitor.py](https://raw.githubusercontent.com/misiektoja/steam_monitor/refs/heads/main/steam_monitor.py)* 文件以替换现有的安装。 ## 快速开始 - 获取您的 [Steam Web API key](#steam-web-api-key) 并追踪 `steam_user_id` 的游戏活动: ``` 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))。 示例电子邮件:

steam_monitor_email_notifications

### CSV 导出 如果您想将 Steam 用户所有报告的活动保存到 CSV 文件中,请设置 `CSV_FILE` 或使用 `-b` 标志: ``` steam_monitor -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)。
标签:逆向工具