忙狗聊:

分支2Tags0
文件最后提交记录最后更新时间
3 个月前
3 个月前

MangoChat (MGO-Liao) 增强版

PHP Version License Storage Status

MangoChat 增强版 是在原版轻量聊天室基础上深度升级的单文件 PHP 应用。
在保留“零数据库、纯 JSON 存储”核心特性的同时,新增了私聊、在线用户列表、管理面板、CSRF 防护、长轮询、消息搜索等功能,并全面优化了兼容性与安全性。主色调延续芒果黄,界面更加精致实用。


增强版新增特性

与原版相比,增强版带来了以下重要改进:

  • 私聊系统:支持一对一私下聊天,侧边栏实时显示在线用户,点击即可发起私聊。
  • 在线用户列表:基于心跳机制,动态显示当前在线用户,30 秒无活动自动离线。
  • 管理后台:管理员可查看所有用户、删除用户、删除任意群组(大厅除外)。
  • 长轮询 (Long Polling):采用统一 poll 接口,支持长轮询模式,消息刷新更及时,减少无效请求。
  • 消息搜索:聊天窗口顶部集成搜索框,支持按消息内容或用户名实时过滤。
  • CSRF 防护:所有状态变更请求(POST)均需携带 CSRF Token,防范跨站请求伪造。
  • 更强兼容性:声明 strict_types,检查 PHP 版本 (>=7.4),优化文件锁与错误处理。
  • 消息容量提升:每个群组/私聊对话保留最近 1000 条消息(原 500 条)。
  • 用户活跃追踪:记录用户最后活跃时间,管理面板可查看。
  • 响应式优化:移动端适配更加完善,侧边栏支持滑出,布局自适应。

功能总览

  • 零数据库依赖:全部数据通过 JSON 文件持久化,开箱即用。
  • 一键安装向导:首次访问自动引导配置聊天室名称与管理员账号。
  • 多群组管理:用户可创建、切换不同公开群组,管理员可删除群组。
  • 用户系统:支持注册、登录,密码安全哈希存储。
  • 私聊功能:与在线用户实时私密对话。
  • 实时聊天:基于长轮询 / 短轮询机制,消息自动刷新,低延迟。
  • 消息管理:用户可删除自己消息,管理员可删除任意消息。
  • 在线状态:侧边栏显示在线人数及用户列表,私聊对象动态更新。
  • 管理面板:管理员可查看所有用户,删除用户,管理群组。
  • 消息搜索:输入关键词即时筛选当前聊天记录。
  • CSRF 防护:所有敏感操作均验证 Token。
  • 响应式设计:完美适配桌面端与移动端。

快速开始

环境要求

  • PHP >= 7.4
  • Web 服务器(Apache、Nginx 等)
  • 项目根目录需具有写入权限(用于自动创建 data/ 目录)

部署步骤

  1. 将增强版单 PHP 文件(如 index.php)放置于网站根目录或任意可访问目录。
  2. 通过浏览器访问该文件对应的 URL。
  3. 首次访问将进入安装界面,设定聊天室名称(默认为“忙狗聊”)、管理员用户名及密码。
  4. 点击“开始安装”,系统将生成配置文件及数据目录,同时创建大厅群组和管理员账号。
  5. 安装完成后即可登录并使用全部功能。

所有数据均存储在项目根目录下的 data/ 文件夹内,包括用户、群组、聊天记录及私聊记录。


使用说明

用户指南

  • 注册 / 登录:未登录用户可注册新账号或使用已有账号登录。
  • 群聊:左侧“群组”列表点击切换群组,在大厅或其他群组中发送消息。
  • 私聊:左侧“私聊”区域显示当前在线用户,点击用户名即可发起一对一私聊。
  • 发送消息:底部输入框键入内容,按 Enter 发送(Shift+Enter 换行)。
  • 搜索消息:顶部搜索框输入关键词,消息列表自动过滤匹配项。
  • 删除消息:悬停在自己发送的消息上,点击删除按钮可撤回;管理员可删除所有人的消息。
  • 创建群组:点击侧边栏底部的“+ 建群”按钮,输入群组名称即可创建。
  • 退出登录:侧边栏底部提供退出链接。

管理功能

  • 管理员(安装时创建的第一个账户)拥有额外权限:
    • 侧边栏出现“管理”按钮,进入管理面板。
    • 在管理面板中可查看所有注册用户,删除其他用户。
    • 可查看并删除任意非大厅群组。
    • 聊天窗口中可删除任意用户的消息。

如需添加更多管理员,可手动编辑 data/users.json,将对应对象的 is_admin 设为 true。


文件结构

project-root/
├── index.php              # 唯一入口文件(包含全部前后端逻辑)
└── data/                  # 数据目录(自动创建)
    ├── config.json        # 聊天室配置
    ├── users.json         # 用户数据(含密码哈希、活跃时间等)
    ├── groups.json        # 群组信息
    ├── messages_lobby.json # 大厅消息记录
    ├── messages_<gid>.json # 各群组消息记录
    └── pm_<uid1>_<uid2>.json # 私聊消息记录(按用户ID排序)

技术细节与自定义

  • 长轮询:前端通过 api=poll 接口实现,服务器最长保持 25 秒,有新消息立即返回,否则超时后返回空数据并指示前端重新发起。
  • CSRF 保护:每个会话生成唯一 Token,所有 POST 请求均需携带,Token 验证失败返回 403。
  • 在线判定:每次 API 请求更新 last_active 时间戳,前端每 30 秒判定离线。
  • 自定义样式:所有颜色及样式变量定义在页面内的 :root 中,可按需调整芒果黄相关色值。
  • 调整限制:
    • 消息存储上限:修改 API 中 array_slice 的保留数量(默认 1000)。
    • 长轮询等待时长:修改 poll 接口中的 $max_wait 变量(默认 25 秒)。
    • 在线超时阈值:修改 get_online_users 函数中的 $threshold 值(默认 30 秒)。
  • 图标说明:当前界面使用 Emoji 作为图标,如需替换为开源图标库(如 Font Awesome、Material Icons),可在页面中引入对应 CSS 并替换 Unicode 符号。

关于

MangoChat 增强版 由 Mango 团队开发,主要开发者:叫我弓木吉。
本项目仅供学习与交流,欢迎通过 Issue 或 Pull Request 贡献代码。


许可证

本项目基于 MIT License 开源,详情请参阅 LICENSE 文件。