nonebot-plugin-railwaytools 2.2.1
这是一个火车迷也许觉得很好用的铁路机器人工具箱
Requires Python: <4.0,>=3.9

<div align="center">
    <a href="https://v2.nonebot.dev/store">
        <img src="https://cdn.jsdelivr.net/gh/leaf2006/image/img/nb_plugin_railwaytools.png">
    </a>

# nonebot-plugin-railwaytools

<!-- ![GitHub Repo stars](https://img.shields.io/github/stars/leaf2006/nonebot-plugin-railwaytools) -->
![GitHub Repo stars](https://img.shields.io/github/stars/leaf2006/nonebot-plugin-railwaytools?style=flat-square)
![GitHub License](https://img.shields.io/github/license/leaf2006/nonebot-plugin-railwaytools?style=flat-square)
![GitHub last commit](https://img.shields.io/github/last-commit/leaf2006/nonebot-plugin-railwaytools?style=flat-square)
![Static Badge](https://img.shields.io/badge/Python-%3E%3D3.9-blue?style=flat-square)
![PyPI - Version](https://img.shields.io/pypi/v/nonebot-plugin-railwaytools?style=flat-square)

</div>

### 这是一个火车迷也许觉得很好用的铁路工具箱，具有多种功能。

## Required 🔨
- Python >= 3.9

- 需提前安装以下依赖库：
```sh
pip install httpx
```

## Getting Started 🚀

- 1.使用 nb-cli 安装：在 nonebot2 项目的根目录下打开命令行，输入以下指令即可安装

```sh
nb plugin install nonebot-plugin-railwaytools
```

- 2.可通过pip安装该插件

```sh
pip install nonebot-plugin-railwaytools
```

- 2.将本repo中的nonebot-plugin-railwaytools文件夹clone到机器人的src\plugins目录中，即可使用。

```sh
git clone https://github.com/leaf2006/nonebot-plugin-railwaytools.git
```

## Features ✨

#### 功能简明介绍

| 指令 | 说明 |
|:-----:|:----:|
| `/车号` [动车组车次] | 通过车次查询担当的动车组车组号（例如：`/车号` D3211）|
| `/车次` [动车组车组号] | 通过动车组车组号查询担当车次（例如：`/车次` CRH2A-2001） |
| `/查询` [列车车次] | 通过列车车次查询该车次的始发终到、担当客运段、车型信息、配属以及具体时刻表（例如：`/查询` Z225）|
| `/查询` [列车车次] - `实时` | 子命令`-实时`可以查询列车正晚点与当前已到达哪一站（例如：`/查询` Z225 -`实时` |
| `/大屏` [车站名称] | 通过车站名称查看车站大屏（例如：`/大屏` 上海）|
| `/线路` [线路名称] | 查询某条铁路基本信息（例如：`/线路` 宣杭铁路）|
| `/车站` [车站名称] | 查询某车站基本信息（例如：`/车站` 上海）|
| `/下关站` [机车车号] | 通过车号查询下关站机车户口照（例如：`/下关站` DF7C-5030）|
| `/help` | 查看帮助信息 |

#### 功能详细介绍

- 通过车次查询担当的动车组车组号：`/车号` [动车组车次] 或 `/ch` [动车组车次]（例如：/车号 D3211）
```
example：
🤵：/车号 D3211
🤖：
D3211次列车近8次担当的车组号为：
2025-11-28 12:59：CRH2A2158
2025-11-27 12:59：CRH2A2190
2025-11-26 12:59：CRH2A2158
2025-11-25 12:59：CRH2A2030
2025-11-24 12:59：CRH2B2115
2025-11-23 12:59：CRH2B2116
2025-11-22 12:59：CRH2B2115
2025-11-21 12:59：CRH2A2006
```

- 通过动车组车组号查询担当车次：`/车次` [动车组车组号] 或 `/cc` [动车组车组号]（例如：/车次 CRH2A-2001）
```
example：
🤵：/车次 CRH2A-2001
🤖：
CRH2A-2001近8次担当的车次为：
2025-11-28 20:14：D2212
2025-11-27 22:46：D3062
2025-11-27 15:05：D3060
2025-11-26 20:22：C3793
2025-11-26 13:57：D5666
2025-11-26 10:09：D5665
2025-11-25 17:29：C3896
2025-11-25 12:36：C3897
```

<!-- - 通过列车车次查询该车次的始发终到、担当客运段、车型信息以及配属，同时支持动车组与普速列车：`/查询` [列车车次] 或 `/cx` [列车车次] （例如：/查询 Z99）
```
example:
🤵：/查询 Z99
🤖：
车次：Z99（上海——广州白云) 
担当客运段：上海客运段
车型信息：25T
配属：上海机辆段
 
----------停站信息----------
1.上海：--:--到,17:19发，停车--分
2.杭州南：19:26到,19:29发，停车3分
3.金华：20:40到,20:46发，停车6分
4.广州白云：09:45到,--:--发，停车--分
------------------------------

（这一部分在注释中保留，再见！驶向记忆深处的Z99！）

``` -->
- 通过列车车次查询该车次的始发终到、担当客运段、车型信息、配属以及开行状态，同时支持动车组与普速列车：`/查询` [列车车次] 或 `/cx` [列车车次] （例如：/查询 Z225）

```
example:
🤵：/查询 Z225
🤖：
车次：Z225（北京丰台——合肥)
担当客运段：合肥客运段
车型信息：25TAC380V
配属：合肥车辆段
Z225次02月06日北京丰台方面正常开行

----------停站信息----------
1.北京丰台：--:--到,21:59开，停车--分
2.阜阳：04:44到,04:50开，停车6分
3.霍邱：05:45到,05:49开，停车4分
4.六安：06:31到,06:34开，停车3分
5.合肥：07:41到,--:--开，停车--分
------------------------------

数据来源：12306
```

该功能同时还附带一个子命令：`/查询 -实时`，可以查询列车正晚点与当前已到达哪一站
```
example:
🤵：/查询 Z225 -实时
🤖：
车次：Z225（北京丰台——合肥)
担当客运段：合肥客运段
车型信息：25TAC380V
配属：合肥车辆段
Z225次02月06日北京丰台方面正常开行

----------停站信息----------
1.北京丰台：--:--到,21:59开，停车--分，正点运行
2.阜阳：04:44到,04:50开，停车6分，预计正点
3.霍邱：05:45到,05:49开，停车4分，预计正点
4.六安：06:31到,06:34开，停车3分，预计正点
5.合肥：07:41到,--:--开，停车--分，预计正点
------------------------------

数据来源：12306
```

- 通过车站名称查看车站大屏：`/大屏` [车站名称] 或 `/dp` [车站名称] （例如：/大屏 上海）
```
example:
🤵：/大屏 上海
🤖：
【上海站】车站大屏如下：
 
------------------------------ 
【1】K738（上海——洛阳）
发车时间：12:42
候车室/检票口：10号候车室/10号候车室第2检票口,特殊通道检票口
状态：停止检票
------------------------------ 
【2】G2788（上海——深圳）
发车时间：12:50
候车室/检票口：6号候车室,7号候车室/6号候车室第2检票口,7号候车室第1检票口,特殊通道检票口
状态：正在检票
------------------------------ 
【3】G16（上海——北京南）
发车时间：12:55
候车室/检票口：5号候车室/5号候车室第1检票口,特殊通道检票口
状态：正在检票
------------------------------ 
【4】G7014（上海——南京）
发车时间：13:00
候车室/检票口：10号候车室,9号候车室/10号候车室第1检票口,9号候车室第1检票口,特殊通道检票口
状态：正点
------------------------------ 
【5】C3896（上海——连云港）
发车时间：13:01
候车室/检票口：6号候车室/6号候车室第1检票口,特殊通道检票口
状态：正点
------------------------------ 
【6】G8286（上海——宿迁）
发车时间：13:09
候车室/检票口：8号候车室/8号候车室第2检票口,特殊通道检票口
状态：正点
------------------------------ 
【7】G7248（上海——合肥南）
发车时间：13:14
候车室/检票口：7号候车室/7号候车室第2检票口,特殊通道检票口
状态：正点
------------------------------ 
【8】C3868（上海——南京）
发车时间：13:32
候车室/检票口：5号候车室/5号候车室第2检票口,特殊通道检票口
状态：正点
------------------------------ 
【9】G7772（上海——黄山北）
发车时间：13:39
候车室/检票口：8号候车室/8号候车室第1检票口,特殊通道检票口
状态：正点
------------------------------ 
【10】K1102（上海——安阳）
发车时间：13:40
候车室/检票口：6号候车室/6号候车室第2检票口,特殊通道检票口
状态：正点
------------------------------ 

仅显示该车站部分列车信息。本车站大屏来源于第三方API，及供参考，请勿用于实际乘车！

```

- 查询某条铁路基本信息：`/线路` 或 `线路信息` 或 `/xl`

```
example:
🤵：/线路 宣杭
🤖：
【宣杭线】线路信息：
线路类型：普速铁路
服务类型：客货两用
单/复线：复线铁路
设计时速：暂无数据

----------沿途车站----------
【1】宣城         0Km
【2】建国
【3】十字铺
【4】誓节渡
【5】广德         63Km
【6】泗安
【7】大云
【8】长兴南         114Km
【9】湖州西
【10】湖州         133Km
【11】妙西
【12】梅峰
【13】德清西         172Km
【14】沈家塘
【15】星桥
【16】乔司
【17】杭州         240Km
------------------------------

*本表所列起点终点为该线路里程接算站，里程为营业用运价里程，与线路实际运行长度并不相同
数据来源：cnrail.geogv.org

```

- 查询某车站基本信息：`/车站` 或 `/车站信息` 或 `/cz`

```
example:
🤵：/车站 上海
🤖：
【上海】基础信息如下：
电报码：SHH
拼音码：SHA
所属路局：中国铁路上海局
位置：上海市 静安区
本站办理客运业务
------------------------------
【沪宁城际线】
下站（南京）方向：上海西
上站：起迄站
------------------------------
【沪昆线】
下站（昆明）方向：上海西
上站：起迄站
------------------------------
【京沪线】
下站：起迄站
上站（北京）方向：上海西
------------------------------

数据来源：cnrail.geogv.org
```

- 通过车号查询下关站收录的机车户口照：`/下关站` [机车车号] 或 `/xgz` [机车车号] （例如：/下关站 DF7C-5030）
```
example:
🤵：/下关站 DF7C-5058
🤖：正在加载图片，时间可能略久...
🤖：[DF7C-5058的机车户口照]
```

- 帮助：`/帮助` 或 `/help`
```
example:
🤵：/help
🤖：
✨一个火车迷也许觉得很好用的铁路工具箱，具有多种功能✨

----------使用方法----------
① 通过车次查询担当的动车组车组号：/车号 或 /ch （例如：/车号 D3211）

② 通过动车组车组号查询担当车次：/车次 或 /cc （例如：/车次 CRH2A-2001）

③ 通过列车车次查询该车次的始发终到、担当客运段、车型信息、配属以及具体时刻表，同时支持动车组与普速列车：/查询 或 /cx （例如：/查询 Z225）
【子命令】 -实时：查询列车正晚点与当前已到达哪一站（例如：/查询 Z225 -实时）

④ 通过车站名称查看车站大屏：/大屏 或 /dp （例如：/大屏 上海）

⑤ 查询某条铁路基本信息：/线路 或 /xl （例如：/线路 宣杭铁路）

⑥ 查询某车站基本信息：/车站 或 /cz （例如：/车站 上海）

⑦ 通过车号查询下关站机车户口照：/下关站 或 /xgz （例如：/下关站 DF7C-5030）

⑧ 帮助：/帮助 或 /help

更多功能正在开发中，尽情期待！
------------------------------

Powered by Nonebot2
Copyright © Leaf developer 2023-2026
```

## Features(Testing)🚨
 
**这里的功能不稳定，可能都没法正常用**

- 查询rail.re动车组交路表（几行代码实现的很简单的功能）：`/交路表` [动车组车次] 或 `/jlb` [动车组车次]


## Alert ⚠️
- 由于下关站的性能较差，在查询机车户口照时，返回的图片可能会加载较慢。

- 在许多功能上如用户的输入内容非法，错误值仅停留在后台而无法通过机器人输出给用户。这是目前已知问题，正在计划修复（实际是本人比较懒）

## TODO 🔜

- 当前`/线路`功能存在某线路沿途车站过多而触发`IndexError: list index out of range`的Bug，正在努力修复
- ~~修复`/大屏`功能~~**（已修复）**
- ~~计划加入生成模拟列车检票大屏的图片的功能，类似CRsim的这种~~ **（这个我计划另写一个插件）**
- ~~计划加入12306车站大屏功能~~ **（已实现）**
- ~~正在计划加入12306查询列车始发终到、中途停站的功能~~ **（已实现）**
- ~~优化列车时刻表的显示，比如说始发站不要显示到站时间，很怪异。目前可以看作是一个已知的bug~~**（已实现）**
- 如用户的输入内容非法，错误值仅停留在后台而无法通过机器人输出给用户
- 由于下关站的性能问题导致的加载图片较慢，可以通过切换为小图模式解决。但是小图比较模糊，只能说在加载速度快和图片质量高这两者之间只能二选一。本人意向添加切换大/小图的设置选项，但是目前还未开发
- 更多功能正在思考/开发中

## 数据来源 
- 动车组交路数据来源于：https://rail.re
- 机车户口照图片来源于下关站：http://www.xiaguanzhan.com/
- 列车查询数据来源于12306
- 车站大屏数据来源于第三方API
- 车站、线路基本信息来源于：http://cnrail.geogv.org/zhcn/

特此注明，并表达敬意


<div align="center">

Copyright © Leaf developer 2023-2026，遵循MIT开源协议

</div>