misiektoja/lol_monitor

GitHub: misiektoja/lol_monitor

一个基于 Riot API 的《英雄联盟》玩家活动实时监控与数据记录工具,支持赛事详情查询、CSV 导出和邮件通知。

Stars: 22 | Forks: 2

# lol_monitor

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

用于实时监控 **LoL (League of Legends) 玩家活动** 的强大工具。 ### 🚀 快速安装 ``` pip install lol_monitor ```

lol_monitor_screenshot

## 功能 - **实时追踪** LoL 用户的游戏活动(包括检测用户何时开始或结束一场比赛) - **已完成比赛的详细统计信息**: - 游戏模式 - 队列和地图名称 - 游戏类型和版本 - 胜利或失败 - 击杀、死亡、助攻 - 英雄名称 - 达到的等级 - 角色 - 分路 - 队伍成员(使用星号标记 ⭐ 表示被监控用户所在的队伍) - 禁用的英雄(包含选用顺序信息) - **玩家档案信息**,包括排位统计(单/双排和灵活排位)以及英雄熟练度最高排名 - 针对不同事件的 **HTML 格式邮件通知**(玩家开始或结束比赛、比赛摘要、错误等) - **保存所有游戏活动**并附带时间戳至 **CSV 文件**(包括自定义游戏比赛) - **灵活的配置方式** - 支持配置文件、dotenv 文件、环境变量和命令行参数 - 支持通过信号 **控制运行中的** 脚本副本 - 用于 CSV 格式转换和比赛记录比对的 **实用工具** - **函数式、过程式 Python** 编写(最少的 OOP) ## 目录 1. [环境要求](#requirements) 2. [安装](#installation) * [从 PyPI 安装](#install-from-pypi) * [手动安装](#manual-installation) * [升级](#upgrading) 3. [快速开始](#quick-start) 4. [配置](#configuration) * [配置文件](#configuration-file) * [Riot API 密钥](#riot-api-key) * [SMTP 设置](#smtp-settings) * [存储机密信息](#storing-secrets) 5. [使用方法](#usage) * [监控模式](#monitoring-mode) * [列出模式](#listing-mode) * [邮件通知](#email-notifications) * [CSV 导出](#csv-export) * [检查间隔](#check-intervals) * [信号控制 (macOS/Linux/Unix)](#signal-controls-macoslinuxunix) * [使用 GRC 为日志输出着色](#coloring-log-output-with-grc) * [实用工具](#utility-tools) 6. [更新日志](#change-log) 7. [许可证](#license) ## 环境要求 * Python 3.12 或更高版本 * 库:[pulsefire](https://github.com/iann838/pulsefire)、`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 lol_monitor ``` ### 手动安装 将 *[lol_monitor.py](https://raw.githubusercontent.com/misiektoja/lol_monitor/refs/heads/main/lol_monitor.py)* 文件下载到所需位置。 通过 pip 安装依赖项: ``` pip install pulsefire requests python-dateutil python-dotenv ``` 或者,从下载的 *[requirements.txt](https://raw.githubusercontent.com/misiektoja/lol_monitor/refs/heads/main/requirements.txt)* 安装: ``` pip install -r requirements.txt ``` ### 升级 如果通过 PyPI 安装,可升级至最新版本: ``` pip install lol_monitor -U ``` 如果是手动安装的,请下载最新的 *[lol_monitor.py](https://raw.githubusercontent.com/misiektoja/lol_monitor/refs/heads/main/lol_monitor.py)* 文件替换现有的安装。 ## 快速开始 - 获取您的 [Riot API 密钥](#riot-api-key),并追踪所选 `region` 下 `riot_id_name#tag` 的游戏活动: ``` lol_monitor -r "your_riot_api_key" ``` 或者,如果您是[手动安装](#manual-installation): ``` python3 lol_monitor.py -r "your_riot_api_key" ``` 获取所有支持的命令行参数/标志列表: ``` lol_monitor --help ``` ## 配置 ### 配置文件 大多数设置都可以通过命令行参数进行配置。 如果您希望将其持久化存储,可以生成一个默认的配置模板并将其保存到名为 `lol_monitor.conf` 的文件中: ``` lol_monitor --generate-config > lol_monitor.conf ``` 编辑 `lol_monitor.conf` 文件并更改所需的配置选项(每项均有详细的注释说明)。 ### Riot API 密钥 在此处获取有效期为 24 小时的开发版 Riot API 密钥:[https://developer.riotgames.com](https://developer.riotgames.com) 建议在此处申请长期有效的个人或生产级 Riot API 密钥:[https://developer.riotgames.com/app-type](https://developer.riotgames.com/app-type) 获取批准需要几天时间。 请使用以下方法之一提供 `RIOT_API_KEY` 机密信息: - 运行时使用 `-r` / `--riot-api-key` 传入 - 设置为[环境变量](#storing-secrets)(例如 `export RIOT_API_KEY=...`) - 添加到 [.env 文件](#storing-secrets)(`RIOT_API_KEY=...`)以便持久化使用 备用方案: - 在代码或配置文件中硬编码 如果您将 `RIOT_API_KEY` 存储在 dotenv 文件中,您可以更新其值并向进程发送 `SIGHUP` 信号以重新加载包含新 API 密钥的文件,而无需重启工具。更多信息请参阅[存储机密信息](#storing-secrets)和[信号控制 (macOS/Linux/Unix)](#signal-controls-macoslinuxunix)。 ### SMTP 设置 如果您想使用邮件通知功能,请在 `lol_monitor.conf` 文件中配置 SMTP 设置。 使用 `--send-test-email` 标志验证您的 SMTP 设置(该工具将尝试发送一封测试邮件通知): ``` lol_monitor --send-test-email ``` ### 存储机密信息 建议将 `RIOT_API_KEY` 或 `SMTP_PASSWORD` 等机密信息存储为环境变量或保存在 dotenv 文件中。 在 **Linux/Unix/macOS/WSL** 系统上使用 `export` 设置环境变量: ``` export RIOT_API_KEY="your_riot_api_key" export SMTP_PASSWORD="your_smtp_password" ``` 在 **Windows 命令提示符** 上使用 `set` 代替 `export`,在 **Windows PowerShell** 上使用 `$env`。 或者将它们持久化存储在 dotenv 文件中(推荐): ``` RIOT_API_KEY="your_riot_api_key" SMTP_PASSWORD="your_smtp_password" ``` 默认情况下,该工具会自动在当前目录及其上级目录中查找名为 `.env` 的 dotenv 文件。 您可以使用 `DOTENV_FILE` 或 `--env-file` 标志指定自定义文件: ``` lol_monitor --env-file /path/.env-lol_monitor ``` 您也可以使用 `DOTENV_FILE = "none"` 或 `--env-file none` 禁用 `.env` 自动搜索: ``` lol_monitor --env-file none ``` 作为备选方案,您也可以将机密信息存储在配置文件或源代码中。 ## 使用方法 ### 监控模式 要监控特定用户的活动,只需将玩家的 LoL Riot ID 和大区作为命令行参数输入(例如下方示例中的 `riot_id_name#tag` 和 `region`): ``` lol_monitor ``` 如果您尚未设置 `RIOT_API_KEY` 机密信息,可以使用 `-r` 标志: ``` lol_monitor -r "your_riot_api_key" ``` LoL Riot ID 由 Riot ID 游戏名(例如上方示例中的 `riot_id_name`)和标签线(`#tag`)组成。 对于 `region`,您需要使用其缩写形式。您可以在下方找到列表: | 大区缩写 | 描述 | | ----------- | ----------- | | eun1 | 欧洲北欧与东欧 (EUNE) | | euw1 | 欧洲西部 (EUW) | | tr1 | 土耳其 (TR1) | | ru | 俄罗斯 | | na1 | 北美 (NA) - 目前唯一的 NA endpoint | | br1 | 巴西 (BR) | | la1 | 拉丁美洲北部 (LAN) | | la2 | 拉丁美洲南部 (LAS) | | jp1 | 日本 (JP) | | kr | 韩国 (KR) | | sg2 | 东南亚 (SEA) - 新加坡、马来西亚、印度尼西亚(+ 自 2025 年 1 月 9 日起包括泰国和菲律宾) | | tw2 | 台湾、香港和澳门 (TW/HK/MO) | | vn2 | 越南 (VN) | | oc1 | 大洋洲 (OC) | 默认情况下,该工具会依次在以下位置查找名为 `lol_monitor.conf` 的配置文件: - 当前目录 - 主目录 (`~`) - 脚本所在目录 如果您按照[配置](#configuration)生成了配置文件,但将其以其他名称保存或保存在其他目录中,您可以使用 `--config-file` 标志指定其位置: ``` lol_monitor --config-file /path/lol_monitor_new.conf ``` 该工具会一直运行直到被中断(`Ctrl+C`)。使用 `tmux` 或 `screen` 可以保持其持久运行。 您可以通过运行多个脚本实例来监控多名 LoL 玩家。 该工具会自动将其输出保存到 `lol_monitor_.log` 文件中。可以通过设置中的 `LOL_LOGFILE` 配置选项进行更改,或者通过 `DISABLE_LOGGING` / `-d` 标志完全禁用。 ### 列出模式 该工具还有另一种模式,可以打印和/或保存用户的近期比赛(`-l` 标志)。您还可以添加 `-n` 来定义要显示/保存的近期比赛数量;默认情况下,它会显示最近的 2 场比赛: ``` lol_monitor -l -n 25 ``` 您还可以通过指定要显示的起始比赛记录(`-m` 标志)来定义要显示/保存的比赛范围。例如,要显示范围在 20-50 内的近期比赛: ``` lol_monitor -l -m 20 -n 50 ``` 如果您指定 `-b` 标志(带 CSV 文件名)以及 `-l` 标志,它不仅会显示近期比赛,还会将其保存到指定的 CSV 文件中。例如,要显示并保存该用户范围在 5-10 内的近期比赛: ``` lol_monitor -l -m 5 -n 10 -b lol_games_riot_id_name.csv ``` ### 邮件通知 要在用户游玩状态发生变化时启用邮件通知: - 将 `STATUS_NOTIFICATION` 设置为 `True` - 或使用 `-s` 标志 ``` lol_monitor -s ``` 要禁用发生错误时发送邮件(默认启用): - 将 `ERROR_NOTIFICATION` 设置为 `False` - 或使用 `-e` 标志 ``` lol_monitor -e ``` 请确保您之前已经定义了 SMTP 设置(参见 [SMTP 设置](#smtp-settings))。 邮件通知同时以纯文本和 HTML 格式发送,以提高可读性。HTML 格式包含增强的排版格式,对重要信息使用粗体文本,并具有结构规范的详细比赛信息。 邮件示例:

lol_monitor_email_notifications

### CSV 导出 如果您想将报告的所有 LoL 用户活动保存到 CSV 文件中,请设置 `CSV_FILE` 或使用 `-b` 标志: ``` lol_monitor -b lol_games_riot_id_name.csv ``` 如果文件不存在,将会自动创建。 CSV 文件包含以下列: - `Match Start`、`Match Stop`、`Duration` - `Game Mode` - 游戏模式(例如 "CLASSIC"、"ARAM"、"URF") - `Victory` - 胜利或失败 - `Kills`、`Deaths`、`Assists` - `Champion` - 英雄名称 - `Level` - 达到的英雄等级 - `Role` - 玩家角色(例如 "DUO_CARRY"、"JUNGLE") - `Lane` - 游走的分路(例如 "TOP"、"MIDDLE"、"BOTTOM") - `Team 1`、`Team 2` - 队伍成员列表 如果您拥有使用旧格式的旧版本(v1.7.2 或更早版本)CSV 文件,您可以使用 [CSV 格式转换工具](#utility-tools)进行转换。 ### 检查间隔 如果您想自定义轮询间隔,请使用 `-k` 和 `-c` 标志(或相应的配置选项): ``` lol_monitor -k 60 -c 120 ``` * `LOL_ACTIVE_CHECK_INTERVAL`、`-k`:用户在游戏中时的检查间隔(秒) * `LOL_CHECK_INTERVAL`、`-c`:用户不在游戏中时的检查间隔(秒) ### 信号控制 (macOS/Linux/Unix) 该工具实现了多个信号处理程序,允许在不使用新的配置选项/标志重启工具的情况下更改其行为。 支持的信号列表: | 信号 | 描述 | | ----------- | ----------- | | USR1 | 切换用户游玩状态变化时的邮件通知 (-s) | | TRAP | 当用户在游戏中时增加玩家活动检查计时器(增加 30 秒) | | ABRT | 当用户在游戏中时减少玩家活动检查计时器(减少 30 秒) | | HUP | 从 .env 文件重新加载机密信息 | 使用 `kill` 或 `pkill` 发送信号,例如: ``` pkill -USR1 -f "lol_monitor " ``` 由于 Windows 支持的信号数量有限,此功能仅在 Linux/Unix/macOS 上可用。 ### 使用 GRC 为日志输出着色 您可以使用 [GRC](https://github.com/garabik/grc) 来为日志着色。 添加到您的 GRC 配置文件 (`~/.grc/grc.conf`) 中: ``` # 监控 log file .*_monitor_.*\.log conf.monitor_logs ``` 现在将 [conf.monitor_logs](https://raw.githubusercontent.com/misiektoja/lol_monitor/refs/heads/main/grc/conf.monitor_logs) 复制到您的 `~/.grc/` 目录中,当使用 `grc` 工具时,日志文件应该会被渲染出漂亮的颜色。 示例: ``` grc tail -F -n 100 lol_monitor_.log ``` ### 实用工具 该项目在 `tools/` 目录中包含用于处理 CSV 比赛记录文件的实用脚本: #### CSV 格式转换器 `lol_convert_csv_format.py` 脚本用于将旧格式(由 lol_monitor <=v1.7.2 使用)的 CSV 文件转换为新格式(由 >=v1.8 使用)。 **旧格式列:** `Match Start`、`Match Stop`、`Duration`、`Victory`、`Kills`、`Deaths`、`Assists`、`Champion`、`Team 1`、`Team 2` **新格式列:** `Match Start`、`Match Stop`、`Duration`、`Game Mode`、`Victory`、`Kills`、`Deaths`、`Assists`、`Champion`、`Level`、`Role`、`Lane`、`Team 1`、`Team 2` **使用方法:** ``` python3 tools/lol_convert_csv_format.py input.csv [-o output.csv] ``` 如果未指定 `-o`,输入文件将被转换后的格式覆盖。缺失的值将用 "N/A" 填充。 #### 比赛记录比对工具 `lol_compare_csvs.py` 脚本用于比对两个 League of Legends 比赛记录 CSV 文件,并判断它们是否可能属于同一名玩家。它分析多个特征,包括: - 英雄池相似度 - KDA 数据(平均值和标准差) - 胜率相似度 - 平均比赛时长 - 游戏时段规律 - 队友重合度 - 角色和分路偏好 - 平均英雄等级 - 游戏模式偏好 - 时间重叠检测 **使用方法:** ``` python3 tools/lol_compare_csvs.py file1.csv file2.csv [--limit N] [--json] [--pretty] [--no-overlap-check] [--max-overlaps N|all] ``` **选项:** - `--limit N`:限制从每个文件顶部开始分析的比赛数量 - `--json`:以 JSON 格式输出结果 - `--pretty`:格式化输出 JSON - `--no-overlap-check`:跳过时间重叠分析(速度更快,但不够全面) - `--max-overlaps N|all`:显示的最大时间重叠次数(默认:5,使用 'all' 显示全部) **要求:** `pandas`(通过 `pip install pandas` 安装) 该脚本输出相似度得分 (0-100),并附带一个判定,指示这两个 CSV 文件代表同一名玩家的可能性。使用 `--json` 进行程序化输出,或使用 `--pretty` 获取格式化的 JSON。 ## 更新日志 详情请参阅 [RELEASE_NOTES.md](https://github.com/misiektoja/lol_monitor/blob/main/RELEASE_NOTES.md)。 ## 许可证 采用 GPLv3 授权。详见 [LICENSE](https://github.com/misiektoja/lol_monitor/blob/main/LICENSE)。
标签:Python, 数据追踪, 无后门, 游戏辅助, 状态监控, 英雄联盟, 逆向工具, 邮件通知