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
添加话题