|
Perl ile IRC'ye giren bot - Cgi / Perl Webmaster bilgi bankası, knowledge base Webmaster Araçları
AnaSayfa > Cgi / Perl > Perl ile IRC'ye giren bot |
| Kategori | : Cgi / Perl | Gönderen | : Admin | Tarih | : 2011-02-20 | Puan | : 5 | Katılımcı : 60 | Okunma | : 16242 | | | |
| | Botun su an tek yaptigi, IRC kanalina girip oyle bos bos oturmak ve kanalda kimlerin oldugunu, gerekli zamanlarda (kanala biri girdiginde, çiktiginda vs) web sitesine bildirmek.
#!/usr/bin/perl -w
#
# Proje : Sinbad
# Dosya : sinbad.pm
# Surum : 01.01.0014
# Son degisiklik tarihi : 15/07/2003 12:20
# Son degisikligi yapan : acemi
use strict;
use POE;
use POE::Component::IRC;
use POE::Component::Client::UserAgent;
my $DEBUG_MODE = 1; # test modu icin 1, normal calisma modu icin 0
my $IRC_SERVER = "irc.freenode.net"; # baglanilacak IRC sunucu
my $IRC_PORT = 6667; # baglanti kurulacak TCP portu
my $IRC_CHANNEL = "#ceviz"; # baglanilacak IRC kanali
my $BOT_NICKNAME = "bot_snd"; # bot nickname
my $BOT_USERNAME = "bot_snd"; # bot kullanici adi
my $BOT_IRCNAME = "bot_snd"; # bot aciklama
my $MESAJ_JOIN = "selam"; # kanala girildiginde gonderilecek mesaj
my $MESAJ_QUIT = "bye"; # IRC sunucudan ayrilirken gonderilecek mesaj
my $MESAJ_MSG = "ben bir botum"; # /msg ile ozel mesaj gonderenlere gonderilecek mesaj
my $CTCP_VERSION = "Sinbad IRC Bot 01.01.0014a"; # CTCP VERSION isteklerine verilecek cevap
my $CTCP_USERINFO = "Sinbad IRC Bot"; # CTCP USERINFO isteklerine verilecek cevap
my $CTCP_CLIENTINFO = "Sinbad IRC Bot"; # CTCP CLIENTINFO isteklerine verilecek cevap
my $TIMER_KEEP_ALIVE = 300; # keep_alive fonksiyonunun kac saniyede bir calistirilacagi
my $TIMER_REJOIN = 30; # bot kanaldan atilirsa, kac saniye sonra tekrar kanala girecegi
my $UA_ALIAS = "ua_alias"; # UserAgent (HTTP istemci) icin kullanilacak kod
my $UA_AGENT_NAME = "Sinbad HTTP Client 01.01.0014a"; # UserAgent (HTTP istemci) icin kullanilacak istemci adi
my $UA_TIMEOUT = 60; # UserAgent (HTTP istemci) icin zaman asimi suresi (saniye)
my $WEB_USERLIST_PAGE = "http://www.sitem.com/kanaldakiler.php"; # Nickname listesinin gonderilecegi site
my $WEB_CODE = "parolam"; # Web sitesine veri gonderirken kullanilacak kod
# ---------------------- y a r d i m c i l a r ---------------------------
# array'e eleman eklemek icin
# dikkat: array'in kendisi ile degil, array referansi ile calisiliyor
sub array_add {
my ($arrayref, $value) = @_;
my $is_found = 0;
# eklenmek istenen deger, array'in icinde var mi diye bak
# eger ayni degerden bulunursa veya array'in sonuna gelinirse
# donguden cik
foreach my $element (@{$arrayref}) {
if ($element eq $value) {
$is_found = 1;
last;
}
}
if ($is_found) {
# eger ayni degerden array icinde bulunmussa
# veri eklenmedigini gostermek icin 0 dondur
return 0;
}
else {
# eger ayni degerden array icinde bulunmadiysa
# bu degeri, array'e ekle ve 1 dondur
push(@{$arrayref}, $value);
return 1;
}
}
# -----------------------------------------------------------------
# array'den eleman silmek icin
# dikkat: array'in kendisi ile degil, array referansi ile calisiliyor
sub array_delete {
my ($arrayref, $value) = @_;
my $is_found = 0;
my $i = 0;
# silinmek istenen deger, array'in icinde var mi diye bak
# eger varsa, bu degeri sil
foreach my $element (@{$arrayref}) {
if ($element eq $value) {
# aranan deger, array icinde bulundu
# bu degeri sil
splice(@{$arrayref}, $i, 1);
$is_found = 1;
}
$i++;
}
# silme gerceklestiyse 1, gerceklesmediyse 0 dondur
return $is_found;
}
# -----------------------------------------------------------------
# array'deki elemanin degerini degistirmek icin
# dikkat: array'in kendisi ile degil, array referansi ile calisiliyor
sub array_replace {
my ($arrayref, $old_value, $new_value) = @_;
my $is_found = 0;
my $i = 0;
# degistirilmek istenen deger, array'in icinde var mi diye bak
# eger varsa, bu elemanin degerini degistir
foreach my $element (@{$arrayref}) {
if ($element eq $old_value) {
# aranan deger, array icinde bulundu
# bu degeri degistir
${$arrayref}[$i] = $new_value;
$is_found = 1;
}
$i++;
}
# degistirme gerceklestiyse 1, gerceklesmediyse 0 dondur
return $is_found;
}
# -------------------------- s e s s i o n ------------------------------
# kernel (cekirdek) calistirilmaya baslandiginda calisacak bolum
# $poe_kernel->run(); bolumu kernel'i (cekirdegi) baslatiyor
sub _start {
my ($kernel, $heap) = @_[KERNEL, HEAP];
# session degiskenlerine, ilk deger ataniyor
$heap->{is_connected} = 0; # IRC sunucuya baglanildi mi? (0 - baglanilmadi, 1 - baglanildi)
$heap->{seen_traffic} = 0; # IRC sunucudan herhangi bir veri geldi mi? (0 - gelmedi, 1 - geldi)
# IRC nesnesine, olusan her olaydan
# kernel'i haberdar etmesi soyleniyor
$kernel->post("irc_sinbad", "register", "all");
# bot'u canli tutmak icin belli araliklarla calisacak olan
# keep_alive fonksiyonu, bir sure sonra calisacak sekilde ayarlaniyor.
# $TIMER_KEEP_ALIVE degeri kadar saniye sonra keep_alive bolumu calisir
$kernel->delay("keep_alive", $TIMER_KEEP_ALIVE);
# IRC sunucuya baglanti kuracak bolum calistiriliyor
$kernel->yield("connect");
}
# -----------------------------------------------------------------
# Kernel'in (cekirdek) calismasi sonlanirken calisacak bolum
sub _stop {
my $kernel = $_[KERNEL];
# IRC nesnesine, IRC sunucudan ayrilmasi soyleniyor
$kernel->call("irc_sinbad", "quit", $MESAJ_QUIT);
}
# -----------------------------------------------------------------
# botu canli tutmak icin belli araliklarla IRC server'a
# USERHOST komutunu gonderecek bolum
sub keep_alive {
my ($kernel, $heap) = @_[KERNEL, HEAP];
# IRC nesnesine, IRC sunucuya USERHOST komutunu gondermesi soyleniyor.
# eger bekleme suresi boyunca veri alisverisi olduysa
# veya su an IRC sunucu baglantisi yoksa,
# bu islem yapilmayacak
$kernel->post("irc_sinbad", "userhost", $BOT_NICKNAME)
unless $heap->{seen_traffic} || not $heap->{is_connected};
# veri alisverisi olup olmadigini tutan oturum degiskeni,
# bundan sonraki bekleme suresi boyunca veri alisverisi
# olup olmadiginin anlasilabilmesi icin resetleniyor
$heap->{seen_traffic} = 0;
# $TIMER_KEEP_ALIVE degeri kadar saniye sonra
# tekrar keep_alive fonksiyonunu calistir
$kernel->delay("keep_alive", $TIMER_KEEP_ALIVE);
}
# -----------------------------------------------------------------
# hata olustugunda calisacak bolum
sub irc_error {
my ($kernel, $heap) = @_[KERNEL, HEAP];
# baglanti koptu
$heap->{is_connected} = 0;
# 60 saniye sonra IRC sunucuya
# baglanti kuracak bolumu calistir
$kernel->delay("connect", 60);
}
# -----------------------------------------------------------------
# socket hatasi olustugunda calisacak bolum
sub irc_sockerr {
my ($kernel, $heap) = @_[KERNEL, HEAP];
# baglanti koptu
$heap->{is_connected} = 0;
# 60 saniye sonra IRC sunucuya
# baglanti kuracak bolumu calistir
$kernel->delay("connect", 60);
}
# -----------------------------------------------------------------
# IRC sunucu baglantisi koptuktan sonra calisacak bolum
sub irc_disconnected {
my ($kernel, $heap) = @_[KERNEL, HEAP];
# baglanti koptu
$heap->{is_connected} = 0;
# 60 saniye sonra IRC sunucuya
# baglanti kuracak bolumu calistir
$kernel->delay("connect", 60);
}
# -----------------------------------------------------------------
# IRC sunucuya baglanmak icin bu bolum kullanilacak
sub connect {
my ($kernel, $heap) = @_[KERNEL, HEAP];
# henuz IRC sunucuya baglanti saglanamadiysa, baglanmaya calis
if (!$heap->{is_connected}) {
# IRC nesnesine, IRC sunucusuna baglanmasi soyleniyor
$kernel->post("irc_sinbad", "connect", {Debug => $DEBUG_MODE,
Nick => $BOT_NICKNAME,
Server => $IRC_SERVER || "irc.freenode.net",
Port => $IRC_PORT || 6667,
Username => $BOT_USERNAME,
Ircname => $BOT_IRCNAME}
);
# 60 saniye sonra tekrar baglanti kurmaya calis
# once $heap->{is_connected} degiskeni kontrol edilecegi icin
# eger baglanti kurulmussa, bu istek goz ardi edilir
$kernel->delay("connect", 60);
}
}
# -----------------------------------------------------------------
# IRC kanalina baglanmak icin bu bolum kullanilacak
sub join {
my ($kernel, $channel) = @_[KERNEL, ARG0];
# IRC kanalinin adini duzenle
($channel) = ($channel =~ /(#\S*)/);
# IRC nesnesine, IRC kanalina baglanmasi soyleniyor
$kernel->post("irc_sinbad", "join", $channel);
# IRC bilesenine, IRC kanalina ilk mesaji gondermesi soyleniyor
$kernel->post("irc_sinbad", "privmsg", $channel, $MESAJ_JOIN);
}
# -----------------------------------------------------------------
# IRC sunucuya baglandiktan sonra calisacak bolum
sub irc_001 {
my ($kernel, $heap) = @_[KERNEL, HEAP];
my @nick_list;
# baglanti kuruldu
$heap->{is_connected} = 1;
# nickname listesi icin $heap'de yer acildi
# array'in referansi $heap icinde tutulacak, degerler degil
$heap->{nick_list} = \@nick_list;
# IRC kanalina baglan
$kernel->yield("join", $IRC_CHANNEL);
}
# -----------------------------------------------------------------
# IRC sunucudan kanaldakilerin listesi (names) geldiginde calisacak bolum
# kanalda cok fazla kisi varsa, birden fazla 353 satiri gelebilir
sub irc_353 {
my ($kernel, $heap, $arg1) = @_[KERNEL, HEAP, ARG1];
# IRC sunucunun gonderdigi 353 satirindan
# hangi kanal icin cevap verildigi ve kanaldakilerin listesi aliniyor
# (#\S*) bolumu, '#' ile baslayan ve bir bosluk karakterine rastlanilincaya kadar olan bolumu aliyor ($channel)
# \s*: bolumu, listenin baslayacagi bolume kadar atlatiyor. liste ':' karakterinden sonra basliyor
# (.*\S) bolumu, son bosluk karakterine kadar olan bolumu aliyor. yani isim listesi ($nicknames)
my ($channel, $nicknames) = ($arg1 =~ /(#\S*)\s*:(.*\S)\s*/);
# aralarinda bosluk karakteri olan isim listesi,
# bosluk karakterine gore parcalanarak isim dizisine donusturuluyor
my @nicknames = split /\s+/, $nicknames;
# eger gelen cevaplar, botun ilgilendigi kanal icinse, nickname listesini duzenle
if ($channel eq $IRC_CHANNEL) {
# kanaldakiler listesi tamamlanmis gozuktugu halde hala nickname'ler geliyorsa,
# bu yeni liste demektir, eski listeyi bosalt
# listenin henuz tamamlanmamis oldugunu gostermek icin
# $heap->{is_nicklist_completed} degerini sifirla
if ($heap->{is_nicklist_completed}) {
@{$heap->{nick_list}} = ();
$heap->{is_nicklist_completed} = 0;
}
# kanaldakilerin nickname'lerini, $heap->{nick_list} degiskeninin isaret ettigi
# array'in icine koy
foreach my $element (@nicknames) {
array_add($heap->{nick_list}, $element);
}
}
}
# -----------------------------------------------------------------
# IRC sunucudan kanaldakilerin listesin bittigini gosteren 366 satiri gelince calisacak bolum
sub irc_366 {
my ($kernel, $heap, $arg1) = @_[KERNEL, HEAP, ARG1];
# nickname listesinin bittigini bildiren 366 satirindan, kanal adi aliniyor
# (#\S*) bolumu, '#' ile baslayan ve bir bosluk karakterine rastlanmadikca (\S) tekrar eden
# karakterler grubunu aliyor. yani kanal adi ($channel)
my ($channel) = ($arg1 =~ /(#\S*)/);
# eger sonlanan nickname listesi, botun ilgilendigi kanal icinse
if ($channel eq $IRC_CHANNEL) {
# listenin bittigini gosteren degiskene, 1 degerini ata
$heap->{is_nicklist_completed} = 1;
# web sunucuya, kanaldakiler listesini gonder
$kernel->yield("ua_request");
}
}
# -----------------------------------------------------------------
# CTCP PING isteklerine cevap verecek olan bolum
sub irc_ctcp_ping {
# $who : CTCP PING isteginde bulunan kisi
# $msg : CTCP PING ile gelen mesaj
my ($kernel, $who, $msg) = @_[KERNEL, ARG0, ARG2];
# nickname'i host bilgisinden ayir
$who = (split /!/, $who)[0];
# CTCP PING istegine cevap gonder
$kernel->post("irc_sinbad", "ctcpreply", $who, "PING $msg");
}
# -----------------------------------------------------------------
# CTCP VERSION isteklerine cevap verecek olan bolum
sub irc_ctcp_version {
# $who : CTCP VERSION isteginde bulunan kisi
my ($kernel, $who) = @_[KERNEL, ARG0];
# nickname'i host bilgisinden ayir
$who = (split /!/, $who)[0];
# CTCP VERSION istegine cevap gonder
$kernel->post("irc_sinbad", "ctcpreply", $who, "VERSION $CTCP_VERSION");
}
# -----------------------------------------------------------------
# CTCP USERINFO isteklerine cevap verecek olan bolum
sub irc_ctcp_userinfo {
# $who : CTCP USERINFO isteginde bulunan kisi
my ($kernel, $who) = @_[KERNEL, ARG0];
# nickname'i host bilgisinden ayir
$who = (split /!/, $who)[0];
# CTCP USERINFO istegine cevap gonder
$kernel->post("irc_sinbad", "ctcpreply", $who, "USERINFO $CTCP_USERINFO");
}
# -----------------------------------------------------------------
# CTCP CLIENTINFO isteklerine cevap verecek olan bolum
sub irc_ctcp_clientinfo {
# $who : CTCP CLIENTINFO isteginde bulunan kisi
my ($kernel, $who) = @_[KERNEL, ARG0];
# nickname'i host bilgisinden ayir
$who = (split /!/, $who)[0];
# CTCP CLIENTINFO istegine cevap gonder
$kernel->post("irc_sinbad", "ctcpreply", $who, "CLIENTINFO $CTCP_CLIENTINFO");
}
# -----------------------------------------------------------------
# Birisi, bulundugumuz IRC kanalina girdiginde calisacak olan bolum
sub irc_join {
# $who : kanala giren kisi
# #channel : girilen IRC kanali
my ($kernel, $heap, $who, $channel) = @_[KERNEL, HEAP, ARG0, ARG1];
# nickname'i host bilgisinden ayir
$who = (split /!/, $who)[0];
# IRC kanalinin adini duzenle
($channel) = ($channel =~ /(#\S*)/);
# eger olay, ilgilendigimiz kanalda gerceklestiyse
if ($channel eq $IRC_CHANNEL) {
# nickname'i listeye ekle
array_add($heap->{nick_list}, $who);
# web sunucuya, kanaldakiler listesini gonder
$kernel->yield("ua_request");
}
}
# -----------------------------------------------------------------
# Bulundugumuz kanaldan birisi, IRC kanalindan ayrildiginda calisacak olan bolum
sub irc_part {
# $who : kanaldan ayrilan kisi
# $channel : ayrililan IRC kanal
my ($kernel, $heap, $who, $channel) = @_[KERNEL, HEAP, ARG0, ARG1];
# nickname'i host bilgisinden ayir
$who = (split /!/, $who)[0];
# IRC kanalinin adini duzenle
($channel) = ($channel =~ /(#\S*)/);
# eger olay, ilgilendigimiz kanalda gerceklestiyse
if ($channel eq $IRC_CHANNEL) {
# nickname'i listeden sil
array_delete($heap->{nick_list}, $who);
# web sunucuya, kanaldakiler listesini gonder
$kernel->yield("ua_request");
}
}
# -----------------------------------------------------------------
# Bulundugumuz kanaldan birisi, IRC sunucudan ayrildiginda calisacak olan bolum
sub irc_quit {
# $who :IRC sunucudan ayrilan kisi
my ($kernel, $heap, $who) = @_[KERNEL, HEAP, ARG0];
# nickname'i host bilgisinden ayir
$who = (split /!/, $who)[0];
# nickname'i listeden sil
array_delete($heap->{nick_list}, $who);
# web sunucuya, kanaldakiler listesini gonder
$kernel->yield("ua_request");
}
# -----------------------------------------------------------------
# Bulundugumuz kanaldan birisi, IRC kanalindan atildiginda (kick) calisacak bolum
sub irc_kick {
# $who : kanaldan atan kisi
# $channel : atilma olayinin gerceklestigi IRC kanali
# $kickee : kanaldan atilan kisi
my ($kernel, $heap, $who, $channel, $kickee) = @_[KERNEL, HEAP, ARG0, ARG1, ARG2];
# nickname'i host bilgisinden ayir
$who = (split /!/, $who)[0];
# IRC kanalinin adini duzenle
($channel) = ($channel =~ /(#\S*)/);
# eger olay, ilgilendigimiz kanalda gerceklestiyse
if ($channel eq $IRC_CHANNEL) {
# nickname'i listeden sil
array_delete($heap->{nick_list}, $who);
# web sunucuya, kanaldakiler listesini gonder
$kernel->yield("ua_request");
}
# eger kanaldan atilan kisi bot ise
# $TIMER_REJOIN degeri kadar saniye gectikten sonra
# IRC kanalina tekrar gir
$kernel->delay("join", $TIMER_REJOIN, $channel)
if ($kickee eq $BOT_NICKNAME);
}
# -----------------------------------------------------------------
# Bulundugumuz kanaldan birisi, nickname'inin degistirdiginde calisacak olan bolum
sub irc_nick {
# $who : nickname'ini degistiren kisi
# $new_nick : yeni nickname
my ($kernel, $heap, $who, $new_nick) = @_[KERNEL, HEAP, ARG0, ARG1];
# nickname'i host bilgisinden ayir
$who = (split /!/, $who)[0];
# nickname listesinde gerekli degisikligi yap
array_replace($heap->{nick_list}, $who, $new_nick);
# web sunucuya, kanaldakiler listesini gonder
$kernel->yield("ua_request");
}
# -----------------------------------------------------------------
# /msg ile birinden ozel mesaj gelirse calisacak bolum
sub irc_msg {
# $who : mesaji gonderen kisi
# $msg : gonderilen mesaj
my ($kernel, $heap, $who, $msg) = @_[KERNEL, HEAP, ARG0, ARG2];
# nickname'i host bilgisinden ayir
$who = (split /!/, $who)[0];
# /msg ile ozel mesaj gonderene cevap olarak
# $MESAJ_MSG degiskeninde yazan cevabi gonder
#$kernel->post("irc_sinbad", "privmsg", $who, $MESAJ_MSG);
$kernel->post("irc_sinbad", "privmsg", $who, "BOT TEST MODUNDA: @{$heap->{nick_list}}");
}
# -----------------------------------------------------------------
# IRC kanalindan/kanallarindan mesaj geldiginde calisacak bolum
sub irc_public {
# $who : mesaji gonderen kisi
# $channel : mesajin gonderildigi kanal
# $msg : gonderilen mesaj
my ($kernel, $heap, $who, $channel, $msg) = @_[KERNEL, HEAP, ARG0 .. ARG2];
# nickname'i host bilgisinden ayir
$who = (split /!/, $who)[0];
# IRC kanalinin adini duzenle
($channel) = ($channel =~ /(#\S*)/);
# veri alisverisi oldu
$heap->{seen_traffic} = 1;
}
# -----------------------------------------------------------------
# HTTP istemcinin, web sitesine nickname listesini gonderdigi bolum
sub ua_request {
my ($kernel, $session, $heap) = @_[KERNEL, SESSION, HEAP];
my $nick_list = "";
my $i = 0;
# eger nickname listesi tamalandiysa
if ($heap->{is_nicklist_completed}) {
# nickname dizisinden, alfabetik siraya dizildikten sonra,
# aralarinda virgul olacak sekilde bir isim listesi hazirlaniyor
foreach my $element (sort {uc($a) cmp uc($b)} @{$heap->{nick_list}}) {
if ($i > 0) {
$nick_list = $nick_list . ",\%20" . $element;
}
else {
$nick_list = $element;
}
$i++;
}
# HTTP istemci icin istek nesnesi hazirla
# Bir <FORM>'dan POST metoduyla veri gonderiliyor gibi
# kanaldakilerin listesi gonderilecek
my $request = HTTP::Request->new(POST => $WEB_USERLIST_PAGE);
$request->content_type("application/x-www-form-urlencoded");
$request->content("kod=$WEB_CODE&isimler=$nick_list");
# HTTP istemci icin cevap nesnesi hazirlaniyor
my $response = $session->postback("ua_response");
# HTTP sunucuya, istek gonderiliyor
# cevap, ua_response fonksiyonuna gelecek
$kernel->post($UA_ALIAS, "request", {request => $request, response => $response});
}
}
# -----------------------------------------------------------------
# HTTP istemciye web sitesinden cevap geldiginden calisacak bolum
sub ua_response {
my ($request, $response, $entry) = @{$_[ARG1]};
# simdilik web sitesinden gelen veriyle, herhangi bir islem yapilmiyor
# print("********\n", $response->content, "\n****************\n");
}
# -------------------------- m a i n ------------------------------
# programin ana govdesi
# program calismaya bu bolumden baslar
# UserAgent (HTTP istemci) nesnesi olusturuluyor
# bu nesne, web sunucu ile baglanti saglayacak
POE::Component::Client::UserAgent->new({alias => $UA_ALIAS,
agent => $UA_AGENT_NAME,
timeout => $UA_TIMEOUT}
) or die("hata\n");
# IRC nesnesi olusturuluyor
# bu nesne, IRC sunucu ile baglanti saglayacak
POE::Component::IRC->new("irc_sinbad") or die("hata\n");;
# oturum (session) aciliyor ve oturum (session) esnasinda
# olusacak olaylar icin hangi fonksiyonlarin calistirilacagi belirtiliyor
POE::Session->create(
inline_states => {
_start => \&_start, # session basladiginda
_stop => \&_stop, # session sonlandirilirken
keep_alive => \&keep_alive, # bot'u canli tutmak icin
irc_error => \&irc_error, # hata olustugunda
irc_sockerr => \&irc_sockerr, # socket hatasi olustugunda
irc_disconnected => \&irc_disconnected, # IRC baglantisi koptugunda
connect => \&connect, # IRC sunucuya baglanmak icin
join => \&join, # IRC kanalina girmek icin
irc_001 => \&irc_001, # IRC sunucuya baglanildiginda
irc_353 => \&irc_353, # IRC kanalindakilerin listesi geldiginde
irc_366 => \&irc_366, # IRC kanalindakilerin listesi bittiginde
irc_ctcp_ping => \&irc_ctcp_ping, # CTCP PING istegi geldiginde
irc_ctcp_version => \&irc_ctcp_version, # CTCP VERSION istegi geldiginde
irc_ctcp_userinfo => \&irc_ctcp_userinfo, # CTCP USERINFO istegi geldiginde
irc_ctcp_clientinfo => \&irc_ctcp_clientinfo, # CTCP CLIENTINFO istegi geldiginde
irc_join => \&irc_join, # Birisi, IRC kanalina girdiginde
irc_part => \&irc_part, # Birisi, IRC kanalindan ayrildiginda
irc_quit => \&irc_quit, # Birisi, IRC sunucudan ayrildiginda
irc_kick => \&irc_kick, # Birisi, IRC kanalindan atildiginda
irc_nick => \&irc_nick, # Birisi, nickname'ini degistirdiginde
irc_msg => \&irc_msg, # /msg ile ozel mesaj geldiginde
irc_public => \&irc_public, # kanala mesaj geldiginde
ua_request => \&ua_request, # HTTP istemcinin veri gondermesi icin
ua_response => \&ua_response, # HTTP istemciye siteden veri geldiginde
},
);
# kernel (cekirdek) calistirilmaya baslaniyor
$poe_kernel->run();
exit(0);
|
Yorumlar | Henüz Kimse Yorum Yapmamış, ilk yorumu siz ekleyin! | Yorum Ekleme Aparatı | Yorum Eklemek için lütfen sol menuden giris yapınız.. | Toplam 0 yorum listelendi. |
|