]> jfr.im git - irc/quakenet/newserv.git/blame - qabot/qabot_dbase.c
move some more data/log paths missed before
[irc/quakenet/newserv.git] / qabot / qabot_dbase.c
CommitLineData
f011b15a
CP
1#include <stdio.h>
2#include <time.h>
3
4#include "../nick/nick.h"
5#include "../localuser/localuserchannel.h"
6#include "../core/hooks.h"
7#include "../core/schedule.h"
8#include "../lib/array.h"
9#include "../lib/base64.h"
10#include "../lib/irc_string.h"
11#include "../lib/splitline.h"
12
13#include "qabot.h"
14
15qab_user* qabot_users = 0;
16
17void qabot_loaddb() {
18 FILE* f;
19 char buf[2049];
20 char* args[100];
21 time_t created;
22 flag_t flags;
23
9e9df6d4 24 if (!(f = fopen("data/qab_users", "r")))
f011b15a
CP
25 return;
26
27 while (!feof(f)) {
28 if (fgets(buf, 2048, f)) {
29 buf[2048] = '\0';
30 if (splitline(buf, args, 50, 0) != 3) {
31 fclose(f);
32 return;
33 }
34
35 flags = (flag_t)strtoul(args[1], NULL, 10);
36 created = strtoul(args[2], NULL, 10);
37
38 qabot_adduser(args[0], flags, created);
39 }
40 }
41
42 fclose(f);
43
9e9df6d4 44 if (!(f = fopen("data/qab_bots", "r")))
f011b15a
CP
45 return;
46
47 while (!feof(f)) {
48 if (fgets(buf, 2048, f)) {
49 buf[2048] = '\0';
50 if (splitline(buf, args, 50, 0) != 10) {
51 fclose(f);
52 return;
53 }
54
55 qabot_addbot(args[0], args[1], args[2], args[3], args[4], args[5], (flag_t)strtol(args[6], NULL, 10),
56 (int)strtol(args[7], NULL, 10), (int)strtol(args[8], NULL, 10), (int)strtol(args[9], NULL, 10), 0);
57 }
58 }
59
60 fclose(f);
61}
62
63void qabot_savedb() {
64 FILE* f;
65 qab_user* u;
66 qab_bot* b;
67
9e9df6d4 68 if (!(f = fopen("data/qab_users", "w")))
f011b15a
CP
69 return;
70
71 for (u = qabot_users; u; u = u->next)
72 fprintf(f, "%s %d %ld\n", u->authname, (int)u->flags, u->created);
73
74 fclose(f);
75
9e9df6d4 76 if (!(f = fopen("data/qab_bots", "w")))
f011b15a
CP
77 return;
78
79 for (b = qab_bots; b; b = b->next)
80 fprintf(f, "%s %s %s %s %s %s %d %d %d %d\n", b->nick, b->user, b->host, b->public_chan->name->content,
81 b->question_chan->name->content, b->staff_chan->name->content, (int)b->flags, b->spam_interval,
82 b->ask_wait, b->queued_question_interval);
83
84 fclose(f);
85}
86
87void qabot_savetimer(void* arg) {
88 qabot_savedb();
89}
90
91void qabot_adduser(const char* authname, flag_t flags, time_t created) {
92 qab_user* u;
93
94 if ((u = qabot_getuser(authname)))
95 return;
96
97 u = (qab_user*)malloc(sizeof(qab_user));
98 strncpy(u->authname, authname, ACCOUNTLEN);
99 u->authname[ACCOUNTLEN] = '\0';
100 u->flags = flags;
101 u->created = created;
102
103 u->prev = 0;
104 u->next = qabot_users;
105 if (qabot_users)
106 qabot_users->prev = u;
107 qabot_users = u;
108}
109
110void qabot_deluser(const char* authname) {
111 qab_user* u = qabot_getuser(authname);
112
113 if (!u)
114 return;
115
116 qabot_squelchuser(u);
117}
118
119void qabot_squelchuser(qab_user* user) {
120 if (user->next)
121 user->next->prev = user->prev;
122 if (user->prev)
123 user->prev->next = user->next;
124 else
125 qabot_users = user->next;
126
127 free(user);
128}
129
130qab_user* qabot_getuser(const char* authname) {
131 qab_user* u;
132
133 for (u = qabot_users; u; u = u->next)
134 if (!ircd_strcmp(u->authname, authname))
135 return u;
136
137 return 0;
138}