From ba6691bc746798ccaa885e952bf5e6f1aa4477a0 Mon Sep 17 00:00:00 2001 From: pk910 Date: Fri, 12 Aug 2011 07:18:43 +0200 Subject: [PATCH] moved debug outputs and added getModeString --- ChanNode.c | 26 ++++++++++++++++++++++++++ ChanNode.h | 1 + IRCEvents.c | 14 ++++++++++++++ IRCParser.c | 4 ---- 4 files changed, 41 insertions(+), 4 deletions(-) diff --git a/ChanNode.c b/ChanNode.c index 5bca72e..56c2edc 100644 --- a/ChanNode.c +++ b/ChanNode.c @@ -320,4 +320,30 @@ void parseModes(struct ChanNode* chan, char *modeStr, char **argv, int argc) { #undef MODE_VALUE_INDEX } +void getModeString(struct ChanNode* chan, char *modesStr) { + #define MODE_TYPE (mode[2] & CHANNEL_MODE_TYPE) + #define MODE_VALUE (mode[2] & CHANNEL_MODE_VALUE) + #define MODE_VALUE_INDEX (mode[2] & CHANNEL_MODE_VALUE_INDEX_MASK) >> CHANNEL_MODE_VALUE_INDEX_SHIFT + char paramStr[MAXLEN]; + modesStr[0] = '+'; + unsigned int *mode, flag = 1; + int modePos = 1; + int paramPos = 0; + for (mode = valid_modes; mode[1]; mode += 3) { + if(chan->modes & mode[0]) { + modesStr[modePos++] = (char) mode[1]; + if(MODE_TYPE != CHANNEL_MODE_TYPE_D) { + if(MODE_VALUE == CHANNEL_MODE_VALUE_STRING) + paramPos += sprintf(paramStr + paramPos, " %s", chan->mode_str_args[MODE_VALUE_INDEX]); + else if(MODE_VALUE == CHANNEL_MODE_VALUE_INTEGER) + paramPos += sprintf(paramStr + paramPos, " %d", chan->mode_int_args[MODE_VALUE_INDEX]); + } + } + } + paramStr[paramPos] = '\0'; + strcpy(modesStr + modePos, paramStr); + #undef MODE_TYPE + #undef MODE_VALUE + #undef MODE_VALUE_INDEX +} diff --git a/ChanNode.h b/ChanNode.h index 9c6ae86..dce8c38 100644 --- a/ChanNode.h +++ b/ChanNode.h @@ -29,5 +29,6 @@ void checkChannelVisibility(struct ChanNode* chan); int isModeSet(struct ChanNode* chan, char modeChar); void* getModeValue(struct ChanNode* chan, char modeChar); void parseModes(struct ChanNode* chan, char *modeStr, char **argv, int argc); +void getModeString(struct ChanNode* chan, char *modesStr); #endif \ No newline at end of file diff --git a/IRCEvents.c b/IRCEvents.c index e71b5ca..215a8f7 100644 --- a/IRCEvents.c +++ b/IRCEvents.c @@ -3,6 +3,7 @@ #include "UserNode.h" #include "ChanNode.h" #include "ChanUser.h" +#include "ClientSocket.h" int event_join(struct ChanUser *chanuser) { return 1; @@ -33,6 +34,19 @@ int event_mode(struct UserNode *user, struct ChanNode *chan, char *modes, char * } int event_chanmsg(struct UserNode *user, struct ChanNode *chan, char *message) { + struct ClientSocket *client = getBots(SOCKET_FLAG_READY, NULL); + if(!strcmp(message, "users")) { + struct ChanUser *chanuser; + putsock(client, "PRIVMSG %s :[BOT JOIN] Users on this Channel:", chan->name); + for(chanuser = getChannelUsers(chan, NULL); chanuser; chanuser = getChannelUsers(chan, chanuser)) { + putsock(client, "PRIVMSG %s : %s!%s@%s [%s] rights: %d", chan->name, chanuser->user->nick, chanuser->user->ident, chanuser->user->host, ((chanuser->user->flags & USERFLAG_ISAUTHED) ? chanuser->user->auth : "*"), chanuser->flags); + } + } + if(!strcmp(message, "modes")) { + char modeBuf[MAXLEN]; + getModeString(chan, modeBuf); + putsock(client, "PRIVMSG %s :Modes: %s", chan->name, modeBuf); + } return 1; } diff --git a/IRCParser.c b/IRCParser.c index 8f1834c..b13f5eb 100644 --- a/IRCParser.c +++ b/IRCParser.c @@ -88,10 +88,6 @@ static void parse_raw(struct ClientSocket *client, char *from, char *cmd, char * static USERLIST_CALLBACK(got_channel_userlist) { struct ChanUser *chanuser = data; event_join(chanuser); - putsock(client, "PRIVMSG %s :[BOT JOIN] Users on this Channel:", chan->name); - for(chanuser = getChannelUsers(chan, NULL); chanuser; chanuser = getChannelUsers(chan, chanuser)) { - putsock(client, "PRIVMSG %s : %s!%s@%s [%s] rights: %d", chan->name, chanuser->user->nick, chanuser->user->ident, chanuser->user->host, ((chanuser->user->flags & USERFLAG_ISAUTHED) ? chanuser->user->auth : "*"), chanuser->flags); - } } static IRC_CMD(raw_001) { -- 2.20.1