+/* event_neonserv_ctcp.c - NeonServ v5.2
+ * Copyright (C) 2011 Philipp Kreil (pk910)
+ *
+ * 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+ */
struct neonserv_event_ctcp_cache {
struct ClientSocket *client;
static USERAUTH_CALLBACK(neonserv_event_ctcp_nick_lookup);
static void neonserv_event_ctcp_async1(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *command, char *text);
-static int neonserv_ctcp(char *buffer, char *command, char *text);
static void neonserv_event_chanctcp(struct UserNode *user, struct ChanNode *chan, char *command, char *text) {
+ if(!stricmp(command, "ACTION")) return; //always allow CTCP ACTION (/me)
struct ClientSocket *client = getBotForChannel(chan);
if(!client) return; //we can't "see" this event
- if(user->flags & (USERFLAG_ISBOT | USERFLAG_ISIRCOP)) return;
+ if(isNetworkService(user)) return;
loadChannelSettings(chan);
if(!(chan->flags & CHANFLAG_CHAN_REGISTERED)) return;
if(!(user->flags & USERFLAG_ISAUTHED)) {
}
}
-static void neonserv_event_privctcp(struct UserNode *user, struct UserNode *target, char *command, char *text) {
- char ctcpBuf[MAXLEN];
- if(neonserv_ctcp(ctcpBuf, command, text)) {
- struct ClientSocket *bot;
- for(bot = getBots(SOCKET_FLAG_READY, NULL); bot; bot = getBots(SOCKET_FLAG_READY, bot)) {
- if(bot->user == target) break;
- }
- if(bot)
- putsock(bot, "NOTICE %s :\001%s\001", user->nick, ctcpBuf);
- }
-}
-
-static int neonserv_ctcp(char *buffer, char *command, char *text) {
- if(!stricmp(command, "VERSION")) {
- sprintf(buffer, "VERSION NeonServ v" NEONSERV_VERSION " by pk910 (%s)", (strcmp(revision, "") ? revision : "-"));
- return 1;
- }
- if(!stricmp(command, "FINGER")) {
- sprintf(buffer, "FINGER NeonServ v" NEONSERV_VERSION " (%s) build %s lines C code using " COMPILER " (see +netinfo)", (strcmp(revision, "") ? revision : "-"), codelines);
- return 1;
- }
- if(!stricmp(command, "PING")) {
- sprintf(buffer, "PING %s", (text ? text : "0"));
- return 1;
- }
- if(!stricmp(command, "TIME")) {
- time_t rawtime;
- struct tm *timeinfo;
- char timeBuf[80];
- time(&rawtime);
- timeinfo = localtime(&rawtime);
- strftime(timeBuf, 80, "%c", timeinfo);
- sprintf(buffer, "TIME %s", timeBuf);
- return 1;
- }
- return 0;
-}