X-Git-Url: http://git.pk910.de/?p=NeonServV5.git;a=blobdiff_plain;f=src%2Fcmd_neonserv_set.c;h=2b3ddab2f868ff5b19f2a5fdde69cfc164666149;hp=f35dee91a7c05cab266065e85d67f509f473b58a;hb=b013fcf166b6b84f7b946412dacfe84ba5cfe6b6;hpb=cb3a4cb7d17ae071499ce4a1030e95e1eb356100 diff --git a/src/cmd_neonserv_set.c b/src/cmd_neonserv_set.c index f35dee9..2b3ddab 100644 --- a/src/cmd_neonserv_set.c +++ b/src/cmd_neonserv_set.c @@ -31,6 +31,7 @@ static char* neonserv_cmd_set_nodelete(struct ClientSocket *client, struct UserN #define NS_VALID_OPTIONS 0x10 #define NS_VALID_NUMERIC 0x20 #define NS_VALID_BOOLEAN 0x40 +#define NS_VALID_IF_HALFOP 0x80 #define NS_HAS_OPT 0x100 /* options (SET_OPTION_{NAME}_{VALUE}) */ #define NS_HAS_HELP 0x200 /* help (SET_HELP_{NAME}) - only shown if help is requested */ @@ -52,8 +53,10 @@ static const struct { {"MODES", "channel_modes", NS_VALID_FUNCTION, neonserv_cmd_set_modes}, {"INVITEME", "channel_getinvite", NS_VALID_ACCESS, NULL}, {"GIVEOPS", "channel_getop", NS_VALID_ACCESS | NS_HAS_HELP, NULL}, + {"GIVEHALFOPS", "channel_gethalfop", NS_VALID_ACCESS | NS_HAS_HELP | NS_VALID_IF_HALFOP, NULL}, {"GIVEVOICE", "channel_getvoice", NS_VALID_ACCESS | NS_HAS_HELP, NULL}, {"ENFOPS", "channel_canop", NS_VALID_ACCESS | NS_HAS_HELP, NULL}, + {"ENFHALFOPS", "channel_canhalfop", NS_VALID_ACCESS | NS_HAS_HELP | NS_VALID_IF_HALFOP, NULL}, {"ENFVOICE", "channel_canvoice", NS_VALID_ACCESS | NS_HAS_HELP, NULL}, {"KICK", "channel_cankick", NS_VALID_ACCESS | NS_HAS_HELP, NULL}, {"BAN", "channel_canban", NS_VALID_ACCESS | NS_HAS_HELP, NULL}, @@ -125,8 +128,9 @@ CMD_BIND(neonserv_cmd_set) { i = 0; j = 0; char *args = (argc > 1 ? merge_argv(argv, 1, argc) : NULL); + int with_halfops = get_int_field("General.have_halfop"); while(channel_settings[i].setting) { - if(!stricmp(channel_settings[i].setting, argv[0])) { + if(!stricmp(channel_settings[i].setting, argv[0]) && (!(channel_settings[i].valid & NS_VALID_IF_HALFOP) || with_halfops)) { //setting found if(channel_settings[i].valid & NS_VALID_FUNCTION) { neonserv_cmd_set_function *func = channel_settings[i].parameter; @@ -150,13 +154,19 @@ CMD_BIND(neonserv_cmd_set) { MYSQL_ROW row, defaults; struct Table *table; char *content[2]; + int with_halfops = get_int_field("General.have_halfop"); i = 0; + j = 0; while(channel_settings[i].setting) { + if((channel_settings[i].valid & NS_VALID_IF_HALFOP) && !with_halfops) { + j++; + continue; + } if(channel_settings[i].chanfield) querypos += sprintf(query + querypos, ", `%s`", channel_settings[i].chanfield); i++; } - table = table_init(2, i, 0); + table = table_init(2, i-j, 0); table_set_bold(table, 0, 1); printf_mysql_query("SELECT `channel_id` %s FROM `channels` WHERE `channel_name` = 'defaults'", query); defaults_res = mysql_use(); @@ -168,6 +178,10 @@ CMD_BIND(neonserv_cmd_set) { j = 0; reply(getTextBot(), user, "NS_SET_HEADER", chan->name); while(channel_settings[i].setting) { + if((channel_settings[i].valid & NS_VALID_IF_HALFOP) && !with_halfops) { + i++; + continue; + } if(channel_settings[i].chanfield) { j++; org_value = (row[j] ? row[j] : defaults[j]);