get("Notice.default");; $custom_words = explode(',', getConf('filter_words', 'notify')); $total_words = array_merge($default_words, $custom_words); foreach ($total_words as $word) { if (empty($word)) continue; if (strpos($result, $word) !== false) { return true; } } return false; } /** * @use 处理信息 * @param string $type * @param string $uname * @param string $result * @return bool */ private static function sendInfoHandle(string $type, string $uname, string $result): bool { $now_time = date('Y-m-d H:i:s'); switch ($type) { case 'update': $info = [ 'title' => '程序更新通知', 'content' => "[{$now_time}] 用户: {$uname} 程序更新通知: {$result}" ]; break; case 'anchor': $info = [ 'title' => '天选时刻获奖记录', 'content' => "[{$now_time}] 用户: {$uname} 在天选时刻中获得: {$result}" ]; break; case 'raffle': $info = [ 'title' => '实物奖励获奖纪录', 'content' => "[{$now_time}] 用户: {$uname} 在实物奖励中获得: {$result}" ]; break; case 'gift': $info = [ 'title' => '活动礼物获奖纪录', 'content' => "[{$now_time}] 用户: {$uname} 在活动礼物中获得: {$result}" ]; break; case 'storm': $info = [ 'title' => '节奏风暴获奖纪录', 'content' => "[{$now_time}] 用户: {$uname} 在节奏风暴中获得: {$result}" ]; break; case 'cookieRefresh': $info = [ 'title' => 'Cookie刷新', 'content' => "[{$now_time}] 用户: {$uname} 刷新Cookie: {$result}" ]; break; case 'todaySign': $info = [ 'title' => '每日签到', 'content' => "[{$now_time}] 用户: {$uname} 签到: {$result}" ]; break; case 'banned': $info = [ 'title' => '任务小黑屋', 'content' => "[{$now_time}] 用户: {$uname} 小黑屋: {$result}" ]; break; case 'error': $info = [ 'title' => '程序运行错误', 'content' => "[{$now_time}] 用户: {$uname} 错误详情: {$result}" ]; break; case 'key_expired': $info = [ 'title' => '监控KEY异常', 'content' => "[{$now_time}] 用户: {$uname} 监控KEY到期或者错误,请及时查错或续期后重试哦~" ]; break; case 'capsule_lottery': $info = [ 'title' => '直播扭蛋抽奖活动', 'content' => "[{$now_time}] 用户: {$uname} 详情: {$result}" ]; break; case 'activity_lottery': $info = [ 'title' => '主站九宫格抽奖活动', 'content' => "[{$now_time}] 用户: {$uname} 详情: {$result}" ]; break; default: $info = [ 'title' => '推送消息异常记录', 'content' => "[{$now_time}] 用户: {$uname} 推送消息key错误: {$type}->{$result}" ]; break; } self::sendLog($info); return true; } /** * @use 推送消息 * @param array $info */ private static function sendLog(array $info) { if (getConf('sctkey', 'notify.sct')) { self::sctSend($info); } if (getConf('sckey', 'notify.sc')) { self::scSend($info); } if (getConf('bottoken', 'notify.telegram') && getConf('chatid', 'notify.telegram')) { self::teleSend($info); } if (getConf('token', 'notify.dingtalk')) { self::dingTalkSend($info); } if (getConf('token', 'notify.pushplus')) { self::pushPlusSend($info); } if (getConf('target_qq', 'notify.gocqhttp') && getConf('token', 'notify.gocqhttp') && getConf('url', 'notify.gocqhttp')) { self::goCqhttp($info); } if (getConf('token', 'notify.debug') && getConf('url', 'notify.debug')) { self::debug($info); } } /** * @use DingTalkbot推送 * @doc https://developers.dingtalk.com/document/app/document-upgrade-notice#/serverapi2/qf2nxq * @param array $info */ private static function dingTalkSend(array $info) { Log::info('使用DingTalk机器人推送消息'); $url = 'https://oapi.dingtalk.com/robot/send?access_token=' . getConf('token', 'notify.dingtalk'); $payload = [ 'msgtype' => 'markdown', 'markdown' => [ 'title' => $info['title'], 'content' => $info['content'], ] ]; $headers = [ 'Content-Type' => 'application/json;charset=utf-8' ]; $raw = Curl::put('other', $url, $payload, $headers); $de_raw = json_decode($raw, true); if ($de_raw['errcode'] == 0) { Log::info("推送消息成功: {$de_raw['errmsg']}"); } else { Log::warning("推送消息失败: {$raw}"); } } /** * @use TeleBot推送 * @doc https://core.telegram.org/bots/api#sendmessage * @param array $info */ private static function teleSend(array $info) { Log::info('使用Tele机器人推送消息'); $url = 'https://api.telegram.org/bot' . getConf('bottoken', 'notify.telegram'); $payload = [ 'method' => 'sendMessage', 'chat_id' => getConf('chatid', 'notify.telegram'), 'text' => $info['content'] ]; $raw = Curl::post('other', $url, $payload); $de_raw = json_decode($raw, true); if (array_key_exists('message_id', $de_raw)) { Log::info("推送消息成功: {$de_raw['message_id']}"); } else { Log::info("推送消息失败: {$raw}"); } } /** * @use ServerChan推送 * @use https://sc.ftqq.com/ * @param array $info */ private static function scSend(array $info) { Log::info('使用ServerChan推送消息'); $url = 'https://sc.ftqq.com/' . getConf('sckey', 'notify.sc') . '.send'; $payload = [ 'text' => $info['title'], 'desp' => $info['content'], ]; $raw = Curl::post('other', $url, $payload); $de_raw = json_decode($raw, true); if ($de_raw['errno'] == 0) { Log::info("推送消息成功: {$de_raw['errmsg']}"); } else { Log::warning("推送消息失败: {$raw}"); } } /** * @use ServerChan(Turbo)推送 * @doc https://sct.ftqq.com/ * @param array $info */ private static function sctSend(array $info) { Log::info('使用ServerChan(Turbo)推送消息'); $url = 'https://sctapi.ftqq.com/' . getConf('sctkey', 'notify.sct') . '.send'; $payload = [ 'text' => $info['title'], 'desp' => $info['content'], ]; $raw = Curl::post('other', $url, $payload); $de_raw = json_decode($raw, true); // {'message': '[AUTH]用户不存在或者权限不足', 'code': 40001, 'info': '用户不存在或者权限不足', 'args': [None]} // {'code': 0, 'message': '', 'data': {'pushid': 'xxxx', 'readkey': 'xxxxx', 'error': 'SUCCESS', 'errno': 0}} if ($de_raw['code'] == 0) { Log::info("推送消息成功: {$de_raw['data']['pushid']}"); } else { Log::warning("推送消息失败: {$raw}"); } } /** * @use PushPlus酱推送 * @doc http://www.pushplus.plus/doc/ * @param array $info */ private static function pushPlusSend(array $info) { Log::info('使用PushPlus酱推送消息'); $url = 'http://www.pushplus.plus/send'; $payload = [ 'token' => getConf('token', 'notify.pushplus'), 'title' => $info['title'], 'content' => $info['content'] ]; $headers = [ 'Content-Type' => 'application/json' ]; $raw = Curl::put('other', $url, $payload, $headers); // {"code":200,"msg":"请求成功","data":"发送消息成功"} $de_raw = json_decode($raw, true); if ($de_raw['code'] == 200) { Log::info("推送消息成功: {$de_raw['data']}"); } else { Log::warning("推送消息失败: {$raw}"); } } /** * @use GO-CQHTTP推送 * @doc https://docs.go-cqhttp.org/api/ * @param array $info */ private static function goCqhttp(array $info) { Log::info('使用GoCqhttp推送消息'); $url = getConf('url', 'notify.gocqhttp'); $payload = [ 'access_token' => getConf('token', 'notify.gocqhttp'), 'user_id' => getConf('target_qq', 'notify.gocqhttp'), 'message' => $info['content'] ]; $raw = Curl::get('other', $url, $payload); // {"data":{"message_id":123456},"retcode":0,"status":"ok"} $de_raw = json_decode($raw, true); if ($de_raw['retcode'] == 0) { Log::info("推送消息成功: {$de_raw['status']}"); } else { Log::warning("推送消息失败: {$raw}"); } } /** * @use 个人调试使用 * @doc * @param array $info */ private static function debug(array $info) { Log::info('使用Debug推送消息'); $url = getConf('url', 'notify.debug'); $payload = [ 'receiver' => getConf('token', 'notify.debug'), 'title' => $info['title'], 'body' => $info['content'], 'url' => '', ]; $raw = Curl::post('other', $url, $payload); $de_raw = json_decode($raw, true); // {"success": true, "msg": null, "data": {"errcode": 0, "errmsg": "ok", "msgid": 1231, "token": "456"}} if ($de_raw['success'] == true) { Log::info("推送消息成功: {$de_raw['data']['msgid']}"); } else { Log::warning("推送消息失败: {$raw}"); } } }