`id` int(11) NOT NULL AUTO_INCREMENT,
`botid` int(11) NOT NULL,
`chanid` int(11) NOT NULL,
- `trigger` varchar(50) NOT NULL DEFAULT '+',
+ `trigger` varchar(50) NULL DEFAULT '+',
`suspended` tinyint(1) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
ALTER TABLE `bot_binds` ADD `botid` INT( 11 ) NOT NULL AFTER `botclass`;
ALTER TABLE `bot_binds` ADD INDEX ( `botclass` );
--- version: 8
\ No newline at end of file
+-- version: 8
+
+ALTER TABLE `bot_channels` CHANGE `trigger` `trigger` VARCHAR( 50 ) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT '+';
+
+-- version: 9
MYSQL_RES *res;
MYSQL_ROW row;
loadChannelSettings(chan);
- printf_mysql_query("SELECT `trigger` FROM `bot_channels` LEFT JOIN `bots` ON `botid` = `bots`.`id` WHERE `chanid` = '%d' AND `botclass` = '%d'", chan->channel_id, BOTID);
+ if(!(chan->flags & CHANFLAG_CHAN_REGISTERED)) {
+ strcpy(trigger, "!");
+ return;
+ }
+ printf_mysql_query("SELECT `trigger`, `defaulttrigger` FROM `bot_channels` LEFT JOIN `bots` ON `botid` = `bots`.`id` WHERE `chanid` = '%d' AND `botclass` = '%d'", chan->channel_id, BOTID);
res = mysql_use();
row = mysql_fetch_row(res);
- strcpy(trigger, (strlen(row[0]) ? row[0] : "!"));
+ if(row[0] && *row[0])
+ strcpy(trigger, row[0]);
+ else
+ strcpy(trigger, ((row[1] && *row[1]) ? row[1] : "!"));
}
static void start_bots() {
strcpy(trigger, "+");
return;
}
- printf_mysql_query("SELECT `trigger` FROM `bot_channels` LEFT JOIN `bots` ON `botid` = `bots`.`id` WHERE `chanid` = '%d' AND `botclass` = '%d'", chan->channel_id, BOTID);
+ printf_mysql_query("SELECT `trigger`, `defaulttrigger` FROM `bot_channels` LEFT JOIN `bots` ON `botid` = `bots`.`id` WHERE `chanid` = '%d' AND `botclass` = '%d'", chan->channel_id, BOTID);
res = mysql_use();
row = mysql_fetch_row(res);
- strcpy(trigger, ((row && strlen(row[0])) ? row[0] : "+"));
+ if(row[0] && *row[0])
+ strcpy(trigger, row[0]);
+ else
+ strcpy(trigger, ((row[1] && *row[1]) ? row[1] : "~"));
}
static void start_bots() {
MYSQL_RES *res;
MYSQL_ROW row;
loadChannelSettings(chan);
- printf_mysql_query("SELECT `trigger` FROM `bot_channels` LEFT JOIN `bots` ON `botid` = `bots`.`id` WHERE `chanid` = '%d' AND `botclass` = '%d'", chan->channel_id, BOTID);
+ if(!(chan->flags & CHANFLAG_CHAN_REGISTERED)) {
+ strcpy(trigger, "~");
+ return;
+ }
+ printf_mysql_query("SELECT `trigger`, `defaulttrigger` FROM `bot_channels` LEFT JOIN `bots` ON `botid` = `bots`.`id` WHERE `chanid` = '%d' AND `botclass` = '%d'", chan->channel_id, BOTID);
res = mysql_use();
row = mysql_fetch_row(res);
- strcpy(trigger, ((row && strlen(row[0])) ? row[0] : "~"));
+ if(row[0] && *row[0])
+ strcpy(trigger, row[0]);
+ else
+ strcpy(trigger, ((row[1] && *row[1]) ? row[1] : "~"));
}
static void start_bots() {
strcpy(trigger, "+");
return;
}
- printf_mysql_query("SELECT `trigger` FROM `bot_channels` LEFT JOIN `bots` ON `botid` = `bots`.`id` WHERE `chanid` = '%d' AND `botclass` = '0' AND `botid` = '%d'", chan->channel_id, clientid);
+ printf_mysql_query("SELECT `trigger`, `defaulttrigger` FROM `bot_channels` LEFT JOIN `bots` ON `botid` = `bots`.`id` WHERE `chanid` = '%d' AND `botclass` = '0' AND `botid` = '%d'", chan->channel_id, clientid);
res = mysql_use();
row = mysql_fetch_row(res);
- strcpy(trigger, (strlen(row[0]) ? row[0] : "+"));
+ if(row[0] && *row[0])
+ strcpy(trigger, row[0]);
+ else
+ strcpy(trigger, ((row[1] && *row[1]) ? row[1] : "+"));
}
void init_bots() {
printf_mysql_query("SELECT `id`, `max_channels`, `defaulttrigger`, `nick` FROM `bots` WHERE `botclass` = '%d' AND `active` = '1' ORDER BY `register_priority` DESC", client->botid);
res = mysql_use();
int botid = 0;
- char *bottrigger;
while ((row = mysql_fetch_row(res)) != NULL) {
//check channel count
printf_mysql_query("SELECT COUNT(*) FROM `bot_channels` WHERE `botid` = '%s'", row[0]);
row2 = mysql_fetch_row(mysql_use());
if(atoi(row2[0]) < atoi(row[1]) && (!botname || !stricmp(botname, row[3]))) {
botid = atoi(row[0]);
- bottrigger = row[2];
break;
}
}
putsock(bot, "JOIN %s", channel);
} else
reply(textclient, user, "NS_REGISTER_DISCONNECTED", channel);
- printf_mysql_query("INSERT INTO `bot_channels` (`botid`, `chanid`, `trigger`) VALUES ('%d', '%d', '%s')", botid, chanid, bottrigger);
+ printf_mysql_query("INSERT INTO `bot_channels` (`botid`, `chanid`, `trigger`) VALUES ('%d', '%d', NULL)", botid, chanid);
if(multibot != 2) {
if(multibot) {
printf_mysql_query("UPDATE `chanusers` SET `chanuser_access` = 499 WHERE `chanuser_cid` = '%d' AND `chanuser_access` = '500'", chanid);
else if(!stricmp(argv[1], "prefered")) log_event = global_cmd_setbot_prefered(user, row, value);
else if(!stricmp(argv[1], "maxchan")) log_event = global_cmd_setbot_maxchan(user, row, value);
else if(!stricmp(argv[1], "priority")) log_event = global_cmd_setbot_priority(user, row, value);
- else if(!stricmp(argv[1], "trigger")) log_event = global_cmd_setbot_nick(user, row, value);
+ else if(!stricmp(argv[1], "trigger")) log_event = global_cmd_setbot_trigger(user, row, value);
else {
reply(getTextBot(), user, "NS_SETBOT_SETTING", argv[1]);
}
return 0;
}
printf_mysql_query("UPDATE `bots` SET `defaulttrigger` = '%s' WHERE `id` = '%s'", escape_string(value), bot[15]);
+ flush_trigger_cache(atoi(bot[5]), atoi(bot[15]));
reply(getTextBot(), user, "NS_SETBOT_TRIGGER_NOTE");
val = value;
ret = 1;
return 1;
}
+int flush_trigger_cache(int botid, int clientid) {
+ struct ChanNode *chan;
+ struct trigger_cache *trigger, *last;
+ for(chan = getAllChans(NULL); chan; chan = getAllChans(chan)) {
+ last = NULL;
+ for(trigger = chan->trigger; trigger; trigger = trigger->next) {
+ if(trigger->botid == botid && (botid || trigger->clientid == clientid)) {
+ if(last)
+ last->next = trigger->next;
+ else
+ chan->trigger = trigger->next;
+ free(trigger->trigger);
+ free(trigger);
+ break;
+ } else
+ last = trigger;
+ }
+ }
+ return 1;
+}
+
int changeBotwiseChannelTrigger(int botid, int clientid, struct ChanNode *chan, char *new_trigger) {
struct trigger_cache *trigger;
for(trigger = chan->trigger; trigger; trigger = trigger->next) {
int register_command(int botid, char *name, cmd_bind_t *func, int paramcount, char *channel_access, int global_access, unsigned int flags);
int set_trigger_callback(int botid, trigger_callback_t *func);
+int flush_trigger_cache(int botid, int clientid);
+
#define changeChannelTrigger(BOTID,CHAN,NEW) changeBotwiseChannelTrigger(BOTID, 0, CHAN, NEW)
int changeBotwiseChannelTrigger(int botid, int clientid, struct ChanNode *chan, char *new_trigger);
*/
#include "mysqlConn.h"
-#define DATABASE_VERSION "8"
+#define DATABASE_VERSION "9"
struct used_result {
MYSQL_RES *result;