Tekil Mesaj gösterimi
Alt 11 Nisan 2017, 14:22   #1
Çevrimdışı
Emrehan
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
adwords.c Modülüne Küçük Bir Eklenti




Merhabalar.

Adwords modülünü hepiniz bilmektesiniz. Conf dosyasından yasaklanan kelimelerin sunucuda kullanımını engeller ve kullanılanları da belirtilen kanala yansıtır. Yapacağımız editle o an sunucuda olmasanız dahi siz yokken olan spamları görebileceksiniz.

Sadece adwords.c modülümüzde işlem yapıyoruz.

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
#define MSG_ADWORDS "ADWORDS" #define TOK_ADWORDS "WO"

altına,
Kod:   Kodu kopyalamak için üzerine çift tıklayın!
#define MSG_SPAMLOKU "SPAMLOGOKU" #define TOK_SPAMLOKU "SLOKU" #define MSG_SPAMLSIL "SPAMLOGSIL" #define TOK_SPAMLSIL "SLSIL"

ekleyin.

-

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
CmdAdwords = AddCommand(modinfo->handle, MSG_ADWORDS, TOK_ADWORDS, m_adwords);

altına,
Kod:   Kodu kopyalamak için üzerine çift tıklayın!
CmdAdwords = AddCommand(modinfo->handle, MSG_SPAMLOKU, TOK_SPAMLOKU, spamlogoku); CmdAdwords = AddCommand(modinfo->handle, MSG_SPAMLSIL, TOK_SPAMLSIL, spamlogsil);

ekleyin.

-

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
/* * adword_checkmsg * =============== * * The badword checking stuff was copied from src/badwords.c, * I modified it a lot. */

altına,
Kod:   Kodu kopyalamak için üzerine çift tıklayın!
static char *FullDate(TS time_in) { struct tm *tp = localtime(&time_in); if (!tp) return NULL; memset(&mybuf, 0, sizeof mybuf); strftime(mybuf, sizeof mybuf, "%d-%m-%Y - %H:%M:%S", tp); return mybuf; }

ekleyin.

-

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
for (name = strtoken(&p, tmp, ","); name; name = strtoken(&p, NULL, ",")) if ((chptr = find_channel(name, NullChn)) != NullChn) SendNotice_channel;

altına,
Kod:   Kodu kopyalamak için üzerine çift tıklayın!
FILE *spamlog; spamlog = fopen("spamlog.db","a+"); if (spamlog != NULL) { fprintf(spamlog, "[%s] [ SPAM ] Yapan: %s - Yapilan: %s - Mesaj: %s\n", FullDate(from->lasttime), from->name, to ? to : "", str); fclose(spamlog); }

ekleyin.

-

Kod:   Kodu kopyalamak için üzerine çift tıklayın!
static void adwords_event_kill(char *name) { aClient *cptr; if ((cptr = find_person(name, NULL))) exit_client(cptr, cptr, &me, myconf.kill_reason ? myconf.kill_reason : DEF_KILL_REASON); }

altına,
Kod:   Kodu kopyalamak için üzerine çift tıklayın!
int spamlogoku(aClient *sptr){ if (!IsNetAdmin(sptr)) { sendnotice(sptr,"*** \2%s\2, bu komutu kullanmaya yetkiniz yoktur.", sptr->name); return 0; } #define spmoku "spamlog.db" FILE *p; char buf[BUFSIZE]; p = fopen(spmoku, "r"); sendnotice(sptr,"*** --- Loglanan Spam Listesi ---"); if (p) { while (fgets(buf, sizeof(buf), p)) { buf[strlen(buf)-1] = 0; sendnotice(sptr,"*** %s", buf); } fclose(p); sendnotice(sptr,"*** --- Loglanan Spam Listesi Sonu ---"); } else { sendnotice(sptr,"*** Henuz bir spam kaydi yok."); } } int spamlogsil(aClient *sptr){ if (!IsNetAdmin(sptr)) { sendnotice(sptr,"*** \2%s\2, bu komutu kullanmaya yetkiniz yoktur.", sptr->name); return 0; } system("rm -rf spamlog.db"); sendnotice(sptr,"*** --- Spam Log dosyasi silindi."); return 0; }

ekleyin.

Son olarak da make custommodule MODULEFILE=modulismi şeklinde modülü derleyip rehash çekiyoruz.

Kısaca mantığı anlatayım. Komut erişimlerini NetworkAdmin'e verdim.
Belirtilen kanala yansıyan spamlar, spamlog.db adında bir dosyaya kaydedilir.
/spamlogoku komutuyla da listeye kaydedilen spamları, gün-ay-yıl + saat-dakika-saniye : yapan-yapılan-yaptığımesaj şeklinde size gösterir.

Liste bir zaman sonra bayağı şişeceği için /spamlogsil komutunu yaptım. Bu komutla da listeyi, yani spamlog.db dosyasını sıfırlayabilirsiniz.

İyi forumlar.

 
Alıntı ile Cevapla

IRCForumlari.NET Reklamlar
sohbet odaları reklam ver Benimmekan Mobil Sohbet