TouchFish - Arch Linux 中文维基

跳至內容

# TouchFish

出自 Arch Linux 中文维基

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 或更高版本，並允許「任何來源」的應用運行權限。

## 啟動

### 作為服務端（創建聊天室）

1. 獲取本機內網 IP 地址：
     Linux：執行 `ip a` 或 `ifconfig`，查找 `inet` 後的 IPv4 地址。
2. 檢查埠可用性：
     選擇一個 0~65535 的埠，執行 `netstat -an | grep <埠號>` 或 `lsof -i :<埠號>`，確保埠未被占用。
3. 啟動伺服器：
     運行 `chat.py` 或二進制文件，按 `Enter` 開始配置，按以下順序填寫：
     1. 啟動模式：`Server`[1]
     2. 內網 IP 地址
     3. 空閒埠號
     4. 服務端暱稱
     5. 最大用戶數（建議 ≤128）
     配置完成後將你的 IP 地址和埠分享給其他用戶。
4. 後續啟動：再次運行時按 `Ctrl+C`（Windows/Linux）或 `Ctrl+D`（macOS）即可自動使用上次配置。

### 作為客戶端（加入聊天室）

1. 運行 `client.py` 或二進制文件，按 `Enter` 開始配置。
2. 選擇啟動模式為 `Client`[1]，填寫伺服器提供的 IP、埠和你的個人暱稱。
3. 後續連接：再次運行時按 `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 版本。

1. ↑ 1.0 1.1 此處必須開頭大寫

分類：​

- 網際網路應用
- 即時通信

TouchFish
新增話題