#include "modcmd.h"
#include "ModeNode.h"
#include "bot_NeonSpam.h"
+#include "IRCEvents.h"
static struct ChanNode **chanList;
}
void freeChanNode(struct ChanNode* chan) {
+ event_freechan(chan);
if(chan->trigger) {
struct trigger_cache *trigger, *next_trigger;
for(trigger = chan->trigger; trigger; trigger = next_trigger) {
#define BIND_TYPE_RAW 14
#define BIND_TYPE_BOT_READY 15
#define BIND_TYPE_REGISTERED 16
+#define BIND_TYPE_FREEUSER 17
+#define BIND_TYPE_FREECHAN 18
-#define TOTAL_BIND_TYPES 17
+#define TOTAL_BIND_TYPES 19
void init_bind() {
binds = calloc(TOTAL_BIND_TYPES, sizeof(*binds));
post_event(BIND_TYPE_REGISTERED);
return ret;
}
+
+FUNC_BIND(freeuser, freeuser_func_t, BIND_TYPE_FREEUSER)
+FUNC_UNBIND(freeuser, freeuser_func_t, BIND_TYPE_FREEUSER)
+FUNC_EVENT(freeuser, freeuser_func_t, BIND_TYPE_FREEUSER, (struct UserNode *user), (user))
+
+FUNC_BIND(freechan, freechan_func_t, BIND_TYPE_FREECHAN)
+FUNC_UNBIND(freechan, freechan_func_t, BIND_TYPE_FREECHAN)
+FUNC_EVENT(freechan, freechan_func_t, BIND_TYPE_FREECHAN, (struct ChanNode *chan), (chan))
void unbind_registered(registered_func_t *func);
int event_registered(struct UserNode *old_user, struct UserNode *new_user);
+typedef int freeuser_func_t(struct UserNode *user);
+int bind_freeuser(freeuser_func_t *func);
+void unbind_freeuser(freeuser_func_t *func);
+int event_freeuser(struct UserNode *user);
+
+typedef int freechan_func_t(struct ChanNode *chan);
+int bind_freechan(freechan_func_t *func);
+void unbind_freechan(freechan_func_t *func);
+int event_freechan(struct ChanNode *chan);
+
#endif
\ No newline at end of file
#include "UserNode.h"
#include "ChanUser.h"
#include "tools.h"
+#include "IRCEvents.h"
static struct UserNode **userList;
void delUser(struct UserNode* user, int freeUser) {
int userListIndex = get_nicklist_entry(user->nick[0]);
if(userListIndex == -1) return;
+ event_freeuser(user);
struct UserNode *cuser, *last_user = NULL;
for(cuser = userList[userListIndex]; cuser; cuser = cuser->next) {
if(cuser == user) {