Ana sayfa » IRCd/SVS » Fullname gösteren IRCOPS Modülü
IRCd/SVS

Fullname gösteren IRCOPS Modülü

Normal ircops modülünün biraz düzenlenerek fullname gösterilen şekle sokulmuş hali. Bu haliyle benim daha çok hoşuma gidiyor. Bir benzeri tr-ircd içerisinde mevcuttu, kullanmış olanlar bilirler. Oradan esinlendim.
Örnek görüntü şu şekilde:

hitman a Network Administrator [dark.inside] [Müsait] JiX an IRC Operator [s] [Müsait] SoruBOT an IRC Operator [çok gelişmiş soru botu] [Müsait] Toplam: 4 IRCOPs bağlı ve bu yetkililerden 2 tanesi Admin, 2 Oper ve 0 kişi şu anda meşgul
/IRCOPS listesi sonu

Kodlar aşağıdaki gibi:

/*
*  m_ircops - /IRCOPS command that lists IRC Operators
*  (C) Copyright 2004-2005 Syzop
*  (C) Copyright 2003-2004 AngryWolf
*
*  This program is free software; you can redistribute it and/or modify
*  it under the terms of the GNU General Public License as published by
*  the Free Software Foundation; either version 1, or (at your option)
*  any later version.
*
*  This program is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*  GNU General Public License for more details.
*
*  You should have received a copy of the GNU General Public License
*  along with this program; if not, write to the Free Software
*  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/*
Düzenleme: 2007 -  Mehmet "hitman" Tahta
Mail: iletisim[@]mtahta.com
Web: https://mtahta.com/
*/

#include "config.h"
#include "struct.h"
#include "common.h"
#include "sys.h"
#include "numeric.h"
#include "msg.h"
#include "proto.h"
#include "channel.h"
#include
#include
#include
#include
#include
#ifdef _WIN32
#include
#endif
#include
#include "h.h"
#ifdef STRIPBADWORDS
#include "badwords.h"
#endif
#ifdef _WIN32
#include "version.h"
#endif 

typedef struct
{
    long *umode;
    char *text;
} oflag; 

/*
* Ultimate uses numerics 386 and 387 for RPL_IRCOPS and RPL_ENDOFIRCOPS,
* but these numerics are RPL_QLIST and RPL_ENDOFQLIST in UnrealIRCd
* (numeric conflict). I had to choose other numerics.
*/ 

#define RPL_IRCOPS        337
#define RPL_ENDOFIRCOPS  338
#define MSG_IRCOPS        "IRCOPS"
#define TOK_IRCOPS        NULL
#define IsAway(x)        (x)->user->away 

#if !defined(IsSkoAdmin)
#define IsSkoAdmin(sptr)  (IsAdmin(sptr) || IsNetAdmin(sptr) || IsSAdmin(sptr) || IsCoAdmin(sptr))
#endif 

static int m_ircops(aClient *cptr, aClient *sptr, int parc, char *parv[]); 

static oflag otypes[7]; 

ModuleHeader MOD_HEADER(m_ircops)
  = {
    "ircops",
    "v3.6",
    "/IRCOPS command that lists IRC Operators",
    "3.2-b8-1",
    NULL
    }; 

DLLFUNC int MOD_INIT(m_ircops)(ModuleInfo *modinfo)
{
    otypes[0].umode = &UMODE_NETADMIN;
    otypes[0].text = "a Network Administrator";
    otypes[1].umode = &UMODE_SADMIN;
    otypes[1].text = "an IRC Operator";
    otypes[2].umode = &UMODE_ADMIN;
    otypes[2].text = "an IRC Operator";
    otypes[3].umode = &UMODE_COADMIN;
    otypes[3].text = "an IRC Operator";
    otypes[4].umode = &UMODE_OPER;
    otypes[4].text = "an IRC Operator";
    otypes[5].umode = &UMODE_LOCOP;
    otypes[5].text = "a Local Operator";
    otypes[6].umode = NULL;
    otypes[6].text = NULL; 

    if (CommandExists(MSG_IRCOPS))
    {
        config_error("Command " MSG_IRCOPS " already exists");
        return MOD_FAILED;
    }
    CommandAdd(modinfo->handle, MSG_IRCOPS, TOK_IRCOPS, m_ircops, MAXPARA, M_USER); 

    if (ModuleGetError(modinfo->handle) != MODERR_NOERROR)
    {
        config_error("Error adding command " MSG_IRCOPS ": %s",
            ModuleGetErrorStr(modinfo->handle));
        return MOD_FAILED;
    } 

    return MOD_SUCCESS;
} 

DLLFUNC int MOD_LOAD(m_ircops)(int module_load)
{
    return MOD_SUCCESS;
} 

DLLFUNC int MOD_UNLOAD(m_ircops)(int module_unload)
{
    return MOD_SUCCESS;
} 

static char *find_otype(long umodes)
{
    unsigned int i; 

    for (i = 0; otypes[i].umode; i++)
        if (*otypes[i].umode & umodes)
            return otypes[i].text; 

    return "an unknown operator";
} 

/*
* m_ircops
*
*    parv[0]: sender prefix
*
*    Originally comes from TR-IRCD, but I changed it in several places.
*    In addition, I didn't like to display network name. In addition,
*    instead of realname, servername is shown. See the original
*    header below.
*/ 

/************************************************************************
* IRC - Internet Relay Chat, modules/m_ircops.c
*
*  Copyright (C) 2000-2002 TR-IRCD Development
*
*  Copyright (C) 1990 Jarkko Oikarinen and
*                      University of Oulu, Co Center
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ 

static int m_ircops(aClient *cptr, aClient *sptr, int parc, char *parv[])
{
aClient *acptr;
char buf[BUFSIZE];
int opers = 0, admins = 0, globs = 0, aways = 0; 

    for (acptr = client; acptr; acptr = acptr->next)
    {
        /* List only real IRC Operators */
        if (IsULine(acptr) || !IsPerson(acptr) || !IsAnOper(acptr))
            continue;
        /* Don't list +H users */
        if (!IsAnOper(sptr) && IsHideOper(acptr))
            continue; 

        sendto_one(sptr, ":%s %d %s :\2%s\2 %s [%s]" "%s",
            me.name, RPL_IRCOPS, sptr->name,
            acptr->name,
            find_otype(acptr->umodes),
            acptr->info,
            (IsAway(acptr) ? " [Meşgul]" : IsHelpOp(acptr) ? " [Müsait]" : "")); 

        if (IsAway(acptr))
            aways++;
        else if (IsSkoAdmin(acptr))
            admins++;
        else
            opers++; 

    } 

    globs = opers + admins + aways; 

    sprintf(buf,
        "Toplam: \2%d\2 IRCOP%s bağlı ve bu yetkililerden \2%d\2 tanesi Admin%s, \2%d\2 Oper%s ve \2%d\2 kişi şu anda meşgul",
        globs, (globs) > 1 ? "s" : "", admins, admins > 1 ? "s" : "",
        opers, opers > 1 ? "s" : "", aways); 

    sendto_one(sptr, ":%s %d %s :%s", me.name, RPL_IRCOPS, sptr->name, buf);
    sendto_one(sptr, ":%s %d %s :/IRCOPS listesi sonu", me.name, RPL_ENDOFIRCOPS, sptr->name); 

    return 0;
}

Umarım işinize yarar, sorularınız için iletişim bölümünü kullanabilirsiniz.

Yazar hakkında

Mehmet Tahta

Egenin gözbebeği İzmir'de yaşıyor, Dokuz Eylül Üniversitesi Yönetim Bilişim Sistemleri yüksek lisans öğrencisi. DMOZ, GNU, WordPress, jQuery ve Ubuntu projelerine katkıda bulunur; ayda yılda bir de bu blog sayfasını günceller.

2 Yorum

Yorum eklemek ister misiniz?

Yazılar E-posta Adresinize Gelsin

Abone olmak için aşağıdaki forma e-posta adresinizi yazıp gönderilen onay e-postasını onaylamanız yeterlidir.

İletişim bilgileriniz hiçbir şekilde 3. parti uygulama ile paylaşılmamaktadır.