IRCServices – ngi ve ni Kullanimlar.

IRCServiceste bazi durumlari kullanmak için pointerlar kullanilir. Bu pointerlar birçok özellikleri almak için, işlem yapmak için sıkca kullanilir. Örneğin *ni..

Örnek vericek olursak;

/************************************************************************/
//coded toXic

static void do_sans(User *u)
{
NickInfo *ni;
ni = get_nickinfo(u->nick);
#define bekle 3;
static int toxolog = 60*60*24*bekle;
time_t now = time(NULL);
NickGroupInfo *ngi;
ngi = get_ngi(ni);
if (!ni) {
send_cmd(s_NickServ, "NOTICE %s Nickiniz'i kaydetmelisiniz.", u->nick);
return;
}

if (!is_services_admin(u) && ngi->lastsans && now - ngi->lastsans < toxolog) { send_cmd(s_NickServ, "NOTICE %s Bu Komutu \2( 3 ) \2 Gunde, sadece \2 1 \2 Kez Kullanabilirsiniz..", u->nick);
return;
}
ngi->lastsans = now;
/*
int Kalan;
Kalan = now - ngi->lastsans - toxolog;
send_cmd(s_NickServ, "NOTICE %s kalan sureniz ( \2%d\2 )", u->nick, Kalan);
*/
int x = 0;
int ibo = 0;
for (ibo = 0; ibo < 1; ++ibo) x=rand()%100; send_cmd(s_NickServ, "NOTICE %s Sans Numaraniz, \2 ( %d )\2 Olmustur..", u->nick, x);
send_cmd(s_NickServ, "NOTICE %s Kazanma bilgisi ", u->nick);
if (x == 35) {
send_cmd(s_NickServ, "NOTICE %s Tebrikler, Sansli sayiyi yakaladiniz.", u->nick);
send_cmd(s_NickServ, "SWHOIS %s :Vhost Sansli Kullanicisi", u->nick);
}
else if (x == 44) {
send_cmd(s_NickServ, "NOTICE %s Tebrikler, Sansli sayiyi yakaladiniz.", u->nick);
send_cmd(s_NickServ, "NOTICE %s Odulunuz, Size Whois cekenleri goreceksiniz..", u->nick);
send_cmd(s_NickServ, "SVSMODE %s +W :1", u->nick);
}
else if (x == 62) {
send_cmd(s_NickServ, "NOTICE %s Tebrikler, Sansli sayiyi yakaladiniz.", u->nick);
send_cmd(s_NickServ, "NOTICE %s Odulunuz, Kanallardan atilmayacaksiniz..", u->nick);
send_cmd(s_NickServ, "SVSMODE %s +q :1", u->nick);
}
else if (x == 77) {
send_cmd(s_NickServ, "NOTICE %s Tebrikler, Sansli sayiyi yakaladiniz.", u->nick);
send_cmd(s_NickServ, "NOTICE %s Odulunuz, Vip Kullanicisi oldunuz.", u->nick);
send_cmd(s_NickServ, "SVSMODE %s +qW :1", u->nick);
}
else if (x == 93) {
send_cmd(s_NickServ, "NOTICE %s Tebrikler, Sansli sayiyi yakaladiniz.", u->nick);
send_cmd(s_NickServ, "NOTICE %s Odulunuz, Size Whois cekenleri goreceksiniz..", u->nick);
send_cmd(s_NickServ, "SVSMODE %s +W :1", u->nick);
}
else {
send_cmd(s_NickServ, "NOTICE %s Maalesef, Sansli gununuzde degilsiniz..", u->nick);
send_cmd(s_NickServ, "NOTICE %s Tekrar Kullanim icin, \2 3 \2 Gun beklemelisiniz..", u->nick);
}
}

bu sekilde bir kod yazalim.

Kod:
NickInfo *ni;Burada *ni’yi kullandik. Fakat Kullanicinin bilgilerini almak için bir pointer daha kullanmaliyiz. Oda;

Kod:
ni = get_nickinfo(u->nick);Burada, get_nickinfo kullanicinin nick bilgilerini alir. Mesela sunucuya giren kullanicilara karşilama yapmak için,

Kod:

NickInfo *ni;
ni = get_nickinfo(u->nick);

#define tox “Nickiniz kayitlidir.”
if (ni) {
send_cmd(s_NickServ, “PRIVMSG %s %s”, u->nick, tox);
}Olarak kullaniyoruz, Kullanicinin nickinin kayitli olup olmadiğini bu şekilde algilatiyoruz.

Kod:
if (!ni) {
send_cmd(s_NickServ, “NOTICE %s Nickiniz’i kaydetmelisiniz.”, u->nick);
return;
}Burada kayitsiz nicklere komut kullanimini kapadik. return burada işlemi kesmiş. Eğer return kullanilmasa idi, işlem gerçekleşirdi.

İlk Kodumuzda varsayalim ki,

Kod:
ni = get_nickinfo(u->nick);yok..

© NickServ Sifre kabul edildi.

nickserv — sans
© NickServ Nickiniz’i kaydetmelisiniz.

Nick kayitli olduğu halde, nickinizi kaydetmelisiniz diyor. 10 harfcik bir kod bile çok önemli kod yazimi için. Hatta bu segmantationa kadar rahatlikla götürebilir.

Gelelim ngi ‘ ye.

Kullanimi;
Kod:
NickGroupInfo *ngi;Seklindedir.

Bunu;

Kod:
if (!is_services_admin(u) && ngi->lastsans && now – ngi->lastsans < toxolog) { send_cmd(s_NickServ, "NOTICE %s Bu Komutu \2( 3 ) \2 Gunde, sadece \2 1 \2 Kez Kullanabilirsiniz..", u->nick);
return;
}olarak kullanmişiz. ngi en cok emaildi sifre idi yani kişiye özel işlemlerde kullanilmaktadir.

Yorumlar

Bir yanıt yazın