Better support for the KILL command
This commit is contained in:
parent
26f94d2459
commit
92a4d4b5a7
32
degesch.c
32
degesch.c
|
@ -6460,6 +6460,20 @@ irc_handle_kick (struct server *s, const struct irc_message *msg)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
irc_handle_kill (struct server *s, const struct irc_message *msg)
|
||||||
|
{
|
||||||
|
if (!msg->prefix || msg->params.len < 2)
|
||||||
|
return;
|
||||||
|
|
||||||
|
const char *target = msg->params.vector[0];
|
||||||
|
const char *comment = msg->params.vector[1];
|
||||||
|
|
||||||
|
if (irc_is_this_us (s, target))
|
||||||
|
log_server_status (s, s->buffer,
|
||||||
|
"You've been killed by #n (#m)", msg->prefix, comment);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
irc_handle_mode (struct server *s, const struct irc_message *msg)
|
irc_handle_mode (struct server *s, const struct irc_message *msg)
|
||||||
{
|
{
|
||||||
|
@ -6959,6 +6973,7 @@ static struct irc_handler g_irc_handlers[] =
|
||||||
{ "INVITE", irc_handle_invite },
|
{ "INVITE", irc_handle_invite },
|
||||||
{ "JOIN", irc_handle_join },
|
{ "JOIN", irc_handle_join },
|
||||||
{ "KICK", irc_handle_kick },
|
{ "KICK", irc_handle_kick },
|
||||||
|
{ "KILL", irc_handle_kill },
|
||||||
{ "MODE", irc_handle_mode },
|
{ "MODE", irc_handle_mode },
|
||||||
{ "NICK", irc_handle_nick },
|
{ "NICK", irc_handle_nick },
|
||||||
{ "NOTICE", irc_handle_notice },
|
{ "NOTICE", irc_handle_notice },
|
||||||
|
@ -11014,6 +11029,20 @@ handle_command_whowas (struct handler_args *a)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool
|
||||||
|
handle_command_kill (struct handler_args *a)
|
||||||
|
{
|
||||||
|
if (!*a->arguments)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
char *target = cut_word (&a->arguments);
|
||||||
|
if (*a->arguments)
|
||||||
|
irc_send (a->s, "KILL %s :%s", target, a->arguments);
|
||||||
|
else
|
||||||
|
irc_send (a->s, "KILL %s", target);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
handle_command_nick (struct handler_args *a)
|
handle_command_nick (struct handler_args *a)
|
||||||
{
|
{
|
||||||
|
@ -11209,6 +11238,9 @@ g_command_handlers[] =
|
||||||
{ "oper", "Authenticate as an IRC operator",
|
{ "oper", "Authenticate as an IRC operator",
|
||||||
"<name> <password>",
|
"<name> <password>",
|
||||||
handle_command_oper, HANDLER_SERVER },
|
handle_command_oper, HANDLER_SERVER },
|
||||||
|
{ "kill", "Kick another user from the server",
|
||||||
|
"<user> <comment>",
|
||||||
|
handle_command_kill, HANDLER_SERVER },
|
||||||
{ "stats", "Query server statistics",
|
{ "stats", "Query server statistics",
|
||||||
"[<query> [<target>]]",
|
"[<query> [<target>]]",
|
||||||
handle_command_stats, HANDLER_SERVER },
|
handle_command_stats, HANDLER_SERVER },
|
||||||
|
|
5
kike.c
5
kike.c
|
@ -2991,6 +2991,11 @@ irc_handle_kill (const struct irc_message *msg, struct client *c)
|
||||||
struct client *target;
|
struct client *target;
|
||||||
if (!(target = str_map_find (&c->ctx->users, msg->params.vector[0])))
|
if (!(target = str_map_find (&c->ctx->users, msg->params.vector[0])))
|
||||||
RETURN_WITH_REPLY (c, IRC_ERR_NOSUCHNICK, msg->params.vector[0]);
|
RETURN_WITH_REPLY (c, IRC_ERR_NOSUCHNICK, msg->params.vector[0]);
|
||||||
|
|
||||||
|
client_send (target, ":%s!%s@%s KILL %s :%s",
|
||||||
|
c->nickname, c->username, c->hostname,
|
||||||
|
target->nickname, msg->params.vector[1]);
|
||||||
|
|
||||||
char *reason = xstrdup_printf ("Killed by %s: %s",
|
char *reason = xstrdup_printf ("Killed by %s: %s",
|
||||||
c->nickname, msg->params.vector[1]);
|
c->nickname, msg->params.vector[1]);
|
||||||
client_close_link (target, reason);
|
client_close_link (target, reason);
|
||||||
|
|
Loading…
Reference in New Issue