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