1 /*
2 * Copyright (C) 2000,2001 Florian Sander
3 *
4 * $Id: sensors.c (1.1.0) for AversE-XP v1.0+ 2003/12/06 [Xp-AvR] Exp $
5 */
6
get_spent(char * nick,char * chan)7 static int get_spent(char *nick, char *chan)
8 {
9 struct chanset_t *ch = NULL;
10 memberlist *m = NULL;
11
12 int spent;
13 ch = findchan(chan);
14 if (ch)
15 m = ismember(ch, nick);
16 if (m && m->joined)
17 spent = now - m->joined;
18 else
19 spent = -1;
20 return spent;
21 }
22
secretchan(char * chan)23 static int secretchan(char *chan)
24 {
25 struct chanset_t *ch;
26
27 ch = findchan_by_dname(chan);
28 if (!ch)
29 return 0;
30 if (ch->status & CHAN_SECRET)
31 return 1;
32 return 0;
33 }
34
nolog(char * chan)35 static int nolog(char *chan)
36 {
37 char buf[121], *b;
38
39 Context;
40 strncpy(buf, no_log, 120);
41 buf[120] = 0;
42 b = buf;
43 while (b[0])
44 if (!strcasecmp(chan, newsplit(&b)))
45 return 1;
46 if (ngetudef("noseendata", chan))
47 return 1;
48 return 0;
49 }
50
gseen_join(char * nick,char * uhost,char * hand,char * chan)51 static int gseen_join(char *nick, char *uhost, char *hand, char *chan)
52 {
53 char buf[10] = "[secret]";
54
55 Context;
56 if (nolog(chan))
57 return 0;
58 if (use_handles && (hand[0] != '*'))
59 nick = hand;
60 if (secretchan(chan))
61 chan = buf;
62 add_seen(SEEN_JOIN, nick, uhost, chan, "", now, get_spent(nick, chan));
63 report_seenreq(chan, nick);
64 if ((hand[0] == '*') && strcasecmp(nick, hand))
65 report_seenreq(chan, hand);
66 return 0;
67 }
68
gseen_kick(char * nick,char * uhost,char * hand,char * chan,char * victim,char * reason)69 static int gseen_kick(char *nick, char *uhost, char *hand, char *chan,
70 char *victim, char *reason)
71 {
72 struct chanset_t *ch = NULL;
73 memberlist *m = NULL;
74 char msg[1024], *s;
75 char buf[10] = "[secret]";
76
77 Context;
78 if (nolog(chan))
79 return 0;
80 if (use_handles && (hand[0] != '*'))
81 nick = hand;
82 if (secretchan(chan))
83 chan = buf;
84 s = msg;
85 s[0] = 0;
86 ch = findchan(chan);
87 if (!ch) {
88 debug2("Unable to seen %s getting kicked from %s", victim, chan);
89 return 0;
90 }
91 m = ismember(ch, victim);
92 if (!m) {
93 debug2("Unable to seen %s getting kicked from %s", victim, chan);
94 return 0;
95 }
96 if ((strlen(nick) + strlen(reason) + 2) < 1024)
97 sprintf(s, "%s %s", nick, reason);
98 add_seen(SEEN_KICK, victim, m->userhost, chan, s, now,
99 get_spent(victim, chan));
100 return 0;
101 }
102
gseen_nick(char * nick,char * uhost,char * hand,char * chan,char * newnick)103 static int gseen_nick(char *nick, char *uhost, char *hand, char *chan,
104 char *newnick)
105 {
106 char buf[10] = "[secret]";
107
108 Context;
109 if (nolog(chan))
110 return 0;
111 if (use_handles && (hand[0] != '*'))
112 nick = hand;
113 if (secretchan(chan))
114 chan = buf;
115 add_seen(SEEN_NICK, nick, uhost, chan, newnick, now, get_spent(nick, chan));
116 if (!(use_handles && (hand[0] != '*')))
117 add_seen(SEEN_NCKF, newnick, uhost, chan, nick, now, get_spent(nick, chan));
118 report_seenreq(chan, newnick);
119 if ((hand[0] != '*') && strcasecmp(newnick, hand))
120 report_seenreq(chan, hand);
121 return 0;
122 }
123
gseen_part(char * nick,char * uhost,char * hand,char * chan,char * reason)124 static int gseen_part(char *nick, char *uhost, char *hand, char *chan,
125 char *reason)
126 {
127 char buf[10] = "[secret]";
128
129 Context;
130 if (nolog(chan))
131 return 0;
132 if (use_handles && (hand[0] != '*'))
133 nick = hand;
134 if (secretchan(chan))
135 chan = buf;
136 add_seen(SEEN_PART, nick, uhost, chan, reason, now, get_spent(nick, chan));
137 return 0;
138 }
139
gseen_sign(char * nick,char * uhost,char * hand,char * chan,char * reason)140 static int gseen_sign(char *nick, char *uhost, char *hand, char *chan,
141 char *reason)
142 {
143 char buf[10] = "[secret]";
144
145 Context;
146 if (nolog(chan))
147 return 0;
148 if (use_handles && (hand[0] != '*'))
149 nick = hand;
150 if (secretchan(chan))
151 chan = buf;
152 add_seen(SEEN_SIGN, nick, uhost, chan, reason, now, get_spent(nick, chan));
153 return 0;
154 }
155
gseen_splt(char * nick,char * uhost,char * hand,char * chan)156 static int gseen_splt(char *nick, char *uhost, char *hand, char *chan)
157 {
158 char buf[10] = "[secret]";
159
160 Context;
161 if (nolog(chan))
162 return 0;
163 if (use_handles && (hand[0] != '*'))
164 nick = hand;
165 if (secretchan(chan))
166 chan = buf;
167 add_seen(SEEN_SPLT, nick, uhost, chan, "", now, get_spent(nick, chan));
168 return 0;
169 }
170
gseen_rejn(char * nick,char * uhost,char * hand,char * chan)171 static int gseen_rejn(char *nick, char *uhost, char *hand, char *chan)
172 {
173 char buf[10] = "[secret]";
174
175 Context;
176 if (nolog(chan))
177 return 0;
178 if (use_handles && (hand[0] != '*'))
179 nick = hand;
180 if (secretchan(chan))
181 chan = buf;
182 add_seen(SEEN_REJN, nick, uhost, chan, "", now, get_spent(nick, chan));
183 return 0;
184 }
185
186 static int gseen_chjn STDVAR
187 {
188 Context;
189 BADARGS(7, 7, " bot hand chan flag idx host");
190 add_seen(SEEN_CHJN, argv[2], argv[6], argv[3], argv[1], now, -1);
191 return 0;
192 }
193
194 static int gseen_chpt STDVAR
195 {
196 Context;
197 BADARGS(5, 5, " bot hand idx chan");
198 add_seen(SEEN_CHPT, argv[2], "unknown", argv[4], argv[1], now, -1);
199 return 0;
200 }
201
202 static cmd_t seen_kick[] =
203 {
204 {"*", "", (Function) gseen_kick, "gseen"},
205 {0, 0, 0, 0}
206 };
207
208 static cmd_t seen_nick[] =
209 {
210 {"*", "", (Function) gseen_nick, "gseen"},
211 {0, 0, 0, 0}
212 };
213
214 static cmd_t seen_join[] =
215 {
216 {"*", "", (Function) gseen_join, "gseen"},
217 {0, 0, 0, 0}
218 };
219
220 static cmd_t seen_part[] =
221 {
222 {"*", "", (Function) gseen_part, "gseen"},
223 {0, 0, 0, 0}
224 };
225
226 static cmd_t seen_sign[] =
227 {
228 {"*", "", (Function) gseen_sign, "gseen"},
229 {0, 0, 0, 0}
230 };
231
232 static cmd_t seen_splt[] =
233 {
234 {"*", "", (Function) gseen_splt, "gseen"},
235 {0, 0, 0, 0}
236 };
237
238 static cmd_t seen_rejn[] =
239 {
240 {"*", "", (Function) gseen_rejn, "gseen"},
241 {0, 0, 0, 0}
242 };
243