<?
//Caesar tarafından derlenmiştir.
//HunTeR e yardımlarından dolayı teşekkür ederiz.
class CN_Bot
{
# Genel Tanımlamalar (Degerler CN_Bot methodu ıcınde verılmelı)
var $localhost; // Yerel Sunucu Adı
var $remotehost; // Uzak Sunucu Adı (Baglanılacak sunucunun adı)
var $port; // Baglantı Noktası
var $timeout; // Baglantı Suresi (0 Sınırsız)
var $channel; // Kanal
var $nick; // Botun Nıckı
var $closecode; // Kapanma Kodu (kanala gırıldıgınde bot calısmayı durdurdur)
var $logfile; // Log dosyasının yolu ve adı
# Baglantılar
var $server;
var $log;
# Sınıf Cagrıldıgında Calıstırılacak Fonksıyon
function CN_Bot()
{
define(n, "\n"); // Satır Sonu Karakterı
$this->localhost = 'adsluser-2866.adsl.ttnet.net.tr';
$this->remotehost = 'irc.ttnet.net.tr';
$this->port = 6667;
$this->timeout = 0;
$this->channel = 'zurna';
$this->nick = 'PHPBot';
$this->closecode = 'byebye';
$this->logfile = 'log.txt';
}
# Baglantıları Kur..
function Connect()
{
# Baglantı Suresını Ayarla
set_time_limit($this->timeout);
//set_time_limit(30);
# Sunucu Baglantısı
$this->server = fsockopen ($this->remotehost, $this->port, $hatano, $hatastr, $this->timeout) or
die('Sunucuya Bağlanamadı');
# Log Dosyası Baglantısı
$this->log = fopen ($this->logfile, 'w+') or
die('Dosya Yaratılamadı');
# Sırasıyla nıckı ve kullanıcı adını belırle, kanala gır ve ardından selam ver..
fputs($this->server, 'NICK '.$this->nick.n);
fputs($this->server, 'USER '.$this->nick.' '.$this->localhost.' '.$this->remotehost.' :'.$this->nick.n);
fputs($this->server, 'IDENTIFY <şifre>'.n); //identify şifresi
fputs($this->server, 'JOIN #'.$this->channel.n);
fputs($this->server, 'PRIVMSG #'.$this->channel.' :PHPbot v1.0... loading...'.n);
fputs($this->server, 'PRIVMSG #'.$this->channel.' :i am back'.n);
return;
}
function op_ver($nick) {
fputs($this->server, 'MODE #'.$this->channel.' +o $nick'.n);
}
# Baglantıları Kapat..
function Disconnect($nick)
{
if ($nick=="Caesar") {
fclose($this->server);
fclose($this->log);
exit;
} else {
fputs($this->server, 'PRIVMSG #'.$this->channel.' :yava$ ol yava$'.n);
}
return;
}
# Mesaj Gonderıldıgınde...
function PrivMsg($nick,$cmd,$arg)
{
# Eger mesaj kanala gonderıldıyse bu mesajı log dosyasına ekle
if($cmd[1] == '#'.$this->channel)
fputs($this->log, '<'.date("H:i").' '.$nick.'> '.$arg.n);
# Eger bır gorev mesajı gonderıldıyse
if(preg_match("'(.*?)'U",$arg,$set))
{
switch($set[1])
{
case substr($set[1],0,5)=='selam': fputs($this->server, 'PRIVMSG #'.$this->channel.' :sanada selam '.$nick.' nasılsın?'.n); break;
}
}
return;
}
# Gorev Mesajı Gonderıldıgınde..
function TaskMsg($nick,$mesaj)
{
$ymesaj=substr($mesaj,6,10000);
$link=ereg_replace(' ','+',$ymesaj);
$alink=trim($link);
$oku=fopen("http://localhost/irc/sql.php?query=$alink","r");
$yaz=fgets($oku);
fputs($this->server, 'PRIVMSG #'.$this->channel.' :'.$ymesaj.'-> '.$yaz.n);
}
# Botu Calıstır
function Run()
{
$this->Connect();
# Sonsuz dongumuzu baslatıyoruz
while (!feof($this->server))
{
# Sunucudan gelen her datayı log dosyamıza aktarıyoruz (test amaclı)
$data = fgets ($this->server,1024);
//fputs($this->log,$data);
# PING geldıgınde pong gonderıyoruz
if(preg_match("'PING(.*?)'si", $data, $set))
fputs($this->server,'PONG '.trim($set[1]).n);
# Kodun kılıt noktası.. Sunucdan gelen datayı parcalara ayırıyoruz
if(preg_match("':(.*?)!([^\s]*?)\s(.*?)\s:(.*?)'U", $data, $set))
{
$nick = trim($set[1]);
$host = trim($set[2]);
$cmd = explode(" ",trim($set[3]));
$arg = trim($set[4]);
# Ardından $cmd (yanı komuta) baglı olarak ılgılı methodu calıstırıyoruz
switch($cmd[0])
{
case "PRIVMSG": $this->PrivMsg($nick,$cmd,$arg); break; // Mesaj Gonderıldıgınde
case "PART": break; // Tamamlanmadı..
case "JOIN": break; // Tamamlanmadı..
case "NICK": break; // Tamamlanmadı..
case "QUIT": break; // Tamamlanmadı..
}
}
}
}
}
$CN_Bot = new CN_Bot();
$CN_Bot->Run();
?>