这是一款将博客的新评论和新文章自动推送到QQ群的插件,采用定时任务的方法推送信息,并且有一套完整的后台和详细的推送日志,对新手友好!󠄐󠄹󠅀󠄪󠄢󠄡󠄦󠄞󠄧󠄣󠄞󠄢󠄡󠄦󠄞󠄤󠄬󠅒󠅢󠄟󠄮󠄐󠅅󠄹󠄴󠄪󠄾󠅟󠅤󠄐󠄼󠅟󠅗󠅙󠅞󠄬󠅒󠅢󠄟󠄮󠅄󠅙󠅝󠅕󠄪󠄡󠄧󠄦󠄦󠄣󠄦󠄨󠄤󠄨󠄡󠄬󠅒󠅢󠄟󠄮
功能:
- 自动推送新评论到QQ群
- 自动推送新文章到QQ群
- 消息队列管理,防止拖慢速度
- 失败重试机制
- 详细的推送日志
- 定期清理旧数据
- 支持二次开发 支持REST API
截图:



如何使用?
1.自行部署好Napcat后
在网络配置 - 新建一个HTTP服务器 - 填写好端口和Token󠄐󠄹󠅀󠄪󠄢󠄡󠄦󠄞󠄧󠄣󠄞󠄢󠄡󠄦󠄞󠄤󠄬󠅒󠅢󠄟󠄮󠄐󠅅󠄹󠄴󠄪󠄾󠅟󠅤󠄐󠄼󠅟󠅗󠅙󠅞󠄬󠅒󠅢󠄟󠄮󠅄󠅙󠅝󠅕󠄪󠄡󠄧󠄦󠄦󠄣󠄦󠄨󠄤󠄨󠄡󠄬󠅒󠅢󠄟󠄮
如果您的第一次部署Napcat 请参考 https://jyblog.cn/4342/
2.启动插件并且安装插件
3.在插件的设置中填好API地址,QQ群号和API Token(对应第一步中的HTTP服务器内的信息)󠄐󠄹󠅀󠄪󠄢󠄡󠄦󠄞󠄧󠄣󠄞󠄢󠄡󠄦󠄞󠄤󠄬󠅒󠅢󠄟󠄮󠄐󠅅󠄹󠄴󠄪󠄾󠅟󠅤󠄐󠄼󠅟󠅗󠅙󠅞󠄬󠅒󠅢󠄟󠄮󠅄󠅙󠅝󠅕󠄪󠄡󠄧󠄦󠄦󠄣󠄦󠄨󠄤󠄨󠄡󠄬󠅒󠅢󠄟󠄮
4.在插件 /qq-push-system/includes/Sender.php 中修改好模板
5.启动Cron:将设置 - 工具 内的Cron命令添加到服务器中󠄐󠄹󠅀󠄪󠄢󠄡󠄦󠄞󠄧󠄣󠄞󠄢󠄡󠄦󠄞󠄤󠄬󠅒󠅢󠄟󠄮󠄐󠅅󠄹󠄴󠄪󠄾󠅟󠅤󠄐󠄼󠅟󠅗󠅙󠅞󠄬󠅒󠅢󠄟󠄮󠅄󠅙󠅝󠅕󠄪󠄡󠄧󠄦󠄦󠄣󠄦󠄨󠄤󠄨󠄡󠄬󠅒󠅢󠄟󠄮
若是宝塔面板,复制php后面的内容(包含php)到计划任务后定期执行即可。󠄐󠄹󠅀󠄪󠄢󠄡󠄦󠄞󠄧󠄣󠄞󠄢󠄡󠄦󠄞󠄤󠄬󠅒󠅢󠄟󠄮󠄐󠅅󠄹󠄴󠄪󠄾󠅟󠅤󠄐󠄼󠅟󠅗󠅙󠅞󠄬󠅒󠅢󠄟󠄮󠅄󠅙󠅝󠅕󠄪󠄡󠄧󠄦󠄦󠄣󠄦󠄨󠄤󠄨󠄡󠄬󠅒󠅢󠄟󠄮
特殊情况:
我们考虑到一下特殊情况:
如果数据库创建不成功,出现WordPress 数据库错误,请考虑手动创建数据库󠄐󠄹󠅀󠄪󠄢󠄡󠄦󠄞󠄧󠄣󠄞󠄢󠄡󠄦󠄞󠄤󠄬󠅒󠅢󠄟󠄮󠄐󠅅󠄹󠄴󠄪󠄾󠅟󠅤󠄐󠄼󠅟󠅗󠅙󠅞󠄬󠅒󠅢󠄟󠄮󠅄󠅙󠅝󠅕󠄪󠄡󠄧󠄦󠄦󠄣󠄦󠄨󠄤󠄨󠄡󠄬󠅒󠅢󠄟󠄮
CREATE TABLE IF NOT EXISTS `wp_qq_push_queue` (
`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`type` varchar(50) NOT NULL COMMENT '消息类型: comment, post, custom',
`object_id` bigint(20) DEFAULT NULL COMMENT '关联对象ID',
`message_data` longtext NOT NULL COMMENT '消息数据(JSON)',
`status` varchar(20) NOT NULL DEFAULT 'pending' COMMENT '状态: pending, processing, success, failed',
`retry_count` tinyint(3) UNSIGNED NOT NULL DEFAULT '0',
`max_retries` tinyint(3) UNSIGNED NOT NULL DEFAULT '3',
`priority` tinyint(3) NOT NULL DEFAULT '5' COMMENT '优先级: 1-10, 1最高',
`scheduled_at` datetime DEFAULT NULL COMMENT '计划执行时间',
`processed_at` datetime DEFAULT NULL,
`created_at` datetime NOT NULL,
`updated_at` datetime NOT NULL,
`error_message` text,
PRIMARY KEY (`id`),
KEY `status_scheduled` (`status`, `scheduled_at`),
KEY `type_object` (`type`, `object_id`),
KEY `priority` (`priority`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
下载地址:
此处内容需要 评论文章 后刷新网页查看!
开发过程难点:
使用面向对象编程:
因为我之前都是面对结果编程,导致很多函数无法复用而冗余,这次在插件设计阶段我就做好了文件划分,并且大量进行封装
如:
class QQ_Push_Queue {󠄐󠄹󠅀󠄪󠄢󠄡󠄦󠄞󠄧󠄣󠄞󠄢󠄡󠄦󠄞󠄤󠄬󠅒󠅢󠄟󠄮󠄐󠅅󠄹󠄴󠄪󠄾󠅟󠅤󠄐󠄼󠅟󠅗󠅙󠅞󠄬󠅒󠅢󠄟󠄮󠅄󠅙󠅝󠅕󠄪󠄡󠄧󠄦󠄦󠄣󠄦󠄨󠄤󠄨󠄡󠄬󠅒󠅢󠄟󠄮
private $table_name;
public function __construct() {
global $wpdb;
$this->table_name = $wpdb->prefix . 'qq_push_queue';
$this->options = get_option('qq_push_settings', []);
}
/**
* 添加消息到队列
*/
public function add($type, $data, $options = array()) {
global $wpdb;
$defaults = array(
'object_id' => 0,
'priority' => 5,
'max_retries' => 3,
'delay' => 0, // 延迟秒数
);
这种编程方式虽然在开始很吃劲,但是后期代码复用的时候大大减少了我的开发时间。
队列系统的设计
由于我此前没有接触过任何涉及队列系统的项目,在开发这个插件之初我是丈二和尚摸不着头脑,还好有DeepSeek可以问。
大概思路就是有四种状态:
- pending:等待处理
- processing:正在处理
- success:处理成功
- failed:处理失败
在每次发送请求的时候先把请求放到pending的状态,当queue队列开始执行的时候,优先处理priority优先级最高的,然后依次往下处理,当limit=20,即处理了20条,则不再继续处理,等待下一轮。
当请求由于网络错误或其他原因失败后,状态放在failed中,如果3次都为failed则不再处理。󠄐󠄹󠅀󠄪󠄢󠄡󠄦󠄞󠄧󠄣󠄞󠄢󠄡󠄦󠄞󠄤󠄬󠅒󠅢󠄟󠄮󠄐󠅅󠄹󠄴󠄪󠄾󠅟󠅤󠄐󠄼󠅟󠅗󠅙󠅞󠄬󠅒󠅢󠄟󠄮󠅄󠅙󠅝󠅕󠄪󠄡󠄧󠄦󠄦󠄣󠄦󠄨󠄤󠄨󠄡󠄬󠅒󠅢󠄟󠄮
这样做的好处就是可以大大减少CPU和内存的占用率,相比同时处理,队列方法可控更省资源。󠄐󠄹󠅀󠄪󠄢󠄡󠄦󠄞󠄧󠄣󠄞󠄢󠄡󠄦󠄞󠄤󠄬󠅒󠅢󠄟󠄮󠄐󠅅󠄹󠄴󠄪󠄾󠅟󠅤󠄐󠄼󠅟󠅗󠅙󠅞󠄬󠅒󠅢󠄟󠄮󠅄󠅙󠅝󠅕󠄪󠄡󠄧󠄦󠄦󠄣󠄦󠄨󠄤󠄨󠄡󠄬󠅒󠅢󠄟󠄮
首次尝试WordPress自带的后台方法:
WordPress有自带的后台方法,如:
/**
* 添加管理菜单
*/
public function add_admin_menu() {
add_menu_page(
'QQ推送队列',
'QQ推送',
'manage_options',
'qq-push',
[$this->setting, 'render_admin_page'],
'dashicons-megaphone',
30
);
````
}
````
add_action('admin_menu', [$this, 'add_admin_menu']);
````
public function render_admin_page() {
//包含界面CSS和HTML和JS代码
}
这种的好处就是无需引入其他框架,加快后台访问速度。
设置界面:
使用WP自带的函数 get_option 与 remove_option
$options = get_option('qq_push_settings', []);
$options['comment_delay']
版权:
感谢使用我的插件,本插件由倦意原创,转载随意但是请著名作者,未经允许不得删除作者署名。
捐助名单
参与讨论