aboutsummaryrefslogtreecommitdiffstats
path: root/irc_commands.c
diff options
context:
space:
mode:
authorWilmer van der Gaast <wilmer@gaast.net>2010-03-27 13:36:47 -0400
committerWilmer van der Gaast <wilmer@gaast.net>2010-03-27 13:36:47 -0400
commit280c56a7b24dc08b35a1ecd98c8f4b61435d1100 (patch)
tree81340377a433898775385ee070beea1e4ea5e65b /irc_commands.c
parent2f53ada73d7d43b538c157563ab5eb39b7592137 (diff)
Added privmsg handlers to users/channels. root commands are coming back.
Diffstat (limited to 'irc_commands.c')
-rw-r--r--irc_commands.c99
1 files changed, 60 insertions, 39 deletions
diff --git a/irc_commands.c b/irc_commands.c
index b06e59bd..e5c6a95f 100644
--- a/irc_commands.c
+++ b/irc_commands.c
@@ -76,7 +76,7 @@ static void irc_cmd_nick( irc_t *irc, char **cmd )
{
irc_send_num( irc, 438, ":The hand of the deity is upon thee, thy nick may not change" );
}
- else if( irc_user_find( irc, cmd[1] ) )
+ else if( irc_user_by_name( irc, cmd[1] ) )
{
irc_send_num( irc, 433, ":This nick is already in use" );
}
@@ -159,7 +159,7 @@ static void irc_cmd_part( irc_t *irc, char **cmd )
static void irc_cmd_whois( irc_t *irc, char **cmd )
{
char *nick = cmd[1];
- irc_user_t *iu = irc_user_find( irc, nick );
+ irc_user_t *iu = irc_user_by_name( irc, nick );
if( iu )
irc_send_whois( iu );
@@ -219,8 +219,6 @@ static void irc_cmd_who( irc_t *irc, char **cmd )
{
char *channel = cmd[1];
irc_channel_t *ic;
- struct groupchat *c;
- GList *l;
if( !channel || *channel == '0' || *channel == '*' || !*channel )
irc_send_who( irc, irc->users, "**" );
@@ -230,50 +228,35 @@ static void irc_cmd_who( irc_t *irc, char **cmd )
irc_send_num( irc, 403, "%s :No such channel", channel );
}
-#if 0
-//#if 0
-static void irc_cmd_oper( irc_t *irc, char **cmd )
+static void irc_cmd_privmsg( irc_t *irc, char **cmd )
{
- if( global.conf->oper_pass &&
- ( strncmp( global.conf->oper_pass, "md5:", 4 ) == 0 ?
- md5_verify_password( cmd[2], global.conf->oper_pass + 4 ) == 0 :
- strcmp( cmd[2], global.conf->oper_pass ) == 0 ) )
+ irc_channel_t *ic;
+ irc_user_t *iu;
+
+ if( !cmd[2] )
{
- irc_umode_set( irc, "+o", 1 );
- irc_send_num( irc, 381, ":Password accepted" );
+ irc_send_num( irc, 412, ":No text to send" );
+ }
+ else if( irc_channel_name_ok( cmd[1] ) &&
+ ( ic = irc_channel_by_name( irc, cmd[1] ) ) )
+ {
+ if( ic->f->privmsg )
+ ic->f->privmsg( ic, cmd[2] );
+ }
+ else if( ( iu = irc_user_by_name( irc, cmd[1] ) ) )
+ {
+ if( iu->f->privmsg )
+ iu->f->privmsg( iu, cmd[2] );
}
else
{
- irc_send_num( irc, 432, ":Incorrect password" );
+ irc_send_num( irc, 401, "%s :No such nick/channel", cmd[1] );
}
-}
-static void irc_cmd_invite( irc_t *irc, char **cmd )
-{
- char *nick = cmd[1], *channel = cmd[2];
- struct groupchat *c = irc_chat_by_channel( irc, channel );
- user_t *u = user_find( irc, nick );
-
- if( u && c && ( u->ic == c->ic ) )
- if( c->ic && c->ic->acc->prpl->chat_invite )
- {
- c->ic->acc->prpl->chat_invite( c, u->handle, NULL );
- irc_send_num( irc, 341, "%s %s", nick, channel );
- return;
- }
-
- irc_send_num( irc, 482, "%s :Invite impossible; User/Channel non-existent or incompatible", channel );
-}
-static void irc_cmd_privmsg( irc_t *irc, char **cmd )
-{
- if( !cmd[2] )
- {
- irc_send_num( irc, 412, ":No text to send" );
- }
+#if 0
else if( irc->nick && g_strcasecmp( cmd[1], irc->nick ) == 0 )
{
- irc_write( irc, ":%s!%s@%s %s %s :%s", irc->nick, irc->user, irc->host, cmd[0], cmd[1], cmd[2] );
}
else
{
@@ -314,6 +297,44 @@ static void irc_cmd_privmsg( irc_t *irc, char **cmd )
}
irc_send( irc, cmd[1], cmd[2], ( g_strcasecmp( cmd[0], "NOTICE" ) == 0 ) ? OPT_AWAY : 0 );
}
+#endif
+}
+
+
+
+#if 0
+//#if 0
+static void irc_cmd_oper( irc_t *irc, char **cmd )
+{
+ if( global.conf->oper_pass &&
+ ( strncmp( global.conf->oper_pass, "md5:", 4 ) == 0 ?
+ md5_verify_password( cmd[2], global.conf->oper_pass + 4 ) == 0 :
+ strcmp( cmd[2], global.conf->oper_pass ) == 0 ) )
+ {
+ irc_umode_set( irc, "+o", 1 );
+ irc_send_num( irc, 381, ":Password accepted" );
+ }
+ else
+ {
+ irc_send_num( irc, 432, ":Incorrect password" );
+ }
+}
+
+static void irc_cmd_invite( irc_t *irc, char **cmd )
+{
+ char *nick = cmd[1], *channel = cmd[2];
+ struct groupchat *c = irc_chat_by_channel( irc, channel );
+ user_t *u = user_find( irc, nick );
+
+ if( u && c && ( u->ic == c->ic ) )
+ if( c->ic && c->ic->acc->prpl->chat_invite )
+ {
+ c->ic->acc->prpl->chat_invite( c, u->handle, NULL );
+ irc_send_num( irc, 341, "%s %s", nick, channel );
+ return;
+ }
+
+ irc_send_num( irc, 482, "%s :Invite impossible; User/Channel non-existent or incompatible", channel );
}
static void irc_cmd_userhost( irc_t *irc, char **cmd )
@@ -554,10 +575,10 @@ static const command_t irc_commands[] = {
{ "motd", 0, irc_cmd_motd, IRC_CMD_LOGGED_IN },
{ "mode", 1, irc_cmd_mode, IRC_CMD_LOGGED_IN },
{ "who", 0, irc_cmd_who, IRC_CMD_LOGGED_IN },
+ { "privmsg", 1, irc_cmd_privmsg, IRC_CMD_LOGGED_IN },
#if 0
{ "oper", 2, irc_cmd_oper, IRC_CMD_LOGGED_IN },
{ "invite", 2, irc_cmd_invite, IRC_CMD_LOGGED_IN },
- { "privmsg", 1, irc_cmd_privmsg, IRC_CMD_LOGGED_IN },
{ "notice", 1, irc_cmd_privmsg, IRC_CMD_LOGGED_IN },
{ "userhost", 1, irc_cmd_userhost, IRC_CMD_LOGGED_IN },
{ "ison", 1, irc_cmd_ison, IRC_CMD_LOGGED_IN },