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.
|