2023-08-02 15:03:27 -04:00
|
|
|
/* irc.c - IRC interface
|
|
|
|
|
|
|
|
Probotic is free software: you can redistribute it and/or modify
|
|
|
|
it under the terms of the GNU General Public License version 3 only as
|
|
|
|
published by the Free Software Foundation.
|
|
|
|
|
|
|
|
Probotic is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU General Public License version 3 for more details.
|
|
|
|
|
|
|
|
The above copyright notice, this permission notice and the word
|
|
|
|
"NIGGER" shall be included in all copies or substantial portions
|
|
|
|
of the Software.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
version 3 + NIGGER along with Probotic.
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
2023-08-02 15:27:59 -04:00
|
|
|
#include <stdio.h>
|
2023-08-02 15:03:27 -04:00
|
|
|
#include <stdarg.h>
|
2023-08-02 15:27:59 -04:00
|
|
|
#include <string.h>
|
|
|
|
|
|
|
|
#include "irc.h"
|
|
|
|
#include "api.h"
|
|
|
|
#include "error.h"
|
2023-08-02 15:03:27 -04:00
|
|
|
|
|
|
|
irc_session_t * session;
|
|
|
|
irc_callbacks_t callbacks;
|
|
|
|
|
|
|
|
const char * channel;
|
|
|
|
|
|
|
|
#define IRCMSG(msg) irc_cmd_msg(session, channel, msg)
|
|
|
|
|
|
|
|
DELC char *
|
|
|
|
get_username(const char * origin)
|
|
|
|
{
|
|
|
|
const char USERNAME_TERMINATOR = '!';
|
|
|
|
int i = 0;
|
|
|
|
char * r;
|
|
|
|
while (origin[i] != USERNAME_TERMINATOR)
|
|
|
|
{ i++; }
|
|
|
|
r = (char *) malloc(i + 1);
|
|
|
|
strncpy(r, origin, i);
|
|
|
|
r[i] = '\00';
|
|
|
|
return r;
|
|
|
|
}
|
|
|
|
|
|
|
|
DELC void
|
|
|
|
msg_wrapper(const char* fmt,
|
|
|
|
...)
|
|
|
|
{
|
|
|
|
va_list args;
|
|
|
|
char * fmtdmsg;
|
|
|
|
|
|
|
|
va_start(args, fmt);
|
|
|
|
if(vasprintf(&fmtdmsg, fmt, args) == -1)
|
|
|
|
{ exit(1); }
|
|
|
|
|
|
|
|
puts(fmtdmsg);
|
|
|
|
irc_cmd_msg(session, channel, fmtdmsg);
|
|
|
|
|
|
|
|
free(fmtdmsg);
|
|
|
|
va_end(args);
|
|
|
|
}
|
|
|
|
|
|
|
|
DELC 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;
|
2023-08-02 15:27:59 -04:00
|
|
|
irc_cmd_join(session, channel, 0);
|
2023-08-02 15:03:27 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
DELC void
|
|
|
|
event_channel(irc_session_t * session,
|
|
|
|
const char * event,
|
|
|
|
const char * origin,
|
|
|
|
const char ** params,
|
|
|
|
unsigned int count)
|
|
|
|
{
|
|
|
|
size_t i = 0, len;
|
|
|
|
const char * channel = params[0];
|
|
|
|
char * message = params[1];
|
|
|
|
char * arg;
|
|
|
|
char * swp;
|
|
|
|
(void) session;
|
|
|
|
(void) event;
|
|
|
|
(void) origin;
|
|
|
|
(void) channel;
|
|
|
|
(void) message;
|
|
|
|
(void) count;
|
|
|
|
swp = get_username(origin);
|
|
|
|
/* msg_wrapper("%s, you are a faggot for this opinion.", swp); */
|
|
|
|
/* parses the command */
|
|
|
|
len = strlen(message);
|
|
|
|
while (message[i] != ' ')
|
|
|
|
{ ++i; }
|
|
|
|
message[i] = '\0';
|
|
|
|
arg = message + i + 1;
|
|
|
|
|
|
|
|
if (*message == '!')
|
|
|
|
{
|
|
|
|
++message;
|
|
|
|
/* if (strcmp(message, "stop") == 0) { exit(1); } */
|
|
|
|
if (strcmp(message, "remind") == 0)
|
|
|
|
{ msg_wrapper("%s: No current assignment", swp); }
|
|
|
|
else if (strcmp(message, "next") == 0)
|
|
|
|
{ msg_wrapper("%s: No future assignments", swp); }
|
|
|
|
else if (strcmp(message, "raw") == 0)
|
|
|
|
{ msg_wrapper("%s: Executing SQL `%s'", arg); }
|
|
|
|
else if (strcmp(message, "dump") == 0)
|
|
|
|
{ msg_wrapper("%s: All projects"); }
|
|
|
|
else if (strcmp(message, "submit") == 0)
|
|
|
|
{ msg_wrapper("%s: Submitting project link '%s' to <random janny>", swp, arg); }
|
|
|
|
else if (strcmp(message, "reroll") == 0)
|
|
|
|
{ msg_wrapper("%s: No more rerolls possible.", swp); }
|
|
|
|
#ifdef NDEBUG
|
|
|
|
else
|
|
|
|
{ msg_wrapper("No such command '%s'", message); }
|
|
|
|
#endif /* NDEBUG */
|
|
|
|
}
|
|
|
|
free(swp);
|
|
|
|
}
|
|
|
|
|
2023-08-02 15:27:59 -04:00
|
|
|
int
|
2023-08-02 15:03:27 -04:00
|
|
|
init(char const * username, char const * server, int port)
|
|
|
|
{
|
2023-08-02 15:27:59 -04:00
|
|
|
if(api_init())
|
|
|
|
{ ERR(DB_ERROR, "Error initializing database."); }
|
2023-08-02 15:03:27 -04:00
|
|
|
memset(&callbacks, 0, sizeof(callbacks));
|
|
|
|
callbacks.event_connect = event_connect;
|
|
|
|
callbacks.event_channel = event_channel;
|
|
|
|
session = irc_create_session(&callbacks);
|
|
|
|
if (!session)
|
|
|
|
{ ERR(1, "Error creating IRC session"); }
|
|
|
|
irc_connect(session, server, port, 0, username, username, username);
|
|
|
|
return 0;
|
|
|
|
}
|