]> jfr.im git - irc/quakenet/newserv.git/blame - fishjoin/fishjoin.c
merge
[irc/quakenet/newserv.git] / fishjoin / fishjoin.c
CommitLineData
2cf6f694
CP
1#include <stdlib.h>
2#include <stdio.h>
3#include <stdarg.h>
4#include <string.h>
4ad1cf7a 5#include <strings.h>
2cf6f694
CP
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
12nick *fishbot_nickname, *spamscan_nickname, *fishjoin_nickname;
13
14void 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
25int fishjoin_isreportable(channel *nc)
26{
27unsigned 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
40void fishjoin_handlejoin(int hooknum, void* arg)
41{
42void** args = (void**)arg;
43channel *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
54void fishjoin_handlekick(int hooknum, void* arg)
55{
56void** args = (void**)arg;
57channel *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
68void fishjoin_handlenewnick(int hooknum, void* arg)
69{
70channel *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
99void fishjoin_handlelostnick(int hooknum, void* arg)
100{
101channel *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
130void _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
141void _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}