+/* event_neonserv_ctcp.c - NeonServ v5.3
+ * Copyright (C) 2011-2012 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)) {
duration = 3600;
banmask = generate_banmask(user, banmaskBuf);
printf_mysql_query("INSERT INTO `bans` (`ban_channel`, `ban_mask`, `ban_triggered`, `ban_timeout`, `ban_owner`, `ban_reason`) VALUES ('%d', '%s', UNIX_TIMESTAMP(), '%lu', '%d', '%s')", chan->channel_id, escape_string(banmask), (unsigned long) (time(0) + duration), 0, escape_string(reason));
- int banid = (int) mysql_insert_id(mysql_conn);
+ int banid = (int) mysql_insert_id(get_mysql_conn());
char nameBuf[MAXLEN];
char banidBuf[20];
sprintf(nameBuf, "ban_%d", banid);
}
}
-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;
-}