// IRC Class - by dark2k1(dark2k1.com)

int quit(char message[]);

class IRC {
public:
SOCK socket;
FILE *file;
char log_file[];
bool logging;

	int connect(char nick[], char password[], char server[], int port) {
	socket.socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

		if(socket.connect(server, port) < 0) {
		return -1;
		} else {
		char *buffer;
		buffer = new char [2048];
		memset(buffer, '', 2048);

		sprintf(buffer, "NICK %s
", nick);
		
			if(raw_command(buffer) < 0) {
			return -1;
			}

		memset(buffer, '', 2048);

		sprintf(buffer, "USER %s "aol.com" "localhost" :%s
", nick, nick);

			if(raw_command(buffer) < 0) {
			return -1;
			}

			if(strlen(password) > 0) {
			memset(buffer, '', 2048);

			sprintf(buffer, "NICKSERV identify %s
", password);

			Sleep(1000);

				if(raw_command(buffer) < 0) {
				return -1;
				}
			}

		delete buffer;

		return 1;
		}
	}

	int join(char channel[]) {
	char *buffer;
	buffer = new char [2048];
	memset(buffer, '', 2048);

	sprintf(buffer, "JOIN %s
", channel);

		if(raw_command(buffer) < 0) {
		return -1;
		}

	delete buffer;

	return 1;
	}

	int private_message(char to[], char message[]) {
	char *buffer;
	buffer = new char [2048];
	memset(buffer, '', 2048);

	sprintf(buffer, "PRIVMSG %s :%s
", to, message);

		if(raw_command(buffer) < 0) {
		return -1;
		}

	delete buffer;

	return 1;
	}

	int send_channel(char channel[], char message[]) {
	char *buffer;
	buffer = new char [2048];
	memset(buffer, '', 2048);

	sprintf(buffer, "PRIVMSG %s :%s
", channel, message);

		if(raw_command(buffer) < 0) {
		return -1;
		}

	delete buffer;

	return 1;
	}

	int quit(char message[]) {
	char *buffer;
	buffer = new char [2048];
	memset(buffer, '', 2048);

	sprintf(buffer, "QUIT :%s", message);

		if(raw_command(buffer) < 0) {
		return -1;
		}

		if(socket.close() < 0) {
		return -1;
		}

	delete buffer;

	return 1;
	}

	int leave(char channel[]) {
	char *buffer;
	buffer = new char [2048];
	memset(buffer, '', 2048);

	sprintf(buffer, "PART :%s
", channel);

		if(raw_command(buffer) < 0) {
		return -1;
		}

	delete buffer;

	return 1;
	}

	int raw_command(char command[]) {
		if(this->logging == 1) {
		fputs(command, this->file);
		}

		if(socket.write(command) < 0) {
		return -1;
		}

	return 1;
	}

	int read(char *buffer) {
	int length = 0;

	socket.read(buffer);

		if(this->logging == 1) {
		fputs(buffer, this->file);
		}

	return length;
	}

	int open_log(char log_file[]) {
	strcpy(this->log_file, log_file);

		if((this->file = fopen(this->log_file, "a+")) != NULL) {
		return -1;
		}

	return 1;
	}

	int clear_log() {
	FILE *file;

		if((file = fopen(this->log_file, "w")) != NULL) {
		return -1;
		}

		if(fclose(file) != 0) {
		return -1;
		}

	return 1;
	}

	void start_logging() {
	this->logging = 1;
	}

	void stop_logging() {
	this->logging = 0;
	}

	int close_log() {
		if(fclose(this->file) != 0) {
		return -1;
		}

	return 1;
	}
};
Name