init
This commit is contained in:
commit
649867d5a6
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
.gdb_history
|
||||||
|
*.o
|
||||||
|
hibot
|
37
Makefile
Normal file
37
Makefile
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
.PHONY: clean run test
|
||||||
|
|
||||||
|
WRAP := valgrind --track-origins=yes --leak-check=full --show-leak-kinds=all
|
||||||
|
CFLAGS += -fno-builtin -I/usr/include/libircclient/
|
||||||
|
ifeq ($(DEBUG), 1)
|
||||||
|
CFLAGS += -Wall -Wextra -Wpedantic
|
||||||
|
CFLAGS += -DDEBUG -O0 -ggdb -fno-inline
|
||||||
|
else
|
||||||
|
CFLAGS += -O3 -fno-stack-protector -fno-exceptions -fno-rtti
|
||||||
|
endif
|
||||||
|
|
||||||
|
LDLIBS := -lircclient
|
||||||
|
|
||||||
|
OUT := hibot
|
||||||
|
|
||||||
|
SOURCE.d := source/
|
||||||
|
SOURCE := main.c
|
||||||
|
SOURCE := $(addprefix ${SOURCE.d}, ${SOURCE})
|
||||||
|
HEADER := config.inc log.h bot.h
|
||||||
|
HEADER := $(addprefix ${SOURCE.d}, ${HEADER})
|
||||||
|
|
||||||
|
${OUT}: ${SOURCE} ${HEADER}
|
||||||
|
${CC} ${CFLAGS} -o $@ ${SOURCE} ${LDLIBS}
|
||||||
|
|
||||||
|
run:
|
||||||
|
${OUT} irc.rizon.net:6665 "#/g/test"
|
||||||
|
|
||||||
|
test: ${OUT}
|
||||||
|
${WRAP} ${OUT} irc.rizon.net:6665 "#/g/test"
|
||||||
|
|
||||||
|
clean:
|
||||||
|
-rm ${OUT}
|
||||||
|
|
||||||
|
docs:
|
||||||
|
for i in documentation/*.md; do \
|
||||||
|
kramdown-man "$$i" -o documentation/manual/$$(basename -s .md $$i) ; \
|
||||||
|
done
|
75
source/bot.h
Normal file
75
source/bot.h
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
#ifndef BOT_H
|
||||||
|
|
||||||
|
#include <libircclient.h>
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
irc_session_t * session;
|
||||||
|
irc_callbacks_t callbacks;
|
||||||
|
|
||||||
|
void ircmsg(const char * const message) {
|
||||||
|
irc_cmd_msg(session, channel, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
void event_connect(irc_session_t * session,
|
||||||
|
const char * event,
|
||||||
|
const char * origin,
|
||||||
|
const char ** params,
|
||||||
|
unsigned int count) {
|
||||||
|
(void)event;
|
||||||
|
(void)origin;
|
||||||
|
(void)params;
|
||||||
|
(void)count;
|
||||||
|
/* msg ChanServ IDENTIFY? */
|
||||||
|
log_notice("IRC connection secured.");
|
||||||
|
irc_cmd_join(session, channel, 0);
|
||||||
|
ircmsg("TEST");
|
||||||
|
}
|
||||||
|
|
||||||
|
void event_channel(irc_session_t * session,
|
||||||
|
char const * event,
|
||||||
|
char const * origin,
|
||||||
|
char const ** params,
|
||||||
|
unsigned int count) {
|
||||||
|
(void)session;
|
||||||
|
(void)event;
|
||||||
|
(void)origin;
|
||||||
|
(void)count;
|
||||||
|
/* */
|
||||||
|
char const * message = params[1];
|
||||||
|
ircmsg(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
int connect_bot(const char * const server, const short port) {
|
||||||
|
memset(&callbacks, 0, sizeof(callbacks));
|
||||||
|
callbacks.event_connect = event_connect;
|
||||||
|
callbacks.event_channel = event_channel;
|
||||||
|
session = irc_create_session(&callbacks);
|
||||||
|
|
||||||
|
if (!session) {
|
||||||
|
log_error("Error creating IRC session.");
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
log_notice("IRC Session initialized.");
|
||||||
|
}
|
||||||
|
|
||||||
|
irc_connect(session,
|
||||||
|
server,
|
||||||
|
port,
|
||||||
|
password,
|
||||||
|
username,
|
||||||
|
username,
|
||||||
|
username
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
int connection_loop(void) {
|
||||||
|
if (irc_run(session) != 0) {
|
||||||
|
log_error("Error running IRC session\n"
|
||||||
|
"Possible issue: bad URL, no network connection, bad port, refused connection.");
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define BOT_H
|
||||||
|
#endif
|
7
source/config.inc
Normal file
7
source/config.inc
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
#ifndef CONFIG_INC
|
||||||
|
|
||||||
|
const char * const username = PROGRAM_NAME;
|
||||||
|
const char * const password = "";
|
||||||
|
|
||||||
|
#define CONFIG_INC
|
||||||
|
#endif
|
22
source/log.h
Normal file
22
source/log.h
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
#ifndef LOG_H
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
static
|
||||||
|
void log(const char * const message, const char * const color) {
|
||||||
|
fputs(color, log_file);
|
||||||
|
fputs(message, log_file);
|
||||||
|
fputs("\033[0m\n", log_file);
|
||||||
|
fflush(log_file);
|
||||||
|
}
|
||||||
|
|
||||||
|
void log_notice(const char * const message) {
|
||||||
|
log("", message);
|
||||||
|
}
|
||||||
|
|
||||||
|
void log_error(const char * const message) {
|
||||||
|
log("\033[33m", message);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define LOG_H
|
||||||
|
#endif
|
49
source/main.c
Normal file
49
source/main.c
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
#define PROGRAM_NAME "hibot"
|
||||||
|
|
||||||
|
#include "config.inc"
|
||||||
|
|
||||||
|
char * channel;
|
||||||
|
char * server;
|
||||||
|
char * port;
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
FILE * log_file;
|
||||||
|
|
||||||
|
#include "log.h"
|
||||||
|
//#include "xilight.h"
|
||||||
|
#include "bot.h"
|
||||||
|
|
||||||
|
const char help_message[] =
|
||||||
|
PROGRAM_NAME " <server>:<port> <channel>\n"
|
||||||
|
;
|
||||||
|
|
||||||
|
signed main(int argc, char * * argv) {
|
||||||
|
if (argc != 3) {
|
||||||
|
goto USAGE_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
channel = argv[2];
|
||||||
|
server = strdup(argv[1]);
|
||||||
|
port = strchr(server, ':');
|
||||||
|
if (port) {
|
||||||
|
*port = '\0';
|
||||||
|
} else {
|
||||||
|
goto USAGE_ERROR;
|
||||||
|
}
|
||||||
|
++port;
|
||||||
|
int port_i = 0;
|
||||||
|
if(!sscanf(port, "%hd", &port_i)) {
|
||||||
|
goto USAGE_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
log_file = stdout;
|
||||||
|
|
||||||
|
connect_bot(server, 6665);
|
||||||
|
connection_loop();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
USAGE_ERROR:
|
||||||
|
puts(help_message);
|
||||||
|
return 1;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user