send
Grupo de Telegram
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Clase para conectar a un IRC mediante PHP.

  • 0 Respuestas
  • 1230 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Aex12

  • *
  • Underc0der
  • Mensajes: 6
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
  • Skype: eresunhijodeputa
« en: Julio 30, 2013, 04:46:19 pm »
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
  1. <?php
  2. class irc{
  3. var $nick;
  4. var $channel;
  5. var $host;
  6. var $port;
  7.  
  8. var $logged = "false";
  9. var $fp;
  10.  
  11. function nick($nick){
  12. $this->nick = $nick;
  13. }
  14.  
  15. function channel($channel){
  16. $this->channel = $channel;
  17. }
  18.  
  19. function sendmessage($message){
  20. You are not allowed to view links. Register or Login($this->fp, 'PRIVMSG '.$this->channel.' :'.$message."\n");
  21. }
  22.  
  23. function buffer(){
  24. return You are not allowed to view links. Register or Login((string)You are not allowed to view links. Register or Login($this->fp, 2048));
  25. }
  26.  
  27. function connect($host, $port){
  28. $this->host=$host; $this->port=$port;
  29. $this->fp = You are not allowed to view links. Register or Login($this->host, $this->port);
  30. }
  31.  
  32. function open(){
  33. $buffer = $this->buffer();
  34. if(($this->logged == "false") and (You are not allowed to view links. Register or Login($buffer, 0, 1) === ':')){
  35. You are not allowed to view links. Register or Login($this->fp, 'USER '.$this->nick.' '.$this->nick.' '.$this->nick.' '.$this->nick."\n");
  36. You are not allowed to view links. Register or Login($this->fp, 'NICK '.$this->nick."\n");
  37. You are not allowed to view links. Register or Login($this->fp, 'JOIN '.$this->channel."\n");
  38. $this->sendmessage("IRC Class TESTING");
  39. $this->logged = "true";
  40. }
  41.  
  42. if(You are not allowed to view links. Register or Login(You are not allowed to view links. Register or Login($buffer, 0, 6)) === 'PING :'){
  43. $host = You are not allowed to view links. Register or Login(':', $buffer);
  44. $host = You are not allowed to view links. Register or Login($host[1]);
  45. You are not allowed to view links. Register or Login($this->fp, 'PONG :'.$host."\n");
  46. You are not allowed to view links. Register or Login($host);
  47. }
  48.        
  49. if($this->logged == "true"){
  50. return $buffer;
  51. }
  52. }
  53.  
  54. function getmessage($message){
  55. $f = You are not allowed to view links. Register or Login(' PRIVMSG '.$this->channel.' :', $message);
  56. if(You are not allowed to view links. Register or Login($f) === 2){
  57. $return = You are not allowed to view links. Register or Login();
  58. $return['message'] = $f['1'];
  59. $return['name'] = You are not allowed to view links. Register or Login("!", $f['0']);
  60. $return['name']=You are not allowed to view links. Register or Login($return['name'],1);
  61. return $return;
  62. } else {
  63. return false;
  64. }
  65. }
  66.  
  67. function disconnect(){
  68. You are not allowed to view links. Register or Login($this->fp);
  69. }
  70.  
  71. }
  72. ?>

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
  1. <?php
  2. function empiezapor($value, $search){
  3. $value = You are not allowed to view links. Register or Login($value);
  4. $search = You are not allowed to view links. Register or Login($search);
  5. $chars = You are not allowed to view links. Register or Login($search);
  6. if(You are not allowed to view links. Register or Login($value, 0, $chars) === $search){
  7. return true;
  8. } else {
  9. return false;
  10. }
  11. }
  12. ?>
  13.  
Ahora ya la estructura para hacer funcionar la clase correctamente:
Código: PHP
  1. <?php
  2. $aex = new irc;
  3. $aex->nick("AexBot_PHP");
  4. $aex->channel("#CanalTestingBots");
  5. $aex->connect("irc.freenode.net", 8000);
  6.  
  7. while($buffer = $aex->open()){
  8.  
  9. }
  10.  
  11. $aex->disconnect();
  12. ?>
  13.  

Y ahora para capturar los mensajes recibidos por el irc agregamos esto al while:
Código: PHP
  1. <?php
  2. while($buffer = $aex->open()){
  3. if($buffer == "!:error:"){
  4. $aex->sendmessage("ERRORAZO!");
  5. }
  6.  
  7. if($message = $aex->getmessage($buffer)){
  8. $mensaje = $message['message'];
  9. $nombre = $message['name'];
  10.  
  11. if(empiezapor($mensaje, "adios")){
  12. $aex->sendmessage("Adiós ".$nombre."!");
  13. $aex->disconnect();
  14. }
  15. if(empiezapor($mensaje, "hola")){
  16. $aex->sendmessage("Hola ".$nombre);
  17. $aex->sendmessage("El buffer ha arrojado lo siguiente:");
  18. $aex->sendmessage($buffer);
  19. }
  20. }
  21. }
  22. ?>
  23.  

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)
« Última modificación: Marzo 27, 2014, 05:29:24 pm por Expermicid »

 

¿Te gustó el post? COMPARTILO!



10 Mejores Librerías Para Seguridad En PHP - Seguridad De Datos Desde PHP

Iniciado por graphixx

Respuestas: 0
Vistas: 1584
Último mensaje Enero 23, 2016, 06:03:10 am
por graphixx
[APORTE] edPDF - "Libreria" para edicion y creacion de PDFs

Iniciado por kid_goth

Respuestas: 4
Vistas: 880
Último mensaje Marzo 10, 2014, 07:15:31 pm
por kid_goth
Script para convertir planos cartograficos de OPENJUMP a AMCHARTS SVG JSON

Iniciado por graphixx

Respuestas: 0
Vistas: 1278
Último mensaje Septiembre 21, 2015, 11:18:27 pm
por graphixx
[Tutorial] Utilizar el método GET para simplificar páginas [Xt3mP]

Iniciado por Xt3mP

Respuestas: 0
Vistas: 1120
Último mensaje Marzo 19, 2010, 01:15:53 am
por Xt3mP
[Tutorial] Utilizando localhost para visualizar .php by Subzer [PHP]

Iniciado por Subzer

Respuestas: 2
Vistas: 1372
Último mensaje Noviembre 14, 2012, 09:57:49 pm
por Subzer