Jump to content

Recommended Posts

Posted

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
?>

😄

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

Posted

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 😄

Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Posted

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

Obrigado por partilhares o codigo

Posted

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

😄

Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Posted

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 😄

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

Posted

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  😄

Sim só precisas de mudar as variaveis..

Posted

@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 😄

Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Posted

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??

Posted

era mesmo para mim 😄

Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Posted

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)) 😄

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

Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Posted

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

Posted

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 😄

Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Posted

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**** 😄 )

Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.