目前本站的评论通知使用的是泽泽社长的CommentNotifier插件实现的,为了隐藏IP选择的是阿里云邮件推送。总所周知,阿里云邮件推送是收费的,秉持能省一点是一点的原则,我们可以将发给站长的邮件全部通过WebHook推送,这样可以省大多数的邮件推送量。
以CommentNotifier插件为例,以下是简单代码:
在插件接口函数下新增Webhook异步推送接口:
Service::pluginHandle()->sendwebhook = __CLASS__ . '::sendwebhook';//异步接口
在插件配置函数下新增Webhook地址输入框:
// Webhook推送
$webhook = new Form\Element\Text('webhook', NULL, NULL, _t('Webhook推送地址'), _t('请填写Webhook推送地址'));
$form->addInput($webhook);
在refinishComment
函数下新增Webhook推送步骤:
$webhook = $plugin->webhook;
//Webhook推送
if (!empty($webhook)){
if($plugin->yibu==1){
Helper::requestService('sendwebhook', $comment->coid);
}else{
self::sendwebhook($comment->coid);
}
}
新增sendwebhook
函数:
public static function sendwebhook(int $commentId){
// 获取系统配置选项
$options = Options::alloc();
$plugin = $options->plugin('CommentNotifier');
// 消除下方注释后这里会睡眠10秒,可测试异步提交是否真正提速了
//sleep(10);
$webhook = $plugin->webhook;
$comment = Helper::widgetById('comments', $commentId);
$post = Helper::widgetById('contents', $comment->cid);
$posttitle = $post->title;
$commentauthor = $comment->author;
$commenttext = $comment->text;
$commentcreated = date('Y-m-d H:i:s', $comment->created);
$message = '**评论通知**\n>主题:' . $posttitle . '\n>时间:' . $commentcreated . '\n><font color=\"red\">' . $commentauthor . '</font>说:<font color=\"red\">' . $commenttext . '</font>';
$postdata = '{"msgtype":"markdown","markdown":{"content":"' . $message . '"}';
$opts = [
'http' => [
'method' => 'POST',
'header' => 'Content-type: application/json',
'content' => $postdata
],
];
$context = stream_context_create($opts);
$result = file_get_contents($webhook, false, $context);
}
保存后启用插件,输入邮箱配置+Webhook地址大功告成了!
下面是推送效果:
看着挺不错哦
@一只小白菜
搞这个就花了我一个下午的时间,怕之后换主题了就不知道怎么搞了,所以记录了一下🤣