]>
Commit | Line | Data |
---|---|---|
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 | ||
15 | qab_user* qabot_users = 0; | |
16 | ||
17 | void qabot_loaddb() { | |
18 | FILE* f; | |
19 | char buf[2049]; | |
20 | char* args[100]; | |
21 | time_t created; | |
22 | flag_t flags; | |
23 | ||
f3395fa6 | 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 | ||
f3395fa6 | 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 | ||
63 | void qabot_savedb() { | |
64 | FILE* f; | |
65 | qab_user* u; | |
66 | qab_bot* b; | |
67 | ||
f3395fa6 | 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 | ||
f3395fa6 | 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 | ||
87 | void qabot_savetimer(void* arg) { | |
88 | qabot_savedb(); | |
89 | } | |
90 | ||
91 | void 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 | ||
110 | void 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 | ||
119 | void 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 | ||
130 | qab_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 | } |