498 lines
No EOL
22 KiB
PHP
Executable file
498 lines
No EOL
22 KiB
PHP
Executable file
<?php
|
|
|
|
/*
|
|
|
|
also die queue wird nur in der db gehalten und nicht im speicher...
|
|
|
|
das passiert, wenn man ein source hat, autosync an ist und zwei targets configuriert hat...
|
|
|
|
** betrifft aller wahrscheinlichkeit nur target2
|
|
|
|
|
|
cache table für doppelte weiterleitungsversuche + wenn detection++ löschen der ursprünglichen einträge im source channel
|
|
|
|
*/
|
|
|
|
function buildtoForwardKey($sourceChannelInfoKey, $target, $msgid, $to_topic) {
|
|
// calls @ fillForwardArray(), syncFiles(), fwdStepperJob()
|
|
$key=$sourceChannelInfoKey.";".$target.";".$msgid.";".$to_topic;
|
|
return $key;
|
|
} // function end
|
|
|
|
function fillForwardArray($ia, $fwd) {
|
|
global $toForward, $channelInfoNew, $globalsettings;
|
|
// print_r($fwd);
|
|
foreach ($fwd as $k) {
|
|
$tochanname=$k["name"]; // getfile_hack
|
|
$f=$k["chanid"];
|
|
$to_topic=$k["to_topic"];
|
|
$channelInfoKey=$k["channelInfoKey"];
|
|
|
|
$arraykey=buildtoForwardKey($channelInfoKey, $f, $ia["msgid"], $to_topic);
|
|
|
|
/*
|
|
// move to array element 1
|
|
$globalsettings["bot"]["lastbotcommands"]["commands"]=array($commandskey => $globalsettings["bot"]["lastbotcommands"]["commands"][$commandskey]) + $globalsettings["bot"]["lastbotcommands"]["commands"];
|
|
*/
|
|
|
|
$toForward[$arraykey]["from"]=$channelInfoKey;
|
|
$toForward[$arraykey]["to"]=$f;
|
|
$toForward[$arraykey]["msgid"]=$ia["msgid"];
|
|
$toForward[$arraykey]["album"]=$ia["album"];
|
|
$toForward[$arraykey]["topic"]=$to_topic;
|
|
$toForward[$arraykey]["text"]=$ia["text"];
|
|
$toForward[$arraykey]["cover"]=$ia["cover"];
|
|
$toForward[$arraykey]["width"]=$ia["width"];
|
|
$toForward[$arraykey]["height"]=$ia["height"];
|
|
$toForward[$arraykey]["runtime"]=$ia["runtime"];
|
|
$toForward[$arraykey]["filedate"]=$ia["filedate"];
|
|
$toForward[$arraykey]["filesize"]=$ia["filesize"];
|
|
$toForward[$arraykey]["tochanname"]=$tochanname;
|
|
|
|
$sql="insert into forwardqueue (
|
|
forwardkey,
|
|
sourceid,
|
|
targetid,
|
|
msgid,
|
|
album,
|
|
to_topic,
|
|
message,
|
|
cover,
|
|
width,
|
|
heigth,
|
|
runtime,
|
|
filedate,
|
|
filesize,
|
|
tochanname
|
|
) values (
|
|
'".pg_escape_string($globalsettings["db"]["pg_conn"], $arraykey)."',
|
|
'".pg_escape_string($globalsettings["db"]["pg_conn"], $channelInfoKey)."',
|
|
".$f.",
|
|
".$ia["msgid"].",
|
|
".$ia["album"].",
|
|
".$to_topic.",
|
|
'".pg_escape_string($globalsettings["db"]["pg_conn"], $ia["text"])."',
|
|
'".pg_escape_string($globalsettings["db"]["pg_conn"], $ia["cover"])."',
|
|
".$ia["width"].",
|
|
".$ia["height"].",
|
|
".$ia["runtime"].",
|
|
".$ia["filedate"].",
|
|
".$ia["filesize"].",
|
|
'".pg_escape_string($globalsettings["db"]["pg_conn"], $tochanname)."'
|
|
)";
|
|
|
|
pg_query($globalsettings["db"]["pg_conn"], $sql) or die('somthing wrong: ' . pg_last_error());
|
|
|
|
} // foreach ($fwd as $f)
|
|
} // function end
|
|
|
|
function syncChecktargetChannel($width, $height, $runtime, $filedate, $filesize, $syncTo) {
|
|
global $globalsettings;
|
|
$sql="set local enable_seqscan = off;
|
|
select msgid from chan_".$syncTo." where filedate=".$filedate." and size=".$filesize." and duration=".$runtime." and width=".$width." and height=".$height.";";
|
|
|
|
$result=pg_query($globalsettings["db"]["pg_conn"], $sql);
|
|
$numrows=pg_num_rows($result);
|
|
|
|
if ($numrows == 0) return -1;
|
|
return $numrows;
|
|
} // function end
|
|
|
|
function syncMsgBefor($msgid, $grpid) {
|
|
global $globalsettings;
|
|
|
|
/* catch cover alben
|
|
select type from chan_".$grpid." t1 where
|
|
(
|
|
msgid=".$msgbefor." and type='messageMediaPhoto' and t1.grouped_id=-1
|
|
) or (
|
|
grouped_id!=-1 and
|
|
(
|
|
select true from chan_".$grpid." t2 where t1.grouped_id=t2.grouped_id and type='messageMediaPhoto'
|
|
) and
|
|
user_id in (select user_id from chan_".$grpid." where msgid=".$msgid.")";
|
|
*/
|
|
|
|
|
|
$msgbefor=$msgid-1;
|
|
$sql="select type from chan_".$grpid." where msgid=".$msgbefor." and type='messageMediaPhoto' and grouped_id=-1 and user_id in (select user_id from chan_".$grpid." where msgid=".$msgid.")";
|
|
$result=pg_query($globalsettings["db"]["pg_conn"], $sql);
|
|
$numrows=pg_num_rows($result);
|
|
|
|
if ($numrows !=0 ) { return $msgbefor; } else return false;
|
|
} // function end
|
|
|
|
|
|
function syncGaterAlbumPosts($grpid, $msgid, $grouped_id) {
|
|
global $globalsettings;
|
|
|
|
$sql="select msgid, type, substr(cleanmessage, 0, ".$globalsettings["message"]["cuttext"].") as cleanmessage from chan_".$grpid." where grouped_id=".$grouped_id." order by msgid asc";
|
|
$result=pg_query($globalsettings["db"]["pg_conn"], $sql);
|
|
$numrows=pg_num_rows($result);
|
|
|
|
$return=array(); // new return value
|
|
|
|
$c=1;
|
|
while ($row = pg_fetch_array($result)) {
|
|
if ($c==1) { $firstmsgid=$row['msgid']; $firsttext=$row["cleanmessage"]; $c++; }
|
|
switch ($row['type']) {
|
|
case "messageMediaPhoto":
|
|
$noCheckMessageBefor=true;
|
|
$return[$row["msgid"]]["msgid"]=$row["msgid"];
|
|
$return[$row["msgid"]]["cover"]="cover";
|
|
$return[$row["msgid"]]["text"]=$row["cleanmessage"];
|
|
break;
|
|
default:
|
|
$return[$row["msgid"]]["msgid"]=$row["msgid"];
|
|
$return[$row["msgid"]]["cover"]="-1";
|
|
$return[$row["msgid"]]["text"]=$row["cleanmessage"];
|
|
} // switch ($row['type'])
|
|
} // while ($row = pg_fetch_array($result))
|
|
|
|
if (!isset($noCheckMessageBefor)) {
|
|
$msgbefor=syncMsgBefor($firstmsgid, $grpid);
|
|
if ($msgbefor!="") {
|
|
$return[$msgbefor]["msgid"]=$msgbefor;
|
|
$return[$msgbefor]["cover"]="cover";
|
|
$return[$msgbefor]["text"]=$firsttext; // will be improved...
|
|
asort($return);
|
|
} // if ($msgbefor!="")
|
|
} // if (!isset($noCheckMessageBefor))
|
|
|
|
return $return;
|
|
} // function end
|
|
|
|
function checkFileOverAllChannels($text, $width, $height, $runtime, $filedate, $filesize, $from, $topic_id, $channelInfoKey, $msgid, $getfile_topic=false ) {
|
|
global $globalsettings, $channelInfoNew, $toForward;
|
|
|
|
$fwd=array();
|
|
$filecount=0;
|
|
|
|
if ($getfile_topic!=false) {
|
|
// echo "here ---->\n";
|
|
/*
|
|
$forwardInfo[$chanid]["from_topic_id"][$channelInfoNew[$k]["from_topic_id"]][$channelInfoNew[$k]["to"][$t]["chanid"]]=$channelInfoNew[$k]["to"][$t]["to_topic"];
|
|
from_topic_id always -1
|
|
to_topic==getfile_topic
|
|
*/
|
|
|
|
$forwardInfo=array();
|
|
if ($channelInfoNew[$channelInfoKey]["redirectout_tochannel"] == -1) {
|
|
$forwardInfo[$channelInfoNew[$channelInfoKey]["redirectout"]]["from_topic_id"][-1][$channelInfoNew[$channelInfoKey]["chanid"]]=$getfile_topic;
|
|
} else {
|
|
$forwardInfo[$channelInfoNew[$channelInfoKey]["redirectout"]]["from_topic_id"][-1][$channelInfoNew[$channelInfoKey]["redirectout_tochannel"]]=$getfile_topic;
|
|
} // if ($channelInfoNew[$channelInfoKey]["redirectout_tochannel"] == -1)
|
|
} else $forwardInfo=forwardInfo($channelInfoKey, $channelInfoNew); // if ($getfile_topic!=false1)
|
|
|
|
|
|
|
|
// print_r($forwardInfo);
|
|
|
|
|
|
if (is_array($forwardInfo)) {
|
|
foreach (array_keys($forwardInfo) as $k) { // in $k = chanid
|
|
|
|
foreach (array_keys($forwardInfo[$k]["from_topic_id"]) as $from_topic_id) {
|
|
|
|
if ($from_topic_id != -1 ) { $channelInfoKey=$k."-".$from_topic_id; } else $channelInfoKey=$k; // rebuild channelInfoKey from forwardInfo
|
|
foreach (array_keys($forwardInfo[$k]["from_topic_id"][$from_topic_id]) as $to_chan) {
|
|
|
|
if ($topic_id == $from_topic_id || $from_topic_id == -1) { // check if target to from_topic_id configured -- here ! to topic! && to_topic id (forwardinfo aufbohren?)
|
|
|
|
if ($getfile_topic!=false) {
|
|
$toChannel=$channelInfoNew[$to_chan]["name"];
|
|
} else $toChannel=$channelInfoNew[$channelInfoKey]["to"][$to_chan]["name"];
|
|
|
|
if (mb_strlen($toChannel) >= 40) $toChannel=mb_substr($toChannel,0,20)."...";
|
|
|
|
if ($getfile_topic!=false) {
|
|
$toChannelTopic=$getfile_topic;
|
|
} else $toChannelTopic=$channelInfoNew[$channelInfoKey]["to"][$to_chan]["to_topic"];
|
|
|
|
$fromChannel=$channelInfoNew[$channelInfoKey]["name"];
|
|
if (mb_strlen($fromChannel) >= 40) $fromChannel=mb_substr($fromChannel,0,20)."...";
|
|
|
|
logger(mb_sprintf("syncFiles: %-54s check - from: [%s(%s):%s] to: [%s:%s]",$text, $fromChannel, $msgid, $topic_id, $toChannel, $toChannelTopic));
|
|
|
|
unset($queueCheck); // check toForward Queue
|
|
if (count($toForward)!=0) {
|
|
foreach ($toForward as $fc) {
|
|
|
|
if ($width==$fc["width"] && $height==$fc["height"] && $runtime==$fc["runtime"] && $filedate==$fc["filedate"] && $filesize==$fc["filesize"] && $channelInfoNew[$channelInfoKey]["to"][$to_chan]["chanid"]==$fc["to"] && $channelInfoNew[$channelInfoKey]["to"][$to_chan]["to_topic"] == $fc["topic"]) {
|
|
$queueCheck=true;
|
|
logger(mb_sprintf("syncFiles: %-54s is in queue for target: [%s]", $text, $toChannel));
|
|
break;
|
|
} // if ($width==$fc["width"] && $height==$fc["height"] && $runtime==$fc["runtime"] && $filedate==$fc["filedate"] && $filesize==$fc["filesize"] && $f==$fc["to"])
|
|
} // foreach ($toForward as $fc)
|
|
} // if (count($toForward)!=0)
|
|
|
|
|
|
|
|
if (!isset($queueCheck)) {
|
|
logger(mb_sprintf("syncFiles: %-54s is not in queue for target: [%s]", $text, $toChannel));
|
|
|
|
$filetargetcheck=syncChecktargetChannel($width, $height, $runtime, $filedate, $filesize, $to_chan);
|
|
if ($filetargetcheck==-1) {
|
|
|
|
$filecount++;
|
|
|
|
if ($getfile_topic!=false) {
|
|
$fwd[$k.":".$filecount]["chanid"]= $channelInfoNew[$to_chan]["chanid"];
|
|
$fwd[$k.":".$filecount]["peerid"]= $channelInfoNew[$to_chan]["peerid"];
|
|
$fwd[$k.":".$filecount]["status"]= $channelInfoNew[$to_chan]["status"];
|
|
$fwd[$k.":".$filecount]["info"]= $channelInfoNew[$to_chan]["info"];
|
|
$fwd[$k.":".$filecount]["to_topic"]= $getfile_topic;
|
|
$fwd[$k.":".$filecount]["topic_name"]= "getfile hack";
|
|
$fwd[$k.":".$filecount]["name"]= $channelInfoNew[$to_chan]["name"];
|
|
$fwd[$k.":".$filecount]["channelInfoKey"]=$channelInfoKey;
|
|
} else {
|
|
$fwd[$k.":".$filecount]["chanid"]= $channelInfoNew[$channelInfoKey]["to"][$to_chan]["chanid"];
|
|
$fwd[$k.":".$filecount]["peerid"]= $channelInfoNew[$channelInfoKey]["to"][$to_chan]["peerid"];
|
|
$fwd[$k.":".$filecount]["status"]= $channelInfoNew[$channelInfoKey]["to"][$to_chan]["status"];
|
|
$fwd[$k.":".$filecount]["info"]= $channelInfoNew[$channelInfoKey]["to"][$to_chan]["info"];
|
|
$fwd[$k.":".$filecount]["to_topic"]= $channelInfoNew[$channelInfoKey]["to"][$to_chan]["to_topic"];
|
|
$fwd[$k.":".$filecount]["topic_name"]= $channelInfoNew[$channelInfoKey]["to"][$to_chan]["topic_name"];
|
|
$fwd[$k.":".$filecount]["name"]= $channelInfoNew[$channelInfoKey]["to"][$to_chan]["name"];
|
|
$fwd[$k.":".$filecount]["channelInfoKey"]=$channelInfoKey;
|
|
} // if ($getfile_topic!=false)
|
|
|
|
//print_r($fwd);
|
|
|
|
logger(mb_sprintf("syncFiles: %-54s is not in database for target: [%s]", $text, $toChannel));
|
|
} else logger(mb_sprintf("syncFiles: %-54s is [%sx] in database for target: [%s]", $text, $filetargetcheck, $toChannel)); // if ($filetargetcheck==-1) - else
|
|
} // if (!isset($queueCheck)
|
|
} // if ($topic_id == $from_topic_id || $from_topic_id == -1)
|
|
} // foreach (array_keys($forwardInfo[$k]["from_topic_id"][$from_topic_id]) as $to_chan)
|
|
} // foreach (array_keys($forwardInfo[$k]["from_topic_id"]) as $from_topic_id)
|
|
} // foreach (array_keys($forwardInfo) as $k)
|
|
} // if (is_array($forwardInfo))
|
|
|
|
if (count($fwd) != 0) {
|
|
return $fwd;
|
|
}
|
|
|
|
return -1;
|
|
} // function end
|
|
|
|
|
|
function typeclausel($type) {
|
|
global $typemapping;
|
|
|
|
if (!array_key_exists($type, $typemapping)) $type="video"; // set default when $§%§$@ configured
|
|
|
|
if ($type == "all" ) {
|
|
$sql="mime_type like '%' ";
|
|
return $sql;
|
|
}
|
|
|
|
foreach (array_keys($typemapping) as $k) {
|
|
if ($k == $type) {
|
|
if (array_key_exists("min-duration", $typemapping[$k])) { $duration=" and duration > ".$typemapping[$k]["min-duration"]*60; }
|
|
if (array_key_exists("max-duration", $typemapping[$k])) { $duration=" and duration < ".$typemapping[$k]["max-duration"]*60; }
|
|
if (!isset($duration)) $duration=" ";
|
|
|
|
if (array_key_exists("min-size", $typemapping[$k])) {$size=" and size > ".$typemapping[$k]["min-size"]*1024*1024; } else $size=" ";
|
|
if (array_key_exists("min-width", $typemapping[$k])) {$width=" and width > ".$typemapping[$k]["min-width"]; } else $width=" ";
|
|
|
|
$sql="(";
|
|
foreach($typemapping[$k]["types"] as $mimetypes) {
|
|
$sql.="mime_type = '".$mimetypes."' or ";
|
|
} // foreach($typemapping[$k]["types"] as $types)
|
|
$sql=substr($sql, 0, strlen($sql)-4).")".$duration.$size.$width;
|
|
} // if ($k == $type)
|
|
} // foreach (array_keys($typemapping) as $k)
|
|
|
|
// echo $sql."\n";
|
|
return $sql;
|
|
} // function end
|
|
|
|
function syncFiles($maxid, $channelInfoKey, $autosync=-1) {
|
|
global $globalsettings, $videoRunTimeInMinute, $MadelineProto, $lastMessagePerChan, $forwardMsg, $toForward, $channelInfoNew;
|
|
|
|
$peerid=$channelInfoNew[$channelInfoKey]["peerid"];
|
|
$grpid=$channelInfoNew[$channelInfoKey]["chanid"];
|
|
|
|
if (array_key_exists($peerid,$forwardMsg)) if ($forwardMsg[$peerid]!=-1) $maxid=$forwardMsg[$peerid]; // overwrite maxid if forwardMsg set
|
|
|
|
$sql="select msgid, message, substr(cleanmessage, 0, ".$globalsettings["message"]["cuttext"].") as cleanmessage, duration, grouped_id, filedate, size, width, height, topic_id from chan_".$grpid." where ".typeclausel($channelInfoNew[$channelInfoKey]["typemapping"])." and msgid > ".$maxid." order by msgid asc";
|
|
|
|
|
|
if ($autosync != -1) { $result=$autosync; } else $result=pg_query($globalsettings["db"]["pg_conn"], $sql);
|
|
|
|
$numrows=pg_num_rows($result);
|
|
|
|
$fromChannel=$channelInfoNew[$channelInfoKey]['name'];
|
|
if (mb_strlen($fromChannel) >= 20) $fromChannel=mb_substr($fromChannel,0,20)."...";
|
|
if ($numrows != 0) logger("syncFiles: ".$numrows." files - from [".$fromChannel."]");
|
|
|
|
if ($numrows == 0) return;
|
|
|
|
unset($forward); // cleanup forward array
|
|
unset($forwardBreakOut);
|
|
$forward=array();
|
|
while ($row = pg_fetch_array($result)) {
|
|
|
|
$text=$row['cleanmessage'];
|
|
$orgtext=$row['message'];
|
|
$filedate=$row['filedate'];
|
|
$filesize=$row['size'];
|
|
$height=$row['height'];
|
|
$width=$row['width'];
|
|
$runtime=$row['duration'];
|
|
$grouped_id=$row['grouped_id'];
|
|
$msgid=$row['msgid'];
|
|
$topic_id=$row['topic_id'];
|
|
|
|
$filetargetcheck=checkFileOverAllChannels($text, $width, $height, $runtime, $filedate, $filesize, $grpid, $topic_id, $channelInfoKey, $msgid);
|
|
if (is_array($filetargetcheck)) { $fwd=$filetargetcheck; } else logger(sprintf("syncFiles: do not forward from [%s][%s] - %-54s",$fromChannel, $row['msgid'], $row['cleanmessage'])); // overwrite $fwd
|
|
|
|
|
|
if (is_array($filetargetcheck)) {
|
|
|
|
if ($grouped_id==-1) { // no grouped / album posts check message befor
|
|
|
|
$forward[]=$msgid;
|
|
$infoArray=array("msgid" => $msgid, "album" => -1, "text" => $text, "cover" => -1, "width" => $width, "height" => $height, "runtime" => $runtime, "filedate" => $filedate, "filesize" => $filesize);
|
|
|
|
unset($msgbefor);
|
|
$msgbefor=syncMsgBefor($msgid, $grpid);
|
|
if ($msgbefor!="") {
|
|
$forward[]=$msgbefor;
|
|
$infoArray["cover"]=$msgbefor;
|
|
}
|
|
fillForwardArray($infoArray, $fwd); // array included video and cover info's
|
|
} else {
|
|
if (!array_search($msgid, $forward)) {
|
|
$albenreturn=syncGaterAlbumPosts($grpid, $msgid, $grouped_id);
|
|
|
|
foreach(array_keys($albenreturn) as $k) {
|
|
$forward[]=$albenreturn[$k]["msgid"];
|
|
$infoArray=array("msgid" => $albenreturn[$k]["msgid"], "album" => $grouped_id, "text" => $albenreturn[$k]["text"], "cover" => $albenreturn[$k]["cover"] , "width" => $width, "height" => $height, "runtime" => $runtime, "filedate" => $filedate, "filesize" => $filesize);
|
|
fillForwardArray($infoArray, $fwd);
|
|
} // foreach(array_keys($albenreturn) as $k)
|
|
} // if (!array_search($msgid, $forward))
|
|
} // if ($grouped_id==-1) - else
|
|
} // if (is_array($filetargetcheck))
|
|
|
|
// stopafter > 20 forwards set channel last message back to last forward msg
|
|
if (count($forward)>=80 && $autosync == -1) {
|
|
logger("syncFiles: set lastmessage ".$lastMessagePerChan[$peerid].": ".$forward[count($forward)-1]);
|
|
|
|
if (!array_key_exists($peerid,$forwardMsg)) { $forwardMsg+=array($peerid => $forward[count($forward)-1]); } else $forwardMsg[$peerid]=$forward[count($forward)-1];
|
|
|
|
$lastMessagePerChan[$peerid]=$forward[count($forward)-1];
|
|
$forwardBreakOut=1;
|
|
break;
|
|
}
|
|
} // while ($row = $result->fetchArray())
|
|
|
|
if (!isset($forwardBreakOut)) { // reset mass forward array $forwardMsg;
|
|
if (!array_key_exists($peerid,$forwardMsg)) { $forwardMsg+=array($peerid => -1); } else $forwardMsg[$peerid]=-1;
|
|
} // reset forward array
|
|
|
|
return;
|
|
} // function end
|
|
|
|
function redirect_getfile($channelInfoKey, $getfile_msgid, $topicid, $infoarray) {
|
|
global $channelInfoNew, $globalsettings, $requestcommand;
|
|
if ($channelInfoNew[$channelInfoKey]["redirectout"] != -1) {
|
|
|
|
|
|
|
|
$sql="select msgid, message, substr(cleanmessage, 0, ".$globalsettings["message"]["cuttext"].") as cleanmessage, duration, grouped_id, filedate, size, width, height, topic_id from chan_".$channelInfoNew[$channelInfoKey]["redirectout"]." where msgid = ".$getfile_msgid;
|
|
$result=pg_query($globalsettings["db"]["pg_conn"], $sql);
|
|
//echo $sql."\n";
|
|
|
|
$fromChannel=$channelInfoNew[$channelInfoNew[$channelInfoKey]["redirectout"]]['name'];
|
|
if (mb_strlen($fromChannel) >= 20) $fromChannel=mb_substr($fromChannel,0,20)."...";
|
|
|
|
if (pg_num_rows($result)==0) {
|
|
sendmessageintochannel($channelInfoKey, "❌<b>".$requestcommand." #getfile</b>: message id not found: ".$getfile_msgid."<br>".generatebotmarker(), $topicid);
|
|
return;
|
|
} else logger("redirect_getfile: ".pg_num_rows($result)." files - from [".$fromChannel."]"); // if (pg_num_rows($result)==0)
|
|
|
|
$forward=array();
|
|
while ($row = pg_fetch_array($result)) {
|
|
$text=$row['cleanmessage'];
|
|
$orgtext=$row['message'];
|
|
$filedate=$row['filedate'];
|
|
$filesize=$row['size'];
|
|
$height=$row['height'];
|
|
$width=$row['width'];
|
|
$runtime=$row['duration'];
|
|
$grouped_id=$row['grouped_id'];
|
|
$msgid=$row['msgid'];
|
|
$topic_id=$row['topic_id'];
|
|
|
|
|
|
|
|
$filetargetcheck=checkFileOverAllChannels($text, $width, $height, $runtime, $filedate, $filesize, $channelInfoNew[$channelInfoKey]["redirectout"], $topic_id, $channelInfoKey, $msgid, $topicid);
|
|
|
|
if (is_array($filetargetcheck)) {
|
|
$fwd=$filetargetcheck;
|
|
} else {
|
|
|
|
if ($channelInfoNew[$channelInfoKey]["redirectout_tochannel"] == -1) {
|
|
$dbchecksql="set local enable_seqscan = off;
|
|
select msgid, link from chan_".$channelInfoNew[$channelInfoKey]["chanid"]." where filedate=".$filedate." and size=".$filesize." and duration=".$runtime." and width=".$width." and height=".$height." limit 1;";
|
|
} else {
|
|
$dbchecksql="set local enable_seqscan = off;
|
|
select msgid, link from chan_".$channelInfoNew[$channelInfoKey]["redirectout_tochannel"]." where filedate=".$filedate." and size=".$filesize." and duration=".$runtime." and width=".$width." and height=".$height." limit 1;";
|
|
} // if ($channelInfoNew[$channelInfoKey]["redirectout_tochannel"] == -1)
|
|
|
|
$dbcheckresult=pg_query($globalsettings["db"]["pg_conn"], $dbchecksql);
|
|
|
|
// echo $dbchecksql."\n";
|
|
|
|
if (pg_num_rows($dbcheckresult)!=0) {
|
|
while ($dbcheckrow = pg_fetch_array($dbcheckresult)) {
|
|
$dbcheckmsgid=$dbcheckrow['msgid'];
|
|
$dbchecklink="<a href='".$dbcheckrow['link']."'> ➡️ ".htmlspecialchars($text)."</a>";
|
|
} // while ($dbcheckrow = pg_fetch_array($dbcheckresult))
|
|
} else $dbchecklink=" ".htmlspecialchars($text); // if (pg_num_rows($dbcheckresult)!=0)
|
|
|
|
sendmessageintochannel($channelInfoKey, "❌<b>#getfile</b>".$dbchecklink."<br><b>already on channel</b><br>".generatebotmarker(), $topicid);
|
|
logger(mb_sprintf("syncFiles: do not forward from [%s][%s] - %-54s",$fromChannel, $row['msgid'], $row['cleanmessage']));
|
|
return;
|
|
} // if (is_array($filetargetcheck))
|
|
|
|
if (is_array($filetargetcheck)) {
|
|
|
|
if ($grouped_id==-1) { // no grouped / album posts check message befor
|
|
|
|
$forward[]=$msgid;
|
|
$infoArray=array("msgid" => $msgid, "album" => -1, "text" => $text, "cover" => -1, "width" => $width, "height" => $height, "runtime" => $runtime, "filedate" => $filedate, "filesize" => $filesize);
|
|
|
|
unset($msgbefor);
|
|
$msgbefor=syncMsgBefor($msgid, $channelInfoNew[$channelInfoKey]["redirectout"]);
|
|
if ($msgbefor!="") {
|
|
$forward[]=$msgbefor;
|
|
$infoArray["cover"]=$msgbefor;
|
|
}
|
|
fillForwardArray($infoArray, $fwd); // array included video and cover info's
|
|
} else {
|
|
if (!array_search($msgid, $forward)) {
|
|
$albenreturn=syncGaterAlbumPosts($channelInfoNew[$channelInfoKey]["redirectout"], $msgid, $grouped_id);
|
|
|
|
foreach(array_keys($albenreturn) as $k) {
|
|
$forward[]=$albenreturn[$k]["msgid"];
|
|
$infoArray=array("msgid" => $albenreturn[$k]["msgid"], "album" => $grouped_id, "text" => $albenreturn[$k]["text"], "cover" => $albenreturn[$k]["cover"] , "width" => $width, "height" => $height, "runtime" => $runtime, "filedate" => $filedate, "filesize" => $filesize);
|
|
fillForwardArray($infoArray, $fwd);
|
|
} // foreach(array_keys($albenreturn) as $k)
|
|
} // if (!array_search($msgid, $forward))
|
|
} // if ($grouped_id==-1) - else
|
|
|
|
// hack
|
|
if ($channelInfoNew[$channelInfoKey]["redirectout_tochannel"] == -1) {
|
|
$tmpredchanname="<a href='https://t.me/c/".$channelInfoNew[$channelInfoKey]["chanid"]."/'> ➡️ ".htmlspecialchars($channelInfoNew[$channelInfoKey]["name"])."</a>";
|
|
} else {
|
|
$tmpredchanname="<a href='https://t.me/c/".$channelInfoNew[$channelInfoKey]["redirectout_tochannel"]."/'> ➡️ ".htmlspecialchars($channelInfoNew[$channelInfoKey]["redirectout_tochannel_name"])."</a>";
|
|
} // if ($channelInfoNew[$channelInfoKey]["redirectout_tochannel"] == -1)
|
|
// hack end
|
|
|
|
sendmessageintochannel($channelInfoKey, "📝<b>".$requestcommand." #getfile</b>: ".htmlspecialchars($text)."<br>in forward queue to<b>".$tmpredchanname."</b><br>".generatebotmarker(), $topicid);
|
|
} // if (is_array($filetargetcheck))
|
|
} // while ($row = pg_fetch_array($result))
|
|
} // if ($channelInfoNew[$channelInfoKey]["redirectout"] != -1)
|
|
return;
|
|
} // function end
|