cs_getkey.c

Go to the documentation of this file.
00001 /* ChanServ core functions
00002  *
00003  * (C) 2003-2013 Anope Team
00004  * Contact us at team@anope.org
00005  *
00006  * Please read COPYING and README for further details.
00007  *
00008  * Based on the original code of Epona by Lara.
00009  * Based on the original code of Services by Andy Church. 
00010  * 
00011  *
00012  */
00013 /*************************************************************************/
00014 
00015 #include "module.h"
00016 
00017 static int do_getkey(User * u);
00018 static void myChanServHelp(User * u);
00019 
00026 int AnopeInit(int argc, char **argv)
00027 {
00028     Command *c;
00029 
00030     moduleAddAuthor("Anope");
00031     moduleAddVersion(VERSION_STRING);
00032     moduleSetType(CORE);
00033 
00034     c = createCommand("GETKEY", do_getkey, NULL, CHAN_HELP_GETKEY, -1, -1,
00035                       -1, -1);
00036     moduleAddCommand(CHANSERV, c, MOD_UNIQUE);
00037 
00038     moduleSetChanHelp(myChanServHelp);
00039 
00040     return MOD_CONT;
00041 }
00042 
00046 void AnopeFini(void)
00047 {
00048 
00049 }
00050 
00051 
00052 
00057 static void myChanServHelp(User * u)
00058 {
00059     notice_lang(s_ChanServ, u, CHAN_HELP_CMD_GETKEY);
00060 }
00061 
00067 static int do_getkey(User * u)
00068 {
00069     char *chan = strtok(NULL, " ");
00070     ChannelInfo *ci;
00071 
00072     if (!chan) {
00073         syntax_error(s_ChanServ, u, "GETKEY", CHAN_GETKEY_SYNTAX);
00074     } else if (!(ci = cs_findchan(chan))) {
00075         notice_lang(s_ChanServ, u, CHAN_X_NOT_REGISTERED, chan);
00076     } else if (ci->flags & CI_VERBOTEN) {
00077         notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan);
00078     } else if (!check_access(u, ci, CA_GETKEY)) {
00079         notice_lang(s_ChanServ, u, ACCESS_DENIED);
00080     } else if (!ci->c || !ci->c->key) {
00081         notice_lang(s_ChanServ, u, CHAN_GETKEY_NOKEY, chan);
00082     } else {
00083         alog("%s: %s!%s@%s used GETKEY on %s",
00084              s_ChanServ, u->nick, u->username, u->host, ci->name);
00085         notice_lang(s_ChanServ, u, CHAN_GETKEY_KEY, chan, ci->c->key);
00086     }
00087 
00088     return MOD_CONT;
00089 }