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 版本。