Tekil Mesaj gösterimi
Alt 11 Nisan 2017, 14:37   #2
Çevrimdışı
fLayer

fLayer - ait Kullanıcı Resmi (Avatar)
Cevap: adwords.c Modülüne Küçük Bir Eklenti




Emrehan Nickli Üyeden Alıntı
Bu forumdaki linkleri ve resimleri görebilmek için en az 20 mesajınız olması gerekir.
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: 
#define MSG_ADWORDS "ADWORDS" #define TOK_ADWORDS "WO"

altına,
Kod: 
#define MSG_SPAMLOKU "SPAMLOGOKU" #define TOK_SPAMLOKU "SLOKU" #define MSG_SPAMLSIL "SPAMLOGSIL" #define TOK_SPAMLSIL "SLSIL"

ekleyin.

-

Kod: 
CmdAdwords = AddCommand(modinfo->handle, MSG_ADWORDS, TOK_ADWORDS, m_adwords);

altına,
Kod: 
CmdAdwords = AddCommand(modinfo->handle, MSG_SPAMLOKU, TOK_SPAMLOKU, spamlogoku); CmdAdwords = AddCommand(modinfo->handle, MSG_SPAMLSIL, TOK_SPAMLSIL, spamlogsil);

ekleyin.

-

Kod: 
/* * adword_checkmsg * =============== * * The badword checking stuff was copied from src/badwords.c, * I modified it a lot. */

altına,
Kod: 
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: 
for (name = strtoken(&p, tmp, ","); name; name = strtoken(&p, NULL, ",")) if ((chptr = find_channel(name, NullChn)) != NullChn) SendNotice_channel;

altına,
Kod: 
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: 
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: 
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.

eline saglık

__________________
[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...] [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]
  Alıntı ile Cevapla

IRCForumlari.NET Reklamlar