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- 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[@]hitman.gen.tr
Web: http://www.hitman.gen.tr/
*/
 
#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.

Belki şu konular da ilginizi çekebilir: