#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
+}
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
#include "UserNode.h"
#include "ChanNode.h"
#include "ChanUser.h"
+#include "ClientSocket.h"
int event_join(struct ChanUser *chanuser) {
return 1;
}
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;
}
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) {