]>
Commit | Line | Data |
---|---|---|
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 | ||
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 | } |