#include "bots.h"
#include "timeq.h"
#include "ConfigParser.h"
+#include "statistics.h"
+#include "log.h"
struct irc_cmd *irc_commands = NULL;
//static struct UserNode *registering_users = NULL;
int argc = 0;
char *argv[MAXNUMPARAMS];
#ifdef HAVE_THREADS
- putlog(LOGLEVEL_RAW, "[%d recv %lu] %s\n", getCurrentThreadID(), (unsigned long) strlen(line), line);
+ printf_log("main", LOG_IRCRAW, "[%d recv %lu] %s\n", getCurrentThreadID(), (unsigned long) strlen(line), line);
#else
- putlog(LOGLEVEL_RAW, "[recv %lu] %s\n", (unsigned long) strlen(line), line);
+ printf_log("main", LOG_IRCRAW, "[recv %lu] %s\n", (unsigned long) strlen(line), line);
#endif
if(line[0] == ':')
line++;
struct irc_cmd *irc_cmd = malloc(sizeof(*irc_cmd));
if (!irc_cmd)
{
- perror("malloc() failed");
+ printf_log("main", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__);
return;
}
irc_cmd->cmd = command;
if(!irc_cmd) {
event_raw(client, from, cmd, argv, argc);
} else if(!ret) {
- fprintf(stderr,"PARSE ERROR: %s\n", cmd);
+ printf_log("main", LOG_WARNING | LOG_IRCRAW, "PARSE ERROR: %s %s %s\n", (from ? from : "*"), cmd, merge_argv(argv, 0, argc));
}
}
}
if(chanuser->visCount > chan->botcount) {
+ printf_log("main", LOG_WARNING, "visCount (%d) bigger than botcount (%d) on channel %s (user %s).", chanuser->visCount, chan->botcount, chan->name, user->nick);
chanuser->visCount = chan->botcount;
- //TODO: Trigger WARNING
}
//if multiple bots see the user, it can't be invisible
chanuser->visCount--;
if(chanuser->visCount == 0) {
delChanUser(chanuser, 0); //not free, yet!
- event_kick(user, chanuser, argv[2]);
+ if(user)
+ event_kick(user, chanuser, argv[2]);
freeChanUser(chanuser);
}
if(user->channel == NULL) {
if(isBot(user)) {
//ASSERT
+ DESYNCHRONIZE(cache_sync);
return 0;
}
if((user->flags & USERFLAG_WAS_REGISTERING)) {
if(from == NULL || argc < 2) return 0;
struct UserNode *user = getUserByMask(from);
if(user == NULL) {
+ if(stricmplen(from, "***!", 4) == 0) return 1; /* ZNC Playback */
user = createTempUserMask(from);
if(!user) return 0;
user->flags |= USERFLAG_ISTMPUSER;
if(argv[0][0] == '#') { //Channel message
struct ChanNode *chan = getChanByName(argv[0]);
if(chan && client == get_first_prefered_bot_in_channel(chan)) {
- if(statistics_enabled)
- statistics_privmsg++;
+ statistics_privmsg++;
if(argv[1][0] == '\001') {
char *cmd = &argv[1][1];
char *text = strstr(cmd, " ");
}
static IRC_CMD(raw_notice) {
+ if(from == NULL && argc && !stricmp(argv[0], "AUTH")) return 1; //NOTICE AUTH is NOT a parse error ;)
if(from == NULL || argc < 2) return 0;
struct UserNode *user = getUserByMask(from);
if(user == NULL) {
if(bot == client) continue;
if(!bot->network_name) continue;
if(stricmp(bot->network_name, value)) {
- putlog(LOGLEVEL_ERROR, "WARNING: Network name '%s' (%s) differs from '%s' (%s)! Connecting to multiple IRC-Networks with one instance is NOT supported!\n", client->network_name, client->nick, bot->network_name, bot->nick);
+ printf_log("main", LOG_ERROR, "WARNING: Network name '%s' (%s) differs from '%s' (%s)! Connecting to multiple IRC-Networks with one instance is NOT supported!\n", client->network_name, client->nick, bot->network_name, bot->nick);
break;
}
}