{"NS_BANS_HEADER_TRIGGERED", "Triggered"},
{"NS_BANS_HEADER_EXPIRES", "Expires"},
{"NS_BANS_HEADER_REASON", "Reason"},
+ {"NS_DELBAN_BANNED_BY", "%s is banned by %s."},
+ {"NS_DELBAN_FAIL", "Sorry, no ban found for \002%s\002."},
+ {"NS_DELBAN_DONE", "Removed \002%s\002 from the %s ban list."},
{NULL, NULL}
};
#include "cmd_neonserv_wipeinfo.c"
#include "cmd_neonserv_addban.c"
//#include "cmd_neonserv_addtimeban.c"
-//#include "cmd_neonserv_delban.c"
+#include "cmd_neonserv_delban.c"
#include "cmd_neonserv_bans.c"
//#include "cmd_neonserv_open.c"
//#include "cmd_neonserv_topic.c"
register_command(BOTID, "wipeinfo", neonserv_cmd_wipeinfo, 1, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH, "#channel_wipeinfo", 0);
register_command(BOTID, "addban", neonserv_cmd_addban, 1, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH, "#channel_staticban", 0);
register_command(BOTID, "bans", neonserv_cmd_bans, 0, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH, "1", 0);
+ register_command(BOTID, "delban", neonserv_cmd_delban, 1, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH, "#channel_staticban", 0);
register_command(BOTID, "trace", neonserv_cmd_trace, 1, CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH, NULL, 400);
--- /dev/null
+
+/*
+* argv[0] nick|*auth|*!*@mask
+*/
+
+static CMD_BIND(neonserv_cmd_delban) {
+ char hostmask_buffer[NICKLEN+USERLEN+HOSTLEN+3];
+ check_mysql();
+ char *mask = make_banmask(argv[0], hostmask_buffer);
+ int matching_bans = 0;
+ MYSQL_RES *res;
+ MYSQL_ROW row;
+ //check if the provided mask is already banned by another ban
+ char *ban = getBanAffectingMask(chan, mask);
+ if(ban != NULL) {
+ reply(getTextBot(), user, "NS_DELBAN_BANNED_BY", mask, ban);
+ return;
+ }
+ //check if the provided mask affects any existing bans
+ printf_mysql_query("SELECT `ban_mask`, `ban_id` FROM `bans` WHERE `ban_channel` = '%d'", chan->channel_id);
+ res = mysql_use();
+ while ((row = mysql_fetch_row(res)) != NULL) {
+ if(!match(mask, row[0])) {
+ //remove the ban
+ printf_mysql_query("DELETE FROM `bans` WHERE `ban_id` = '%s'", row[1]);
+ matching_bans++;
+ }
+ }
+ if(matching_bans) {
+ putsock(client, "MODE %s -b %s", chan->name, mask);
+ reply(getTextBot(), user, "NS_DELBAN_DONE", mask, chan->name);
+ } else
+ reply(getTextBot(), user, "NS_DELBAN_FAIL", mask);
+}