# i3chatx **Repository Path**: chat-client/i3chatx ## Basic Information - **Project Name**: i3chatx - **Description**: i3chatx is a cross-platform, terminal-based IRC client. - **Primary Language**: Go - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-19 - **Last Updated**: 2026-04-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # IRC Client 一个用 Go 语言实现的功能完整的 IRC 客户端。 ## 功能特性 - ✅ **漂亮的 TUI 界面**(分屏显示) - 聊天窗口 - 系统日志窗口 - 频道列表(支持键盘导航) - 用户列表(支持键盘导航) - 实时状态栏 - ✅ **Tab 键导航** ⭐ 新功能 - 使用 Tab 键在输入框、频道列表、用户列表之间切换 - 在频道列表中选择并切换频道 - 在用户列表中选择用户并开始私聊 - ✅ **未读消息管理** ⭐ 最新功能 - 单一聊天窗口,只显示当前选中频道的消息 - 未读消息计数徽章,一目了然 - 使用 ↑/↓ 键快速切换频道 - Ctrl+N/P 智能跳转到有未读消息的频道 - 自动保存所有频道的消息到对应缓冲区 - ✅ **自定义背景色** ⭐ 功能 - 为不同窗口设置独立的背景色 - 10种预设深色主题可选 - Ctrl+O 快速打开设置窗口 - 帮助区分重要频道和私聊 - ✅ **缓冲行数设置** ⭐ 功能 - 灵活调整聊天窗口的消息缓冲数量 - 6个预设选项:50/100/200/500/1000/2000 行 - 默认 100 行,平衡内存和性能 - 通过设置窗口快速调整 - ✅ **多服务器支持** ⭐ 最新功能 - 同时连接多个 IRC 服务器 - `/server ` 快速连接新服务器 - 频道列表按服务器分组显示 - 智能消息路由到对应服务器 - ✅ 连接到 IRC 服务器(支持 TLS/SSL) - ✅ 用户认证(NICK、USER、PASS) - ✅ 加入和离开频道 - ✅ 发送和接收消息 - ✅ 私信支持 - ✅ 自动处理 PING/PONG - ✅ 昵称冲突处理 - ✅ 自动重连机制 - ✅ 交互式命令行界面(支持 TUI 和简单模式) - ✅ 原始 IRC 命令支持 - ✅ 彩色消息显示 - ✅ 键盘快捷键支持 ## 编译 ```bash cd 3chatx go build -o 3chatx ``` ## 使用方法 ### 基本用法 **TUI 模式(默认,推荐)**: ```bash ./3chatx -server irc.freenode.net:6667 -nick MyNick -channel "#mychannel" ``` **简单终端模式**: ```bash ./3chatx -no-ui -server irc.freenode.net:6667 -nick MyNick -channel "#mychannel" ``` ### 命令行参数 - `-server`: IRC 服务器地址 (默认: irc.freenode.net:6667) - `-nick`: 昵称 (默认: 3chatx-client) - `-user`: 用户名 (默认: goirc) - `-realname`: 真实姓名 (默认: Go IRC Client) - `-channel`: 要加入的频道 (默认: #test) - `-password`: 服务器密码(可选) - `-tls`: 使用 TLS 连接 (默认: false) - `-no-ui`: 禁用 TUI 模式,使用简单终端模式 (默认: false) ### 示例 #### 连接到 Libera.Chat ```bash ./3chatx -server irc.libera.chat:6667 -nick MyBot -channel "#golang" ``` #### 使用 TLS 连接 ```bash ./3chatx -server irc.libera.chat:6697 -nick MyBot -channel "#golang" -tls ``` #### 使用密码连接 ```bash ./3chatx -server irc.example.com:6667 -nick MyBot -password "mypassword" -channel "#private" ``` ## 界面模式 ### TUI 模式(默认) 提供漂亮的分屏界面,包含: - **聊天窗口**: 显示当前选中频道的消息(带颜色) - 每个频道独立的消息缓冲区 - 清晰专注的单一窗口显示 - **频道列表**: 显示已加入的频道(支持键盘导航) - 显示未读消息计数徽章 - 快捷键快速切换 - **用户列表**: 显示当前频道用户(支持键盘导航) - **系统日志**: 显示 IRC 协议消息 - **状态栏**: 显示连接信息、未读总数和当前焦点 详细使用说明请查看: - [UNREAD_MESSAGES_GUIDE.md](doc/zh/UNREAD_MESSAGES_GUIDE.md) - 未读消息管理 - [FEATURE_MULTI_SERVER.md](doc/zh/FEATURE_MULTI_SERVER.md) - 多服务器支持功能(最新) - [BACKGROUND_COLOR_FEATURE.md](doc/zh/BACKGROUND_COLOR_FEATURE.md) - 背景色设置功能 - [FEATURE_BUFFER_SIZE.md](doc/zh/FEATURE_BUFFER_SIZE.md) - 缓冲行数设置功能 - [TAB_NAVIGATION.md](doc/zh/TAB_NAVIGATION.md) - Tab 键导航功能 - [DESIGN_IMPROVEMENT_V2.md](doc/zh/DESIGN_IMPROVEMENT_V2.md) - 设计方案说明 ### 简单终端模式 使用 `-no-ui` 参数启用传统命令行界面。 ## 交互式命令 连接成功后,您可以使用以下命令: ### 频道管理 - `/join #channel` - 加入频道 - `/part [#channel]` - 离开频道 - `/switch #channel` - 切换到指定频道(简写: `/sw`) - `/list` - 显示所有已加入的频道 - `/names` - 显示当前频道用户列表 ### 私聊命令 - `/msg user [text]` - 打开私聊窗口并发送消息 - `/query user` - 打开私聊窗口(不发消息) - `/close` - 关闭当前窗口(频道或私聊) ### 用户命令 - `/nick nickname` - 更改昵称 - `/whois user` - 查看用户信息 ### 系统命令 - `/server ` - 连接到新的 IRC 服务器 ⭐ 新功能 - `/clear` - 清空当前频道聊天记录 - `/help` - 显示帮助 - `/quit` - 退出客户端 - `/raw command` - 发送原始 IRC 命令 - 直接输入文本 - 发送消息到当前频道 ## 快捷键(TUI 模式) ### 快速导航 ⭐ 新功能 - `↑/↓` - 快速切换频道(输入框为空时) - `Ctrl+N` - 跳转到下一个有未读消息的频道 - `Ctrl+P` - 跳转到上一个有未读消息的频道 - `Ctrl+O` - 打开设置窗口(背景色/缓冲行数)⭐ 最新 ### Tab 键导航 - `Tab` - 在输入框/频道列表/用户列表之间循环切换焦点 - `ESC` - 从任何位置返回输入框 - `Enter` - 在频道列表中选择频道,在用户列表中开始私聊 详细功能说明请查看: - [UNREAD_MESSAGES_GUIDE.md](UNREAD_MESSAGES_GUIDE.md) - 未读消息管理 - [FEATURE_MULTI_SERVER.md](FEATURE_MULTI_SERVER.md) - 多服务器支持功能(最新) - [BACKGROUND_COLOR_FEATURE.md](BACKGROUND_COLOR_FEATURE.md) - 背景色设置功能 - [FEATURE_BUFFER_SIZE.md](FEATURE_BUFFER_SIZE.md) - 缓冲行数设置功能 - [TAB_NAVIGATION.md](TAB_NAVIGATION.md) - Tab 键导航 ### 基本操作 - `Ctrl+C` - 退出程序 - `Ctrl+L` - 清空当前频道聊天记录 - `PgUp` - 滚动到顶部 - `PgDn` - 滚动到底部 ### 频道切换 - `Ctrl+N` - 切换到下一个频道 - `Ctrl+P` - 切换到上一个频道 - `Alt+1` ~ `Alt+9` - 快速切换到第 1~9 个频道 ### 命令示例 ``` /join #golang Hello everyone! /msg alice Hi there! /raw WHOIS bob /quit ``` ## 架构说明 ### 主要组件 1. **main.go** - 程序入口,处理命令行参数和信号 2. **client.go** - IRC 客户端核心实现 ### 核心功能 #### 连接管理 - 支持普通 TCP 和 TLS 连接 - 自动重连机制(5秒间隔) - 优雅的断开连接处理 #### 消息处理 - 异步消息接收和处理 - PING/PONG 自动响应(60秒间隔) - 多种 IRC 命令支持 #### 用户交互 - 交互式命令行界面 - 实时消息显示 - 命令历史支持(通过终端) ## IRC 协议支持 ### 已实现的命令 - `PASS` - 服务器密码认证 - `NICK` - 设置昵称 - `USER` - 用户注册 - `JOIN` - 加入频道 - `PRIVMSG` - 发送消息 - `PING/PONG` - 保持连接 - `QUIT` - 断开连接 ### 已处理的服务器响应 - `001` - Welcome message(欢迎消息) - `433` - Nickname already in use(昵称已被使用) - `JOIN` - 频道加入确认 - `PRIVMSG` - 接收消息 - `NOTICE` - 接收通知 - `ERROR` - 错误消息 ## 常见 IRC 服务器 ### Libera.Chat ```bash ./3chatx -server irc.libera.chat:6667 -nick YourNick -channel "#channel" # TLS: ./3chatx -server irc.libera.chat:6697 -nick YourNick -channel "#channel" -tls ``` ### OFTC ```bash ./3chatx -server irc.oftc.net:6667 -nick YourNick -channel "#channel" # TLS: ./3chatx -server irc.oftc.net:6697 -nick YourNick -channel "#channel" -tls ``` ### EFnet ```bash ./3chatx -server irc.efnet.org:6667 -nick YourNick -channel "#channel" ``` ## 开发说明 ### 项目结构 ``` 3chatx/ ├── main.go # 程序入口 ├── client.go # IRC 客户端实现 ├── go.mod # Go 模块定义 └── README.md # 文档 ``` ### 扩展功能建议 可以添加的功能: - [ ] 配置文件支持 - [ ] 日志记录到文件 - [ ] 多频道支持 - [ ] DCC 文件传输 - [ ] SASL 认证 - [ ] 颜色支持(ANSI colors) - [ ] 消息历史记录 - [ ] 用户列表显示 - [ ] 频道主题显示 ## 故障排除 ### 连接失败 - 检查服务器地址和端口是否正确 - 确认防火墙设置 - 尝试使用或不使用 TLS ### 昵称冲突 - 客户端会自动在昵称后添加下划线 - 或者手动指定不同的昵称 ### 无法发送消息 - 确保已成功加入频道 - 检查是否被服务器禁言(muted) ## 许可证 本项目仅供学习和参考使用。 ## 参考资料 - [IRC RFC 1459](https://tools.ietf.org/html/rfc1459) - [IRC RFC 2812](https://tools.ietf.org/html/rfc2812) - [Modern IRC Client Protocol](https://modern.ircdocs.horse/)