no message
This commit is contained in:
parent
5f37124e8e
commit
bdc811ee06
@ -50,9 +50,23 @@ final class HookController
|
||||
|
||||
$sCmd = $this->cleanCmd($aOption[0]);
|
||||
|
||||
list($sClass, $sFunc) = explode("#", $sCmd);
|
||||
$sClass = ucfirst($sClass);
|
||||
$sFunc = ucfirst($sFunc);
|
||||
// list($sClass, $sFunc) = explode("#", $sCmd);
|
||||
// $sClass = ucfirst($sClass);
|
||||
// $sFunc = ucfirst($sFunc);
|
||||
|
||||
// 大于3个说明是hook或dove之类
|
||||
$aCmd = explode("#", $sCmd);
|
||||
if (count($aCmd) >= 3) {
|
||||
$sHook = $aCmd[0];
|
||||
// $sClass = $aCmd[1];
|
||||
// $sFunc = $aCmd[2];
|
||||
$sClass = $sHook;
|
||||
$sFunc = "go";
|
||||
// $aUpdate["subCmd"] = "/".$aCmd[1]."#".$aCmd[2];
|
||||
} else {
|
||||
$sClass = $aCmd[0];
|
||||
$sFunc = $aCmd[1];
|
||||
}
|
||||
|
||||
unset($aOption[0]);
|
||||
unset($aArg[0]);
|
||||
@ -64,11 +78,11 @@ final class HookController
|
||||
|
||||
if (method_exists($sClassPath, $sFunc)) {
|
||||
$oInstans = new $sClassPath();
|
||||
$r = $oInstans->$sFunc($aParams);
|
||||
$r = $oInstans->$sFunc($aParams, $aUpdate);
|
||||
|
||||
// 可以不返回,里面直接send
|
||||
if (isset($r)) {
|
||||
if (empty($r)) { $r = 'hook的mod返回空'; }
|
||||
// if (empty($r)) { $r = 'hook的mod返回空'; }
|
||||
// 返回可以是数组
|
||||
if (is_array($r)) {
|
||||
foreach ($r as $row) {
|
||||
|
||||
@ -13,7 +13,7 @@ class SakaiController
|
||||
{
|
||||
public function test1()
|
||||
{
|
||||
tomd(123, 1);
|
||||
// tomd(123, 1);
|
||||
|
||||
@$k = $_GET["k"];
|
||||
@$s = $_GET["s"];
|
||||
@ -27,7 +27,42 @@ class SakaiController
|
||||
//test
|
||||
// $s = "\/AticleSet__1115zz__sale_rate 1118.118";
|
||||
// $s = "\/git#LastTime 1";
|
||||
$s= "/cmd#list";
|
||||
$s = "/hook#set site:cfn";
|
||||
$s = "/dove#now";
|
||||
$s = "/dove#set vcf";
|
||||
$s = "/dove#unsetAll";
|
||||
$s = "/doveSite#del vcf";
|
||||
$s = "/doveSite#option__cfn__www 123";
|
||||
$s = "/doveSite#limit 10";
|
||||
$s = "/doveSite#like__memo c";
|
||||
$s = "/dove#tool#list";
|
||||
$s = "/dove#tool#exec html/client";
|
||||
$s = "/dove#option#list";
|
||||
$s = "/dove#option#add zzzzxxx";
|
||||
$s = "/dove#option#option__test xxx111";
|
||||
$s = "/dove#option#del test";
|
||||
$s = "/dove#option#like__key xx";
|
||||
$s = "/dove#option#like__value cc";
|
||||
$s = "/dove#option#find jichang_ww";
|
||||
$s = "/dove#option#add freenode_title";
|
||||
$s = "/dove#tool#sql";
|
||||
$s = "/dove#database#select select * from article_list limit 1";
|
||||
$s = "/dove#database#sql ALTER TABLE test ADD COLUMN age INT";
|
||||
$s = "/dove#toolOld#list";
|
||||
$s = "/dove#toolOld#exec html/article";
|
||||
$s = "/dove#test#FreenodeCrawUrl";
|
||||
$s = "/dove#tool#freenode_up";
|
||||
$s = "/dove#tool#toptag_html";
|
||||
$s = "/dove#tool#like_auto";
|
||||
$s = "/dove#tool#Article_freenode_up_limit 10 3";
|
||||
$s = "/note#add skljdfkljsdkljf";
|
||||
$s = "/note#now";
|
||||
$s = "/note#keep 2";
|
||||
$s = "/note#main";
|
||||
// $s = "/note#set__1 告诉你啊,你就是个几把";
|
||||
// $s = "/note#memo__1 股您吗的";
|
||||
// $s = "/note#icon";
|
||||
$s = "/note#add__now 脱裤子 112";
|
||||
|
||||
$oHttp = new Http();
|
||||
$oHttp->sMethod = "post";
|
||||
@ -59,7 +94,8 @@ class SakaiController
|
||||
|
||||
$r = $oHttp->send();
|
||||
|
||||
var_dump($r);
|
||||
echo "<pre>";
|
||||
echo($r);
|
||||
|
||||
exit;
|
||||
}
|
||||
|
||||
@ -1,10 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class ArticleList extends Model
|
||||
{
|
||||
protected $table = 'article_list';
|
||||
}
|
||||
11
app/Models/DoveSite.php
Executable file
11
app/Models/DoveSite.php
Executable file
@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class DoveSite extends Model
|
||||
{
|
||||
protected $table = 'dove_site';
|
||||
public $timestamps = false;
|
||||
}
|
||||
11
app/Models/Hook.php
Executable file
11
app/Models/Hook.php
Executable file
@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Hook extends Model
|
||||
{
|
||||
protected $table = 'hook';
|
||||
public $timestamps = false;
|
||||
}
|
||||
11
app/Models/Note.php
Executable file
11
app/Models/Note.php
Executable file
@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Note extends Model
|
||||
{
|
||||
protected $table = 'note';
|
||||
public $timestamps = false;
|
||||
}
|
||||
@ -1,142 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TG\Hook\Mod;
|
||||
use App\Models\Article as ModelArticle;
|
||||
|
||||
class Article extends Base {
|
||||
|
||||
public function List($aParam)
|
||||
{
|
||||
if (isset($aParam['aOption'][1])) {
|
||||
$sOrderBy = $aParam['aOption'][1];
|
||||
} else {
|
||||
$sOrderBy = "i_in10";
|
||||
}
|
||||
|
||||
$aArticleList = ModelArticle::orderBy($sOrderBy)->get()->toArray();
|
||||
|
||||
foreach ($aArticleList as &$row) { // 使用引用来修改原数组
|
||||
unset($row['updated_at']); // 移除 updated_at 字段
|
||||
unset($row['created_at']); // 移除 created_at 字段
|
||||
$this->oTGHttp->sendToTG(json_encode($row, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT));
|
||||
}
|
||||
|
||||
$this->oHttp::response(200, 'ok');
|
||||
}
|
||||
|
||||
public function Find($aParam)
|
||||
{
|
||||
$iId = $aParam['aArg'][1];
|
||||
|
||||
$aSingle = ModelArticle::find($iId)->toArray();
|
||||
|
||||
unset($aSingle['updated_at']);
|
||||
unset($aSingle['created_at']);
|
||||
|
||||
return json_encode($aSingle, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
|
||||
}
|
||||
|
||||
|
||||
public function Like($aParams)
|
||||
{
|
||||
$aArticleList = ModelArticle::where($this->cmdGood($aParams['aOption'][1]), 'like', '%' . $aParams['aArg'][1] . '%')
|
||||
->orderBy("user_name")
|
||||
->get()
|
||||
->toArray();
|
||||
|
||||
if (empty($aArticleList)) {
|
||||
$this->oTGHttp->sendToTG("没有");
|
||||
} else {
|
||||
foreach ($aArticleList as &$row) { // 使用引用来修改原数组
|
||||
unset($row['updated_at']); // 移除 updated_at 字段
|
||||
unset($row['created_at']); // 移除 created_at 字段
|
||||
$this->oTGHttp->sendToTG(json_encode($row, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT));
|
||||
}
|
||||
}
|
||||
|
||||
$this->oHttp::response(200, 'ok');
|
||||
}
|
||||
|
||||
public function Clone($aParam)
|
||||
{
|
||||
$iId = $aParam['aArg'][1];
|
||||
|
||||
// 查找文章
|
||||
$aArticle = ModelArticle::find($iId);
|
||||
|
||||
if ($aArticle) {
|
||||
// 复制文章
|
||||
$newArticle = $aArticle->replicate();
|
||||
|
||||
// 如果需要,可以修改新文章的某些字段,例如标题或状态
|
||||
// $newArticle->title = $newArticle->title . ' - Copy'; // 修改标题
|
||||
// $newArticle->status = 'draft'; // 例如,将状态设置为草稿
|
||||
|
||||
// 保存新文章
|
||||
$newArticle->save();
|
||||
|
||||
// 发送新文章的 ID 到 Telegram
|
||||
$sMsg = "新文章已创建,ID: " . $newArticle->id;
|
||||
$this->oTGHttp->sendToTG($sMsg);
|
||||
|
||||
// 返回 HTTP 响应
|
||||
$this->oHttp::response(200, 'ok');
|
||||
} else {
|
||||
throw new \Exception("没有这个id");
|
||||
}
|
||||
}
|
||||
|
||||
public function Add($aParams)
|
||||
{
|
||||
|
||||
$newArticle = new ModelArticle();
|
||||
$newArticle->user_name = $aParams['aArg'][1];
|
||||
$r = $newArticle->save();
|
||||
|
||||
$this->oTGHttp->sendToTG(json_encode($r, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT));
|
||||
|
||||
$this->oHttp::response(200, 'ok');
|
||||
|
||||
}
|
||||
|
||||
public function Del($aParams)
|
||||
{
|
||||
|
||||
$article = ModelArticle::find($aParams['aArg'][1]);
|
||||
|
||||
if ($article) {
|
||||
$r = $article->delete();
|
||||
} else {
|
||||
$r = false;
|
||||
}
|
||||
|
||||
$this->oTGHttp->sendToTG(json_encode($r, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT));
|
||||
|
||||
$this->oHttp::response(200, 'ok');
|
||||
|
||||
}
|
||||
|
||||
// /ArticleSet__id__user_name xxx
|
||||
public function Set($aParams)
|
||||
{
|
||||
$sField = $this->cmdGood($aParams['aOption'][2]);
|
||||
|
||||
$article = ModelArticle::find($aParams['aOption'][1]);
|
||||
|
||||
$sSet = $aParams['aArg'][1];
|
||||
|
||||
if ($article) {
|
||||
$article->$sField = $sSet;
|
||||
|
||||
$r = $article->save();
|
||||
} else {
|
||||
// 处理未找到的情况
|
||||
throw new \Exception("Article not found");
|
||||
}
|
||||
|
||||
$this->oTGHttp->sendToTG(json_encode($r, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT));
|
||||
|
||||
$this->oHttp::response(200, 'ok');
|
||||
}
|
||||
|
||||
}
|
||||
@ -15,29 +15,43 @@ class Base {
|
||||
// $this->oTGHttp->sApiChatId = env("telegram_chatid");
|
||||
}
|
||||
|
||||
protected function cmdGood($sCmd) {
|
||||
|
||||
$sCmdNew = "";
|
||||
switch ($sCmd) {
|
||||
case "user":
|
||||
$sCmdNew = "user_name";
|
||||
break;
|
||||
case "project":
|
||||
$sCmdNew = "project_name";
|
||||
break;
|
||||
case "code":
|
||||
$sCmdNew = "sale_code";
|
||||
break;
|
||||
case "condition":
|
||||
$sCmdNew = "cron_condition";
|
||||
break;
|
||||
default:
|
||||
$sCmdNew = $sCmd;
|
||||
break;
|
||||
}
|
||||
|
||||
return $sCmdNew;
|
||||
|
||||
public function toJson($aData)
|
||||
{
|
||||
return json_encode($aData, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
|
||||
}
|
||||
|
||||
public function eachSendTg($aData)
|
||||
{
|
||||
foreach ($aData as $row) {
|
||||
$this->oTGHttp->sendToTG(json_encode($row, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT));
|
||||
}
|
||||
|
||||
$this->oHttp::response(200, 'ok');
|
||||
}
|
||||
|
||||
// protected function cmdGood($sCmd) {
|
||||
//
|
||||
// $sCmdNew = "";
|
||||
// switch ($sCmd) {
|
||||
// case "user":
|
||||
// $sCmdNew = "user_name";
|
||||
// break;
|
||||
// case "project":
|
||||
// $sCmdNew = "project_name";
|
||||
// break;
|
||||
// case "code":
|
||||
// $sCmdNew = "sale_code";
|
||||
// break;
|
||||
// case "condition":
|
||||
// $sCmdNew = "cron_condition";
|
||||
// break;
|
||||
// default:
|
||||
// $sCmdNew = $sCmd;
|
||||
// break;
|
||||
// }
|
||||
//
|
||||
// return $sCmdNew;
|
||||
//
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
@ -1,34 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TG\Hook\Mod;
|
||||
use App\Models\Article as ModelArticle;
|
||||
|
||||
class Cmd extends Base {
|
||||
|
||||
public function List()
|
||||
{
|
||||
|
||||
$aCmdList = [
|
||||
'优惠码list' => 'SaleCode#List',
|
||||
'优惠码find' => 'SaleCode#Find xxhh',
|
||||
'优惠码rate' => 'SaleCode#SetRate__xxzz 6.7',
|
||||
'文章list' => 'Article#List',
|
||||
'文章like' => 'Article#Like__field like',
|
||||
'文章add' => 'Article#Add__name',
|
||||
'文章del' => 'Article#Del__id',
|
||||
'文章set' => 'Article#Set__id__fild set',
|
||||
// '添加github的sshhost' => "System#AddSshHostGithub",
|
||||
'文章clone' => "article#clone id",
|
||||
'git手动重置' => "git#pullR",
|
||||
'文章find' => "article#find id",
|
||||
'cron暂停' => "option#pause 1",
|
||||
'测试cron' => "test#cron_i 01",
|
||||
];
|
||||
|
||||
$this->oTGHttp->sendToTG(json_encode($aCmdList, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT));
|
||||
|
||||
$this->oHttp::response(200, 'ok');
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
91
app/Services/TG/Hook/Mod/Dove.php
Normal file
91
app/Services/TG/Hook/Mod/Dove.php
Normal file
@ -0,0 +1,91 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TG\Hook\Mod;
|
||||
|
||||
//use App\Models\Hook as ModelHook;
|
||||
use App\Models\DoveSite as ModelDoveSite;
|
||||
|
||||
class Dove extends Base {
|
||||
|
||||
public function go($aParam, $aData)
|
||||
{
|
||||
$oDoveSiteCheckedList = ModelDoveSite::where("dove_checked", 1)->get();
|
||||
|
||||
list(, $sSubCmd) = explode("#", $aData['message']['text'], 2);
|
||||
$aData['message']['text'] = "/".$sSubCmd;
|
||||
|
||||
$aData['dove_token'] = env('dove_token');
|
||||
|
||||
foreach ($oDoveSiteCheckedList as $row) {
|
||||
|
||||
$sApiUrl = "https://".$row->www.$row->api_path;
|
||||
|
||||
$this->oHttp->sMethod = "post";
|
||||
$this->oHttp->bIsJson = true;
|
||||
$this->oHttp->sToUrl = $sApiUrl;
|
||||
$this->oHttp->aData = $aData;
|
||||
$r = $this->oHttp->send();
|
||||
return $r;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function set($aParam)
|
||||
{
|
||||
$iSetValue = $aParam['iSetValue'] ?? 1;
|
||||
$sCode = $aParam['aArg'][1];
|
||||
|
||||
$oDoveSite = ModelDoveSite::where("code", $sCode)->first();
|
||||
|
||||
if (!$oDoveSite) {
|
||||
throw new \Exception("没有这个code");
|
||||
}
|
||||
|
||||
$oDoveSite->dove_checked = $iSetValue;
|
||||
|
||||
$r = $oDoveSite->save();
|
||||
|
||||
if (!$r) {
|
||||
throw new \Exception("没check上?");
|
||||
}
|
||||
|
||||
$r = $this->now();
|
||||
|
||||
return $r;
|
||||
}
|
||||
|
||||
public function unsetAll()
|
||||
{
|
||||
|
||||
$r = ModelDoveSite::query()->update(["dove_checked" => 0]);
|
||||
|
||||
return $r;
|
||||
}
|
||||
|
||||
public function unset($aParam)
|
||||
{
|
||||
$aParam['iSetValue'] = 0;
|
||||
$r = $this->set($aParam);
|
||||
|
||||
return $r;
|
||||
}
|
||||
|
||||
public function now()
|
||||
{
|
||||
$aDoveSiteNow = ModelDoveSite::where("dove_checked", 1)->get()->toArray();
|
||||
|
||||
if ($aDoveSiteNow) {
|
||||
$r = "";
|
||||
foreach ($aDoveSiteNow as $row) {
|
||||
$r .= "\n";
|
||||
$r .= $row['code']."::".$row['www']."::".$row['class'];
|
||||
}
|
||||
} else {
|
||||
$r = "没有";
|
||||
}
|
||||
|
||||
return $r;
|
||||
}
|
||||
|
||||
}
|
||||
67
app/Services/TG/Hook/Mod/DoveSite.php
Normal file
67
app/Services/TG/Hook/Mod/DoveSite.php
Normal file
@ -0,0 +1,67 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TG\Hook\Mod;
|
||||
|
||||
use App\Models\DoveSite as ModelDoveSite;
|
||||
|
||||
class DoveSite extends Base {
|
||||
|
||||
public function add($aParam)
|
||||
{
|
||||
$sCode = $aParam['aArg'][1];
|
||||
$oDoveSite = new ModelDoveSite();
|
||||
|
||||
$oDoveSite->code = $sCode;
|
||||
$r = $oDoveSite->save();
|
||||
|
||||
return $r;
|
||||
}
|
||||
|
||||
public function del($aParam)
|
||||
{
|
||||
$sCode = $aParam['aArg'][1];
|
||||
|
||||
$r = ModelDoveSite::where("code", $sCode)->delete();
|
||||
|
||||
return $r;
|
||||
}
|
||||
|
||||
public function limit($aParam)
|
||||
{
|
||||
$iLimit = $aParam['aArg'][1];
|
||||
|
||||
$oDoveSite = ModelDoveSite::orderBy("code")->limit($iLimit)->get();
|
||||
|
||||
$this->eachSendTg($oDoveSite);
|
||||
}
|
||||
|
||||
public function like($aParam)
|
||||
{
|
||||
$sField = $aParam['aOption'][1];
|
||||
$sValue = $aParam['aArg'][1];
|
||||
|
||||
$oDoveSiteLike = ModelDoveSite::where($sField, "like", "%".$sValue."%")->get();
|
||||
|
||||
$this->eachSendTg($oDoveSiteLike);
|
||||
|
||||
}
|
||||
|
||||
public function option($aParam)
|
||||
{
|
||||
$sCode = $aParam['aOption'][1];
|
||||
$sField = $aParam['aOption'][2];
|
||||
$sValue = $aParam['aArg'][1];
|
||||
|
||||
$oDoveSite = ModelDoveSite::where("code", $sCode)->first();
|
||||
|
||||
if (!$oDoveSite) {
|
||||
throw new \Exception("没有这个code");
|
||||
}
|
||||
|
||||
$oDoveSite->$sField = $sValue;
|
||||
$r = $oDoveSite->save();
|
||||
|
||||
return $r;
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,128 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TG\Hook\Mod;
|
||||
use App\Models\Article as ModelArticle;
|
||||
|
||||
class Git extends Base {
|
||||
|
||||
public function UrlList()
|
||||
{
|
||||
$aArticleList = ModelArticle::orderBy('user_name')->get()->toArray();
|
||||
|
||||
$sMsg = '';
|
||||
foreach ($aArticleList as $v) {
|
||||
$sMsg .= "\n\n";
|
||||
$sMsg .= "https://github.com/".$v['user_name']."/".$v['project_name'];
|
||||
}
|
||||
|
||||
return $sMsg;
|
||||
|
||||
}
|
||||
|
||||
public function LastTime($aParam)
|
||||
{
|
||||
$iId = $aParam['aArg'][1];
|
||||
|
||||
$aArticle = ModelArticle::find($iId);
|
||||
|
||||
$sProjectPath = env("BASE_DIR") . "github/" . $aArticle->user_name . "-" . $aArticle->project_name;
|
||||
|
||||
// 进入指定目录
|
||||
if (!chdir($sProjectPath)) {
|
||||
throw new \Exception("无法进入目录" . $sProjectPath);
|
||||
}
|
||||
|
||||
// 获取远程更新
|
||||
$this->runCommand('git fetch origin');
|
||||
|
||||
// 获取最后提交的时间
|
||||
$lastCommitTime = $this->runCommand('git log origin/main -1 --format=%cd');
|
||||
$lastCommitTime = \DateTime::createFromFormat('D M d H:i:s Y O', $lastCommitTime[0]);
|
||||
$lastCommitTime = json_encode($lastCommitTime->format('Y-m-d H:i:s'));
|
||||
|
||||
// 检查是否获取到时间
|
||||
if (empty($lastCommitTime)) {
|
||||
throw new \Exception("无法获取最后提交时间,可能是分支不存在或没有提交。");
|
||||
}
|
||||
|
||||
return $lastCommitTime;
|
||||
|
||||
}
|
||||
|
||||
// 没用
|
||||
public function AddSshHostGithub()
|
||||
{
|
||||
|
||||
// 定义要添加的主机
|
||||
$host = 'github.com';
|
||||
|
||||
// 执行 ssh-keyscan 命令
|
||||
$key = shell_exec("ssh-keyscan -t ed25519 $host");
|
||||
|
||||
// 检查是否成功获取到公钥
|
||||
if ($key) {
|
||||
// 获取 known_hosts 文件的路径
|
||||
$knownHostsFile = '/root/.ssh/known_hosts';
|
||||
|
||||
// 检查 known_hosts 文件中是否已经存在该主机的公钥
|
||||
if (strpos(file_get_contents($knownHostsFile), $host) === false) {
|
||||
// 将公钥写入 known_hosts 文件
|
||||
file_put_contents($knownHostsFile, $key, FILE_APPEND);
|
||||
$sMsg = "公钥已成功添加到 $knownHostsFile\n";
|
||||
} else {
|
||||
$sMsg = "公钥已存在于 $knownHostsFile\n";
|
||||
}
|
||||
} else {
|
||||
$sMsg = "无法获取 $host 的公钥\n";
|
||||
}
|
||||
|
||||
$this->oTGHttp->sendToTG($sMsg);
|
||||
|
||||
$this->oHttp::response(200, 'ok');
|
||||
|
||||
}
|
||||
|
||||
// /Git#PullR 3
|
||||
public function PullR($aParam)
|
||||
{
|
||||
|
||||
$iId = $aParam['aArg'][1];
|
||||
|
||||
$aArticle = ModelArticle::find($iId);
|
||||
|
||||
$sProjectPath = env("BASE_DIR")."github/".$aArticle->user_name."-".$aArticle->project_name;
|
||||
|
||||
// 进入指定目录
|
||||
if (!chdir($sProjectPath)) {
|
||||
throw new \Exception("无法进入目录".$sProjectPath);
|
||||
}
|
||||
|
||||
// 获取远程更新
|
||||
$this->runCommand('git fetch origin');
|
||||
|
||||
// 硬重置到远程主分支
|
||||
$this->runCommand('git reset --hard origin/main');
|
||||
|
||||
$this->oTGHttp->sendToTG("操作完成:已重置到远程主分支");
|
||||
|
||||
$this->oHttp::response(200, 'ok');
|
||||
|
||||
}
|
||||
|
||||
private function runCommand($command) {
|
||||
$output = [];
|
||||
$returnVar = 0;
|
||||
exec($command, $output, $returnVar);
|
||||
|
||||
if ($returnVar !== 0) {
|
||||
$jsonOutput = json_encode($output, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
|
||||
$errorMessage = "命令失败: $command\n" . $jsonOutput . "\n";
|
||||
|
||||
throw new \Exception($errorMessage);
|
||||
} else {
|
||||
return $output;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
84
app/Services/TG/Hook/Mod/Hook.php
Normal file
84
app/Services/TG/Hook/Mod/Hook.php
Normal file
@ -0,0 +1,84 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TG\Hook\Mod;
|
||||
|
||||
use App\Models\Hook as ModelHook;
|
||||
use App\Models\SiteList as ModelSiteList;
|
||||
|
||||
class Hook extends Base {
|
||||
|
||||
public function set($aParam, $aData)
|
||||
{
|
||||
$sKey = $aParam['aArg'][1];
|
||||
$iFromId = $aData["message"]["from"]["id"];
|
||||
|
||||
// 先清除,等于是覆盖,单进程
|
||||
$r = ModelHook::where("tg_user_id", $iFromId)->delete();
|
||||
|
||||
// 添加
|
||||
$oHook = new ModelHook();
|
||||
$oHook->tg_user_id = $iFromId;
|
||||
$oHook->key = $sKey;
|
||||
$oHook->steap = 1;
|
||||
$r = $oHook->save();
|
||||
|
||||
if ($r) {
|
||||
|
||||
$aKey = explode(":", $sKey, 2);
|
||||
|
||||
// site类hook处理
|
||||
if ($aKey[0] === "site") {
|
||||
|
||||
// $sSite = $aKey[0];
|
||||
$sCode = $aKey[1];
|
||||
|
||||
$oSiteSingle = ModelSiteList::where("code", $sCode)->first();
|
||||
|
||||
if ($oSiteSingle) {
|
||||
$r = "site::".$oSiteSingle->code."@".$oSiteSingle->www." | 就绪!";
|
||||
} else {
|
||||
$r = "没有这个site!";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return $r;
|
||||
|
||||
}
|
||||
|
||||
public function go($aParam, $aData)
|
||||
{
|
||||
// $aApiUrl =
|
||||
}
|
||||
|
||||
public function now($aParam, $aData)
|
||||
{
|
||||
$iFromId = $aData["message"]["from"]["id"];
|
||||
|
||||
$oHookNow = ModelHook::where("tg_user_id", $iFromId)->first();
|
||||
|
||||
if ($oHookNow) {
|
||||
$aHookNow = $oHookNow->toArray();
|
||||
unset($aHookNow['id']);
|
||||
unset($aHookNow['tg_user_id']);
|
||||
$r = $this->toJson($aHookNow);
|
||||
} else {
|
||||
$r = "没有!";
|
||||
}
|
||||
|
||||
return $r;
|
||||
|
||||
}
|
||||
|
||||
public function break($aParam, $aData)
|
||||
{
|
||||
$iFromId = $aData["message"]["from"]["id"];
|
||||
|
||||
$r = ModelHook::where("tg_user_id", $iFromId)->delete();
|
||||
|
||||
return $r;
|
||||
}
|
||||
|
||||
}
|
||||
231
app/Services/TG/Hook/Mod/Note.php
Normal file
231
app/Services/TG/Hook/Mod/Note.php
Normal file
@ -0,0 +1,231 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TG\Hook\Mod;
|
||||
|
||||
use App\Models\Note as ModelNote;
|
||||
|
||||
class Note extends Base {
|
||||
|
||||
public function Score($aParam)
|
||||
{
|
||||
\
|
||||
}
|
||||
|
||||
public function Set($aParam)
|
||||
{
|
||||
$iId = $aParam["aOption"][1];
|
||||
$sValue = $aParam["aArg"][1];
|
||||
|
||||
$oModelNote = ModelNote::find($iId);
|
||||
$oModelNote->content = $sValue;
|
||||
$oModelNote->save();
|
||||
|
||||
$aParam["aArg"][1] = $iId;
|
||||
$aData = $this->Find($aParam);
|
||||
|
||||
return $aData;
|
||||
}
|
||||
|
||||
public function Memo($aParam)
|
||||
{
|
||||
$iId = $aParam["aOption"][1];
|
||||
$sValue = $aParam["aArg"][1];
|
||||
|
||||
$oModelNote = ModelNote::find($iId);
|
||||
$oModelNote->memo = $sValue;
|
||||
$oModelNote->save();
|
||||
|
||||
$aParam["aArg"][1] = $iId;
|
||||
$aData = $this->Find($aParam);
|
||||
|
||||
return $aData;
|
||||
}
|
||||
|
||||
public function Find($aParam)
|
||||
{
|
||||
$iId = $aParam["aArg"][1];
|
||||
|
||||
$oNote = ModelNote::find($iId)->first();
|
||||
|
||||
$r = $this->noteToStr([$oNote]);
|
||||
|
||||
return $r;
|
||||
}
|
||||
|
||||
public function Add($aParam)
|
||||
{
|
||||
$sType = $aParam["aOption"][1] ?? "under";
|
||||
$sContent = $aParam["aArg"][1];
|
||||
$iScore = $aParam["aArg"][2] ?? 0;
|
||||
|
||||
if (!isset($this->arrTypeIcon()[$sType])) {
|
||||
return "没有这个type";
|
||||
}
|
||||
|
||||
$oNote = new ModelNote();
|
||||
$oNote->content = $sContent;
|
||||
$oNote->type = $sType;
|
||||
$oNote->score = $iScore;
|
||||
$r = $oNote->save();
|
||||
|
||||
$aParam["aArg"][1] = $oNote->id;
|
||||
return $this->magic($aParam, $sType);
|
||||
}
|
||||
|
||||
public function Main($aParam)
|
||||
{
|
||||
|
||||
$oWarning = ModelNote::where("type", "warning")->get();
|
||||
$oMark = ModelNote::where("type", "mark")->get();
|
||||
$oNow = ModelNote::where("type", "now")->get();
|
||||
$oTrack = ModelNote::where("type", "track")->get();
|
||||
$oKeep = ModelNote::where("type", "keep")->get();
|
||||
|
||||
$sWarning = $this->noteToStr($oWarning, "\n");
|
||||
$sMark = $this->noteToStr($oMark, "\n");
|
||||
$sNow = $this->noteToStr($oNow, "\n");
|
||||
$sTrack = $this->noteToStr($oTrack, "\n");
|
||||
$sKeep = $this->noteToStr($oKeep, "\n");
|
||||
|
||||
$str = $sWarning."\n".$sMark."\n".$sNow."\n".$sTrack."\n".$sKeep;
|
||||
|
||||
return $str;
|
||||
|
||||
}
|
||||
|
||||
public function Now($aParam)
|
||||
{
|
||||
return $this->magic($aParam, "now");
|
||||
}
|
||||
|
||||
public function Keep($aParam)
|
||||
{
|
||||
return $this->magic($aParam, "keep");
|
||||
}
|
||||
|
||||
public function wait($aParam)
|
||||
{
|
||||
return $this->magic($aParam, "wait");
|
||||
}
|
||||
|
||||
public function under($aParam)
|
||||
{
|
||||
return $this->magic($aParam, "under");
|
||||
}
|
||||
|
||||
public function del($aParam)
|
||||
{
|
||||
return $this->magic($aParam, "del");
|
||||
}
|
||||
|
||||
public function done($aParam)
|
||||
{
|
||||
return $this->magic($aParam, "done");
|
||||
}
|
||||
|
||||
public function mark($aParam)
|
||||
{
|
||||
return $this->magic($aParam, "mark");
|
||||
}
|
||||
|
||||
public function track($aParam)
|
||||
{
|
||||
return $this->magic($aParam, "track");
|
||||
}
|
||||
|
||||
public function warning($aParam)
|
||||
{
|
||||
return $this->magic($aParam, "warning");
|
||||
}
|
||||
|
||||
public function tip($aParam)
|
||||
{
|
||||
return $this->magic($aParam, "tip");
|
||||
}
|
||||
|
||||
public function icon()
|
||||
{
|
||||
return $this->toJson($this->arrTypeIcon());
|
||||
}
|
||||
|
||||
private function magic($aParam, $sNoteType)
|
||||
{
|
||||
$iId = $aParam["aArg"][1] ?? false;
|
||||
|
||||
if ($iId) {
|
||||
$oNote = ModelNote::find($iId);
|
||||
$oNote->type = $sNoteType;
|
||||
$oNote->save();
|
||||
|
||||
$oNote = ModelNote::where("type", $sNoteType)->get();
|
||||
$r = $this->noteToStr($oNote);
|
||||
} else {
|
||||
$oNote = ModelNote::where("type", $sNoteType)->get();
|
||||
$r = $this->noteToStr($oNote);
|
||||
}
|
||||
|
||||
return $r;
|
||||
}
|
||||
|
||||
private function noteToStr($oNote, $sBr = "\n\n")
|
||||
{
|
||||
$str = "";
|
||||
|
||||
foreach ($oNote as $row) {
|
||||
$sIcon = $this->mapTypeIcon($row->type);
|
||||
$str .= $sBr;
|
||||
$str .= $sIcon."::".$row->id."::".$row->content;
|
||||
if ($row->memo) {
|
||||
$str .= "::".$row->memo;
|
||||
}
|
||||
}
|
||||
|
||||
return $str;
|
||||
}
|
||||
|
||||
private function arrTypeIcon()
|
||||
{
|
||||
$aMap = [
|
||||
"warning" => "🟥",
|
||||
"now" => "🟩",
|
||||
"wait" => "🟧",
|
||||
"under" => "⚪️",
|
||||
"keep" => "⬛️",
|
||||
"del" => "❌",
|
||||
"track" => "🟫",
|
||||
"mark" => "🟪",
|
||||
"done" => "✅",
|
||||
"tip" => "💡",
|
||||
];
|
||||
|
||||
return $aMap;
|
||||
}
|
||||
|
||||
private function mapTypeIcon($sType)
|
||||
{
|
||||
// $aMap = [
|
||||
// "warning" => "⚠️",
|
||||
// "now" => "🎸",
|
||||
// "wait" => "🚦",
|
||||
// "under" => "⚪️",
|
||||
// "keep" => "📌",
|
||||
// "del" => "❌",
|
||||
// "track" => "🌀",
|
||||
// "mark" => "⭐️",
|
||||
// "done" => "✅",
|
||||
// "tip" => "💡",
|
||||
// ];
|
||||
|
||||
$aMap = $this->arrTypeIcon();
|
||||
|
||||
if (isset($aMap[$sType])) {
|
||||
$sIcon = $aMap[$sType];
|
||||
} else {
|
||||
$sIcon = "::";
|
||||
}
|
||||
|
||||
return $sIcon;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,34 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TG\Hook\Mod;
|
||||
use App\Models\Option as ModelOption;
|
||||
|
||||
class Option extends Base {
|
||||
|
||||
public function Pause($aParam)
|
||||
{
|
||||
$v = $aParam['aArg'][1];
|
||||
|
||||
// 获取第一个匹配的选项
|
||||
$oOption = ModelOption::where("type", "pause")->first();
|
||||
|
||||
// 检查是否找到了选项
|
||||
if ($oOption) {
|
||||
$oOption->value = $v;
|
||||
|
||||
// 保存并返回结果
|
||||
return json_encode($oOption->save());
|
||||
}
|
||||
|
||||
// 如果没有找到选项,返回一个错误信息
|
||||
return json_encode(['error' => 'Option not found']);
|
||||
}
|
||||
|
||||
public function List()
|
||||
{
|
||||
$aOptionList = ModelOption::all()->toArray();
|
||||
|
||||
return json_encode($aOptionList, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,48 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TG\Hook\Mod;
|
||||
use App\Models\Article as ModelArticle;
|
||||
|
||||
class SaleCode extends Base {
|
||||
|
||||
public function SetRate($aParams)
|
||||
{
|
||||
$updatedRows = ModelArticle::where('sale_code', $aParams['aOption'][1])
|
||||
->update(['sale_rate' => $aParams['aArg'][1]]);
|
||||
|
||||
$this->oTGHttp->sendToTG(json_encode($updatedRows, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT));
|
||||
|
||||
$this->oHttp::response(200, 'ok');
|
||||
|
||||
}
|
||||
|
||||
public function List()
|
||||
{
|
||||
$aSaleCodeList = ModelArticle::select('sale_code', 'sale_rate')
|
||||
->distinct()
|
||||
->orderBy("sale_code")
|
||||
->get()
|
||||
->toArray();
|
||||
|
||||
$this->oTGHttp->sendToTG(json_encode($aSaleCodeList, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT));
|
||||
|
||||
$this->oHttp::response(200, 'ok');
|
||||
}
|
||||
|
||||
public function Find($aParams)
|
||||
{
|
||||
|
||||
$aSaleCodeList = ModelArticle::select('sale_code', 'sale_rate')
|
||||
->where("sale_code", $aParams['aArg'][1])
|
||||
->distinct()
|
||||
->orderBy("sale_code")
|
||||
->get()
|
||||
->toArray();
|
||||
|
||||
$this->oTGHttp->sendToTG(json_encode($aSaleCodeList, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT));
|
||||
|
||||
$this->oHttp::response(200, 'ok');
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,28 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\TG\Hook\Mod;
|
||||
//use App\Services\TomTool\Http;
|
||||
|
||||
class Test extends Base {
|
||||
|
||||
public function Cron($aParam)
|
||||
{
|
||||
$sTimeType = $aParam["aOption"][1];
|
||||
$sValue = $aParam["aArg"][1];
|
||||
|
||||
$this->oHttp->sMethod = "get";
|
||||
$this->oHttp->sToUrl = env("APP_URL")."/cron";
|
||||
$this->oHttp->bIsJson = true;
|
||||
$this->oHttp->aData = [
|
||||
"is_test" => true,
|
||||
"time_type" => $sTimeType,
|
||||
"v" => $sValue
|
||||
];
|
||||
|
||||
$r = $this->oHttp->send();
|
||||
|
||||
return $r;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user