Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - Aex12

#1
Hoy leyendo el post de WHK sobre el Bot que creo para el irc, me dí cuenta de lo mal organizado que estaba todo el código, y que apenas hay clases para PHP que se encarguen de esto, por no decir que solo existe una, y esta hecha en pear, por lo cual en muchos servidores gratuitos no se puede instalar.

En vista de todo esto decidí crear mi propia clase para realizar conexiones a un IRC, y bueno, aun no esta terminada del todo pero se le puede sacar mucho jugo tal y como está. Primero definimos la clase irc:
Código: php
<?php
class irc{
var $nick;
var $channel;
var $host;
var $port;

var $logged = "false";
var $fp;

function nick($nick){
$this->nick = $nick;
}

function channel($channel){
$this->channel = $channel;
}

function sendmessage($message){
fwrite($this->fp, 'PRIVMSG '.$this->channel.' :'.$message."\n");
}

function buffer(){
return trim((string)fgets($this->fp, 2048));
}

function connect($host, $port){
$this->host=$host; $this->port=$port;
$this->fp = fsockopen($this->host, $this->port);
}

function open(){
$buffer = $this->buffer();
if(($this->logged == "false") and (substr($buffer, 0, 1) === ':')){
fwrite($this->fp, 'USER '.$this->nick.' '.$this->nick.' '.$this->nick.' '.$this->nick."\n");
fwrite($this->fp, 'NICK '.$this->nick."\n");
fwrite($this->fp, 'JOIN '.$this->channel."\n");
$this->sendmessage("IRC Class TESTING");
$this->logged = "true";
}

if(strtolower(substr($buffer, 0, 6)) === 'PING :'){
$host = explode(':', $buffer);
$host = trim($host[1]);
fwrite($this->fp, 'PONG :'.$host."\n");
unset($host);
}
       
if($this->logged == "true"){
return $buffer;
}
}

function getmessage($message){
$f = explode(' PRIVMSG '.$this->channel.' :', $message);
if(count($f) === 2){
$return = array();
$return['message'] = $f['1'];
$return['name'] = explode("!", $f['0']);
$return['name']=substr($return['name'],1);
return $return;
} else {
return false;
}
}

function disconnect(){
fclose($this->fp);
}

}
?>


Agregamos una función opcional (Fuera de la clase) para saber cuando la cadena X empieza por la cadena Y. (Muy util para cuando queremos enviar "comandos" al bot):
Código: php

<?php
function empiezapor($value, $search){
$value = strtolower($value);
$search = strtolower($search);
$chars = strlen($search);
if(substr($value, 0, $chars) === $search){
return true;
} else {
return false;
}
}
?>

Ahora ya la estructura para hacer funcionar la clase correctamente:
Código: php

<?php
$aex = new irc;
$aex->nick("AexBot_PHP");
$aex->channel("#CanalTestingBots");
$aex->connect("irc.freenode.net", 8000);

while($buffer = $aex->open()){

}

$aex->disconnect();
?>


Y ahora para capturar los mensajes recibidos por el irc agregamos esto al while:
Código: php

<?php
while($buffer = $aex->open()){
if($buffer == "!:error:"){
$aex->sendmessage("ERRORAZO!");
}

if($message = $aex->getmessage($buffer)){
$mensaje = $message['message'];
$nombre = $message['name'];

if(empiezapor($mensaje, "adios")){
$aex->sendmessage("Adiós ".$nombre."!");
$aex->disconnect();
}
if(empiezapor($mensaje, "hola")){
$aex->sendmessage("Hola ".$nombre);
$aex->sendmessage("El buffer ha arrojado lo siguiente:");
$aex->sendmessage($buffer);
}
}
}
?>


De momento por una razon que se me escapa no soy capaz de capturar el nombre del emisor de un mensaje, aunque ya lo tengo declarado en la funcion getmessage(); pero parece no funcionarme. Espero que se entienda todo, un saludo!

Bugs encontrados:
- No reconoce el nombre del emisor de un mensaje
- Cuando pasa X tiempo se autodesconecta (Al no recibir paquetes por el buffer el while acaba y se autodesconecta)
#2
Shells / [PHP] m31 shell [v0.1.2a]
Julio 30, 2013, 07:45:27 AM
Buenos días, como algunos ya sabréis, llevo un tiempo desarrollando una nueva shell, la m31, la cual hace uso de la tecnología AJAX para una mejor optimizacion, de bootstrap, para un diseño mas sencillo y bonito, y de jQuery para añadir un gran abanico de posibilidades.

Actualmente esta en fase pre-alfa por lo que podréis encontrarla un poco sencilla, pero es cuestión de tiempo que vaya sacando nuevas actualizaciones con mas funciones. De momento tiene lo básico, un gestor de archivos (y una página phpinfo).

Las primeras lineas de la shell están todas puramente dedicadas a la personalización de la misma.
La shell actualmente ha sido solo probada en linux (servidor) y apache, si alguien tiene un servidor con windows agradecería que la probase y comentase si le funciona.

Bueno, sin mas que decir os dejo el enlace:
v0.1.2b: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta        [Igual que 0.1.2a pero con un par de bugs corregidos y librerías actualizadas]
ChangeLog: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Versiones anteriores:
v0.1.2a: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
v0.1.1a:  No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
v0.1.0b: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
v0.1.0a: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Tutorial:
La configuración del shell se puede dejar por defecto y funcionará perfectamente, lo único que habría que cambiar sería el nombre de usuario y contraseña, que por defecto son "m31" y "holoscripter" respectivamente,  lo primero subimos el shell a nuestro servidor y accedemos como si de un archivo normal se tratase, nos saldría un mensaje de error 404 (Archivo no encontrado), pero no os alarméis, es simplemente para despistar, realmente el shell si que está, y para acceder al cuadro de login habría que pulsar la combinación de teclas: "Control+K", esta combinación también se puede cambiar desde la configuración de la shell. Ahora simplemente introducimos nuestro usuario y contraseña, y nos loggeamos, una vez dentro la interfaz es bastante intuitiva.

Capturas: La mayoria están desactualizadas










No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Un saludo y hasta pronto!