HuoNiu QQNotif - Telegram 通知插件

付费/Paid HuoNiu QQNotif - Telegram 通知插件 1.2.6

欢迎客人!

• 开始前请阅读社区规则确保您顺利的熟悉本社区。注册用户可以提交资源,如果您有已发布资源的新版本,您可以随时更新版本!

• 文件链接损坏请在文件下方留言,我们将会及时更新来自备份服务器的新链接。如有其它问题请 提交工单 和我们联系!【加入Telegram】【QQ群:5977983】

• 我们拥有多账户检测系统,对于重复注册我们将采取严厉措施!快速获得积分

  • 🧧 领取红包积分 · Claim Red Envelope Points

更新内容:
  1. 修复 Post.php - service调用使用完整类名
  2. 修复 code_event_listeners.xml - 所有监听器hint改为完整类名格

多群发送支持

  • ✅ 支持配置多个QQ群号(每行一个)
  • ✅ 自动循环发送到所有配置的群
  • ✅ 至少一个群成功即返回成功

Telegram​

  • 多群组/频道支持
  • 测试连通性支持
  1. TestConnection.php - 修复了 JavaScript 语法错误
  2. Notifier.php - 将所有调试日志改为只在调试模式下记录,避免产生错误日志
主要修复点:

  • 测试开始/结束的日志
  • 测试结果日志
  • cURL 连接错误详情
  • API 响应详情
  • HTTP 错误详情
  • 非布尔值警告
配置文件
  • 将 qqnotif_target_group 改为多行文本框 (rows=5)
  • 支持用户输入多个群号
说明文件
  • 更新标题为"目标 QQ 群号(支持多个)"
  • 添加多行输入格式说明和示例
核心逻辑
  • 新增 parseGroupIds() 方法:解析多行群号配置
  • 新增 sendToMultipleGroups() 方法:循环发送到所有群
  • 更新 sendNotification() 调用多群发送
  • 更新 sendTestMessage() 支持多群测试
  • 添加多群发送结果统计和日志
测试界面
  • 更新提示文字说明支持多群
  • 测试结果显示所有群号信息
修复后的通知逻辑:
  • 首次发布资源 → 仅 Resource.php 发送"新资源"通知
  • 后续更新资源 → 仅 ResourceUpdate.php 发送"资源更新"通知
  • 不再重复
登陆服务器 网站后台可删除多余文件 :src/addons/HuoNiu/QQNotif/Listener/ResourceVersion.php 此文件不在使用。

1. 新增功能​

简介字数控制
  • 新增后台选项"简介字数限制",可自定义通知消息中内容摘要的最大字符数
  • 支持范围:50-1000 字符,默认 200 字符
  • 统一控制所有通知类型:
    • 新主题通知的内容简介
    • 新回复通知的回复内容
    • 资源发布通知的资源简介
    • 资源更新通知的更新内容

2. Bug 修复​

修复成功消息误报错误
  • 修复了消息发送成功后仍然记录到错误日志的问题
  • 成功消息现在只记录到数据库通知日志,不再触发系统错误提示
  • 改善了后台错误日志的清洁度

3. 文件变更​

修改的文件:
  • options.xml - 添加简介字数配置项
  • phrases.xml - 添加相关语言短语
  • Notifier.php - 修改字数控制逻辑和日志记录方式

4. 使用说明​

管理员可在后台 选项 → HuoNiu QQ Notif → 简介字数限制 中调整字数设置,修改后立即生效,无需重新安装或重建缓存。
本次修复了测试按钮缓存问题,修改了2个文件:

1. TestConnection.php (前端JavaScript)
  • URL添加随机参数:_nocache= + 时间戳 + 随机数
  • 添加3个防缓存HTTP头:
    • Cache-Control: no-cache, no-store, must-revalidate
    • Pragma: no-cache
    • Expires: 0
2. QQNotif.php (后端控制器)
  • 在 actionTest() 方法开头添加相同的3个防缓存响应头

✨ 新功能​

1. Telegram 平台支持​

  • 新增 Telegram Bot API 集成
  • 支持发送通知到 Telegram 群组/频道
  • 支持 HTML 格式消息(粗体、链接等)
  • 无需本地服务器软件,直接调用官方 API

2. 双平台独立控制​

  • 新增"启用 QQ 群通知"开关 (qqnotif_qq_enabled)
  • 新增"启用 Telegram 通知"开关 (qqnotif_telegram_enabled)
  • 可单独启用任一平台,或同时启用双平台推送
  • 删除冗余的总开关,简化配置逻辑

3. 独立测试功能​

  • QQ 测试按钮:仅发送到 QQ 群
  • Telegram 测试按钮:仅发送到 Telegram 群
  • 两个测试完全独立,互不干扰
  • 实时配置验证和错误提示

4. 配置选项​

  • qqnotif_telegram_bot_token:Telegram Bot Token
  • qqnotif_telegram_chat_id:Telegram Chat ID
  • 完整的中文说明和获取指引

🔒 安全性修复(10项)​

1. XSS 跨站脚本防护​

  • 所有用户输入进行 HTML 转义
  • 添加 sanitizeText() 方法处理标题、用户名等
  • 添加 sanitizeSnippet() 方法处理内容摘要
  • 修复位置:formatThreadMessage(), formatPostMessage(), formatUserMessage(), formatResourceMessage()

2. CSRF 跨站请求伪造防护​

  • 批量删除日志操作添加 Token 验证
  • 清空日志操作添加 Token 验证
  • JavaScript 测试请求发送 _xfToken
  • 修复文件:QQNotif.php, TestTelegram.php

3. SQL 注入防护​

  • 搜索关键词使用参数化查询
  • 使用 escapeLike() 方法转义 LIKE 通配符
  • 修复位置:QQBot.php line 111

4. URL 验证​

  • 添加 sanitizeUrl() 方法
  • 验证 URL scheme(仅允许 http/https)
  • 验证域名与站点一致(防止开放重定向)

5. 输入长度限制​

  • 消息最大长度:4000 字符
  • 摘要最大长度:200 字符
  • 添加 truncateMessage() 方法自动截断
  • 日志字段长度限制(消息1000字符,错误500字符)

6. 敏感信息脱敏​

  • Bot Token 在日志中显示为 ***
  • API Token 在错误返回中隐藏
  • 测试响应不显示完整 Token

7. 超时优化​

  • 连接超时:5秒(原10秒)
  • 响应超时:3秒(原5秒)
  • 防止长时间阻塞

8. Bot Token 格式验证​

  • Telegram Token 正则验证:^\d+:[A-Za-z0-9_-]{35}$
  • 格式错误时提前拦截

9. Chat ID 类型验证​

  • 强制转换为整数
  • 验证负数格式(群组ID)

10. 日志记录长度限制​

  • content_id 强制转换为整数
  • message 字段截断到1000字符
  • error_message 截断到500字符

📝 用户体验优化​

1. 简化配置说明​

  • Telegram Bot Token:一句话说明创建方式
  • Telegram Chat ID:精简获取步骤
  • 删除冗余的多行说明

2. 错误提示优化​

  • 配置验证实时反馈
  • 详细的错误原因说明
  • 测试失败时显示配置状态

3. 界面优化​

  • 平台开关分组显示
  • 测试按钮独立区域
  • 使用场景说明

🐛 Bug 修复​

  1. 修复 XML 格式错误(重复的 </phrase> 标签)
  2. 修复测试按钮 CSRF Token 问题
  3. 修复测试消息同时发送双平台的问题
  4. 修复消息无长度限制可能导致的 DoS 风险

⚡ 性能优化​

  • 减少超时等待时间(提升响应速度)
  • 优化 cURL 请求参数
  • 可选的日志系统(减少数据库写入)
  1. 准确性
    • ✅ 新资源通知显示正确的初始版本号
    • ✅ 更新通知显示正确的新版本号
    • ✅ 通过时间戳精确匹配,无版本号延迟问题
  2. 完整性
    • ✅ 支持资源标题、作者、分类、链接
    • ✅ 支持版本号
    • ✅ 支持资源简介(新资源)
    • ✅ 支持更新内容(资源更新)
  3. 性能
    • ✅ 清理所有调试日志
    • ✅ 异步任务队列,不阻塞用户操作
    • ✅ 高效的数据库查询
  4. 可配置
    • ✅ 支持分类筛选(只通知特定分类)
    • ✅ 支持自定义消息模板
    • ✅ 独立开关控制新资源/更新通知

1.​

  • ❌ 旧问题:使用了不存在的 $resource->current_version_string 字段
  • ✅ 已修复:改为通过 $resource->CurrentVersion->version_string 关系正确获取
  • ✅ 影响范围:
    • 新资源发布通知
    • 资源更新通知

2.​

  • 文件:Resource.php
  • 修改点1:新资源发布时的版本号获取(第67行)
    • 旧代码:'version_string' => $resource->current_version_string ?? '1.0.0'
    • 新代码:'version_string' => $resource->CurrentVersion ? $resource->CurrentVersion->version_string : '1.0.0'
  • 修改点2:资源更新时的版本号获取(第135行)
    • 旧代码:'version_string' => $resource->current_version_string ?? ''
    • 新代码:'version_string' => $resource->CurrentVersion ? $resource->CurrentVersion->version_string : ''

本次更新解决的问题​

1.​

  • ❌ 旧问题:配置为空时也显示"测试成功"
  • ✅ 已修复:增强配置验证,检查API地址格式、群号长度、必填项等
  • ✅ 已修复:前端显示详细的配置问题和当前配置状态

2.​

  • ✅ 支持任何格式的URL(域名、IP、端口)
  • ✅ 自动处理URL格式(添加http://前缀,移除末尾斜杠)
  • ✅ 验证内网穿透地址格式

3.​

  • ✅ 所有请求都记录到XenForo错误日志(不仅调试模式)
  • ✅ 记录完整的请求URL、群号、消息长度、Token状态
  • ✅ 记录HTTP状态码、响应内容、cURL错误详情
  • ✅ 记录API返回的retcode和完整响应JSON
  • ✅ 记录消息ID(发送成功时)
  • ✅ 测试时输出开始/结束标记,方便日志定位

4.​

  • ❌ 旧问题:删除日志后无限重定向循环
  • ✅ 已修复:路由配置简化,使用XenForo标准模式
  • ✅ 已修复:控制器重定向使用正确的路径格式
  • ✅ 已修复:模板链接使用标准link()函数
  • ✅ 已修复:XML格式错误(特殊字符转义)

5.​

  • ✅ 测试失败时提供常见问题检查清单
  • ✅ 前端显示详细的错误信息和配置状态
  • ✅ 创建了详细的故障排查文档
后退
顶部