Unrealircd Whois Modules örnek bir tane vardı elimde, umarim isine yarar.. PHP- Kodu: /* * Unreal Internet Relay Chat Daemon, src/modules/m_whois.c * (C) 2000-2001 Carsten V. Munk and the UnrealIRCd Team * Moved to modules by Fish (Justin Hammond) * * 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. */ #include "config.h" #include "struct.h" #include "common.h" #include "sys.h" #include "numeric.h" #include "msg.h" #include "channel.h" #include <time.h> #include <sys/stat.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #ifdef _WIN32 #include <io.h> #endif #include <fcntl.h> #include "h.h" #include "proto.h" #ifdef STRIPBADWORDS #include "badwords.h" #endif #ifdef _WIN32 #include "version.h" #endif static char buf[BUFSIZE]; DLLFUNC int m_whois(aClient *cptr, aClient *sptr, int parc, char *parv[]); /* Place includes here */ #define MSG_WHOIS "WHOIS" /* WHOI */ #define TOK_WHOIS "#" /* 35 */ ModuleHeader MOD_HEADER(m_whois) = { "whois", /* Name of module */ "$Id: m_whois.c,v 1.1.4.24 2004/03/07 22:26:23 syzop Exp $", /* Version */ "command /whois", /* Short description of module */ "3.2-b8-1", NULL }; /* This is called on module init, before Server Ready */ DLLFUNC int MOD_INIT(m_whois)(ModuleInfo *modinfo) { /* * We call our add_Command crap here */ add_Command(MSG_WHOIS, TOK_WHOIS, m_whois, MAXPARA); MARK_AS_OFFICIAL_MODULE(modinfo); return MOD_SUCCESS; } /* Is first run when server is 100% ready */ DLLFUNC int MOD_LOAD(m_whois)(int module_load) { return MOD_SUCCESS; } /* Called when module is unloaded */ DLLFUNC int MOD_UNLOAD(m_whois)(int module_unload) { if (del_Command(MSG_WHOIS, TOK_WHOIS, m_whois) < 0) { sendto_realops("Failed to delete commands when unloading %s", MOD_HEADER(m_whois).name); } return MOD_SUCCESS; }
/* ** m_whois ** parv[0] = sender prefix ** parv[1] = nickname masklist */ DLLFUNC int m_whois(aClient *cptr, aClient *sptr, int parc, char *parv[]) { Membership *lp; anUser *user; aClient *acptr, *a2cptr; aChannel *chptr; char *nick, *tmp, *name; char *p = NULL; int found, len, mlen; if (IsServer(sptr)) return 0; if (parc < 2) { sendto_one(sptr, err_str(ERR_NONICKNAMEGIVEN), me.name, parv[0]); return 0; } if (parc > 2) { if (hunt_server_token(cptr, sptr, MSG_WHOIS, TOK_WHOIS, "%s :%s", 1, parc, parv) != HUNTED_ISME) return 0; parv[1] = parv[2]; } for (tmp = parv[1]; (nick = strtoken(&p, tmp, ",")); tmp = NULL) { unsigned char invis, showchannel, member, wilds, hideoper; /* <- these are all boolean-alike */ found = 0; /* We do not support "WHOIS *" */ wilds = (index(nick, '?') || index(nick, '*')); if (wilds) continue; if ((acptr = find_client(nick, NULL))) { if (IsServer(acptr)) continue; /* * I'm always last :-) and acptr->next == NULL!! */ if (IsMe(acptr)) break; /* * 'Rules' established for sending a WHOIS reply: * - only send replies about common or public channels * the target user(s) are on; */ if (!IsPerson(acptr)) continue; user = acptr->user; name = (!*acptr->name) ? "?" : acptr->name; invis = acptr != sptr && IsInvisible(acptr); member = (user->channel) ? 1 : 0; a2cptr = find_server_quick(user->server); hideoper = 0; if (IsHideOper(acptr) && (acptr != sptr) && !IsAnOper(sptr)) hideoper = 1; if (IsWhois(acptr) && (sptr != acptr)) { sendto_one(acptr, ":%s %s %s :*** %s (%s@%s) did a /whois on you.", me.name, IsWebTV(acptr) ? "PRIVMSG" : "NOTICE", acptr->name, sptr->name, sptr->user->username, sptr->user->realhost); } sendto_one(sptr, rpl_str(RPL_WHOISUSER), me.name, parv[0], name, user->username, IsHidden(acptr) ? user->virthost : user->realhost, acptr->info); if (IsEyes(sptr) && IsOper(sptr)) { /* send the target user's modes */ sendto_one(sptr, rpl_str(RPL_WHOISMODES), me.name, parv[0], name, get_mode_str(acptr)); } if (IsHidden(acptr) && ((acptr == sptr) || IsAnOper(sptr))) { sendto_one(sptr, rpl_str(RPL_WHOISHOST), me.name, parv[0], acptr->name, user->realhost); } if (IsARegNick(acptr)) sendto_one(sptr, rpl_str(RPL_WHOISREGNICK), me.name, parv[0], name);
found = 1; mlen = strlen(me.name) + strlen(parv[0]) + 10 + strlen(name); for (len = 0, *buf = '\0', lp = user->channel; lp; lp = lp->next) { chptr = lp->chptr; showchannel = 0; if (ShowChannel(sptr, chptr)) showchannel = 1; #ifndef SHOW_SECRET if (IsAnOper(sptr) && !SecretChannel(chptr)) #else if (IsAnOper(sptr)) #endif showchannel = 1; if ((acptr->umodes & UMODE_HIDEWHOIS) && !IsMember(sptr, chptr) && !IsAnOper(sptr)) showchannel = 0; if (IsServices(acptr) && !IsNetAdmin(sptr) && !IsSAdmin(sptr)) showchannel = 0; if (acptr == sptr) showchannel = 1; /* Hey, if you are editting here... don't forget to change the webtv w_whois ;p. */ if (showchannel) { long access; if (len + strlen(chptr->chname) > (size_t)BUFSIZE - 4 - mlen) { sendto_one(sptr, ":%s %d %s %s :%s", me.name, RPL_WHOISCHANNELS, parv[0], name, buf); *buf = '\0'; len = 0; } #ifdef SHOW_SECRET if (IsAnOper(sptr) #else if (IsNetAdmin(sptr) #endif && SecretChannel(chptr) && !IsMember(sptr, chptr)) *(buf + len++) = '?'; if (acptr->umodes & UMODE_HIDEWHOIS && !IsMember(sptr, chptr) && IsAnOper(sptr)) *(buf + len++) = '!'; access = get_access(acptr, chptr); #ifndef PREFIX_AQ if (access & CHFL_CHANOWNER) *(buf + len++) = '*'; else if (access & CHFL_CHANPROT) *(buf + len++) = '^'; #else if (access & CHFL_CHANOWNER) *(buf + len++) = '~'; else if (access & CHFL_CHANPROT) *(buf + len++) = '&'; #endif else if (access & CHFL_CHANOP) *(buf + len++) = '@'; else if (access & CHFL_HALFOP) *(buf + len++) = '%'; else if (access & CHFL_VOICE) *(buf + len++) = '+'; if (len) *(buf + len) = '\0'; (void)strcpy(buf + len, chptr->chname); len += strlen(chptr->chname); (void)strcat(buf + len, " "); len++; } } if (buf[0] != '\0') sendto_one(sptr, rpl_str(RPL_WHOISCHANNELS), me.name, parv[0], name, buf); if (!(IsULine(acptr) && !IsOper(sptr) && HIDE_ULINES)) sendto_one(sptr, rpl_str(RPL_WHOISSERVER), me.name, parv[0], name, user->server, a2cptr ? a2cptr->info : "*Not On This Net*"); if (user->away) sendto_one(sptr, rpl_str(RPL_AWAY), me.name, parv[0], name, user->away); /* makesure they aren't +H (we'll also check before we display a helpop or IRCD Coder msg) -- codemastr */ if ((IsAnOper(acptr) || IsServices(acptr)) && !hideoper) { buf[0] = '\0'; if (IsNetAdmin(acptr)) sendto_one(sptr, rpl_str (RPL_WHOISOPERATOR), me.name, parv[0], name, "12Ag Genel Sorumlusudur.."); if (IsNetAdmin(acptr)) sendto_one(sptr, rpl_str (RPL_WHOISOPERATOR), me.name, parv[0], name, "12Nickine 4Oper12,4Op12,4Voice12,4Access 12Icin Mesaj Atmak Yasaktir.."); if (IsNetAdmin(acptr)) sendto_one(sptr, rpl_str (RPL_WHOISOPERATOR), me.name, parv[0], name, "12Bu Yasaga Uymayanlari Aciklama Yapmadan Atabilir.4(AKILL)"); buf[0] = '\0'; if (IsNetAdmin(acptr)) strlcat(buf, "a 12Ag RooT Yoneticisi", sizeof buf); else if (IsSAdmin(acptr)) strlcat(buf, "a 12Servis Yoneticisi", sizeof buf); else if (IsAdmin(acptr) && !IsCoAdmin(acptr)) strlcat(buf, "a 12Sunucu Yoneticisi", sizeof buf); else if (IsCoAdmin(acptr)) strlcat(buf, "a 12Yardımcı Yönetici", sizeof buf); else if (IsServices(acptr)) strlcat(buf, "a 12Ağ Servisi", sizeof buf); else if (IsOper(acptr)) strlcat(buf, "an 12Sunucu Operatoru", sizeof buf); else strlcat(buf, "a 12Local IRC Operator", sizeof buf); if (buf[0]) sendto_one(sptr, rpl_str(RPL_WHOISOPERATOR), me.name, parv[0], name, buf); } if (IsHelpOp(acptr) && !hideoper && !user->away) sendto_one(sptr, rpl_str(RPL_WHOISHELPOP), me.name, parv[0], name); if (acptr->umodes & UMODE_BOT) sendto_one(sptr, rpl_str(RPL_WHOISBOT), me.name, parv[0], name, ircnetwork); if (acptr->umodes & UMODE_SECURE) sendto_one(sptr, ":%s %d %s %s :%s", me.name, RPL_WHOISSPECIAL, parv[0], name, "2is a Secure Connection"); if (!BadPtr(user->swhois) && !hideoper) sendto_one(sptr, ":%s %d %s %s :%s", me.name, RPL_WHOISSPECIAL, parv[0], name, acptr->user->swhois); if ((IsAnOper(acptr) || IsServices(acptr)) && !hideoper) { buf[0] = '\0'; if (IsNetAdmin(acptr)) sendto_one(sptr, rpl_str (RPL_WHOISOPERATOR), me.name, parv[0], name, "4Falanfilan.Net IRC SUNUCUSUNA HOS GELDINIZ..!"); if (IsNetAdmin(acptr)) sendto_one(sptr, rpl_str (RPL_WHOISOPERATOR), me.name, parv[0], name, "12Teknik Sorunlarınızı Bildirebilirsiniz..!"); if (IsNetAdmin(acptr)) sendto_one(sptr, rpl_str (RPL_WHOISOPERATOR), me.name, parv[0], name, "12Sorunlarınız İçin Burdayız.."); if (IsNetAdmin(acptr)) sendto_one(sptr, rpl_str (RPL_WHOISOPERATOR), me.name, parv[0], name, "12Bizi Sectiğiniz İçin Tesekkür Ederiz.."); if (IsNetAdmin(acptr)) sendto_one(sptr, rpl_str (RPL_WHOISOPERATOR), me.name, parv[0], name, "12Sunucu Yöneticisiyimdir.. Bilginize..!"); if (IsNetAdmin(acptr)) sendto_one(sptr, rpl_str (RPL_WHOISOPERATOR), me.name, parv[0], name, "12Şikayet ve Önerinizi Bekliyoruz.."); if (IsNetAdmin(acptr)) sendto_one(sptr, rpl_str (RPL_WHOISOPERATOR), me.name, parv[0], name, "12Web Adresimiz: http://domainismi.com/"); if (IsNetAdmin(acptr)) sendto_one(sptr, rpl_str (RPL_WHOISOPERATOR), me.name, parv[0], name, "12Türkiye'nin En Kaliteli Sohbet Sunucusu.."); if (IsNetAdmin(acptr)) sendto_one(sptr, rpl_str (RPL_WHOISOPERATOR), me.name, parv[0], name, "12Oyun Oynamak İçin #Oyun Radyo DinLemek İçin #Radyo !"); if (IsNetAdmin(acptr)) sendto_one(sptr, rpl_str (RPL_WHOISOPERATOR), me.name, parv[0], name, "12Yardım İcin Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir. 12Adresini KullanabiLirsiniz.."); if (IsNetAdmin(acptr)) sendto_one(sptr, rpl_str (RPL_WHOISOPERATOR), me.name, parv[0], name, "12Gereksiz Yere Özelimde Bekleme Yapmayiniz.."); if (IsNetAdmin(acptr)) sendto_one(sptr, rpl_str (RPL_WHOISOPERATOR), me.name, parv[0], name, "12Sunucumuzdan 7 Gun 24 Saat Teknik Destek Alabilirsiniz.."); if (IsNetAdmin(acptr)) sendto_one(sptr, rpl_str (RPL_WHOISOPERATOR), me.name, parv[0], name, "12Sunucu Hakkında Bilgi İçin: 4/Motd 12 ve 4/Rules 12Kullanınız..!"); buf[0] = '\0'; if (buf[0]) sendto_one(sptr, rpl_str(RPL_WHOISOPERATOR), me.name, parv[0], name, buf); } if (IsARegNick(acptr)) { buf[0] = '\0'; sendto_one(sptr, rpl_str (RPL_WHOISSPECIAL), me.name, parv[0], name, "12Rock,MetaL,Blues,Muzisyen.."); sendto_one(sptr, rpl_str (RPL_WHOISSPECIAL), me.name, parv[0], name, "12Türkiye'nin En Kaliteli Rock , MetaL , Blues Muzik Sunucusu."); sendto_one(sptr, rpl_str (RPL_WHOISSPECIAL), me.name, parv[0], name, "12Web Adresimiz: http://webismi.com/"); sendto_one(sptr, rpl_str (RPL_WHOISSPECIAL), me.name, parv[0], name, "12Durum: Kayitli Kullanici."); buf[0] = '\0'; if (buf[0]) sendto_one(sptr, rpl_str(RPL_WHOISSPECIAL), me.name, parv[0], name, buf); } /* * Fix /whois to not show idle times of * global opers to anyone except another * global oper or services. * -CodeM/Barubary */ if (MyConnect(acptr)) sendto_one(sptr, rpl_str(RPL_WHOISIDLE), me.name, parv[0], name, TStime() - acptr->last, acptr->firsttime); } if (!found) sendto_one(sptr, err_str(ERR_NOSUCHNICK), me.name, parv[0], nick); if (p) p[-1] = ','; } sendto_one(sptr, rpl_str(RPL_ENDOFWHOIS), me.name, parv[0], parv[1]); return 0; }
|