IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası

IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası (https://www.ircforumlari.net/)
-   UnrealIRCD-6.x (https://www.ircforumlari.net/unrealircd-6x/)
-   -   UnrealIRCd-6 // Badnickleri tüm kanallardan çıkartıp, belirlediğiniz kanala sokun. (https://www.ircforumlari.net/unrealircd-6x/1058537-unrealircd-6-badnickleri-tum-kanallardan-cikartip-belirlediginiz-kanala-sokun.html)

fatal 15 Nisan 2025 10:21

UnrealIRCd-6 // Badnickleri tüm kanallardan çıkartıp, belirlediğiniz kanala sokun.
 
Bu modül sayesinde belirlediğiniz kanallara giren veya nick değiştiren kullanıcıların nickleri otomatik olarak kontrol edilecek ve uygunsuz içerik tespit edilirse belirlediğimiz kanallardan çıkartılıp #Badnick kanalına yönlendirecek, ayrıca #Log kanalına yapılan işlem bildirilecektir.

monitored_channels dizisini kontrol edilecek kanallarla güncelleyin.
QUARANTINE_CHANNEL ve LOG_CHANNEL sabitlerini kendi kanal isimlerinizle değiştirin.

Kod:

#include "unrealircd.h"

#define MODULE_NAME "badnick"
#define MODULE_VERSION "1.0"
#define BADWORDS_CONFIG_FILE "conf/badwords.conf"
#define QUARANTINE_CHANNEL "#Badnick"
#define LOG_CHANNEL "#Log"

ModuleHeader MOD_HEADER = {
    MODULE_NAME,
    MODULE_VERSION,
    "Badnick Kontrol",
    "fatal",
    "unrealircd-6",
};

// Kötü kelimeler listesi
char **badwords = NULL;
int badwords_count = 0;

// Yapılandırma fonksiyonları
int badnick_configtest(ConfigFile *cf, ConfigEntry *ce, int type, int *errs);
int badnick_configposttest(int *errs);
int badnick_configrun(ConfigFile *cf, ConfigEntry *ce, int type);

// Olay dinleyicileri
int badnick_user_join(Client *client, Channel *channel, char *key, char *parv[]);
int badnick_user_nick(Client *client, const char *newnick);

MOD_INIT() {
    // Kötü kelimeleri yükle
    load_badwords();
   
    // Hook'ları kaydet
    HookAdd(modinfo->handle, HOOKTYPE_LOCAL_JOIN, 0, badnick_user_join);
    HookAdd(modinfo->handle, HOOKTYPE_LOCAL_NICKCHANGE, 0, badnick_user_nick);
   
    return MOD_SUCCESS;
}

MOD_LOAD() {
    return MOD_SUCCESS;
}

MOD_UNLOAD() {
    // Belleği temizle
    if (badwords) {
        for (int i = 0; i < badwords_count; i++)
            free(badwords[i]);
        free(badwords);
    }
    return MOD_SUCCESS;
}

void load_badwords() {
    FILE *file = fopen(BADWORDS_CONFIG_FILE, "r");
    if (!file) {
        config_error("Badwords dosyasi acilamadi: %s", BADWORDS_CONFIG_FILE);
        return;
    }
   
    char line[256];
    while (fgets(line, sizeof(line), file)) {
        // Yorum satırlarını ve boş satırları atla
        if (line[0] == '#' || line[0] == '\n')
            continue;
       
        // Satır sonundaki newline karakterini kaldır
        line[strcspn(line, "\n")] = 0;
       
        // Bellek ayır ve listeye ekle
        badwords = realloc(badwords, (badwords_count + 1) * sizeof(char*));
        badwords[badwords_count] = strdup(line);
        badwords_count++;
    }
   
    fclose(file);
}

int contains_badword(const char *text) {
    char ltext[256];
    strlcpy(ltext, text, sizeof(ltext));
    strtolower(ltext);
   
    for (int i = 0; i < badwords_count; i++) {
        if (strstr(ltext, badwords[i])) {
            return 1;
        }
    }
    return 0;
}

int badnick_user_join(Client *client, Channel *channel, char *key, char *parv[]) {
    // Kanal kontrolü (sadece belirli kanallarda çalışsın)
    const char *monitored_channels[] = {"#sohbet", "#radyo", NULL};
   
    int is_monitored = 0;
    for (int i = 0; monitored_channels[i]; i++) {
        if (!strcasecmp(channel->name, monitored_channels[i])) {
            is_monitored = 1;
            break;
        }
    }
   
    if (!is_monitored)
        return 0;
   
    // Nick kontrolü
    if (contains_badword(client->name)) {
        // Kullanıcıyı kanaldan çıkar
        sendto_channel(NULL, NULL, NULL, channel->name, "KICK %s %s :Uygunsuz nick kullanimi", channel->name, client->name);
       
        // Karantina kanalına ekle
        sendto_one(client, NULL, ":%s JOIN %s", client->name, QUARANTINE_CHANNEL);
        sendto_server(NULL, 0, 0, NULL, ":%s JOIN %s", client->name, QUARANTINE_CHANNEL);
       
        // Log kanalına bildir
        sendto_channel(NULL, NULL, NULL, LOG_CHANNEL, "NOTICE %s :Uygunsuz nick tespit edildi: %s (%s) -> %s",
                      LOG_CHANNEL, client->name, client->user->realhost, QUARANTINE_CHANNEL);
       
        return 0;
    }
   
    return 0;
}

int badnick_user_nick(Client *client, const char *newnick) {
    if (contains_badword(newnick)) {
        // Nick değişimini engelle
        sendnotice(client, "Bu nick uygun degil. Lutfen baska bir nick secin.");
        return HOOK_DENY;
    }
    return 0;
}

badwords.conf

Kod:

# Kötü kelimeler listesi
# Her satıra bir kelime
küfür1
küfür2
cinsel1
uygunsuznick5


zAZ 18 Nisan 2025 18:14

Cevap: UnrealIRCd-6 // Badnickleri tüm kanallardan çıkartıp, belirlediğiniz kanala sokun.
 
Denenecek listesine eklendi. Mükemmel bir şey tebrikler ...

eFe 18 Nisan 2025 18:24

Cevap: UnrealIRCd-6 // Badnickleri tüm kanallardan çıkartıp, belirlediğiniz kanala sokun.
 
tebrikler ... güzel mödul


Tüm Zamanlar GMT +3 Olarak Ayarlanmış. Şuanki Zaman: 10:43.

Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2025, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
Copyright ©2004 - 2025 IRCForumlari.Net Sparhawk