virtual void unload() { pluginUnload(); loaded = false; }
void botCmdPlugin( IRCServer_t *server, IRCChannel_t *channel, char *who, char *msg, void *tag ) { int len; char *line; char *command; char *message; bool ret; static char *notauth = "You are not authorized, you can't do that!"; if( !server || channel ) { return; } if( !authenticate_check( server, who ) ) { transmitMsg( server, TX_PRIVMSG, who, notauth ); return; } line = strstr( msg, " " ); if( line ) { /* Command has trailing text, skip the space */ len = line - msg; line++; command = (char *)malloc( len + 2 ); strncpy( command, msg, len ); command[len] = '\0'; } else { /* Command is the whole line */ command = strdup( msg ); } /* Strip trailing spaces */ if( line ) { for( len = strlen(line); len && line[len-1] == ' '; len = strlen(line) ) { line[len-1] = '\0'; } if( *line == '\0' ) { line = NULL; } } if( !strcmp( command, "list" ) ) { BalancedBTreeLock( pluginTree ); if( line && !strcmp( line, "all" ) ) { message = botCmdDepthFirst( pluginTree->root, false ); } else { message = botCmdDepthFirst( pluginTree->root, true ); } BalancedBTreeUnlock( pluginTree ); } else if( !strcmp( command, "load" ) && line ) { ret = pluginLoad( line ); message = (char *)malloc(strlen(line) + 32); if( ret ) { sprintf( message, "Loaded module %s", line ); } else { sprintf( message, "Module %s already loaded", line ); } } else if( !strcmp( command, "unload" ) && line ) { ret = pluginUnload( line ); message = (char *)malloc(strlen(line) + 32); if( ret ) { sprintf( message, "Unloaded module %s", line ); } else { sprintf( message, "Module %s already unloaded", line ); } } else { message = NULL; free( command ); return; } transmitMsg( server, TX_MESSAGE, who, message ); free( message ); free( command ); }