bot_plus/utils/bot_plus_mencions.php

383 líneas
15 KiB
PHP

2023-05-24 10:40:54 +02:00
<?php
$tm = microtime(true);
// Comprova els arguments, en cas de no existir presenta l'ajuda.
if (!empty($_SERVER["argv"][1])){
$argument = $_SERVER["argv"][1];
2024-08-21 20:50:04 +02:00
// $mstg = $_SERVER["argv"][2];
2023-05-24 10:40:54 +02:00
} 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.");
2024-08-21 20:50:04 +02:00
if($control_memoria_utils == 1) {
$log -> lwrite ( mostra_us_memoria()." ".mostra_pic_memoria()." - ".__LINE__ );
}
2023-05-24 10:40:54 +02:00
// preparatius i variables comunes
$resposta = ConsultaNotificacions($token,$base_url,$limit_m,$headers);
$tmc = microtime(true);
$dcon = $tmc - $tm;
2024-08-21 20:50:04 +02:00
//print_r($resposta);
//exit;
2023-05-24 10:40:54 +02:00
$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'];
2024-08-21 20:50:04 +02:00
2023-05-24 10:40:54 +02:00
if ($mencio == "mention") {
$mis_id = $resposta[$d]['status']['id'];
2024-08-21 20:50:04 +02:00
$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 );
2023-05-24 10:40:54 +02:00
}
2024-08-21 20:50:04 +02:00
//print_r($menc_mat);
//exit;
2023-05-24 10:40:54 +02:00
$nombre_matriu = count($menc_mat);
$men_resp = null;
2024-08-21 20:50:04 +02:00
$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;
}
2023-05-24 10:40:54 +02:00
// 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'];
2024-08-21 20:50:04 +02:00
$mstg = $menc_mat[$e]['que'];
$mis_vis = $menc_mat[$e]['visib'];
2023-05-24 10:40:54 +02:00
$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";
2024-08-21 20:50:04 +02:00
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".
2023-05-24 10:40:54 +02:00
$en_resposta = $miss_id;
if ( ($men_resp != null) ) {
2024-08-21 20:50:04 +02:00
$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
}
2023-05-24 10:40:54 +02:00
}
2024-08-21 20:50:04 +02:00
$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)
){
2023-05-24 10:40:54 +02:00
$decisio = TriaOpcio($en_resposta);
if( ($decisio == 1) ||
($decisio == 2) ||
($decisio == 3) ||
($decisio == 4) ||
2024-08-21 20:50:04 +02:00
($decisio == 5) ) {
2023-05-24 10:40:54 +02:00
//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) ||
2024-08-21 20:50:04 +02:00
($decisio == 8) ||
($decisio == 9) ) {
2023-05-24 10:40:54 +02:00
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);
}
2024-08-21 20:50:04 +02:00
} else { $heoptat = "Detectada etiqueta interna. Faig el tut de resposta"; }
2023-05-24 10:40:54 +02:00
// 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." ";
2024-08-21 20:50:04 +02:00
$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) ){
2023-05-24 10:40:54 +02:00
$escriu_mencions_detall = fopen($lloc."/fitxers/mencions.txt", "a") or die("No puc escriure al registre!");
2024-08-21 20:50:04 +02:00
fwrite($escriu_mencions_detall, $m_id.":::".$en_resposta.":::".$usuari.":::".$mencio_t.":::".$temps.":::".$mstg."\n");
2023-05-24 10:40:54 +02:00
fclose($escriu_mencions_detall);
2024-08-21 20:50:04 +02:00
$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")."");
}
}
2023-05-24 10:40:54 +02:00
// echo "He escrit ". $m_id."-".$en_resposta."-".$usu_ac."-".$temps."\n";
$mr++;
2024-08-21 20:50:04 +02:00
}
2023-05-24 10:40:54 +02:00
}
2024-08-21 20:50:04 +02:00
$menc_mat_f[] = array( 'id' => (int)$m_id, 'mis_id' => (int)$miss_id, 'qui' => $usuari, 'mencio' => $mencio_t, 'quan' => $temps, 'que' => $mstg );
2023-05-24 10:40:54 +02:00
$nm++;
// echo "nm: ".$nm."\n";
$log->lwrite("NOVA MENCIO: ".$usuari." - id: ".$en_resposta." ".$mencio_t." ".$heoptat);
2024-08-21 20:50:04 +02:00
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."");
// }
}
}
2023-05-24 10:40:54 +02:00
// final missatge no es nul
}
//final no repetir
}
// final bucle for
}
2024-08-21 20:50:04 +02:00
// 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);
}
2023-05-24 10:40:54 +02:00
2024-08-21 20:50:04 +02:00
if($mem_net == 1) { $menc_mat = null; $menc_mat_f = null; unset($menc_mat,$menc_mat_f); }
2023-05-24 10:40:54 +02:00
2024-08-21 20:50:04 +02:00
//retalle a un màxim de XXX linies
$fit_mencions = $lloc."/fitxers/mencions_r.txt";
$lin_men = count(file($fit_mencions));
2023-05-24 10:40:54 +02:00
2024-08-21 20:50:04 +02:00
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);
2023-05-24 10:40:54 +02:00
2024-08-21 20:50:04 +02:00
$net_men00= shell_exec("cat ".$lloc."/fitxers/mencions_r.txt > ".$lloc."/fitxers/mencions_r.bak");
usleep(200000);
2023-05-24 10:40:54 +02:00
}
2024-08-21 20:50:04 +02:00
$fit_mencions = $lloc."/fitxers/mencions.txt";
2023-05-24 10:40:54 +02:00
$lin_men = count(file($fit_mencions));
2024-08-21 20:50:04 +02:00
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");
}
2023-05-24 10:40:54 +02:00
}
$tmf = microtime(true);
$dm = $tmf - $tm;
//echo "Temps mencions: ".round($dm,4)."";
2024-08-21 20:50:04 +02:00
$log->lwrite("Temps mencions: ".round($dm,4)." segons");
2023-05-24 10:40:54 +02:00
// afegir aqui i arrancar els impulsos?
2024-08-21 20:50:04 +02:00
// 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__ );
}
2023-05-24 10:40:54 +02:00
?>