]> jfr.im git - irc/quakenet/newserv.git/blob - fishjoin/fishjoin.c
Get rid of ALL WARNINGS!
[irc/quakenet/newserv.git] / fishjoin / fishjoin.c
1 #include <stdlib.h>
2 #include <stdio.h>
3 #include <stdarg.h>
4 #include <string.h>
5 #include <strings.h>
6 #include "../core/hooks.h"
7 #include "../irc/irc.h"
8 #include "../localuser/localuser.h"
9 #include "../localuser/localuserchannel.h"
10 #include "../nick/nick.h"
11
12 nick *fishbot_nickname, *spamscan_nickname, *fishjoin_nickname;
13
14 void fishjoin_handlemessages(nick *target, int messagetype, void **args)
15 {
16 switch ( messagetype )
17 {
18 case LU_KILLED:
19 fishjoin_nickname = NULL;
20 default:
21 break;
22 }
23 }
24
25 int fishjoin_isreportable(channel *nc)
26 {
27 unsigned long *userhand;
28
29 if ( !nc || !spamscan_nickname )
30 return 0;
31
32 userhand = getnumerichandlefromchanhash(nc->users, spamscan_nickname->numeric);
33
34 if ( userhand == NULL )
35 return 0;
36 else
37 return 1;
38 }
39
40 void fishjoin_handlejoin(int hooknum, void* arg)
41 {
42 void** args = (void**)arg;
43 channel *spamchannel;
44
45 if ( fishjoin_nickname && fishbot_nickname && spamscan_nickname && fishbot_nickname == (nick *)args[1] && fishjoin_isreportable((channel *)args[0]) )
46 {
47 spamchannel = findchannel("#qnet.fishbot");
48
49 if ( spamchannel )
50 sendmessagetochannel(fishjoin_nickname, spamchannel, "fishbot joined %s", ((channel *)args[0])->index->name->content);
51 }
52 }
53
54 void fishjoin_handlekick(int hooknum, void* arg)
55 {
56 void** args = (void**)arg;
57 channel *spamchannel;
58
59 if ( fishjoin_nickname && fishbot_nickname && spamscan_nickname && fishbot_nickname == (nick *)args[1] && fishjoin_isreportable((channel *)args[0]) )
60 {
61 spamchannel = findchannel("#qnet.fishbot");
62
63 if ( spamchannel )
64 sendmessagetochannel(fishjoin_nickname, spamchannel, "fishbot kicked from %s by %s, Reason: %s", ((channel *)args[0])->index->name->content, args[2] ? ((nick *)args[2])->nick : "???", args[3] ? (char *)args[3] : "???");
65 }
66 }
67
68 void fishjoin_handlenewnick(int hooknum, void* arg)
69 {
70 channel *spamchannel;
71
72 if ( !fishbot_nickname && !strcasecmp(((nick *)arg)->nick, "fishbot") )
73 {
74 if ( fishjoin_nickname )
75 {
76 spamchannel = findchannel("#qnet.fishbot");
77
78 if ( spamchannel )
79 sendmessagetochannel(fishjoin_nickname, spamchannel, "fishbot has returned");
80 }
81
82 fishbot_nickname = (nick *)arg;
83 }
84
85 if ( !spamscan_nickname && !strcasecmp(((nick *)arg)->nick, "S") )
86 {
87 if ( fishjoin_nickname )
88 {
89 spamchannel = findchannel("#qnet.fishbot");
90
91 if ( spamchannel )
92 sendmessagetochannel(fishjoin_nickname, spamchannel, "S has returned");
93 }
94
95 spamscan_nickname = (nick *)arg;
96 }
97 }
98
99 void fishjoin_handlelostnick(int hooknum, void* arg)
100 {
101 channel *spamchannel;
102
103 if ( fishbot_nickname && fishbot_nickname == (nick *)arg )
104 {
105 if ( fishjoin_nickname )
106 {
107 spamchannel = findchannel("#qnet.fishbot");
108
109 if ( spamchannel )
110 sendmessagetochannel(fishjoin_nickname, spamchannel, "fishbot has quit");
111 }
112
113 fishbot_nickname = NULL;
114 }
115
116 if ( spamscan_nickname && spamscan_nickname == (nick *)arg )
117 {
118 if ( fishjoin_nickname )
119 {
120 spamchannel = findchannel("#qnet.fishbot");
121
122 if ( spamchannel )
123 sendmessagetochannel(fishjoin_nickname, spamchannel, "S has quit");
124 }
125
126 spamscan_nickname = NULL;
127 }
128 }
129
130 void _init()
131 {
132 fishjoin_nickname = registerlocaluser("F", "TheFBot","fishbotsfriend.quakenet.org", "fishbot's friend", NULL, UMODE_SERVICE, &fishjoin_handlemessages);
133 registerhook(HOOK_CHANNEL_JOIN, &fishjoin_handlejoin);
134 registerhook(HOOK_CHANNEL_KICK, &fishjoin_handlekick);
135 registerhook(HOOK_NICK_NEWNICK, &fishjoin_handlenewnick);
136 registerhook(HOOK_NICK_LOSTNICK, &fishjoin_handlelostnick);
137 fishbot_nickname = getnickbynick("fishbot");
138 spamscan_nickname = getnickbynick("S");
139 }
140
141 void _fini()
142 {
143 if ( fishjoin_nickname )
144 {
145 deregisterlocaluser(fishjoin_nickname, NULL);
146 fishjoin_nickname = NULL;
147 }
148
149 deregisterhook(HOOK_CHANNEL_JOIN, &fishjoin_handlejoin);
150 deregisterhook(HOOK_CHANNEL_KICK, &fishjoin_handlekick);
151 deregisterhook(HOOK_NICK_NEWNICK, &fishjoin_handlenewnick);
152 deregisterhook(HOOK_NICK_LOSTNICK, &fishjoin_handlelostnick);
153 }