mirror of
https://github.com/irssi/irssi.git
synced 2024-09-01 04:14:16 -04:00
/UNBAN -first | -last options added. Patch by fuchs.
git-svn-id: http://svn.irssi.org/repos/irssi/trunk@1898 dbcabf3a-b0e7-0310-adc4-f8d773084564
This commit is contained in:
parent
e4f34d9cd3
commit
d599f7bb99
@ -6,6 +6,8 @@ Removes the specified ban(s) from the channel.
|
|||||||
Examples:
|
Examples:
|
||||||
/UNBAN *!*@*.fi
|
/UNBAN *!*@*.fi
|
||||||
/UNBAN larry!*@* *!me@*.mydomain.net
|
/UNBAN larry!*@* *!me@*.mydomain.net
|
||||||
|
/UNBAN 3 - removes 3rd ban in list
|
||||||
|
/UNBAN -first - removes 1st ban (equal to /UNBAN 1)
|
||||||
|
/UNBAN -last - removes last ban in list
|
||||||
See also: BAN, KNOCKOUT
|
See also: BAN, KNOCKOUT
|
||||||
|
|
||||||
|
@ -34,6 +34,8 @@
|
|||||||
#define BAN_TYPE_USER (IRC_MASK_USER)
|
#define BAN_TYPE_USER (IRC_MASK_USER)
|
||||||
#define BAN_TYPE_HOST (IRC_MASK_HOST | IRC_MASK_DOMAIN)
|
#define BAN_TYPE_HOST (IRC_MASK_HOST | IRC_MASK_DOMAIN)
|
||||||
#define BAN_TYPE_DOMAIN (IRC_MASK_DOMAIN)
|
#define BAN_TYPE_DOMAIN (IRC_MASK_DOMAIN)
|
||||||
|
#define BAN_FIRST "1"
|
||||||
|
#define BAN_LAST "-1"
|
||||||
|
|
||||||
static char *default_ban_type_str;
|
static char *default_ban_type_str;
|
||||||
static int default_ban_type;
|
static int default_ban_type;
|
||||||
@ -120,6 +122,7 @@ void ban_remove(IRC_CHANNEL_REC *channel, const char *bans)
|
|||||||
{
|
{
|
||||||
GString *str;
|
GString *str;
|
||||||
GSList *tmp;
|
GSList *tmp;
|
||||||
|
BAN_REC *rec;
|
||||||
char **ban, **banlist;
|
char **ban, **banlist;
|
||||||
int found;
|
int found;
|
||||||
|
|
||||||
@ -130,7 +133,7 @@ void ban_remove(IRC_CHANNEL_REC *channel, const char *bans)
|
|||||||
for (ban = banlist; *ban != NULL; ban++) {
|
for (ban = banlist; *ban != NULL; ban++) {
|
||||||
found = FALSE;
|
found = FALSE;
|
||||||
for (tmp = channel->banlist; tmp != NULL; tmp = tmp->next) {
|
for (tmp = channel->banlist; tmp != NULL; tmp = tmp->next) {
|
||||||
BAN_REC *rec = tmp->data;
|
rec = tmp->data;
|
||||||
|
|
||||||
if (match_wildcards(*ban, rec->ban)) {
|
if (match_wildcards(*ban, rec->ban)) {
|
||||||
g_string_sprintfa(str, "%s ", rec->ban);
|
g_string_sprintfa(str, "%s ", rec->ban);
|
||||||
@ -138,10 +141,18 @@ void ban_remove(IRC_CHANNEL_REC *channel, const char *bans)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!found && is_numeric(*ban, '\0')) {
|
if (!found) {
|
||||||
|
rec = NULL;
|
||||||
|
if (!g_strcasecmp(*ban, BAN_LAST)) {
|
||||||
|
/* unnbanning last set ban */
|
||||||
|
rec = g_slist_nth_data(channel->banlist,
|
||||||
|
g_slist_length(channel->banlist) - 1);
|
||||||
|
}
|
||||||
|
else if (is_numeric(*ban, '\0')) {
|
||||||
/* unbanning with ban# */
|
/* unbanning with ban# */
|
||||||
BAN_REC *rec = g_slist_nth_data(channel->banlist,
|
rec = g_slist_nth_data(channel->banlist,
|
||||||
atoi(*ban)-1);
|
atoi(*ban)-1);
|
||||||
|
}
|
||||||
if (rec != NULL)
|
if (rec != NULL)
|
||||||
g_string_sprintfa(str, "%s ", rec->ban);
|
g_string_sprintfa(str, "%s ", rec->ban);
|
||||||
}
|
}
|
||||||
@ -268,10 +279,27 @@ static void cmd_ban(const char *data, IRC_SERVER_REC *server, void *item)
|
|||||||
cmd_params_free(free_arg);
|
cmd_params_free(free_arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* SYNTAX: UNBAN <masks> */
|
/* SYNTAX: UNBAN -first | -last | <id> | <masks> */
|
||||||
static void cmd_unban(const char *data, IRC_SERVER_REC *server, void *item)
|
static void cmd_unban(const char *data, IRC_SERVER_REC *server, void *item)
|
||||||
{
|
{
|
||||||
command_set_ban(data, server, item, FALSE, 0);
|
GHashTable *optlist;
|
||||||
|
char *ban;
|
||||||
|
void *free_arg;
|
||||||
|
|
||||||
|
if (!cmd_get_params(data, &free_arg, 1 |
|
||||||
|
PARAM_FLAG_OPTIONS | PARAM_FLAG_GETREST,
|
||||||
|
"unban", &optlist, &ban))
|
||||||
|
return;
|
||||||
|
|
||||||
|
ban = NULL;
|
||||||
|
if (g_hash_table_lookup(optlist, "first") != NULL)
|
||||||
|
ban = g_strdup(BAN_FIRST);
|
||||||
|
else if (g_hash_table_lookup(optlist, "last") != NULL)
|
||||||
|
ban = g_strdup(BAN_LAST);
|
||||||
|
|
||||||
|
command_set_ban(ban ? ban : data, server, item, FALSE, 0);
|
||||||
|
|
||||||
|
g_free(ban);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void read_settings(void)
|
static void read_settings(void)
|
||||||
@ -301,6 +329,7 @@ void bans_init(void)
|
|||||||
command_bind("ban", NULL, (SIGNAL_FUNC) cmd_ban);
|
command_bind("ban", NULL, (SIGNAL_FUNC) cmd_ban);
|
||||||
command_bind("unban", NULL, (SIGNAL_FUNC) cmd_unban);
|
command_bind("unban", NULL, (SIGNAL_FUNC) cmd_unban);
|
||||||
command_set_options("ban", "normal user host domain +custom");
|
command_set_options("ban", "normal user host domain +custom");
|
||||||
|
command_set_options("unban", "first last");
|
||||||
|
|
||||||
read_settings();
|
read_settings();
|
||||||
signal_add("setup changed", (SIGNAL_FUNC) read_settings);
|
signal_add("setup changed", (SIGNAL_FUNC) read_settings);
|
||||||
|
Loading…
Reference in New Issue
Block a user