47 long count = 0, mem = 0;
51 for (i = 0; i < 256; i++) {
52 for (bi = botlists[i]; bi; bi = bi->
next) {
55 mem += strlen(bi->
nick) + 1;
56 mem += strlen(bi->
user) + 1;
57 mem += strlen(bi->
host) + 1;
58 mem += strlen(bi->
real) + 1;
86 cmd = strtok(buf,
" ");
90 }
else if (
stricmp(cmd,
"\1PING") == 0) {
91 if (!(s = strtok(NULL,
""))) {
109 char *cmd = strtok(buf,
" ");
116 if (!(s = strtok(NULL,
""))) {
138 if (!u || !buf || !ci) {
151 if (!
strnicmp(buf,
"\1ACTION ", 8)) {
191 bot_kick(ci, u, BOT_REASON_REVERSE);
198 bot_kick(ci, u, BOT_REASON_UNDERLINE);
204 && ((c = strlen(buf)) >= ci->
capsmin)) {
212 else if (islower(*s))
238 for (i = 0, bw = ci->
badwords; i < ci->bwcount; i++, bw++) {
247 int len = strlen(bw->
word);
248 int buf_len = strlen(nbuf);
255 }
else if ((strchr(nbuf,
' ') == nbuf + len)
260 if (len < buf_len && (strrchr(nbuf,
' ') == nbuf + buf_len - len - 1)
265 char *wordbuf =
scalloc(len + 3, 1);
268 wordbuf[len + 1] =
' ';
269 wordbuf[len + 2] =
'\0';
270 memcpy(wordbuf + 1, bw->
word, len);
273 && (strstr(nbuf, wordbuf)))
275 && (
stristr(nbuf, wordbuf)))) {
284 int len = strlen(bw->
word);
287 && (!strncmp(nbuf, bw->
word, len)))
292 char *wordbuf =
scalloc(len + 2, 1);
294 memcpy(wordbuf + 1, bw->
word, len);
296 wordbuf[len + 1] =
'\0';
306 int len = strlen(bw->
word);
307 int buf_len = strlen(nbuf);
313 char *wordbuf =
scalloc(len + 2, 1);
315 memcpy(wordbuf, bw->
word, len);
317 wordbuf[len + 1] =
'\0';
331 bot_kick(ci, u, BOT_REASON_BADWORD_GENTLE);
348 time_t now = time(NULL);
401 cmd = strtok(buf,
" ");
404 char *params = strtok(NULL,
"");
426 #define SAFE(x) do { \
429 fatal("Read error on %s", BotDBName); \
449 while (!failed && (c =
getc_db(f)) != 0) {
478 #define SAFE(x) do { \
481 log_perror("Write error on %s", BotDBName); \
482 if (time(NULL) - lastwarn > WarningTimeout) { \
483 anope_cmd_global(NULL, "Write error on %s: %s", BotDBName, \
485 lastwarn = time(NULL); \
501 for (i = 0; i < 256; i++) {
502 for (bi = botlists[i]; bi; bi = bi->
next) {
533 alog(
"Unable to tag table 'anope_bs_core' - BotServ RDB save failed.");
538 for (i = 0; i < 256; i++) {
539 for (bi = botlists[i]; bi; bi = bi->
next) {
541 alog(
"Unable to save BotInfo for %s - BotServ RDB save failed.", bi->
nick);
549 alog(
"Unable to clean table 'anope_bs_core' - BotServ RDB save failed.");
563 for (prev = NULL, ptr = botlists[
tolower(*bi->
nick)];
565 prev = ptr, ptr = ptr->
next);
584 alog(
"debug: makebot called with NULL values");
616 for (bi = botlists[
tolower(*nick)]; bi; bi = bi->
next) {
658 time_t now = time(NULL);
666 for (bd = c->
bd; bd; bd = next) {
709 struct c_userlist *user;
714 for (user = c->
users; user; user = user->
next) {
715 if (user->user == u) {
717 time_t now = time(NULL);
721 if (user->ud->lastline)
722 free(user->ud->lastline);
725 memset(user->ud, 0,
sizeof(
UserData));
726 user->ud->last_use = now;
732 user->ud->last_use = time(NULL);
747 if (!ci || !ci->
c || !ci->
bi)
800 "%s invited %s into the channel.",
819 for (i = 0; i < 256; i++)
842 if (ci->
ttb[ttbtype] && bd->
ttb[ttbtype] >= ci->
ttb[ttbtype]) {
851 bd->
ttb[ttbtype] = 0;
890 if (!ci || !ci->
bi || !ci->
c || !u)
897 va_start(args, message);
979 if (strlen(reason) > 200)
1028 if (strlen(reason) > 200)
1065 if (
is_protected(u) && *mode ==
'-' && (requester != u)) {
1107 newbuf = (
char *)
smalloc(
sizeof(
char) * len + 1);
1109 for (i = 0; i < len; i++) {
1120 if (isdigit(buf[i + 1])) {
1127 if (isdigit(buf[i + 1])) {
1134 if (buf[i + 1] ==
',') {
1137 if (isdigit(buf[i + 1])) {
1144 if (isdigit(buf[i + 1])) {
BotInfo * makebot(char *nick)
E char ** BotServCoreModules
static BanData * get_ban_data(Channel *c, User *u)
void unassign(User *u, ChannelInfo *ci)
E int snprintf(char *buf, size_t size, const char *fmt,...)
E void anope_cmd_part(char *nick, char *chan, const char *fmt,...)
void insert_bot(BotInfo *bi)
void bot_raw_mode(User *requester, ChannelInfo *ci, char *mode, char *nick)
E void do_kick(const char *source, int ac, char **av)
E int strnicmp(const char *s1, const char *s2, size_t len)
E int check_access(User *user, ChannelInfo *ci, int what)
E void send_event(const char *name, int argc,...)
E int is_ulined(char *server)
E int stricmp(const char *s1, const char *s2)
void botserv(User *u, char *buf)
E void anope_cmd_join(char *user, char *channel, time_t chantime)
E char * stristr(char *s1, char *s2)
E void modules_core_init(int number, char **list)
BotInfo * findbot(char *nick)
#define getstring(na, index)
E Uid * find_nickuid(const char *uid)
#define getstring2(nc, index)
#define write_int8(val, f)
void get_botserv_stats(long *nrec, long *memuse)
E int is_on_chan(Channel *c, User *u)
E int is_protected(User *user)
void bot_raw_kick(User *requester, ChannelInfo *ci, char *nick, char *reason)
E void notice_lang(char *source, User *dest, int message,...)
E ChannelInfo * chanlists[256]
E int is_excepted(ChannelInfo *ci, User *user)
E int read_int16(uint16 *ret, dbFILE *f)
void bot_rejoin_all(BotInfo *bi)
E char * sstrdup(const char *s)
E void * scalloc(long elsize, long els)
E int get_idealban(ChannelInfo *ci, User *u, char *ret, int retlen)
E void anope_cmd_kick(char *source, char *chan, char *user, const char *fmt,...)
E void E void E void fatal(const char *fmt,...) FORMAT(printf
void bot_join(ChannelInfo *ci)
void save_bs_rdb_dbase(void)
E int read_string(char **ret, dbFILE *f)
E int get_file_version(dbFILE *f)
E int write_int16(uint16 val, dbFILE *f)
int rdb_save_bs_core(BotInfo *bi)
E User * finduser(const char *nick)
E int entry_match(Entry *e, char *nick, char *user, char *host, uint32 ip)
E void close_db(dbFILE *f)
#define BS_KICK_UNDERLINES
E int chan_get_user_status(Channel *chan, User *user)
E char * BSFantasyCharacter
E dbFILE * open_db(const char *service, const char *filename, const char *mode, uint32 version)
E void alog(const char *fmt,...) FORMAT(printf
#define EVENT_BOT_FANTASY_NO_ACCESS
void bot_raw_ban(User *requester, ChannelInfo *ci, char *nick, char *reason)
#define CI_SIGNKICK_LEVEL
#define EVENT_BOT_FANTASY
E void anope_cmd_bot_chan_mode(char *nick, char *chan)
void botmsgs(User *u, BotInfo *bi, char *buf)
int rdb_clean_table(char *table)
E void anope_cmd_mode(char *source, char *dest, const char *fmt,...)
static void bot_kick(ChannelInfo *ci, User *u, int message,...)
E int vsnprintf(char *buf, size_t size, const char *fmt, va_list args)
#define EVENT_BOT_UNASSIGN
E void do_cmode(const char *source, int ac, char **av)
static void check_ban(ChannelInfo *ci, User *u, int ttbtype)
E IgnoreData * get_ignore(const char *nick)
E void anope_cmd_privmsg(char *source, char *dest, const char *fmt,...)
char * normalizeBuffer(char *buf)
static UserData * get_user_data(Channel *c, User *u)
int rdb_tag_table(char *table)
E void * smalloc(long size)
E int get_access(User *user, ChannelInfo *ci)
E int read_int32(uint32 *ret, dbFILE *f)
MDE void mod_run_cmd(char *service, User *u, CommandHash *cmdTable[], const char *cmd)
E int write_string(const char *s, dbFILE *f)
E void anope_cmd_ctcp(char *source, char *dest, const char *fmt,...)
E int write_int32(uint32 val, dbFILE *f)
E char * common_get_vhost(User *u)
E int anope_get_invite_mode()
E void moduleAddBotServCmds(void)
E void anope_cmd_notice_ops(char *source, char *dest, const char *fmt,...)
E char * common_get_vident(User *u)
#define BS_DONTKICKVOICES
struct channel_::c_userlist * users
void botchanmsgs(User *u, ChannelInfo *ci, char *buf)