From 74c9a56b7aa52fff54fa4a34a2f31910307b37eb Mon Sep 17 00:00:00 2001 From: Zido Date: Sat, 8 Apr 2006 12:09:36 +0000 Subject: - The IRC bot now reads a configuration file (irc.c) instead of it all being hardcoded git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@5958 54d463be-8e91-2dee-dedb-b68131a5f0ec --- src/map/irc.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- src/map/irc.h | 14 +++++++++----- src/map/map.c | 1 + 3 files changed, 64 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/map/irc.c b/src/map/irc.c index 79c5bd640..8a4d3b2e0 100644 --- a/src/map/irc.c +++ b/src/map/irc.c @@ -15,6 +15,7 @@ typedef int socklen_t; #include #include #include +#include #ifndef SIOCGIFCONF #include // SIOCGIFCONF on Solaris, maybe others? [Shinomori] @@ -54,7 +55,7 @@ char irc_channel[32]=""; char irc_trade_channel[32]=""; unsigned char irc_ip_str[128]=""; -unsigned long irc_ip=6667; +unsigned long irc_ip=0; unsigned short irc_port = 6667; int irc_fd=0; @@ -241,6 +242,8 @@ void irc_parse_sub(int fd, char *incoming_string) irc_send(send_string); sprintf(send_string, "JOIN %s", irc_channel); irc_send(send_string); + sprintf(send_string,"NAMES %s",irc_channel); + irc_send(send_string); irc_si->state = 2; } else if(!strcmp(command,"433")){ @@ -460,3 +463,53 @@ int irc_rmnames() { return 0; } + +int irc_read_conf(char *file) { + FILE *fp=NULL; + char w1[256]; + char w2[256]; + char path[256]; + char row[1024]; + + memset(w1,'\0',256); + memset(w2,'\0',256); + memset(path,'\0',256); + memset(row,'\0',256); + + sprintf(path,"conf/%s",file); + + if(!(fp=fopen(path,"r"))) { + ShowError("Cannot find file: %s\n",path); + return 0; + } + + while(fgets(row,1023,fp)!=NULL) { + if(row[0]=='/'&&row[1]=='/') + continue; + sscanf(row,"%[^:]: %255[^\r\n]",w1,w2); + if(strcmpi(w1,"use_irc")==0) { + if(strcmpi(w2,"on")==0) + use_irc=1; + else + use_irc=0; + } + else if(strcmpi(w1,"irc_server")==0) + strcpy(irc_ip_str,w2); + else if(strcmpi(w1,"irc_port")==0) + irc_port=atoi(w2); + else if(strcmpi(w1,"irc_channel")==0) + strcpy(irc_channel,w2); + else if(strcmpi(w1,"irc_trade_channel")==0) + strcpy(irc_trade_channel,w2); + else if(strcmpi(w1,"irc_nick")==0) + strcpy(irc_nick,w2); + else if(strcmpi(w1,"irc_pass")==0) { + if(strcmpi(w2,"0")!=0) + strcpy(irc_password,w2); + } + } + + ShowInfo("IRC Config read successfully\n"); + + return 1; +} diff --git a/src/map/irc.h b/src/map/irc.h index 669f26c03..5c321605b 100644 --- a/src/map/irc.h +++ b/src/map/irc.h @@ -1,5 +1,8 @@ #include "map.h" +// IRC .conf file [Zido] +#define IRC_CONF "irc_athena.conf" + // IRC Access levels [Zido] #define ACCESS_OWNER 5 #define ACCESS_SOP 4 @@ -44,8 +47,9 @@ struct channel_data { }user[MAX_CHANNEL_USERS]; }; -int parse_names_packet(char *str); -int parse_names(char *str); -int set_access(char *nick,int level); -int get_access(char *nick); -int irc_rmnames(void); +int parse_names_packet(char *str); // [Zido] +int parse_names(char *str); // [Zido] +int set_access(char *nick,int level); // [Zido] +int get_access(char *nick); // [Zido] +int irc_rmnames(void); // [Zido] +int irc_read_conf(char *file); // [Zido] diff --git a/src/map/map.c b/src/map/map.c index 87cc16577..b580ce07e 100644 --- a/src/map/map.c +++ b/src/map/map.c @@ -3812,6 +3812,7 @@ int do_init(int argc, char *argv[]) { } map_config_read(MAP_CONF_NAME); + irc_read_conf(IRC_CONF); // [Zido] chrif_checkdefaultlogin(); if ((naddr_ == 0) && (map_ip_set_ == 0 || char_ip_set_ == 0)) { -- cgit v1.2.3-70-g09d2