User:OPeixe

{{userpage}}

---

{{Babel|es|gl|en-5|ca-2}}

{{Userboxtop}}

{{Template:user programming-N}}

{{:User:Quasar Jarosz/Userboxes/Perl}}

{{Template:user sql-N}}

{{Template:user xml-4}}

{{Userboxbottom}}

(OPeixe).

OPeixe

OPeixe

WikiProject Galicia

----


ELingua BOT. An IRC BOT written on 2004 to be able to make queries on the RAE Real_Academia_Espa%C3%B1ola web site and store results on a MySQL table. This version also queries for Synonyms and Antonyms from Oviedo University web site.


----

  1. !/usr/bin/perl

use warnings;

use strict;

use POE qw(Component::Client::HTTP Component::IRC);

use HTTP::Request::Common qw(GET POST);

use HTML::Entities;

use Time::HiRes qw( usleep ualarm gettimeofday tv_interval );

use Time::Format qw(%time %strftime %manip);

use Unicode::String qw(utf8 latin1 utf16);

use DBI; #usar dbi para perl-mysql

my $dbh=0;

my ($Nombre_Bd,$Servidor_Bd,$Usuario_Bd,$Contrasenia_Bd) = ("","","","");

my $BD ="ELingua";

my $ServerBD ="localhost";

my $UserBD ="root";

my $PassBD ="";

&BDLogin($BD,$ServerBD,$UserBD,$PassBD);

$|=1;

my $identifier = "rae" . time();

my $owner = 'OPeixe';

my $servers = 'aire.irc-hispano.org neptuno.irc-hispano.org irc.irc-hispano.org dune.irc-hispano.org andromeda.irc-hispano.org atreides.irc-hispano.org coruscant.irc-hispano.org fuego.irc-hispano.org luna.irc-hispano.org';

my $ports = '6666 6667 6668';

my $nick = 'ELingua';

my $ircname = 'Lengua Libre';

my $username = 'LENGUA';

my $quitmsg = 'Abandonando...';

my $channels = '#ELingua';

my $ignorelist = '';

my $majorver='1';

my $minorver='2';

my $build="beta";

my $released='(1/3/04)';

my $version =$majorver.'.'.$minorver.'.'.$build.' '.$released;

my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);

$year += 1900;

$mon +=1;

my $hInit="$mday-$mon-$year $hour:$min:$sec";

my $tInit;

my $termOut=1; # 0 = Consola Silenciosa

my @valBusca=("RAE Usual","Sinónimos UniOvi","Antónimos UniOvi");

my %ignore = map { $_ => 1 } split(" ", $ignorelist);

my %tojoin = map { $_ => 1} split(" ", $channels);

my ($title, $join, $leave, $priv, $KERNEL, $CHAN);

&gLog("Iniciando BOT.");

POE::Component::IRC->new($identifier) or die "Error: $!";

POE::Component::Client::HTTP->spawn (

Agent => 'ELingua ('.$version.')',

Alias => 'ELingua',

Timeout => 120,

);

sub _start {

my $server = 'andromeda.irc-hispano.org';

my $port = '6667';

my ($kernel) = $_[KERNEL];

$kernel->post($identifier, 'register', 'all');

$kernel->post($identifier, 'connect',

{

Debug => 0,

Nick => $nick,

Server => $server,

Port => $port,

Username => $username,

Ircname => $ircname,

}

);

&gLog("IRC BOT Iniciado.");

}

sub irc_001 {

my ($kernel) = $_[KERNEL];

$kernel->post( $identifier, 'mode', $nick, '+i' );

&gLog("IRC_001");

foreach my $canal (keys %tojoin) {

$kernel->post( $identifier, 'join', $canal );

&gLog("Entrando a : ".$canal);

$kernel->post($identifier,'notice',$canal,$version);

}

$tInit= [gettimeofday];

}

sub irc_disconnected {

my ($server) = $_[ARG0];

&gLog ("Desconectado de ".$server);

$_[KERNEL]->post( "rae", "unregister", "all" );

}

sub irc_error {

my $err = $_[ARG0];

&gLog("Error en servidor: ".$err);

$poe_kernel->run();

}

sub irc_socketerr {

my $err = $_[ARG0];

&gLog ("No se ha podido conectar al servidor: ".$err);

$poe_kernel->run();

}

sub _stop {

my ($kernel) = $_[KERNEL];

&gLog ("Sesión finalizada.");

exit 0;

}

sub irc_ctcp_action {

my ($kernel, $who, $chan, $msg) = @_[KERNEL, ARG0 .. ARG2];

$who =~ s/(.*)!(.*)/$1/;

  1. $kernel->post($identifier,'notice', $who, 'CTCP Desactivado.');

&gLog("Sesión CTCP de : ".$who.":".$msg);

}

sub irc_msg {

my ($kernel, $who, $chan, $msg) = @_[KERNEL, ARG0 .. ARG2];

$who =~ s/(.*)!(.*)/$1/;

&gLog("IRC PRIVMSG: ".$who." : ".$msg);

if ($msg eq "quit") {

$priv = 1;

&ordenQuit($kernel,$who,$chan);

}

elsif (($msg =~ /^join (\S+)/i) || ($msg =~ /^join (\S+)/i)) {

$join = $1;

&ordenJoin($kernel, $who, $chan, $join);

}

elsif (($msg =~ /^leave (\S+)/i) || ($msg =~ /^leave (\S+)/i)) {

$leave = $1;

&ordenPart($kernel, $who, $chan, $leave);

}

}

sub irc_public {

my ($kernel, $who, $chan, $msg) = @_[KERNEL, ARG0 .. ARG2];

$who =~ s/(.*)!(.*)/$1/;

if (($msg =~/^::/i)) {

my @ircInput=split("::",$msg);

my @ircCommand=split(" ",$ircInput[1]) unless !defined($ircInput[1]);

my ($palabra,$command,$param)="";

$palabra=$ircCommand[0] unless !defined($ircCommand[0]);

$palabra=~s/ //g;

$command=$ircCommand[1] unless !defined($ircCommand[1]);

$param= $ircCommand[2] unless !defined($ircCommand[2]);

my $dBusca=0;

my ($mostrauso, $mostraacp);

if (!defined $palabra || $palabra eq "") {

return;

}

if (defined $command) {

if ($command eq "acep") {

$mostrauso=0;

if (defined $param) {

$mostraacp=$param+1;

}

else {

$mostraacp=100;

}

}

elsif ($command eq "usos") {

$mostraacp=1;

if (defined $param) {

$mostrauso=$param;

}

else {

$mostrauso=100;

}

}

elsif ($command eq "sino") {

$dBusca=1;

}

elsif ($command eq "anto") {

$dBusca=2;

}

}

else {

$command="null";

$param="null";

$mostrauso=5;

$mostraacp=6;

}

if (lc($palabra) eq lc($nick)) {

if (lc($command) eq "quit") {

&ordenQuit($kernel,$who,$chan);

}

elsif (lc($command) eq "join") {

if ($param ne "") {

&ordenJoin($kernel, $who, $chan, $param);

}

}

elsif (lc($command) eq "part") {

if ($param ne "") {

&ordenPart($kernel, $who, $chan, $param);

}

}

else {

&gLog("Enviando ayuda a ".$who." en ".$chan->[0]);

$kernel->post($identifier,'notice',$chan->[0], ':: '.$version);

$kernel->post($identifier,'notice',$chan->[0], ':: Para localizar una palabra ::palabra');

$kernel->post($identifier,'notice',$chan->[0], ':: se muestran las primeras 5 acepciones y 5 usos frecuentes.');

$kernel->post($identifier,'notice',$chan->[0], ':: Para obtener n acpeciones ::palabra acep n (pe. ::casa acep 10)');

$kernel->post($identifier,'notice',$chan->[0], ':: si no se especifica número se muestran todas.');

$kernel->post($identifier,'notice',$chan->[0], ':: Para obtener n usos ::palabra usos n');

$kernel->post($identifier,'notice',$chan->[0], ':: si no se especifica número se muestran todas.');

$kernel->post($identifier,'notice',$chan->[0], ':: Ver 1.1.5 ::palabra sino localiza sinónimos de palabra.');

$kernel->post($identifier,'notice',$chan->[0], ':: Ver 1.1.5 ::palabra anto localiza antónimos de palabra.');

$kernel->post($identifier,'notice',$chan->[0], ':: Fin ayuda.');

}

return;

}

&gLog("Solicitud de : ".$palabra." (".$command.":".$param.") en ".$valBusca[$dBusca]." por ".$who." en ".$chan->[0]);

$kernel->post($identifier,'notice',$chan->[0],':: Localizando "'.$palabra.'" en '.$valBusca[$dBusca].' para '.$who);

my @valRespuesta=split(":",&checkDB($palabra,$who,$command,$param));

my ($resultadoHTTP,$msgStats, $msgFechas);

#valRespuesta { Está en la BD : Total ACEP : Total USOS : Total SINONIMOS : Total ANTONIMOS : Total QUERYS : Fecha REG : Fecha LAST )

if ($valRespuesta[0]==0) {

# No está en la BD ...

&getCONTENT($kernel,$palabra,$dBusca,$who,$mostrauso,$mostraacp,$command,$param);

$msgStats='*** "'.$palabra.'" no está en la BBDD local. Actualizando datos.';

$msgFechas='';

$kernel->post($identifier,'notice',$chan->[0],':: '.$msgStats);

# $msgFechas=&fechaEsp(&miQuery("select now()"));

}

elsif ($valRespuesta[0]==99) {

# Está en la tabla de ERRORES (NORAE).

$msgStats='** '.$palabra.' NO EXISTE. Esta palabra no está en el diccionario de la RAE.';

$msgFechas='En BBDD desde '.$valRespuesta[1].' ('.$valRespuesta[2].'). Última petición '.$valRespuesta[3].' ('.$valRespuesta[4].'). Peticiones: '.$valRespuesta[5];

my $tiempoON= tv_interval ( $tInit , [gettimeofday] );

my $tiempoElapsed=$time{'hh:mm:ss', $tiempoON-3600};

$kernel->post($identifier,'notice',$chan->[0],':: '.$msgStats);

$kernel->post($identifier,'notice',$chan->[0],':: '.$msgFechas);

}

else {

# Está en RAE

$msgStats='** '.$palabra.' '.$valRespuesta[1].' Acepciones, '.$valRespuesta[2].' Usos, '.$valRespuesta[3];

$msgStats.=' Sinónimos, '. $valRespuesta[4].' Antónimos, '.$valRespuesta[5].' Peticiones.';

$msgFechas='En BBDD desde '.$valRespuesta[6].' ('.$valRespuesta[8].'). Última petición '.$valRespuesta[7].' ('.$valRespuesta[9].')';

my $tiempoON= tv_interval ( $tInit , [gettimeofday] );

my $tiempoElapsed=$time{'hh:mm:ss', $tiempoON-3600};

$kernel->post($identifier,'notice',$chan->[0],':: '.$msgStats);

$kernel->post($identifier,'notice',$chan->[0],':: '.$msgFechas);

&muestraLema($kernel,$palabra,$dBusca,$who,$mostrauso,$mostraacp,$command,$param);

}

}

elsif (index(lc($msg),lc($nick))>-1) {

my $tiempoON= tv_interval ( $tInit , [gettimeofday] );

my $tiempoElapsed=$time{'hh:mm:ss', $tiempoON-3600};

$kernel->post($identifier,'notice', $chan->[0], $version .' En línea '.$tiempoElapsed.' desde '.$hInit);

$kernel->post($identifier,'notice', $who, 'Para ayuda ::ELingua');

}

}

sub muestraLema {

my ($kernel,$lema,$donde,$who,$mostrauso,$mostraacp,$command,$param) = @_;

# si estamos aquí ... es que la palabra está en la BD

my @abrevs;

my $abrevList;

my ($elLema,$laAcep);

my ($t,$p,$n);

if ($command eq "sino") {

}

$elLema=&QueryRef("select ID_REC,LEMA,ETIMOLOGIA from PALABRAS where LEMA='$lema'");

if ($#{$elLema}>-1) {

for ($t=0;$t<$#{$elLema}+1;$t++) {

$kernel->post($identifier,'privmsg', $who, ':: ---------------------------------------');

$kernel->post($identifier,'privmsg', $who, ':: **'.$elLema->[$t][1].' ( '.$elLema->[$t][2].' )');

$kernel->post($identifier,'privmsg', $who, ':: **');

$laAcep=&QueryRef("select RAEORDEN,ACEPCION,ABREVIATURAS from ACEPCIONES where REF_ID='$elLema->[$t][0]' order by RAEORDEN");

for ($p=0;$p<$#{$laAcep}+1;$p++) {

$abrevList="";

my @abrevID=split(",",$laAcep->[$p][2]);

for ($n=0;$n<@abrevID;$n++) {

($abrevs[$n])=&QueryArr("select ABREVIATURA from ABREVIATURAS where ID_REC='$abrevID[$n]'");

$abrevList.=" ".$abrevs[$n];

}

$kernel->post($identifier,'privmsg', $who, ':: * '.$laAcep->[$p][0].' '.$abrevList.' '.$laAcep->[$p][1]);

}

}

$kernel->post($identifier,'privmsg', $who, ':: **');

$kernel->post($identifier,'privmsg', $who, ':: FIN. © RAE.ES');

$kernel->post($identifier,'privmsg', $who, ':: ---------------------------------------');

&gLog("Mostrado a $who $lema");

}

else {

$kernel->post($identifier,'privmsg', $who, ':: ---------------------------------------');

$kernel->post($identifier,'privmsg', $who, ':: '.$lema.' NO ESTÁ en la RAE.');

$kernel->post($identifier,'privmsg', $who, ':: ---------------------------------------');

}

}

sub checkDB {

my ( $lema, $who, $command, $param) = @_;

my ( $idNRAE, $totalAcep,$totalUsos,$totalSino,$totalAnto,$totalPeticiones,$fechaInicio,$fechaFinal ) = 0;

my ( $nickInicio,$nickFinal ) = "*";

my $idLemas = &QueryRef("select ID_REC from PALABRAS where LEMA='$lema'");

if ($#{$idLemas}>-1) {

($fechaInicio,$nickInicio,$totalPeticiones)=&QueryArr("select FECHA_INICIO,NICK_INICIO,TOTAL_QUERY from LEMASTATS where REF_ID='$idLemas->[0][0]'");

$totalPeticiones++;

&QueryDO("update LEMASTATS set FECHA_ULTIMA=curdate(),NICK_FINAL='$who',TOTAL_QUERY='$totalPeticiones' where REF_ID='$idLemas->[0][0]'");

($fechaFinal)=&QueryArr("select curdate()");

$fechaInicio=&fechaEsp($fechaInicio);

$fechaFinal=&fechaEsp($fechaFinal);

$nickFinal=$who;

for (my $t=0;$t<$#{$idLemas}+1;$t++) {

my ($tAcep)=&QueryArr("select count(*) from ACEPCIONES where REF_ID='$idLemas->[$t][0]'");

my ($tUsos)=&QueryArr("select count(*) from USOS where REF_ID='$idLemas->[$t][0]'");

my ($tAnto)=&QueryArr("select count(*) from ANTONIMOS where REF_ID='$idLemas->[$t][0]'");

my ($tSino)=&QueryArr("select count(*) from SINONIMOS where REF_ID='$idLemas->[$t][0]'");

$totalAcep+=$tAcep;

$totalUsos+=$tUsos;

$totalSino+=$tSino;

$totalAnto+=$tAnto;

}

return '1:'.$totalAcep.':'.$totalUsos.':'.$totalSino.':'.$totalAnto.':'.$totalPeticiones.':'.$fechaInicio.':'.$fechaFinal.':'.$nickInicio.':'.$nickFinal;

}

else {

my ($idNRAE,$fechaInicio,$nickInicio,$totalPeticiones)=&QueryArr("select ID_REC,FECHA_INICIO,NICK_INICIO,TOTAL_QUERY from NORAE where PALABRA='$lema'");

if (defined($idNRAE)) {

if ($idNRAE>0) {

$totalPeticiones++;

&QueryDO("update NORAE set FECHA_ULTIMA=now(),NICK_ULTIMO='$who',TOTAL_QUERY='$totalPeticiones' where ID_REC='$idNRAE'");

($fechaFinal)=&QueryArr("select curdate()");

$fechaInicio=&fechaEsp($fechaInicio);

$fechaFinal=&fechaEsp($fechaFinal);

$nickFinal=$who;

return '99:'.$fechaInicio.':'.$nickInicio.':'.$fechaFinal.':'.$nickFinal.':'.$totalPeticiones;

}

else {

return 0;

}

}

else {

return 0;

}

}

}

sub fechaEsp {

my $tfecha=$_[0];

my @fecha=split("-",$tfecha);

$tfecha=$fecha[2]."-".$fecha[1]."-".$fecha[0];

return $tfecha;

}

sub getCONTENT {

my ($mkernel,$lema,$donde,$who,$mostrauso,$mostraacp,$command,$param)=@_;

my ($url,$content);

if ($donde==0) {

#RAE

&gLog("Buscando en RAE ... Abriendo HTTP.");

my $TIPO_HTML='2';

my $LEMA=.$lema.;

my $FORMATO='DRAE';

$url='http://buscon.rae.es/draeI/SrvltGUIBusUsual?TIPO_HTML='.$TIPO_HTML.'&LEMA='.$LEMA.'&FORMATO='.$FORMATO;

}

elsif ($donde==1) {

$url='http://tradu.scig.uniovi.es/sinon.cgi?np=30&pb='.$lema;

}

elsif ($donde==2) {

$url='http://tradu.scig.uniovi.es/sinon.cgi?np=30&pb='.$lema;

}

if (defined($url)) {

POE::Session->create

( inline_states =>

{ _start => sub {

my ( $wkernel, $heap ) = @_[ KERNEL, HEAP ];

$wkernel->post( ELingua => request => got_response => GET $url );

},

got_response => sub {

my ( $heap, $request_packet, $response_packet ) = @_[ HEAP, ARG0, ARG1 ];

my $http_request = $request_packet->[0];

my $http_response = $response_packet->[0];

my $response_string = $http_response->as_string();

#if ($http_response->is_success) {

my $initS="

if (index($response_string,"0) {

$initS="

}

$content=substr($response_string,index($response_string,$initS),length($response_string)-index($response_string,$initS));

&leeRaeWEB($mkernel,$lema,$donde,$content,$who,$mostrauso,$mostraacp,$command,$param);

#}

  1. else
  2. {
  3. $mkernel->post($identifier,'notice', $who, 'El servidor de '.$valBusca[$donde].' no responde. Inténtalo más tarde.');
  4. &gLog("ERROR WEB: ".$response_string);
  5. }

},

},

);

}

}

sub leeRaeWEB {

my ($kernel,$lema,$donde,$content,$who,$mostrauso,$mostraacp,$command,$param) = @_;

my $final=$content;

my $errorLema=0;

if ($donde == 0) {

  1. $final=~ s/<\/tr>/\n/g;
  2. my $idARt$final=~ s/

$final=~ s//\n[LEMA]/g;

$final=~ s//\n[ETIMO]/g;

$final=~ s//\n[ORDEN]/g;

$final=~ s///g;

$final=~ s//\n[ABREV \"$1\"]/g;

$final=~ s///g;

$final=~ s//\n[ABREV \"$1\"]/g;

$final=~ s//\n[ACEP]/g;

$final=~ s//\n[FORCOM]/g;

$final=~ s//\n[ORDENFC]/g;

$final=~ s//\nOK/g;

$final=~ s// /g;

my $debug=utf8($final);

$final= $debug->latin1;

my $Titulo=$final=~ /(.*?)<\/TITLE>/;</p> <p>$Titulo=$1;</p> <p>$final=~ s/<a title=\"Véase\">/\n/g;</p> <p>$final=~ s/<([^>])*>//g;</p> <p>$final=~ s/ \[/\[/g;</p> <p>$final=~ s/Real Academia Española © Todos los derechos reservados/\n/g;</p> <p>my @lineas=split("\n",$final);</p> <p>my $fin=0;</p> <p>my $ttUso=-1;</p> <p>my $ttAcp=0;</p> <p>my ( $lemaTemp, @miQuery, $idTemp, $etimoTemp, $ordenTemp, $numAbrev, @abreTemp, @abreTitulo, $acepTemp, $nLema, $idFormCom, $formCom, $ordenForm);</p> <p>$nLema=0;</p> <p>if ($Titulo ne "RAE. DRAE. Aviso de error.") {</p> <p>for (my $t=0;$t<@lineas;$t++) {</p> <p>my $lineaOut;</p> <p>if ($lineas[$t] =~/^\[/i) {</p> <p>my $raeOb = $lineas[$t] =~ /\[(.*?)\]/;</p> <p>$lineaOut=substr( $lineas[$t], index($lineas[$t],"]")+1, length($lineas[$t])-index($lineas[$t],"]") );</p> <p>decode_entities($lineaOut);</p> <p>$raeOb=$1;</p> <p>$lineaOut=~s/'/\\'/gi;</p> <p>if ($raeOb eq "LEMA") {</p> <p>if ( (index($lineaOut,".")<0) && (index($lineaOut," ")!=0) ) {</p> <p># Grabar LEMA EN BD.</p> <p>if (index($lineaOut,",")>-1) {</p> <p>$lemaTemp=substr($lineaOut,0,index($lineaOut,","));</p> <p>} else {$lemaTemp=$lineaOut;}</p> <p>$etimoTemp="";</p> <p>$nLema=1;</p> <p>}</p> <p>}</p> <p>elsif ($raeOb eq "ETIMO") {</p> <p># my $idLema=&BDdimeID($lemaTemp);</p> <p>$etimoTemp.=$lineaOut;</p> <p>}</p> <p>elsif ( ($raeOb eq "ORDEN") || ($raeOb eq "ORDENFC") ) {</p> <p>if (defined ($etimoTemp)) {</p> <p>$etimoTemp=~s/\(//g;</p> <p>$etimoTemp=~s/\)//g;</p> <p>} else {$etimoTemp="-";}</p> <p>if ($nLema==1) {</p> <p>&QueryDO("insert into PALABRAS (ID_REC,LEMA,ETIMOLOGIA) values (0, '$lemaTemp','$etimoTemp')");</p> <p>($idTemp) = &QueryArr("select MAX(ID_REC) from PALABRAS where LEMA='$lemaTemp'");</p> <p>&QueryDO("insert into LEMASTATS (REF_ID,FECHA_INICIO,NICK_INICIO,FECHA_ULTIMA,NICK_FINAL,TOTAL_QUERY) values ('$idTemp',now(),'$who',now(),'$who','1')");</p> <p>}</p> <p># Nueva acepción</p> <p>$lineaOut=~s/\.//g;</p> <p>$ordenTemp=$lineaOut;</p> <p>$numAbrev=0;</p> <p>}</p> <p>elsif (substr($raeOb,0,length("ABREV")) eq "ABREV") {</p> <p>my $titTemp = $raeOb =~ /\"(.*?)\"/;</p> <p>$titTemp=$1;</p> <p>#$lineaOut=substr( $lineaOut, index($lineaOut,"]")+1, length($lineaOut)-index($lineaOut,"]") );</p> <p>my ( $idAbrev )=&QueryArr("select ID_REC from ABREVIATURAS where ABREVIATURA='$lineaOut'");</p> <p>if (!defined($idAbrev)) {</p> <p>&QueryDO("insert into ABREVIATURAS (ID_REC,ABREVIATURA,DESCRIPCION) values (0,'$lineaOut','$titTemp')");</p> <p>( $idAbrev )=&QueryArr("select ID_REC from ABREVIATURAS where ABREVIATURA='$lineaOut'");</p> <p>}</p> <ol> <li>if ($idAbrev<1) {</li> <li>&QueryDO("insert into ABREVIATURAS (ID_REC,ABREVIATURA,DESCRIPCION) values (0,'$lineaOut','$titTemp')");</li> <li>( $idAbrev )=&QueryArr("select ID_REC from ABREVIATURAS where ABREVIATURA='$lineaOut'");</li> <li>}</li> </ol> <p>$abreTemp[$numAbrev]=$idAbrev;</p> <p>$numAbrev++;</p> <p>}</p> <p>elsif ($raeOb eq "ACEP") {</p> <p>my $abrevList="";</p> <p>my $s;</p> <p>for ($s=0;$s<@abreTemp-1;$s++) {</p> <p>$abrevList.="$abreTemp[$s],";</p> <p>}</p> <p>$abrevList.="$abreTemp[$s]";</p> <p>$acepTemp=$lineaOut;</p> <p>if ($nLema==3) {</p> <p>&QueryDO("insert into USOSACEP (REF_ID,RAEORDEN,ACEPCION,ABREVIATURAS) values ('$idFormCom','$ordenTemp','$acepTemp','$abrevList')");</p> <p>}</p> <p>else {</p> <p>&QueryDO("insert into ACEPCIONES (REF_ID,RAEORDEN,ACEPCION,ABREVIATURAS) values ('$idTemp','$ordenTemp','$acepTemp','$abrevList')");</p> <p>$nLema=2;</p> <p>}</p> <p>}</p> <p>#RAE: FORCOM : ~s en alto.</p> <p>#RAE: ORDENFC : 1.</p> <p>elsif ($raeOb eq "FORCOM") {</p> <p>$nLema=3;</p> <p>&QueryDO("insert into USOS (ID_REC,REF_ID,FRASE) values (0,'$idTemp','$lineaOut')");</p> <p>( $idFormCom ) = &QueryArr("select MAX(ID_REC) from USOS where FRASE='$lineaOut'");</p> <p>}</p> <p>}</p> <p>}</p> <p>}</p> <p>else {</p> <p>&QueryDO("insert into NORAE values (0,'$lema',now(),'$who',now(),'$who','1')");</p> <p>}</p> <p>&muestraLema($kernel,$lema,$donde,$who,$mostrauso,$mostraacp,$command,$param);</p> <p>}</p> <p>elsif ($donde==1) {</p> <p>print "UNIOVI:\n".$final."\n";</p> <p>my $parteWeb="Los sinónimos de ";</p> <p>my @webPart= split($parteWeb,$final);</p> <p>my $nparteWeb="</UL>";</p> <p>my @webContent=split($nparteWeb,$webPart[1]);</p> <p>$webContent[0]=~ s/<([^>])*>//g;</p> <p>$webContent[0]=~ s/\(definición\)//g;</p> <p>decode_entities($webContent[0]);</p> <p>$kernel->post($identifier,'privmsg',$who,':: -----------------------------------------');</p> <p>my $lineaOut="";</p> <p>my @sinLinea=split("\n",$webContent[0]);</p> <p>if (substr($sinLinea[1],0,length("Inténtelo de nuevo")) eq "Inténtelo de nuevo") {</p> <p>$kernel->post($identifier,'privmsg',$who,':: No hay resultados.');</p> <p>}</p> <p>else {</p> <p>for (my $b=2;$b<@sinLinea-1;$b++) {</p> <p>if (length($sinLinea[$b])>2) {</p> <p>$lineaOut.=$sinLinea[$b].","</p> <p>}</p> <p>}</p> <p>$lineaOut.=$sinLinea[@sinLinea-1];</p> <p>$kernel->post($identifier,'privmsg',$who,':: '.$lineaOut);</p> <p>}</p> <p>$kernel->post($identifier,'privmsg',$who,':: FIN ------------------------- © UNIOVI.ES ---');</p> <p>print "Sinónimos: ".$webContent[0];</p> <p>}</p> <p>elsif ($donde==2) {</p> <p>my $parteWeb="Los antónimos de ";</p> <p>my @webPart= split($parteWeb,$final);</p> <p>my $nparteWeb="</UL>";</p> <p>my @webContent=split($nparteWeb,$webPart[1]);</p> <p>$webContent[0]=~ s/<([^>])*>//g;</p> <p>$webContent[0]=~ s/\(definición\)//g;</p> <p>decode_entities($webContent[0]);</p> <p>$kernel->post($identifier,'privmsg',$who,':: -----------------------------------------');</p> <p>my $lineaOut="";</p> <p>my @sinLinea=split("\n",$webContent[0]);</p> <p>if (substr($sinLinea[1],0,length("Inténtelo de nuevo")) eq "Inténtelo de nuevo") {</p> <p>$kernel->post($identifier,'privmsg',$who,':: No hay resultados.');</p> <p>}</p> <p>else {</p> <p>for (my $b=2;$b<@sinLinea-1;$b++) {</p> <p>if (length($sinLinea[$b])>2) {</p> <p>$lineaOut.=$sinLinea[$b].","</p> <p>}</p> <p>}</p> <p>$lineaOut.=$sinLinea[@sinLinea-1];</p> <p>$kernel->post($identifier,'privmsg',$who,':: '.$lineaOut);</p> <p>}</p> <p>$kernel->post($identifier,'privmsg',$who,':: FIN ------------------------- © UNIOVI.ES ---');</p> <p>print "Antónimos: ".$webContent[0];</p> <p>}</p> <p>else {</p> <p>}</p> <p>&gLog("Procesado y grabado ".$lema." a petición de ".$who);</p> <p>}</p> <p>sub ordenQuit {</p> <p>my ($kernel, $who, $chan, $priv) = @_;</p> <p>if ($who eq $owner) {</p> <p>&gLog("Propietario ordena QUIT.");</p> <p>$kernel->post($identifier,'quit',$quitmsg);</p> <p>&_stop();</p> <p>}</p> <p>else {</p> <p># Send private reply if it was in a private message,</p> <p># otherwise reply to channel.</p> <p>if ($priv) {</p> <p>&gLog("Privado a ".$who." Sin permisos para ejecutar comando.");</p> <p>$kernel->post($identifier,'privmsg',$who,'Mis tendencias anarquistas me impiden obedecer órdenes.');</p> <p>}</p> <p>else {</p> <p>&gLog("Público a ".$who." en ".$chan->[0]." Sin permisos para ejecutar comando.");</p> <p>$kernel->post($identifier,'privmsg',$chan->[0],'Mis tendencias anarquistas me impiden obedecer órdenes.');</p> <p>}</p> <p>}</p> <p>}</p> <p>sub ordenJoin {</p> <p>my ($kernel, $who, $chan, $join, $priv) = @_;</p> <p>if ($who eq $owner) {</p> <p>&gLog("Propietario ordena JOIN.");</p> <p>$kernel->post( $identifier, 'join', $join );</p> <p>}</p> <p>else {</p> <p>if ($priv) {</p> <p>&gLog("Privado a ".$who." Sin permisos para ejecutar comando.");</p> <p>$kernel->post($identifier,'privmsg',$who,'Mis tendencias anarquistas me impiden obedecer órdenes.');</p> <p>}</p> <p>else {</p> <p>&gLog("Público a ".$who." en ".$chan->[0]." Sin permisos para ejecutar comando.");</p> <p>$kernel->post($identifier,'privmsg',$chan->[0],'Mis tendencias anarquistas me impiden obedecer órdenes.');</p> <p>}</p> <p>}</p> <p>}</p> <p>sub ordenPart {</p> <p>my ($kernel, $who, $chan, $part, $priv) = @_;</p> <p>if ($who eq $owner) {</p> <p>&gLog("Propietario ordena PART.");</p> <p>$kernel->post( $identifier, 'part', $part );</p> <p>}</p> <p>else {</p> <p>if ($priv) {</p> <p>&gLog("Privado a ".$who." Sin permisos para ejecutar comando.");</p> <p>$kernel->post($identifier,'privmsg',$who,'Mis tendencias anarquistas me impiden obedecer órdenes.');</p> <p>}</p> <p>else {</p> <p>&gLog("Público a ".$who." en ".$chan->[0]." Sin permisos para ejecutar comando.");</p> <p>$kernel->post($identifier,'privmsg',$chan->[0],'Mis tendencias anarquistas me impiden obedecer órdenes.');</p> <p>}</p> <p>}</p> <p>}</p> <p>sub gLog {</p> <p>my $logLine=$_[0];</p> <p>my $ahora = localtime;</p> <p>if (open(elLog, ">>BELingua.log")) {</p> <p>print (elLog $ahora." ELingua: ".$logLine."\n");</p> <p>close(elLog);</p> <p>}</p> <p>if ($termOut==1) {</p> <p>print $ahora." ELingua: ".$logLine."\n"</p> <p>}</p> <p>}</p> <ol> <li></li> <li>ENLAZAR A LA BD</li> </ol> <p>sub BDLogin</p> <p>{</p> <p>$Nombre_Bd = $_[0];</p> <p>$Servidor_Bd = $_[1];</p> <p>$Usuario_Bd = $_[2];</p> <p>$Contrasenia_Bd = $_[3];</p> <p>}</p> <ol> <li>End Datos_Enlace_Bd</li> <li></li> <li>CONECTA A LA BD</li> </ol> <p>sub Conectar_Bd</p> <p>{</p> <p>if ( $dbh != 0 )</p> <p>{</p> <p>$dbh->disconnect();</p> <p>}</p> <p>#LINEA DE CONEXION A LA BD</p> <p>$dbh=DBI->connect("DBI:mysql:$Nombre_Bd:$Servidor_Bd","$Usuario_Bd","$Contrasenia_Bd");</p> <p>}#End Conectar_Bd</p> <ol> <li></li> <li>DESCONCECTA DE LA BD</li> </ol> <p>sub Desconectar_Bd</p> <p>{</p> <p>if ( $dbh > 0 )</p> <p>{</p> <p>$dbh->disconnect();</p> <p>}</p> <p>}#End Desconectar_Bd</p> <ol> <li></li> <li>Operaciones sin respuesta Insert,Update,Delete</li> <li>Devuelve registros añadidos,modificados,borrados</li> <li>para tener un control de si lo ha hecho o no.</li> </ol> <p>sub QueryDO</p> <p>{</p> <p>my $Query_Temporal_Sql = "$_[0]";</p> <p>my $Registros_Afectados = 0;</p> <p>if ( length($Query_Temporal_Sql) > -1 )</p> <p>{</p> <p>&Conectar_Bd($Nombre_Bd,$Servidor_Bd,$Usuario_Bd,$Contrasenia_Bd);</p> <p>$Registros_Afectados = $dbh->do($Query_Temporal_Sql);</p> <p>if ($Registros_Afectados eq "0E0") { $Registros_Afectados = 0; }</p> <p>&Desconectar_Bd;</p> <p>}#End-If Hay Query_Temporal_Sql</p> <p>return $Registros_Afectados;</p> <p>}#End QueryDO</p> <ol> <li></li> <li>Respuesta= ARRAY</li> </ol> <p>sub QueryArr</p> <p>{</p> <p>my $Query_Temporal_Sql = "$_[0]";</p> <p>my @ArrResult = (0);</p> <p>my $sth = "";</p> <p>if ( length($Query_Temporal_Sql) > -1 )</p> <p>{</p> <p>&Conectar_Bd($Nombre_Bd,$Servidor_Bd,$Usuario_Bd,$Contrasenia_Bd);</p> <p>$sth=$dbh->prepare($Query_Temporal_Sql);</p> <p>$sth->execute();</p> <p>@ArrResult=$sth->fetchrow_array();</p> <p>$sth->finish();</p> <p>&Desconectar_Bd;</p> <p>}#End-If Hay Query_Temporal_Sql</p> <p>return (@ArrResult);</p> <p>}#End QueryArr</p> <ol> <li></li> <li>Respuesta= REFERENCIA (Array multidimensional)</li> </ol> <p>sub QueryRef</p> <p>{</p> <p>my $Query_Temporal_Sql = "$_[0]";</p> <p>my $RefResult=0;</p> <p>my $sth = "";</p> <p>if ( length($Query_Temporal_Sql) > -1 )</p> <p>{</p> <p>&Conectar_Bd($Nombre_Bd,$Servidor_Bd,$Usuario_Bd,$Contrasenia_Bd);</p> <p>$sth=$dbh->prepare($Query_Temporal_Sql);</p> <p>$sth->execute();</p> <p>$RefResult=$sth->fetchall_arrayref();</p> <p>$sth->finish();</p> <p>&Desconectar_Bd;</p> <p>}#End-If Hay Query_Temporal_Sql</p> <p>return ($RefResult);</p> <p>}#End QueryRef</p> <p>sub Utf8_To_Ascii</p> <p>{</p> <p>my $string = shift;</p> <p>my $format = $ENV{"UCFORMAT"}||('%lx');</p> <p>$string =~ s/([\xC0-\xDF])([\x80-\xBF])/sprintf ("%c", hex(sprintf($format,unpack("c",$1)<<6&0x07C0|unpack("c",$2)&0x003F)))/ge;</p> <p>$string =~ s/([\xE0-\xEF])([\x80-\xBF])([\x80-\xBF])/sprintf ("%c", hex(sprintf($format,unpack("c",$1)<<12&0xF000|unpack("c",$2)<<6&0x0FC0|unpack("c",$3)&0x003F)))/ge;</p> <p>$string =~ s/([\xF0-\xF7])([\x80-\xBF])([\x80-\xBF])([\x80-\xBF])/sprintf ("%c", hex(sprintf($format,unpack("c",$1)<<18&0x1C0000|unpack("c",$2)<<12&0x3F000|unpack("c",$3)<<6&0x0FC0|unpack("c",$4)&0x003F)))/ge;</p> <p>return $string;</p> <p>}</p> <p>POE::Component::IRC->new($identifier) or die "Wah: $!\n";</p> <p>POE::Session->new( 'main' => [qw(_start</p> <p>irc_001</p> <p>irc_disconnected</p> <p>irc_error</p> <p>irc_socketerr</p> <p>_stop</p> <p>irc_public</p> <p>irc_ctcp_action</p> <p>irc_msg)] );</p> <p>$poe_kernel->run();</p> <p></syntaxhighlight></p></div></section></div></main> <footer class="site-footer"> <div class="footer-container"> <div class="footer-links"> <a href="/about.php">About</a> <a href="/help.php">Help</a> <a href="/updates.php">Updates</a> <a href="/contact.php">Contact</a> <a href="/privacy.php">Privacy</a> <a href="/terms.php">Terms</a> <a href="https://github.com/yourusername/friendly-wiki" target="_blank" rel="noopener">GitHub</a> </div> <div class="footer-copy"> © 2025 Friendly Wiki. All rights reserved. </div> </div> </footer> <script> const toggle = document.getElementById('mobileMenuToggle'); const menu = document.getElementById('mobileMenu'); toggle.addEventListener('click', () => { menu.classList.toggle('active'); }); </script> <!-- Collapsible toggle --> <script> document.addEventListener("DOMContentLoaded", function () { const toggles = document.querySelectorAll('.section-toggle'); toggles.forEach(toggle => { toggle.addEventListener('click', function () { const section = toggle.closest('.collapsible'); const body = section.querySelector('.wiki-body'); body.classList.toggle('collapsed'); }); }); }); </script>