]> jfr.im git - irc/quakenet/newserv.git/blame - qabot/qabot.h
A4STATS: remove E style escapes and switch to createtable for indices
[irc/quakenet/newserv.git] / qabot / qabot.h
CommitLineData
f011b15a
CP
1/* qabot.h */
2#ifndef _QABOT_H
3#define _QABOT_H
4
5#include <string.h>
6
7#if !defined(strdup)
8char *strdup(const char *);
9#endif
10
11#define QABOT_NICK "QABot"
12#define QABOT_USER "qabot"
13#define QABOT_HOST "quakenet.org"
14#define QABOT_NAME "Question & Answer Bot v1.0"
15#define QABOT_ACCT "QABot"
16#define QABOT_UMDE UMODE_SERVICE|UMODE_OPER|UMODE_INV|UMODE_ACCOUNT
17#define QABOT_CHILD_UMODE UMODE_INV
18#define TUTOR_NAME "#tutorial bot"
19#define TUTOR_ACCOUNT "Tutor"
20
21#define QABOT_HOMECHAN "#qnet.pr"
22
23#define QAUFLAG_STAFF 0x01
24#define QAUFLAG_ADMIN 0x02
25#define QAUFLAG_DEVELOPER 0x04
26
27#define QAIsStaff(x) ((x)->flags & (QAUFLAG_STAFF|QAUFLAG_ADMIN|QAUFLAG_DEVELOPER))
28#define QAIsAdmin(x) ((x)->flags & (QAUFLAG_ADMIN|QAUFLAG_DEVELOPER))
29#define QAIsDeveloper(x) ((x)->flags & QAUFLAG_DEVELOPER)
30
31#define QUESTIONINTERVAL 30
32#define SPAMINTERVAL 10
33#define ASKWAIT 30
34#define QUEUEDQUESTIONINTERVAL 2
35#define QUESTIONHASHSIZE 1000
36
37#define QABOT_SAVEWAIT 3600
38
39#define QABOT_MICTIMEOUT 180
40
41#define QAB_CONTROLCHAR 0x01
42#define QAB_COLOUR 0x02
43#define QAB_AUTHEDONLY 0x04
44#define QAB_LINEBREAK 0x08
45#define QAB_FLOODDETECT 0x10
46#define QAB_FLOODSTOP 0x20
47#define QAB_BLOCKMARK 0x40
48/*#define QAB_
49#define QAB_*/
50
51#define QABBLOCK_ACCOUNT 0
52#define QABBLOCK_HOST 1
53#define QABBLOCK_TEXT 2
54
55#define QAQ_NEW 0x00
56#define QAQ_ANSWERED 0x01
57#define QAQ_OFFTOPIC 0x02
58#define QAQ_SPAM 0x03
59#define QAQ_QSTATE 0x07
60
61#define QAC_QUESTIONCHAN 0x01
62#define QAC_STAFFCHAN 0x02
63
64#define DEFAULTBOTFLAGS QAB_CONTROLCHAR|QAB_COLOUR|QAB_LINEBREAK|QAB_FLOODSTOP
65
66typedef struct qab_user {
67 char authname[ACCOUNTLEN + 1];
68 flag_t flags;
69 time_t created;
70
71 struct qab_user* next;
72 struct qab_user* prev;
73} qab_user;
74
75typedef struct qab_spam {
76 char* message;
77
78 struct qab_spam* next;
79} qab_spam;
80
81typedef struct qab_question {
82 int id;
83 char* question;
84 flag_t flags;
85 char nick[NICKLEN + 1];
86 unsigned long numeric;
87 unsigned long crc;
88 char* answer;
89
90 struct qab_question* next;
91} qab_question;
92
93typedef struct qab_answer {
94 qab_question* question;
95 char nick[NICKLEN + 1];
96
97 struct qab_answer* next;
98} qab_answer;
99
100typedef struct qab_block {
101 char type;
102 char creator[ACCOUNTLEN + 1];
103 time_t created;
104 char* blockstr;
105
106 struct qab_block* next;
107 struct qab_block* prev;
108} qab_block;
109
110typedef struct qab_bot {
111 char nick[NICKLEN + 1];
112 char user[USERLEN + 1];
113 char* host;
114
115 nick* np;
116
117 chanindex* public_chan;
118 chanindex* question_chan;
119 chanindex* staff_chan;
120
121 flag_t flags;
122
123 /*int question_interval;*/
124 int spam_interval;
125 int ask_wait;
126 int queued_question_interval;
127
128 time_t lastmic;
129 int mic_timeout;
130
131 qab_block* blocks;
132 int block_count;
133
134 qab_question* questions[QUESTIONHASHSIZE];
135 int lastquestionID;
136 int answered;
137
138 int spammed;
139
140 qab_spam* nextspam;
141 qab_spam* lastspam;
142 time_t spamtime;
143
144 qab_answer* answers;
145
146 unsigned long micnumeric;
79590bee
P
147 unsigned long recnumeric;
148 FILE *recfile;
149 FILE *playfile;
f011b15a
CP
150
151 struct qab_bot* next;
152 struct qab_bot* prev;
153} qab_bot;
154
155extern time_t qab_startime;
156extern int qabot_nickext;
157extern int qabot_spam_nickext;
158extern int qabot_chanext;
159extern nick* qabot_nick;
160extern CommandTree* qabot_commands;
161extern qab_user* qabot_users;
162extern qab_bot* qab_bots;
163extern unsigned long qab_lastq_crc;
164extern int qab_lastq_count;
165
166/* qabot.c */
167void qabot_lostnick(int hooknum, void* arg);
168void qabot_channel_part(int hooknum, void* arg);
169void qabot_createfakeuser(void* arg);
170void qabot_handler(nick* me, int type, void** args);
171void qabot_child_handler(nick* me, int type, void** args);
172char* qabot_getvictim(nick* np, char* target);
173const char* qabot_uflagtostr(flag_t flags);
174const char* qabot_formattime(time_t tme);
175
176/* qabot_bot.c */
177qab_bot* qabot_getbot();
178int qabot_addbot(char* nickname, char* user, char* host, char* pub_chan, char* qu_chan, char* stff_chan, flag_t flags, int spam_interval, int ask_wait, int queued_question_interval, nick* sender);
179void qabot_delbot(qab_bot* bot);
79590bee 180void qabot_playback(qab_bot *bot);
f011b15a
CP
181channel* qabot_getchannel(char* channel_name);
182void qabot_spam(void* arg);
183void qabot_spamstored(void* arg);
184void qabot_createbotfakeuser(void* arg);
185qab_bot* qabot_getcurrentbot();
186channel* qabot_getcurrentchannel();
187void qabot_timer(void* arg);
188
189/* qabot_chancommands.c */
190int qabot_dochananswer(void* np, int cargc, char** cargv);
191int qabot_dochanblock(void* np, int cargc, char** cargv);
192int qabot_dochanclear(void* np, int cargc, char** cargv);
193int qabot_dochanclosechan(void* np, int cargc, char** cargv);
194int qabot_dochanconfig(void* np, int cargc, char** cargv);
195int qabot_dochanhelp(void* np, int cargc, char** cargv);
196int qabot_dochanlistblocks(void* np, int cargc, char** cargv);
197int qabot_dochanmic(void* np, int cargc, char** cargv);
79590bee
P
198int qabot_dochanrecord(void *np, int cargc, char** cargv);
199int qabot_dochanplay(void *np, int cargc, char** cargv);
200int qabot_dochancontinue(void *np, int cargc, char** cargv);
201int qabot_dochanstop(void *np, int cargc, char** cargv);
202int qabot_dochanlist(void *np, int cargc, char** cargv);
203int qabot_dochandelete(void *np, int cargc, char** cargv);
f011b15a
CP
204int qabot_dochanmoo(void* np, int cargc, char** cargv);
205int qabot_dochanofftopic(void* np, int cargc, char** cargv);
206int qabot_dochanopenchan(void* np, int cargc, char** cargv);
207int qabot_dochanping(void* np, int cargc, char** cargv);
208int qabot_dochanreset(void* np, int cargc, char** cargv);
209int qabot_dochanspam(void* np, int cargc, char** cargv);
210int qabot_dochanstatus(void* np, int cargc, char** cargv);
211int qabot_dochanunblock(void* np, int cargc, char** cargv);
212
213/* qabot_commands.c */
214int qabot_doshowcommands(void* sender, int cargc, char** cargv);
215int qabot_dohelp(void* sender, int cargc, char** cargv);
216int qabot_dohello(void* sender, int cargc, char** cargv);
217int qabot_dosave(void* sender, int cargc, char** cargv);
218int qabot_dolistbots(void* sender, int cargc, char** cargv);
219int qabot_dolistusers(void* sender, int cargc, char** cargv);
220int qabot_doshowbot(void* sender, int cargc, char** cargv);
221int qabot_doaddbot(void* sender, int cargc, char** cargv);
222int qabot_dodelbot(void* sender, int cargc, char** cargv);
223int qabot_doadduser(void* sender, int cargc, char** cargv);
224int qabot_dodeluser(void* sender, int cargc, char** cargv);
225int qabot_dochangelev(void* sender, int cargc, char** cargv);
226int qabot_dowhois(void* sender, int cargc, char** cargv);
227int qabot_dostatus(void* sender, int cargc, char** cargv);
228
229/* qabot_dbase.c */
230void qabot_loaddb();
231void qabot_savedb();
232void qabot_savetimer(void* arg);
233void qabot_adduser(const char* authname, flag_t flags, time_t created);
234void qabot_deluser(const char* authname);
235void qabot_squelchuser(qab_user* user);
236qab_user* qabot_getuser(const char* authname);
237
238/* qabot_help.c */
239int qabot_showhelp(nick* np, char* arg);
240
241#endif