--- /dev/null
+#ifndef _ChanUser_h
+#define _ChanUser_h
+#include "main.h"
+
+#define CHANUSERFLAG_OPPED 0x01
+#define CHANUSERFLAG_VOICED 0x02
+#define CHANUSERFLAG_INVISIBLE 0x04
+
+#define CHANUSERFLAG_OPPED_OR_VOICED (CHANUSERFLAG_OPPED | CHANUSERFLAG_VOICED)
+
+struct ChanNode;
+struct UserNode;
+
+struct ChanUser {
+ unsigned char flags;
+ struct ChanNode *chan;
+ struct UserNode *user;
+
+ int chageEvents;
+ time_t changeTime;
+
+ struct ChanUser *next_user;
+ struct ChanUser *next_chan;
+};
+
+struct ChanUser* addChanUser(struct ChanNode *chan, struct UserNode *user);
+struct ChanUser* addInvisibleChanUser(struct ChanNode *chan, struct UserNode *user);
+int isUserOnChan(struct UserNode *user, struct ChanNode *chan);
+struct ChanUser* getChanUser(struct UserNode *user, struct ChanNode *chan);
+struct ChanUser* getChannelUsers(struct ChanNode *chan, struct ChanUser *last);
+struct ChanUser* getUserChannels(struct UserNode *user, struct ChanUser *last);
+void delChanUser(struct ChanUser *chanuser, int freeChanUser);
+void removeChanUserFromLists(struct ChanUser *chanuser, int remove_from_userlist, int remove_from_channellist, int freeChanUser);
+
+#endif
\ No newline at end of file