X-Git-Url: http://git.pk910.de/?p=NeonServV5.git;a=blobdiff_plain;f=src%2Fmodules%2FNeonServ.mod%2Fcmd_neonserv_set.c;fp=src%2Fmodules%2FNeonServ.mod%2Fcmd_neonserv_set.c;h=2243c0df38e0401d0122ccfb149c638016a62b66;hp=2ebb96828dac0eac072e9b28359b17967d30d422;hb=ee3a72eb4a412a0a504d070db1b41c6907f7604d;hpb=939c6051a3ee85e3b3877fde35bdbf36ecb94fbc diff --git a/src/modules/NeonServ.mod/cmd_neonserv_set.c b/src/modules/NeonServ.mod/cmd_neonserv_set.c index 2ebb968..2243c0d 100644 --- a/src/modules/NeonServ.mod/cmd_neonserv_set.c +++ b/src/modules/NeonServ.mod/cmd_neonserv_set.c @@ -23,6 +23,7 @@ static char* neonserv_cmd_set_trigger(struct ClientSocket *client, struct UserNo static char* neonserv_cmd_set_modes(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, struct Event *event, const char *setting, char *argument); static char* neonserv_cmd_set_dynlimit(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, struct Event *event, const char *setting, char *argument); static char* neonserv_cmd_set_nodelete(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, struct Event *event, const char *setting, char *argument); +static char* neonserv_cmd_set_backupbot(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, struct Event *event, const char *setting, char *argument); #define NS_VALID_FUNCTION 0x01 #define NS_VALID_STRING 0x02 @@ -80,6 +81,7 @@ static const struct { {"TOYS", "channel_toys", NS_VALID_OPTIONS | NS_HAS_OPT, "3"}, {"DYNLIMIT", "channel_dynlimit", NS_VALID_NUMERIC | NS_VALID_FUNCTION | NS_HAS_OPT, neonserv_cmd_set_dynlimit}, {"NODELETE", "channel_nodelete", NS_VALID_BOOLEAN | NS_VALID_FUNCTION, neonserv_cmd_set_nodelete}, + {"BACKUPBOT", NULL, NS_VALID_BOOLEAN | NS_VALID_FUNCTION, neonserv_cmd_set_backupbot}, {NULL, NULL, 0, NULL} }; @@ -132,6 +134,14 @@ CMD_BIND(neonserv_cmd_set) { while(channel_settings[i].setting) { if(!stricmp(channel_settings[i].setting, argv[0]) && (!(channel_settings[i].valid & NS_VALID_IF_HALFOP) || with_halfops)) { //setting found + if(!stricmp(channel_settings[i].setting, "BACKUPBOT")) { + char setting[128]; + sprintf(setting, "modules.%s.channel_backup_setting", get_module_name(module_id)); + if(!get_int_field(setting)) { + i++; + continue; + } + } if(channel_settings[i].valid & NS_VALID_FUNCTION) { neonserv_cmd_set_function *func = channel_settings[i].parameter; func(client, user, chan, event, channel_settings[i].setting, args); @@ -155,6 +165,7 @@ CMD_BIND(neonserv_cmd_set) { struct Table *table; char *content[2]; int with_halfops = get_int_field("General.have_halfop"); + int channel_backup_setting; i = 0; j = 0; while(channel_settings[i].setting) { @@ -163,6 +174,16 @@ CMD_BIND(neonserv_cmd_set) { i++; continue; } + if(!stricmp(channel_settings[i].setting, "BACKUPBOT")) { + char setting[128]; + sprintf(setting, "modules.%s.channel_backup_setting", get_module_name(module_id)); + channel_backup_setting = get_int_field(setting); + if(!channel_backup_setting) { + i++; + j++; + continue; + } + } if(channel_settings[i].chanfield) querypos += sprintf(query + querypos, ", `%s`", channel_settings[i].chanfield); i++; @@ -183,6 +204,10 @@ CMD_BIND(neonserv_cmd_set) { i++; continue; } + if(!stricmp(channel_settings[i].setting, "BACKUPBOT") && !channel_backup_setting) { + i++; + continue; + } if(channel_settings[i].chanfield) { j++; org_value = (row[j] ? row[j] : defaults[j]); @@ -468,4 +493,38 @@ static char* neonserv_cmd_set_nodelete(struct ClientSocket *client, struct UserN return value; } +static char* neonserv_cmd_set_backupbot(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, struct Event *event, const char *setting, char *argument) { + int backupbot; + //get current trigger + MYSQL_RES *res; + printf_mysql_query("SELECT `botid` FROM `bot_channels` LEFT JOIN `bots` ON `botid` = `bots`.`id` WHERE `chanid` = '%d' AND `botclass` = '%d'", chan->channel_id, NEONBACKUP_BOTID); + res = mysql_use(); + if(mysql_fetch_row(res)) + backupbot = 1; + else + backupbot = 0; + if(argument) { + //change the channel setting + if(!strcmp(argument, "0") || !strcmp(argument, "off") || !strcmp(argument, get_language_string(user, "NS_SET_OFF"))) { + if(backupbot) { + module_global_cmd_unregister_neonbackup(chan->name); + backupbot = 0; + } + } else if(!strcmp(argument, "1") || !strcmp(argument, "on") || !strcmp(argument, get_language_string(user, "NS_SET_ON"))) { + if(!backupbot) { + module_global_cmd_register_neonbackup(chan->name); + backupbot = 1; + } + } else { + reply(getTextBot(), user, "NS_SET_INVALID_BOOLEAN", argument); + return NULL; + } + logEvent(event); + } + if(setting) { + reply(getTextBot(), user, "\002%s\002 %s", setting, (backupbot ? "1" : "0")); + } + return (backupbot ? "1" : "0"); +} + #undef MAX_QUERY_LEN