bot_plus/utils/bot_plus_mencions.php
2024-08-21 20:50:04 +02:00

382 líneas
15 KiB
PHP

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
$tm = microtime(true);
// Comprova els arguments, en cas de no existir presenta l'ajuda.
if (!empty($_SERVER["argv"][1])){
$argument = $_SERVER["argv"][1];
// $mstg = $_SERVER["argv"][2];
} else {
// Presenta l'ajuda
echo "NO HE REBUT la variable";
exit;
}
$lloc = $argument;
// ara podrá carregar la configuració i el logger
include("".$lloc."/configuracio/bot_plus_cfg.php");
include("".$lloc."/utils/bot_plus_funcions.php");
require_once("".$lloc."/lib/logger.php");
// inicia el log
$log = new Logging();
$log->lfile(''.$log_fitxer.'');
$log->lwrite("Estàn activades les respostes a les mencions.");
if($control_memoria_utils == 1) {
$log -> lwrite ( mostra_us_memoria()." ".mostra_pic_memoria()." - ".__LINE__ );
}
// preparatius i variables comunes
$resposta = ConsultaNotificacions($token,$base_url,$limit_m,$headers);
$tmc = microtime(true);
$dcon = $tmc - $tm;
//print_r($resposta);
//exit;
$nr = count($resposta);
$menc_mat = array();
$d = 0;
for ($d = 0; $d < $nr; $d++) {
// triar les variables que volem de la matriu
$men_id = $resposta[$d]['id'];
$mencio = $resposta[$d]['type'];
$men_tp = $resposta[$d]['created_at'];
$usu_id = $resposta[$d]['account']['id'];
$usu_ac = $resposta[$d]['account']['acct'];
// $usu_no = $resposta[$d]['account']['username'];
// $usu_dp = $resposta[$d]['account']['display_name'];
if ($mencio == "mention") {
$mis_id = $resposta[$d]['status']['id'];
$mis_vis = $resposta[$d]['status']['visibility'];
$mstg = html_entity_decode(strip_tags($resposta[$d]['status']['content']));
} else { $mis_id = 0; $mstg = null; $mis_vis = 'direct'; }
// echo "".$mis_vis."-".$d."\n";
$menc_mat[] = array ( 'id' => (int)$men_id, 'mis_id' => (int)$mis_id, 'qui' => $usu_ac, 'mencio' => $mencio, 'quan' => $men_tp, 'que' => $mstg, 'visib' => $mis_vis );
}
//print_r($menc_mat);
//exit;
$nombre_matriu = count($menc_mat);
$men_resp = null;
$reg_tam = filesize("".$lloc."/fitxers/mencions_r.txt");
$reg_lin = count(file("".$lloc."/fitxers/mencions_r.txt"));
$reg_lin_bak = count(file("".$lloc."/fitxers/mencions_r.bak"));
if ( ($reg_tam == 0) || ($reg_lin < ($reg_lin_bak)) ) {
$log -> lwrite ("ALERTA! El fitxer mencions_r te ".$reg_lin." linies. Cal posar-ne més.");
$recuperar = 1;
$copia_seguretat_rec = shell_exec("cat ".$lloc."/fitxers/mencions_r.bak > ".$lloc."/fitxers/mencions_r.txt");
} else {
$recuperar = 0;
}
// llegir fitxer per evitar repeticions
$mencio_arx = shell_exec("cat ".$lloc."/fitxers/mencions_r.txt");
// verificar que un usuari fa més d'una volta la mateixa acció (?);
$e = 0;
$nm = 0;
$num_seg = 0;
$mr = 0;
for ($e = 0; $e < $nombre_matriu; $e++) {
$m_id = $menc_mat[$e]['id'];
$miss_id = $menc_mat[$e]['mis_id'];
$usuari= $menc_mat[$e]['qui'];
$mencio_t= $menc_mat[$e]['mencio'];
$temps = $menc_mat[$e]['quan'];
$mstg = $menc_mat[$e]['que'];
$mis_vis = $menc_mat[$e]['visib'];
$mencio_arx = shell_exec("cat ".$lloc."/fitxers/mencions_r.txt");
$no_repetir = strpos($mencio_arx,$miss_id);
if ($mencio_t == "mention") {
// if ( ($mencio_t == "mention") && ($mis_id <>0)) {
$no_repetir = strpos($mencio_arx,$miss_id);
// echo "no repetir: ".$e."|".$usuari."|".$no_repetir."\n";
// $log->lwrite("no repetir: ".$e."|".$usuari."|".$no_repetir."");
// sleep(2);
if( ($no_repetir === false) ) {
// echo "menció de : ".$usuari." - ".$mencio_t." - ".$miss_id."\n";
if (is_int($miss_id/7)) {
$men_resp = "Ja em disculparàs, @".$usuari." soc un bot :cli_user: amb la versió ".$bot_versio." i estic aprenent a entendre els comentaris. \nDe tota manera, moltes gràcies per la teua menció.\n🤖 #SocUnBot";
} elseif (is_int($miss_id/5)) {
$men_resp = "M'agrada molt que em menciones. Així aprendré a entendre els tuts, @".$usuari.".:cli_user:\n Soc ".$bot_nom." v".$bot_versio." :cli_user:\n🤖 #SocUnBot";
} elseif (is_int($miss_id/3)) {
$men_resp = "He vist que m'has mencionat, @".$usuari." i et done les gràcies per que així aprendré.:cli_user:\n Soc ".$bot_nom." v".$bot_versio." :cli_user:\n🤖 #SocUnBot";
} elseif (is_int($miss_id/2)) {
$men_resp = "Agraït per la menció, @".$usuari.", em serveix per aprendre el vocabulari.:cli_user:\n Soc ".$bot_nom." v".$bot_versio." :cli_user:\n🤖 #SocUnBot";
} else {
$men_resp = "Gràcies per mencionar-me i ajudar-me a entendre el llenguatge natural, @".$usuari.". Soc ".$bot_nom." i la meua versió és ".$bot_versio." :cli_user:.\n🤖 #SocUnBot";
}
// $mem_rep = "Em sembla que el teu comentari @".$usuari." és ".$sentiment."\n".
$en_resposta = $miss_id;
if ( ($men_resp != null) ) {
$conteste = rand(0,1000);
if( ($act_mencio_resp == 1)&&($conteste == 25) ){
$contestar = strpos($mstg,"comentabot");
$comp_info = strpos($mstg,"infobot");
$comp_imps = strpos($mstg,"impulsosbot");
$comp_orat = strpos($mstg,"oratgebot");
$comp_salu = strpos($mstg,"saludabot");
$comp_usu = strpos($mstg,"usuaribot");
if( ($contestar == false)&&($comp_info == false)&&
($comp_salu == false)&&($comp_orat == false)&&($comp_imps == false) &&
($comp_usu == false)
) {
// Publica a Mastodon
$dades_tut = array(
"status" => $men_resp,
"language" => $llengua,
// "visibility" => $visib_mencs,
"visibility" => $mis_vis,
"in_reply_to_id" => $en_resposta
);
//print_r($status_data);
//sleep(10);
PublicaMissatge($base_url,$headers,$dades_tut);
$log->lwrite("NOVA MENCIO: ".$men_resp." : ".$usuari." - id: ".$en_resposta." ");
// final detectar etiqueta
}
}
$contestar = strpos($mstg,"comentabot");
$comp_info = strpos($mstg,"infobot");
$comp_imps = strpos($mstg,"impulsosbot");
$comp_orat = strpos($mstg,"oratgebot");
$comp_salu = strpos($mstg,"saludabot");
$comp_usu = strpos($mstg,"usuaribot");
if( ($comp_salu == false)&&($comp_info == false)&&
($comp_imps == false)&&($comp_orat == false)&&
($comp_usu == false)
){
$decisio = TriaOpcio($en_resposta);
if( ($decisio == 1) ||
($decisio == 2) ||
($decisio == 3) ||
($decisio == 4) ||
($decisio == 5) ) {
//if(is_int($en_resposta/2)) {
FesRebloc($base_url,$en_resposta,$headers);
$heoptat = "he fet impuls";
//print_r($fav_output_status);
} elseif( ($decisio == 6) ||
($decisio == 7) ||
($decisio == 8) ||
($decisio == 9) ) {
FesFavorit($base_url,$en_resposta,$headers);
$heoptat = "he fet favorit";
} else {
FesFavorit($base_url,$en_resposta,$headers);
FesRebloc($base_url,$en_resposta,$headers);
$heoptat = "he fet impuls i favorit";
//print_r($reb_output_status);
}
} else { $heoptat = "Detectada etiqueta interna. Faig el tut de resposta"; }
// escriu la menció al fitxer per no repetir-la
$escriu_mencions = fopen($lloc."/fitxers/mencions_r.txt", "a") or die("No puc escriure al registre!");
fwrite($escriu_mencions, $en_resposta."\n");
fclose($escriu_mencions);
//echo "".$men_resp." - id: ".$en_resposta." ";
$mencs_tam = filesize("".$lloc."/fitxers/mencions_r.txt");
$mencs_lin = count(file("".$lloc."/fitxers/mencions_r.txt"));
$mencs_tam_b = filesize("".$lloc."/fitxers/mencions_r.bak");
$mencs_lin_b = count(file("".$lloc."/fitxers/mencions_r.bak"));
if(($mencs_tam > $mencs_tam_b)||($mencs_lin > $mencs_lin_b)) {
$copia_seguretat = exec("cat ".$lloc."/fitxers/mencions_r.txt > ".$lloc."/fitxers/mencions_r.bak", $eixida_cs, $resposta_cs);
if ($resposta_cs !=0) {
$log -> lwrite("INFO: copia de_seguretat mencions_r: ".( (($resposta_cs == 0))?"correcte":"ERRADA")."");
}
}
if( ($comp_salu == false)&&($comp_info == false)&&($comp_imps == false)&&($comp_orat == false)&&($comp_usu == false) ){
$escriu_mencions_detall = fopen($lloc."/fitxers/mencions.txt", "a") or die("No puc escriure al registre!");
fwrite($escriu_mencions_detall, $m_id.":::".$en_resposta.":::".$usuari.":::".$mencio_t.":::".$temps.":::".$mstg."\n");
fclose($escriu_mencions_detall);
$mencs_tam = filesize("".$lloc."/fitxers/mencions.txt");
$mencs_lin = count(file("".$lloc."/fitxers/mencions.txt"));
$mencs_tam_b = filesize("".$lloc."/fitxers/mencions.bak");
$mencs_lin_b = count(file("".$lloc."/fitxers/mencions.bak"));
if(($mencs_tam > $mencs_tam_b)||($mencs_lin > $mencs_lin_b)) {
$copia_seguretat = exec("cat ".$lloc."/fitxers/mencions.txt > ".$lloc."/fitxers/mencions.bak", $eixida_cs, $resposta_cs);
if ($resposta_cs !=0) {
$log -> lwrite("INFO: copia de seguretat mencions detall: ".( (($resposta_cs == 0))?"correcte":"ERRADA")."");
}
}
// echo "He escrit ". $m_id."-".$en_resposta."-".$usu_ac."-".$temps."\n";
$mr++;
}
}
$menc_mat_f[] = array( 'id' => (int)$m_id, 'mis_id' => (int)$miss_id, 'qui' => $usuari, 'mencio' => $mencio_t, 'quan' => $temps, 'que' => $mstg );
$nm++;
// echo "nm: ".$nm."\n";
$log->lwrite("NOVA MENCIO: ".$usuari." - id: ".$en_resposta." ".$mencio_t." ".$heoptat);
if( ($comp_info === false)&&($comp_salu === false)&&($comp_imps === false)&&($comp_orat === false)&&($comp_usu === false) ) {
// active VaderSentiment
// primer neteje la cadena a enviar
$mstg = html_entity_decode(strip_tags($mstg));
$mstg = str_replace(["'","`","","\n"],' ', $mstg);
$mstg = str_replace(['#','&','"','“','”'],'', $mstg);
$log -> lwrite("envie: ".$mstg."-".$en_resposta."-".$usuari."-".$mis_vis);
$emocio_act = shell_exec("php -f ".$lloc."/proves/proves_conversa.php ".$lloc." '".$mstg."' ".$en_resposta." ".$usuari." ".$temps." ".$mencio_t." ".$m_id."");
$log -> lwrite("INFO: emocio_act ".( ($emocio_act != null)?"correcte":"ERRADA")."");
} else {
// $log -> lwrite("envie: ".$mstg."-".$en_resposta."-".$usuari."-".$mis_vis);
if($comp_info != false) {
$fertutinfobot = exec("php -f ".$lloc."/utils/bot_plus_tut_info.php ".$lloc." '".$mstg."' ".$en_resposta." ".$usuari." ".$mis_vis."" , $ftinfo_eix, $ftinfo_res );
// $log -> lwrite("PROVA: fertutinfobot ".$ftinfo_res);
$log -> lwrite("INFO: fertutinfobot ".( ($ftinfo_res == 0)?"correcte":"ERRADA")."");
// $log -> lwrite("INFO: ".$ftinfo_res." enviat: ".$mstg."-".$en_resposta."-".$usuari."-".$mis_vis."");
}
if($comp_salu != false) {
$fertutsaludabot = exec("php -f ".$lloc."/utils/bot_plus_tut_salutacio.php ".$lloc." '".$mstg."' ".$en_resposta." ".$usuari." ".$mis_vis."" , $ftsalu_eix, $ftsalu_res );
// if($ftsalu_res != 0) {
$log -> lwrite("INFO: fertutsaludabot ".( ($ftsalu_res == 0)?"correcte":"ERRADA")."");
// $log -> lwrite("INFO: ".$ftsalu_res." enviat: '".$mstg."'-".$en_resposta."-".$usuari."-".$mis_vis."");
// }
}
if($comp_imps != false) {
$fertutimpulsosbot = exec("php -f ".$lloc."/utils/bot_plus_tut_impulsos.php ".$lloc." '".$mstg."' ".$en_resposta." ".$usuari." ".$mis_vis."" , $ftimps_eix, $ftimps_res );
// if($ftimps_res != 0) {
$log -> lwrite("INFO: fertutimpulsosbot ".( ($ftimps_res == 0)?"correcte":"ERRADA")."");
// $log -> lwrite("INFO: ".$ftimps_res." enviat: '".$mstg."'-".$en_resposta."-".$usuari."-".$mis_vis."");
// }
}
if($comp_orat != false) {
$fertutoratgebot = exec("php -f ".$lloc."/utils/bot_plus_tut_oratge.php ".$lloc." '".$mstg."' ".$en_resposta." ".$usuari." ".$mis_vis."" , $ftorat_eix, $ftorat_res );
// if($ftorat_res != 0) {
$log -> lwrite("INFO: fertutoratgebot ".( ($ftorat_res == 0)?"correcte":"ERRADA")."");
// $log -> lwrite("INFO: ".$ftorat_res." enviat: '".$mstg."'-".$en_resposta."-".$usuari."-".$mis_vis."");
// }
}
if($comp_usu != false) {
$fertutusuaribot = exec("php -f ".$lloc."/utils/bot_plus_tut_usuari.php ".$lloc." '".$mstg."' ".$en_resposta." ".$usuari." ".$mis_vis."" , $ftusu_eix, $ftusu_res );
// if($ftorat_res != 0) {
$log -> lwrite("INFO: fertutusuaribot ".( ($ftusu_res == 0)?"correcte":"ERRADA")."");
// $log -> lwrite("INFO: ".$ftusu_res." enviat: '".$mstg."'-".$en_resposta."-".$usuari."-".$mis_vis."");
// }
}
}
// final missatge no es nul
}
//final no repetir
}
// final bucle for
}
// fer la matriu de les dades existents al json amb filtrat d'etiquetes
if ( ($nm > 0)&&($comp_info == false)&&($comp_salu == false)&&($comp_orat == false)&&($comp_imps == false)&&($comp_usu == false) ) {
//$usa_json = exec("php ".$lloc."/proves/proves_impulsos_json.php ".$lloc , $eix_usa_json, $resp_usa_json);
$usa_json = shell_exec("php ".$lloc."/utils/bot_plus_mencions_json.php ".$lloc);
}
if($mem_net == 1) { $menc_mat = null; $menc_mat_f = null; unset($menc_mat,$menc_mat_f); }
//retalle a un màxim de XXX linies
$fit_mencions = $lloc."/fitxers/mencions_r.txt";
$lin_men = count(file($fit_mencions));
if( $lin_men > $max_linies ) {
// $net_men0 = shell_exec("tail -".$max_linies." ".$lloc."/fitxers/mencions_r.txt | tee ".$lloc."/fitxers/mencions_r.txt");
$fitx = new SplFileObject($lloc."/fitxers/mencions_r.txt", "r");
$fitx->seek(PHP_INT_MAX);
$last_line = $fitx->key();
$lines = new LimitIterator($fitx, $last_line - $max_linies, $last_line); //n being non-zero positive integer $max_linies
// print_r(iterator_to_array($lines));
// Iterate each element
$it = iterator_to_array($lines);
$escriu_magatzem = fopen($lloc . "/fitxers/mencions_r.txt", "w") or die("No puc escriure la data!");
foreach($it as $ele){
// echo nl2br($ele . "\n");
fwrite($escriu_magatzem, $ele);
// usleep(100000);
}
fclose($escriu_magatzem);
$net_men00= shell_exec("cat ".$lloc."/fitxers/mencions_r.txt > ".$lloc."/fitxers/mencions_r.bak");
usleep(200000);
}
$fit_mencions = $lloc."/fitxers/mencions.txt";
$lin_men = count(file($fit_mencions));
if( $lin_men > $max_linies ) {
// $net_men1 = shell_exec("tail -".$max_linies." ".$lloc."/fitxers/mencions.txt | tee ".$lloc."/fitxers/mencions.txt");
$fitxs = new SplFileObject($lloc."/fitxers/mencions.txt", "r");
$fitxs->seek(PHP_INT_MAX);
$last_lin = $fitxs->key();
$lines = new LimitIterator($fitxs, $last_lin - $max_linies, $last_lin); //n being non-zero positive integer $max_linies
// print_r(iterator_to_array($lines));
// Iterate each element
$it = iterator_to_array($lines);
$escriu_magatzem = fopen($lloc . "/fitxers/mencions.txt", "w") or die("No puc escriure la data!");
foreach($it as $ele){
// echo nl2br($ele . "\n");
fwrite($escriu_magatzem, $ele);
// usleep(100000);
}
fclose($escriu_magatzem);
$net_men1 = shell_exec("cat ".$lloc."/fitxers/mencions.txt > ".$lloc."/fitxers/mencions.bak");
//}
$men_tam = filesize("".$lloc."/fitxers/mencions.txt");
$men_lin = count(file("".$lloc."/fitxers/mencions.txt"));
$men_lin_bak = count(file("".$lloc."/fitxers/mencions.bak"));
if($men_tam == 0) {
$recupera = shell_exec("php ".$lloc."/utils_cli/bot_plus_cli_mencions_json_cli_refer.php ".$lloc);
}
if ($men_lin_bak <= $men_lin) {
$cop_men0 = shell_exec("cat ".$lloc."/fitxers/mencions_r.txt > ".$lloc."/fitxers/mencions_r.bak");
$cop_men1 = shell_exec("cat ".$lloc."/fitxers/mencions.txt > ".$lloc."/fitxers/mencions.bak");
}
}
$tmf = microtime(true);
$dm = $tmf - $tm;
//echo "Temps mencions: ".round($dm,4)."";
$log->lwrite("Temps mencions: ".round($dm,4)." segons");
// afegir aqui i arrancar els impulsos?
// buidar variables
if($mem_net == 1) {
$resposta = null; $lin_men = null; $reg_lin = null; $reg_lin_bak = null; $mencs_lin = null; $mencs_lin_b = null;
unset($resposta,$lin_men,$reg_lin,$reg_lin_bak,$mencs_lin,$mencs_lin_b);
}
if($control_memoria_utils == 1) {
$log -> lwrite ( mostra_us_memoria()." ".mostra_pic_memoria()." - ".__LINE__ );
}
?>