diff options
author | Wilmer van der Gaast <wilmer@gaast.net> | 2010-03-26 23:04:35 -0400 |
---|---|---|
committer | Wilmer van der Gaast <wilmer@gaast.net> | 2010-03-26 23:04:35 -0400 |
commit | b9e020af6c6a88392caa9edd120fb576ec971430 (patch) | |
tree | 988a1e51f7eac10d9b17cdf369fdd24e2797c553 /irc_commands.c | |
parent | 4be823968d7f4cb1d11e4f6dda50ef606a0fd7b0 (diff) |
Added JOIN, NAMES and PART commands.
Diffstat (limited to 'irc_commands.c')
-rw-r--r-- | irc_commands.c | 109 |
1 files changed, 53 insertions, 56 deletions
diff --git a/irc_commands.c b/irc_commands.c index 7a4ba57e..e5a97ad9 100644 --- a/irc_commands.c +++ b/irc_commands.c @@ -107,7 +107,57 @@ static void irc_cmd_ping( irc_t *irc, char **cmd ) irc->root->host, cmd[1]?cmd[1]:irc->root->host ); } +static void irc_cmd_join( irc_t *irc, char **cmd ) +{ + irc_channel_t *ic; + + if( ( ic = irc_channel_by_name( irc, cmd[1] ) ) == NULL ) + ic = irc_channel_new( irc, cmd[1] ); + + if( ic == NULL ) + irc_send_num( irc, 479, "%s :Invalid channel name", cmd[1] ); + + if( ic->flags & IRC_CHANNEL_JOINED ) + return; /* Dude, you're already there... + RFC doesn't have any reply for that though? */ + + irc_channel_add_user( ic, irc->user ); +} + +static void irc_cmd_names( irc_t *irc, char **cmd ) +{ + irc_channel_t *ic; + + if( cmd[1] && ( ic = irc_channel_by_name( irc, cmd[1] ) ) ) + irc_send_names( ic ); + /* With no args, we should show /names of all chans. Make the code + below work well if necessary. + else + { + GSList *l; + + for( l = irc->channels; l; l = l->next ) + irc_send_names( l->data ); + } + */ +} + +static void irc_cmd_part( irc_t *irc, char **cmd ) +{ + irc_channel_t *ic; + + if( ( ic = irc_channel_by_name( irc, cmd[1] ) ) == NULL ) + { + irc_send_num( irc, 403, "%s :No such channel", cmd[1] ); + } + else if( !irc_channel_del_user( ic, irc->user ) ) + { + irc_send_num( irc, 442, "%s :You're not on that channel", cmd[1] ); + } +} + #if 0 +//#if 0 static void irc_cmd_oper( irc_t *irc, char **cmd ) { if( global.conf->oper_pass && @@ -152,59 +202,6 @@ static void irc_cmd_mode( irc_t *irc, char **cmd ) } } -static void irc_cmd_names( irc_t *irc, char **cmd ) -{ - irc_names( irc, cmd[1]?cmd[1]:irc->channel ); -} - -static void irc_cmd_part( irc_t *irc, char **cmd ) -{ - struct groupchat *c; - - if( g_strcasecmp( cmd[1], irc->channel ) == 0 ) - { - user_t *u = user_find( irc, irc->nick ); - - /* Not allowed to leave control channel */ - irc_part( irc, u, irc->channel ); - irc_join( irc, u, irc->channel ); - } - else if( ( c = irc_chat_by_channel( irc, cmd[1] ) ) ) - { - user_t *u = user_find( irc, irc->nick ); - - irc_part( irc, u, c->channel ); - - if( c->ic ) - { - c->joined = 0; - c->ic->acc->prpl->chat_leave( c ); - } - } - else - { - irc_send_num( irc, 403, "%s :No such channel", cmd[1] ); - } -} - -static void irc_cmd_join( irc_t *irc, char **cmd ) -{ - if( g_strcasecmp( cmd[1], irc->channel ) == 0 ) - ; /* Dude, you're already there... - RFC doesn't have any reply for that though? */ - else if( cmd[1] ) - { - struct chat *c; - - if( strchr( CTYPES, cmd[1][0] ) == NULL || cmd[1][1] == 0 ) - irc_send_num( irc, 479, "%s :Invalid channel name", cmd[1] ); - else if( ( c = chat_bychannel( irc, cmd[1] ) ) && c->acc && c->acc->ic ) - chat_join( irc, c, cmd[2] ); - else - irc_send_num( irc, 403, "%s :No such channel", cmd[1] ); - } -} - static void irc_cmd_invite( irc_t *irc, char **cmd ) { char *nick = cmd[1], *channel = cmd[2]; @@ -582,12 +579,12 @@ static const command_t irc_commands[] = { { "nick", 1, irc_cmd_nick, 0 }, { "quit", 0, irc_cmd_quit, 0 }, { "ping", 0, irc_cmd_ping, 0 }, + { "join", 1, irc_cmd_join, IRC_CMD_LOGGED_IN }, + { "names", 1, irc_cmd_names, IRC_CMD_LOGGED_IN }, + { "part", 1, irc_cmd_part, IRC_CMD_LOGGED_IN }, #if 0 { "oper", 2, irc_cmd_oper, IRC_CMD_LOGGED_IN }, { "mode", 1, irc_cmd_mode, IRC_CMD_LOGGED_IN }, - { "names", 0, irc_cmd_names, IRC_CMD_LOGGED_IN }, - { "part", 1, irc_cmd_part, IRC_CMD_LOGGED_IN }, - { "join", 1, irc_cmd_join, 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 }, |