Example #1
0
File: irc.c Project: trapped/meCh
void
irc_connect(void)
{
	struct sockaddr_in addr;
	struct hostent *serv;
	char buf[IRC_MSG_LEN];

	fd = socket(AF_INET, SOCK_STREAM/*|SOCK_NONBLOCK*/, 0);
	printf("Connecting to %s...\n", conf.host);
	serv = gethostbyname(conf.host);
	addr.sin_family = AF_INET;
	memcpy(&addr.sin_addr.s_addr, serv->h_addr, serv->h_length);
	addr.sin_port = htons(conf.port);
	if(connect(fd, (struct sockaddr *) &addr, sizeof(addr))<0) {
		puts("Connection error");
		exit(EXIT_FAILURE);
	}
	irc_read(buf);
	irc_read(buf);
	strcpy(buf, "USER ");
	strcat(buf, conf.name);
	strcat(buf, " ");
	strcat(buf, conf.name);
	strcat(buf, " ");
	strcat(buf, conf.name);
	strcat(buf, " ");
	strcat(buf, conf.name);
	strcat(buf, "\r\n");
	irc_cmd(buf);
	strcpy(buf, "NICK ");
	strcat(buf, conf.name);
	strcat(buf, "\r\n");
	irc_cmd(buf);
	irc_read(buf);
	buf[1] = 'O';
	irc_cmd(buf);
	while(irc_read(buf)) {
		buf[strlen(conf.name)+1] = '\0';
		if(!strcmp(buf+1, conf.name)) break;
	}
	strcpy(buf, "JOIN ");
	strcat(buf, conf.chan);
	strcat(buf, "\r\n");
	irc_cmd(buf);
	puts("Connected!");
	sprintf(buf, "Hello, I'm %s!", conf.name);
	irc_say(buf);
	while(irc_read(buf) && irc_get_type(buf)!=T_JOIN);
}
Example #2
0
void
mod_handle(char *msg)
{
	Module *m;
	int nargs;
	char nick[IRC_NICK_LEN], txt[IRC_MSG_LEN],
		*args[MAX_NARGS], *spaces[MAX_NARGS-2];
	enum irc_type type;

	type = irc_get_type(msg);
	if(type==T_OTHER) return;

	irc_get_nick(nick, msg);
	if(!strcmp(nick, conf.name)) return;
	if(type & (T_MODE|T_KICK))
		irc_get_params(txt, msg);
	else
		irc_get_text(txt, msg);

	/* mark message as copied, maybe useful if the bot is made multithreaded */
	msg[0] = '\0';

	args[0] = nick;

	nargs = 1 + words(txt, args+1, spaces, nargsrec-1);

	m = &mod;
	do {
		unwords(spaces, nargs-1, m->nargs-1);
		if((m->on & type) && (
			(!m->invoker) ||
			(type==T_CHAN && args[1][0]==conf.cmd && !strcmp(args[1]+1, m->invoker)) ||
			(type!=T_CHAN && !strcmp(args[1], m->invoker))
			)
		) m->f(args, type);

	m = m->next;
	} while(m);
}