// 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;
}
};