![PF-player_ip_logger](https://socialify.git.ci/LoosePrince/PF-player_ip_logger/image?description=1&font=Inter&language=1&name=1&pattern=Floating%20Cogs&theme=Light) # Player IP Logger for MCDReforged [![仓库大小](https://img.shields.io/github/repo-size/LoosePrince/PF-player_ip_logger?style=flat-square&label=仓库占用)](/)  [![最新版](https://img.shields.io/github/v/release/LoosePrince/PF-player_ip_logger?style=flat-square&label=最新版)](https://github.com/LoosePrince/PF-player_ip_logger/releases/latest) [![总下载量](https://img.shields.io/github/downloads/LoosePrince/PF-player_ip_logger/total?style=flat-square&label=下载量)](https://github.com/LoosePrince/PF-player_ip_logger/releases) [![最新发布下载量](https://img.shields.io/github/downloads/LoosePrince/PF-player_ip_logger/latest/total?style=flat-square&label=最新版本下载量)](https://github.com/LoosePrince/PF-player_ip_logger/releases/latest) #### 插件简介 **Player IP Logger** 是一款为 MCDReforged (MCDR) 开发的插件,主要功能是记录玩家的 IP 地址。该插件通过监控玩家的登录和断开连接事件,记录玩家对应的 IP 地址,并提供便捷的 API 供服务器管理员进行查询、封禁或解禁操作。 #### 功能 - **自动记录玩家 IP**: 插件会自动监控玩家的登录和断线信息,捕获并保存 IP 地址。 - **封禁与解禁功能**: 支持通过命令封禁或解禁玩家或 IP 地址,适用于服务器管理。 - **多格式支持**: 支持多种日志格式解析,确保不同场景下都能正确提取玩家的 IP 地址。 - **IP 地址存储**: 将玩家所有历史 IP 地址保存到配置文件中,避免重复记录。 - **支持 API 调用**: 提供了多种 API,方便插件调用,或让管理员查询玩家的 IP 信息。 - **假人判断**: 假人一般没有IP,通过这个特性可以判断出假人,多用于玩家列表筛选。 #### 安装与配置 1. **安装**: 将插件文件放入 MCDReforged 的 `plugins` 目录中,启动服务器。 2. **配置**: 插件会自动生成一个 `config.json` 配置文件,存储玩家和 IP 记录。文件格式如下: ```json { "users": { "玩家名称": [ "玩家的IP1", "玩家的IP2" ] }, "banned_player": [], "banned_ips": [] } ``` #### 命令 - **!!ip ban ``**: 封禁指定玩家或 IP。 - **!!ip pardon ``**: 解禁指定玩家或 IP。 - **!!ip list**: 显示当前封禁的玩家和 IP。 #### 事件处理 - 当玩家登录或断开连接时,插件会自动解析相关日志信息,并提取玩家名称和 IP 地址。 - 如果玩家的 IP 地址尚未记录,将其添加到配置文件中,并自动保存。 #### 支持的事件格式 该插件支持以下日志格式的解析: - `玩家名[/IP地址:端口] logged in with entity id` - `Disconnecting 玩家名 (/IP地址:端口)` - `玩家名 (/IP地址:端口) lost connection` 更多事件请反馈以增加 #### 使用 插件会自动运行并自动监听玩家的登录与断开事件,并记录 IP 地址,不需要任何配置。管理员可以快速对玩家或 IP 进行封禁或解禁操作,或者查看封禁列表。 --- ### API 开发 1. **is_player(name: str) -> bool** - **描述**: 检查是否是真实玩家(多用于假人判断) - **参数**: - `name`:玩家名称。 - **返回**: 如果玩家存在记录返回 `True`,否则返回 `False`。 **示例**: ```python if is_player("Shusao"): print("Shusao 是 真人玩家") else: print("Shusao 是 假人") ``` 2. **get_player_ips(name: str) -> list** - **描述**: 获取指定玩家的所有 IP 地址。 - **参数**: - `name`:玩家名称。 - **返回**: 包含玩家所有历史 IP 地址的列表。如果玩家没有记录,返回空列表。 **示例**: ```python ips = get_player_ips("Shusao") print(f"Shusao 的 IP 历史: {ips}") ``` 3. **get_player_names(ip: str) -> list** - **描述**: 获取使用该 IP 地址的所有玩家名称。 - **参数**: - `ip`:IP地址。 - **返回**: 包含玩家名称的列表。 4. **ban_player(name: str) -> None** - **描述**: 封禁指定玩家(支持离线玩家), 后续通过该ID登录的IP也会被封。 - **参数**: - 玩家ID。 5. **unban_player(name: str) -> None** - **描述**: 解禁指定玩家。 - **参数**: - 玩家ID。 6. **ban_ip(ip: str) -> None** - **描述**: 封禁指定IP, 后续通过该IP登录的玩家也会被封。 - **参数**: - 玩家IP。 7. **unban_ip(ip: str) -> None** - **描述**: 解禁指定IP。 - **参数**: - 玩家IP。 ### API 开发(事件) 1. **player_ip_logger.player_login** - **描述**: 玩家登录时分发 `player_ip_logger.player_login` 事件,便于其他插件上报信息 - **样例**: ```python def do_something(server: PluginServerInterface, player_name:str, player_ip:str): pass server.register_event_listener('player_ip_logger.player_login', do_something) ``` ### 使用此API的插件 - [PF-GUGUbot](https://github.com/LoosePrince/PF-GUGUBot) : MCDR-GUGUBot QQ机器人 群聊管理 聊天互转 > 用于区分真实玩家 - [IPLocation](https://github.com/Mooling0602/IPLocation-MCDR) : 在玩家上线时查询并显示IP归属地。 > 获取玩家IP - [NDP](https://github.com/No-Danger-Player-Project/NDP-MCDR) : NDP联合封禁系统客户端 > 获取玩家IP --- ### 贡献 如果发现问题,或希望贡献代码,欢迎在 GitHub 提交 Issue 或 Pull Request。 - 插件初版提供: 树梢([LoosePrince](https://github.com/LoosePrince)) - 技术支持: 雪开([XueK66](https://github.com/XueK66)) - 文档编写: 树梢([LoosePrince](https://github.com/LoosePrince))、 雪开([XueK66](https://github.com/XueK66)) --- #### 未来计划 - 暂无 欢迎提建议!