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.