• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

kingless

[PHP]BOT de IRC

31 mensagens neste tópico

Como estou de férias decidi criar um bot de irc para os viciados em IRC  :) o bot por enquanto tem poucos comandos mas depois se pode adicionar. :)

Comandos:

Entrar num canal:

!join #canal

Sair de um canal:

!part #canal <mensagem>

Desconectar do IRC:

!quit <mensagem>

<?php 
echo "<pre>"; //Para se ver o código direitinho no browser

set_time_limit(0);
error_reporting(0);

class phpBot {
/* Servidor do Bot */
var $servidor = "diemen.nl.eu.undernet.org";
/* Porta do Servidor */
var $porta    = "6667";
/* Canal para o bot entrar */
var $canal    = "#phpbot";
        /* Nick do bot */
var $nick     = "phpbot";
/* O nome do Bot */
var $nome     = "PHP Scan Bot by kingless";
/* Username do Admin do Bot */
        var $admin    = "kingless.users.undernet.org";

var $rodando  = false;

var $con = null;

var $irc = '';

var $ircd = array();

var $partMsg = "PHP Bot by Kingless";

var $quitMsg = "PHP Bot by Kingless <blastelf@gmail.com>";


function iniciar ( ) {

	$this->con = fsockopen( $this->servidor, $this->porta, $errno, $errstr, 30);

	if (!$this->con) {
		echo "Não foi possivel conectar: $errstr ($errno)\x0a";
		} else {

		$headers = "USER $this->nick  $this->servidor $this->servidor : $this->nome\x0d\x0a";
		$headers.= "NICK $this->nick $this->servidor\x0d\x0a";

		fwrite( $this->con, $headers );

		while(!feof( $this->con )) {

			$this->irc = trim(fgets( $this->con, 4096 ));

			print date("[d/m @ H:i:s]")."<- ". $this->irc ."\x0a";

			if(substr( $this->irc, 0, 6 ) == "PING :") {

				fwrite( $this->con, "PONG :". substr( $this->irc, 6 )."\x0d\x0a" );

				if(!$this->rodando) {
					fwrite( $this->con, "JOIN $this->canal\x0d\x0a" );

					$this->rodando = true;
					}

			}

			$this->ircd = explode(" ", $this->irc, 4 );

			$this->ircd['nick'] = substr($this->ircd[0], 1, strpos($this->ircd['0'], "!")-1);
			$pos1 = strpos($this->ircd[0], "!");
			$pos2 = strpos($this->ircd[0], "@");
			$this->ircd['identd'] = substr($this->ircd[0], $pos1+1, $pos2-$pos1-1);
			$this->ircd['hostname'] = substr($this->ircd[0], strpos($this->ircd[0], "@")+1);
			$this->ircd['user_host'] = substr($this->ircd[0],1);
			$this->ircd['canal'] = $this->ircd[2];
			$this->ircd['msg'] = substr( $this->ircd[3], 1 );

			if(ereg( '^\!join[[:space:]]\#[a-z0-9_]+$', $this->ircd['msg'] )) {
				$canal = explode( " ", $this->ircd['msg'] );
				$this->exec_cmd( "JOIN ". $canal[1] );
			}

			if(ereg( '^\!part[[:space:]]?\#?[a-z0-9_]?', $this->ircd['msg'] )) {
				$canal = explode( " ", $this->ircd['msg'] );
				$num = count( $canal );
				$msg = '';

				for($x = 2; $x < count( $canal ); $x++ ) {
					$msg .= $canal[$x]."\x09";
					}

				$partMsg = str_replace( " ", "\x09", $this->partMsg );
			        $msg = empty($msg) ? $partMsg : trim( $msg );
				$canal = empty($canal[1]) ? $this->ircd['canal'] : $canal[1];
				$this->exec_cmd( "PART $canal $msg" );
			}

			if(ereg( '^\!quit$', $this->ircd['msg'] )) {
				$quitMsg = str_replace( " ", "\x09", $this->quitMsg );
				$this->exec_cmd( "QUIT ". $quitMsg  );
			}
                                       if(eregi( '^!op[[:space:]]?([a-z0-9\-_\[]+)?', $this->ircd['msg'] )) {
                                                $nick = explode( ' ', $this->ircd['msg'] );
                                                $nick = empty($nick[1]) ? $this->ircd['nick'] : $nick[1];
                                                $this->exec_cmd( "MODE {$this->ircd['canal']} +o $nick" );
                                                }

                                        if(eregi( '^!deop[[:space:]]?([a-z0-9\-_\[]+)?', $this->ircd['msg'] )) {
                                                $nick = explode( ' ', $this->ircd['msg'] );
                                                $nick = empty($nick[1]) ? $this->ircd['nick'] : $nick[1];
                                                $this->exec_cmd( "MODE {$this->ircd['canal']} -o $nick" );
                                                }
		}
	}
}

function exec_cmd( $comando ) {

	if($this->rodando) {
		if($this->ircd['hostname'] == $this->admin) {
			fwrite( $this->con, "$comando\x0d\x0a" );
			}
			} else {
				fwrite( $this->con, "$comando\x0d\x0a" );
	}
	print (date("[d/m @ H:i:s]") ."-> ". $comando. "\x0d\x0a");
}
function msg_canal( $texto ) {
	$this->exec_cmd( "PRIVMSG {$this->ircd['canal']} $texto\x0d\x0a" );
	}
}

$phpBot = new phpBot();
$phpBot->iniciar();

echo "</pre>"; //para se ver o código direitinho no código
?>

:D

ATENÇÃO: Aconselho a correrem o Bot pela linha de comandos e não pelo browser.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas isso é mais para buildar um gateway como se diz no tópico. Numa das classes que eu postei aí do PEAR, está um bot para IRC que me parece funcional mas nnc o experimentei :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hey! Eu nunca corri nada pela linha de comandos vamos la ver se sei :D

Obrigado por partilhares o codigo

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Acs, nada mais fácil.

Em windows: start -> run -> cmd -> cd directoria\do\bot\ -> php ofile.php

Em *nix: abrir consola -> cd directoria/do/bot -> php ofile.php

:D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pra por exº aceder à quakenet com o bot, só tenho d mudar as variáveis referentes ao server d IRC ? é só isso ?? =) bom script, vai ajuda muita gente d certeza  :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Acs, nada mais fácil.

Em windows: start -> run -> cmd -> cd directoria\do\bot\ -> php ofile.php

Em *nix: abrir consola -> cd directoria/do/bot -> php ofile.php

:)

Obrigado :D

Eu ja mexo em php ha uns tempos mas sempre no browser :) obrigado mais uma vez

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pra por exº aceder à quakenet com o bot, só tenho d mudar as variáveis referentes ao server d IRC ? é só isso ?? =) bom script, vai ajuda muita gente d certeza  :D

Sim só precisas de mudar as variaveis..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Por esta é que não esperava nunca imaginei que bots do IRC fossem feitos por php bom post  :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

@Acs, eu comecei na linha de comandos e recentemente passei a workar + pa browser :)

@Sota, qq linguagem que suporte sockets pode-se ligar a uma rede IRC :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Começas-te na linha de comandos pk? É raro eu ver algo relacionado com a linha de comandos!! Tens ai algum tut q mostre exemplos de cenas para a linha de comandos??

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Começas-te na linha de comandos pk? É raro eu ver algo relacionado com a linha de comandos!! Tens ai algum tut q mostre exemplos de cenas para a linha de comandos??

Eu nao começei na linha de comandos.. Só aconselhei a linha comandos para correr este bot xD http://pt.php.net/features.commandline

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Começas-te na linha de comandos pk? É raro eu ver algo relacionado com a linha de comandos!! Tens ai algum tut q mostre exemplos de cenas para a linha de comandos??

Eu nao começei na linha de comandos.. Só aconselhei a linha comandos para correr este bot xD http://pt.php.net/features.commandline

era mesmo para mim :D
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Começas-te na linha de comandos pk? É raro eu ver algo relacionado com a linha de comandos!! Tens ai algum tut q mostre exemplos de cenas para a linha de comandos??

Eu comecei por usar linha de comandos para bots. http://botdom.24bps.com/ <- colaborei em praticamente todos os bots aí presentes (Secret Dave, David Ferreira, viva(-os-torresmos), dj(thyrax)) :D

Tb existe algo que só descobri agora que é o stdin versão PHP :)http://www.vivaolinux.com.br/dicas/verDica.php?codigo=211 :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Começas-te na linha de comandos pk? É raro eu ver algo relacionado com a linha de comandos!! Tens ai algum tut q mostre exemplos de cenas para a linha de comandos??

Eu comecei por usar linha de comandos para bots. http://botdom.24bps.com/ <- colaborei em praticamente todos os bots aí presentes (Secret Dave, David Ferreira, viva(-os-torresmos), dj(thyrax)) :D

Tb existe algo que só descobri agora que é o stdin versão PHP :)http://www.vivaolinux.com.br/dicas/verDica.php?codigo=211 :)

Ainda bem que ja colaboraste ;) assim vais poder me ajudar aqui numa duvida que tenho ;) Como é que coloco cores no mIRC utilizando PHP ? ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ainda bem que ja colaboraste :) assim vais poder me ajudar aqui numa duvida que tenho ;) Como é que coloco cores no mIRC utilizando PHP ? ;)

Repara bem no link que postei. Aqui são dAmn bots e não IRC bots :)

Anyway, já vi algures como fazer isso, mas já foi há muito tempo. Googla :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ainda bem que ja colaboraste ;) assim vais poder me ajudar aqui numa duvida que tenho ;) Como é que coloco cores no mIRC utilizando PHP ? :)

Repara bem no link que postei. Aqui são dAmn bots e não IRC bots :)

Anyway, já vi algures como fazer isso, mas já foi há muito tempo. Googla :D

eu sei colocar cores estava no gozo ;):)

Qual é a diferença entre dAmn bots e IRC bots ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Qual é a diferença entre dAmn bots e IRC bots ?

dAmn bots são bots para a deviantART messaging network (dAmn) que funciona num protocolo proprietário que pode ser estudado aqui. É uma especie de IRC mas com tags html, integração com o site, etc. que assenta em JavaScript e Flash. :) Existe um gateway dAmn<->IRC chamado Frabjous feito pelo doofsmack. Esse caramelo fez em conjunto com o twexler o 1º bot para o dAmn em PHP (que está uma valente m**** :D)
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ainda bem que ja colaboraste ;) assim vais poder me ajudar aqui numa duvida que tenho ;) Como é que coloco cores no mIRC utilizando PHP ? :)

Repara bem no link que postei. Aqui são dAmn bots e não IRC bots :)

Anyway, já vi algures como fazer isso, mas já foi há muito tempo. Googla :D

eu sei colocar cores estava no gozo ;):)

Qual é a diferença entre dAmn bots e IRC bots ?

dAmn bots são bots para a deviantART messaging network (dAmn) que funciona num protocolo proprietário que pode ser estudado aqui. É uma especie de IRC mas com tags html, integração com o site, etc. que assenta em JavaScript e Flash. :)

thanks :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Muito porreira a ideia ;) De facto eu bots de IRC só tinha criado em mIRC Scripting, e compilado uns quantos Eggdrops com uns modulos TCL :D

Agora nunca tinha pensado na ideia de os fazer em PHP :)

Digo com sinseridade que só há bem pouco tempo descobri as potencialidades da linha de comandos do PHP :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Muito porreira a ideia ;) De facto eu bots de IRC só tinha criado em mIRC Scripting, e compilado uns quantos Eggdrops com uns modulos TCL :)

Agora nunca tinha pensado na ideia de os fazer em PHP :)

Digo com sinseridade que só há bem pouco tempo descobri as potencialidades da linha de comandos do PHP ;)

E ainda tens a possibilidade de GUIs :Dhttp://gtk.php.net ;)
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Muito porreira a ideia :) De facto eu bots de IRC só tinha criado em mIRC Scripting, e compilado uns quantos Eggdrops com uns modulos TCL :D

Agora nunca tinha pensado na ideia de os fazer em PHP :D

Digo com sinseridade que só há bem pouco tempo descobri as potencialidades da linha de comandos do PHP :P

E ainda tens a possibilidade de GUIs :Phttp://gtk.php.net :)

Pois sei perfeitamente :) Por acaso aprendi isso quando andava a resolver problemas matemáticos do project euler e vi como um sujeito media o tempo de execução do script usando o comando time e php do linux :)

Depois de me informar descobri as enormes potêncialidades :D

Tem o contra para aqueles que não gostam de opensource porque não necessitam de compilar o PHP :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ja experimentei o codigo e funciona muito bem :P Agora é fazer umas modificaçoes lol. Mas agora tambem é raro usar o irc

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora