From 2d04c55571a5843a7f5512ee6df23a70e63408fd Mon Sep 17 00:00:00 2001 From: pk910 Date: Fri, 9 Sep 2011 03:07:52 +0200 Subject: [PATCH] added cmd_delban --- bot_NeonServ.c | 6 +++++- cmd_neonserv_delban.c | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 cmd_neonserv_delban.c diff --git a/bot_NeonServ.c b/bot_NeonServ.c index 63887d1..5305913 100644 --- a/bot_NeonServ.c +++ b/bot_NeonServ.c @@ -127,6 +127,9 @@ static const struct default_language_entry msgtab[] = { {"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} }; @@ -168,7 +171,7 @@ INCLUDE ALL CMD's HERE #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" @@ -310,6 +313,7 @@ void init_NeonServ() { 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); diff --git a/cmd_neonserv_delban.c b/cmd_neonserv_delban.c new file mode 100644 index 0000000..0ac7dcf --- /dev/null +++ b/cmd_neonserv_delban.c @@ -0,0 +1,34 @@ + +/* +* 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); +} -- 2.20.1