kike: implement PRIVMSG to user
This commit is contained in:
parent
facd810548
commit
5e6def5bb0
32
src/kike.c
32
src/kike.c
|
@ -629,8 +629,11 @@ enum
|
||||||
IRC_RPL_ENDOFMOTD = 376,
|
IRC_RPL_ENDOFMOTD = 376,
|
||||||
IRC_RPL_TIME = 391,
|
IRC_RPL_TIME = 391,
|
||||||
|
|
||||||
|
IRC_ERR_NOSUCHNICK = 401,
|
||||||
IRC_ERR_NOSUCHSERVER = 402,
|
IRC_ERR_NOSUCHSERVER = 402,
|
||||||
IRC_ERR_NOORIGIN = 409,
|
IRC_ERR_NOORIGIN = 409,
|
||||||
|
IRC_ERR_NORECIPIENT = 411,
|
||||||
|
IRC_ERR_NOTEXTTOSEND = 412,
|
||||||
IRC_ERR_UNKNOWNCOMMAND = 421,
|
IRC_ERR_UNKNOWNCOMMAND = 421,
|
||||||
IRC_ERR_NOMOTD = 422,
|
IRC_ERR_NOMOTD = 422,
|
||||||
IRC_ERR_NONICKNAMEGIVEN = 431,
|
IRC_ERR_NONICKNAMEGIVEN = 431,
|
||||||
|
@ -660,8 +663,11 @@ static const char *g_default_replies[] =
|
||||||
[IRC_RPL_ENDOFMOTD] = ":End of MOTD command",
|
[IRC_RPL_ENDOFMOTD] = ":End of MOTD command",
|
||||||
[IRC_RPL_TIME] = "%s :%s",
|
[IRC_RPL_TIME] = "%s :%s",
|
||||||
|
|
||||||
|
[IRC_ERR_NOSUCHNICK] = "%s :No such nick/channel",
|
||||||
[IRC_ERR_NOSUCHSERVER] = "%s :No such server",
|
[IRC_ERR_NOSUCHSERVER] = "%s :No such server",
|
||||||
[IRC_ERR_NOORIGIN] = ":No origin specified",
|
[IRC_ERR_NOORIGIN] = ":No origin specified",
|
||||||
|
[IRC_ERR_NORECIPIENT] = ":No recipient given (%s)",
|
||||||
|
[IRC_ERR_NOTEXTTOSEND] = ":No text to send",
|
||||||
[IRC_ERR_UNKNOWNCOMMAND] = "%s: Unknown command",
|
[IRC_ERR_UNKNOWNCOMMAND] = "%s: Unknown command",
|
||||||
[IRC_ERR_NOMOTD] = ":MOTD File is missing",
|
[IRC_ERR_NOMOTD] = ":MOTD File is missing",
|
||||||
[IRC_ERR_NONICKNAMEGIVEN] = ":No nickname given",
|
[IRC_ERR_NONICKNAMEGIVEN] = ":No nickname given",
|
||||||
|
@ -932,6 +938,30 @@ irc_handle_version (const struct irc_message *msg, struct client *c)
|
||||||
c->ctx->server_name, PROGRAM_NAME " " PROGRAM_VERSION);
|
c->ctx->server_name, PROGRAM_NAME " " PROGRAM_VERSION);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
irc_handle_privmsg (const struct irc_message *msg, struct client *c)
|
||||||
|
{
|
||||||
|
if (msg->params.len < 1)
|
||||||
|
irc_send_reply (c, IRC_ERR_NORECIPIENT, msg->command);
|
||||||
|
else if (msg->params.len < 2 || !*msg->params.vector[1])
|
||||||
|
irc_send_reply (c, IRC_ERR_NOTEXTTOSEND);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const char *target = msg->params.vector[0];
|
||||||
|
const char *text = msg->params.vector[1];
|
||||||
|
struct client *target_c = str_map_find (&c->ctx->users, target);
|
||||||
|
if (!target_c)
|
||||||
|
{
|
||||||
|
irc_send_reply (c, IRC_ERR_NOSUCHNICK, target);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: channels
|
||||||
|
irc_send (target_c, ":%s!%s@%s PRIVMSG %s :%s",
|
||||||
|
c->nickname, c->username, c->hostname, target, text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
|
|
||||||
struct irc_command
|
struct irc_command
|
||||||
|
@ -959,6 +989,8 @@ irc_register_handlers (struct server_context *ctx)
|
||||||
{ "QUIT", false, irc_handle_quit },
|
{ "QUIT", false, irc_handle_quit },
|
||||||
{ "TIME", true, irc_handle_time },
|
{ "TIME", true, irc_handle_time },
|
||||||
{ "VERSION", true, irc_handle_version },
|
{ "VERSION", true, irc_handle_version },
|
||||||
|
|
||||||
|
{ "PRIVMSG", true, irc_handle_privmsg },
|
||||||
};
|
};
|
||||||
|
|
||||||
for (size_t i = 0; i < N_ELEMENTS (message_handlers); i++)
|
for (size_t i = 0; i < N_ELEMENTS (message_handlers); i++)
|
||||||
|
|
Loading…
Reference in New Issue