TouchFish
TouchFish 是一款轻量级的局域网(LAN)即时通讯工具,无需登录或添加好友即可在同一子网内创建聊天室。它支持服务端/客户端模式,适用于机房、办公室等内部网络环境。
安装
AUR
TouchFish 的 AUR 包名为 touchfishAUR,安装后位于 /usr/bin/touchfish。
注:TouchFish 跨大版本不兼容,如果你需要登录多个站点,那么滚动更新可能更新到不兼容的版本,建议手动安装
手动安装
你可以直接从 GitHub 获取源码或二进制文件:
- 源码运行(推荐服务端):安装 python包,然后克隆仓库并运行:
git clone https://github.com/2044-space-elevator/TouchFish
cd TouchFish
python chat.py
# 服务端
python client.py # 客户端
- 二进制文件:从 GitHub Releases 下载对应架构的可执行文件(Linux、Windows),解压后直接运行。
系统要求
- Linux:无特殊限制,服务端建议使用源码版本而非二进制文件。
- Windows:Windows 10 或更新版本原生支持;Windows 8.1 及更早版本可能需要额外 DLL。若提示写入失败,请以管理员身份运行。
- macOS:需要 macOS 10.8 Mountain Lion 或更高版本,并允许“任何来源”的应用运行权限。
启动
作为服务端(创建聊天室)
- 获取本机内网 IP 地址:
- Linux:执行
ip a或ifconfig,查找inet后的 IPv4 地址。
- Linux:执行
- 检查端口可用性:
- 选择一个 0~65535 的端口,执行
netstat -an | grep <端口号>或lsof -i :<端口号>,确保端口未被占用。
- 选择一个 0~65535 的端口,执行
- 启动服务器:
- 运行
chat.py或二进制文件,按Enter开始配置,按以下顺序填写:- 启动模式:
Server[1] - 内网 IP 地址
- 空闲端口号
- 服务端昵称
- 最大用户数(建议 ≤128)
- 启动模式:
- 配置完成后将你的 IP 地址和端口分享给其他用户。
- 运行
- 后续启动:再次运行时按
Ctrl+C(Windows/Linux)或Ctrl+D(macOS)即可自动使用上次配置。
作为客户端(加入聊天室)
- 运行
client.py或二进制文件,按Enter开始配置。 - 选择启动模式为
Client[1],填写服务器提供的 IP、端口和你的个人昵称。 - 后续连接:再次运行时按
Ctrl+C(Windows/Linux)或Ctrl+D(macOS)即可自动连接。
使用
概述
聊天室界面分为两种模式:
- 输出模式(默认):行首没有符号,此时输入的指令将被忽略且不会显示在屏幕上。
-
输入模式:行首显示
>符号。按下Enter(或输入任意指令)即可从输入模式返回输出模式。在输入模式下,新的消息会等待退出输入模式后才显示。
用户状态共有以下 7 种:
| 状态 | 说明 |
|---|---|
| Root | 聊天室房主 |
| Admin | 聊天室管理员 |
| Online | 聊天室普通用户 |
| Pending | 等待加入审核的用户 |
| Offline | 主动离开聊天室的用户 |
| Kicked | 被踢出聊天室的用户 |
| Rejected | 连接被拒绝的用户 |
只有状态为 Root、Admin、Online 和 Pending 的用户会被计入在线用户数。状态为 Admin 或 Root 的用户有权查看别人的私聊消息和私有文件。
聊天室内可用的指令共 17 条(25 项),支持使用方括号内的缩略形式(不区分大小写)。所有 <user> 字段可以输入 UID 或用户名(优先解析为 UID,遇到冲突时采纳 UID 最小的合法解析结果)。简易命令行模式(flood)允许直接输入并发送单行消息而省略 send,但会禁用其他指令。
基本命令
以下指令所有用户均可使用:
| 缩略 | 完整格式 | 说明 |
|---|---|---|
D |
dashboard |
展示聊天室各项数据(Root 用户可以看到所有用户的 IP 地址) |
F |
distribute <filename> |
发送文件 |
Q |
evaluate <input> |
像 Python IDLE 那样计算输入数据(使用 eval(),二进制发行版 Python 版本为 3.6)。警告: 请勿注入恶意代码(如 exit()、locals() 等),后果自负。
|
E |
exit |
退出或关闭聊天室 |
L |
flood |
开启简易命令行模式(禁用其他指令,直接发送单行消息) |
H |
help |
显示帮助文本 |
S |
send |
发送多行消息 |
S |
send <message> |
发送单行消息 |
J |
shell <command> |
执行 Shell 指令 警告: 请勿执行危害本程序或设备的指令,后果自负。 |
T |
transfer <user> <filename> |
向某个用户发送私有文件 |
P |
whisper <user> |
向某个用户发送多行私聊消息 |
P |
whisper <user> <message> |
向某个用户发送单行私聊消息 |
管理员
以下指令需要管理员(Admin)或房主(Root)权限。标注 * 的指令只有 Admin 或 Root 可使用,标注 ** 的指令只有 Root 可使用。
| 缩略 | 完整格式 | 权限 | 说明 |
|---|---|---|---|
I+ |
ban ip add <ip> |
* | 封禁 IP 或 IP 段(支持 CIDR 格式如 a.b.c.d/e,前缀长度 ≥24)
|
I- |
ban ip remove <ip> |
* | 解除封禁 IP 或 IP 段 |
W+ |
ban words add <word> |
* | 屏蔽某个词语 |
W- |
ban words remove <word> |
* | 解除屏蔽某个词语 |
B |
broadcast |
* | 向全体用户广播多行消息 |
B |
broadcast <message> |
* | 向全体用户广播单行消息 |
C |
config <key> <value> |
* | 修改聊天室配置项(<key> 格式以 dashboard 输出为准,<value> 格式以修改示例为准)
|
G+ |
doorman accept <user> |
* | 通过某个用户的加入申请 |
G- |
doorman reject <user> |
* | 拒绝某个用户的加入申请 |
K |
kick <user> |
* | 踢出某个用户 • Root 可踢出 Admin 或 Online 用户 • Admin 只能踢出 Online 用户 |
A+ |
admin add <uid> |
** | 添加管理员(仅 Root) |
A- |
admin remove <uid> |
** | 移除管理员(仅 Root) |
V |
save |
** | 保存聊天室配置项信息(仅 Root) |
更多联机帮助请参见 TouchFish GitHub 仓库。
故障排除
无法连接聊天室
- 确保所有设备处于同一局域网(LAN)或可互通的子网内。
- 服务端需开放指定端口的入站连接(例如:检查防火墙规则,使用
iptables或ufw放行端口)。
客户端或服务端闪退
- 检查端口是否已被其他进程占用,改用其他空闲端口。
- 运行
python版本时,确认 Python 环境为 3.x 版本。