summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZido <Zido@54d463be-8e91-2dee-dedb-b68131a5f0ec>2006-04-08 12:09:36 +0000
committerZido <Zido@54d463be-8e91-2dee-dedb-b68131a5f0ec>2006-04-08 12:09:36 +0000
commit74c9a56b7aa52fff54fa4a34a2f31910307b37eb (patch)
tree9c77d8672a67e520e3a3e589115e98b04d55fa3a
parent8de982a279a9eca6505c790b32ca2f1d559a3380 (diff)
downloadhercules-74c9a56b7aa52fff54fa4a34a2f31910307b37eb.tar.gz
hercules-74c9a56b7aa52fff54fa4a34a2f31910307b37eb.tar.bz2
hercules-74c9a56b7aa52fff54fa4a34a2f31910307b37eb.tar.xz
hercules-74c9a56b7aa52fff54fa4a34a2f31910307b37eb.zip
- 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
-rw-r--r--Changelog-Trunk.txt2
-rw-r--r--conf-tmpl/irc_athena.conf36
-rw-r--r--src/map/irc.c55
-rw-r--r--src/map/irc.h14
-rw-r--r--src/map/map.c1
5 files changed, 102 insertions, 6 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt
index 35d45a535..c12fcf0a2 100644
--- a/Changelog-Trunk.txt
+++ b/Changelog-Trunk.txt
@@ -4,6 +4,8 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
2006/04/08
+ * Added irc_athena.conf :) from now on, set your irc configuration in
+ conf/irc_athena.conf [Zido]
* Removed the baby class check when using "changebase" to change to the
Wedding Sprite, since it fixes the bug that the sprite doesn't show
at all, and baby classes arn't messed up by it anymore.
diff --git a/conf-tmpl/irc_athena.conf b/conf-tmpl/irc_athena.conf
new file mode 100644
index 000000000..bfe0a0968
--- /dev/null
+++ b/conf-tmpl/irc_athena.conf
@@ -0,0 +1,36 @@
+// ______ __ __
+// /\ _ \/\ \__/\ \
+// __\ \ \L\ \ \ ,_\ \ \___ __ ___ __
+// /'__`\ \ __ \ \ \/\ \ _ `\ /'__`\/' _ `\ /'__`\
+///\ __/\ \ \/\ \ \ \_\ \ \ \ \/\ __//\ \/\ \/\ \L\.\_
+//\ \____\\ \_\ \_\ \__\\ \_\ \_\ \____\ \_\ \_\ \__/.\_\
+// \/____/ \/_/\/_/\/__/ \/_/\/_/\/____/\/_/\/_/\/__/\/_/
+// _ _ _ _ _ _ _ _ _ _ _ _ _
+// / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \
+//( e | n | g | l | i | s | h ) ( A | t | h | e | n | a )
+// \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
+//
+//--------------------------------------------------------
+// eAthena IRC Bot Configuration File
+//--------------------------------------------------------
+
+//Turn the IRC Bot 'on' or 'off'
+use_irc: off
+
+//IRC Server Address
+irc_server: irc.deltaanime.net
+
+//IRC Server Port
+irc_port: 6667
+
+//IRC Channel
+irc_channel: #
+
+//IRC Trade Channel
+irc_trade_channel: #
+
+//IRC Nickname
+irc_nick:
+
+//IRC Password ("0" for no pass)
+irc_pass: 0
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 <netdb.h>
#include <arpa/inet.h>
#include <ctype.h>
+#include <stdlib.h>
#ifndef SIOCGIFCONF
#include <sys/sockio.h> // 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)) {