Mercurial > hg > udpmsg3
comparison unrealircdlink/unrealircdlink.php @ 1:7f01316130e8
Basic support for private messages in unrealircd proxy
author | Ivo Smits <Ivo@UCIS.nl> |
---|---|
date | Fri, 01 Apr 2011 17:02:41 +0200 |
parents | dd81c38b513a |
children |
comparison
equal
deleted
inserted
replaced
0:dd81c38b513a | 1:7f01316130e8 |
---|---|
201 $line .= "\r\n"; | 201 $line .= "\r\n"; |
202 socket_send($ircd_socket, $line, strlen($line), 0); | 202 socket_send($ircd_socket, $line, strlen($line), 0); |
203 } | 203 } |
204 | 204 |
205 function udpmsg_process($ret) { | 205 function udpmsg_process($ret) { |
206 global $uchannels; | 206 global $uchannels, $config; |
207 if (!isset($ret['CHN']) || !isset($ret['CMD']) || !isset($ret['USR'])) return; | 207 if (!isset($ret['CHN']) || !isset($ret['CMD']) || !isset($ret['USR']) || !array_key_exists($ret['CHN'], $uchannels)) { |
208 if (!array_key_exists($ret['CHN'], $uchannels)) return; | 208 $ch = NULL; |
209 $ch = $uchannels[$ret['CHN']]; | 209 } else { |
210 $ch = $uchannels[$ret['CHN']]; | |
211 } | |
210 $net = isset($ret['NET']) ? $ret['NET'] : NULL; | 212 $net = isset($ret['NET']) ? $ret['NET'] : NULL; |
211 switch ($ret['CMD']) { | 213 switch ($ret['CMD']) { |
212 case 'MSG': | 214 case 'MSG': |
213 if (!isset($ret['MSG'])) break; | 215 if ($ch === NULL || !isset($ret['MSG'])) break; |
214 $usr = udpmsg_join($ret['USR'], $ch, $net); | 216 $usr = udpmsg_join($ret['USR'], $ch, $net); |
215 ircd_send(':'.$usr->iname.' PRIVMSG '.$ch->iname.' :'.preg_replace('/[\x00\x10-\x13]/', '', $ret['MSG'])); | 217 ircd_send(':'.$usr->iname.' PRIVMSG '.$ch->iname.' :'.preg_replace('/[\x00\x10-\x13]/', '', $ret['MSG'])); |
216 break; | 218 break; |
219 case 'PMSG': | |
220 if (!isset($ret['DUSR']) || !isset($ret['MSG'])) break; | |
221 if (isset($ret['DNET']) && $ret['DNET'] != $config['udpmsg']['netname']) break; | |
222 $tousr = ircd_getuser($ret['DUSR'], FALSE); | |
223 if ($tousr === NULL) break; | |
224 $usr = udpmsg_getuser($ret['USR'], TRUE, $net, FALSE); | |
225 ircd_send(':'.$usr->iname.' PRIVMSG '.$tousr->iname.' :'.preg_replace('/[\x00\x10-\x13]/', '', $ret['MSG'])); | |
226 break; | |
217 case 'ALIVE': | 227 case 'ALIVE': |
218 case 'JOIN': | 228 case 'JOIN': |
229 if ($ch === NULL) break; | |
219 udpmsg_join($ret['USR'], $ch, $net, TRUE); | 230 udpmsg_join($ret['USR'], $ch, $net, TRUE); |
220 break; | 231 break; |
221 case 'PART': | 232 case 'PART': |
233 if ($ch === NULL) break; | |
222 udpmsg_part($ret['USR'], $ch); | 234 udpmsg_part($ret['USR'], $ch); |
223 break; | 235 break; |
224 case 'NICK': | 236 case 'NICK': |
225 udpmsg_part($ret['USR'], $ch); | 237 udpmsg_part($ret['USR'], $ch); |
226 if (!isset($ret['NEWNICK'])) break; | 238 if (!isset($ret['NEWNICK'])) break; |
275 | 287 |
276 function udpmsg_getnick($usr, $req) { | 288 function udpmsg_getnick($usr, $req) { |
277 global $iusers, $config; | 289 global $iusers, $config; |
278 $nick = preg_replace('/[^a-zA-Z0-9\-_]/', '', $req); | 290 $nick = preg_replace('/[^a-zA-Z0-9\-_]/', '', $req); |
279 if (!strlen($nick)) $nick = 'NoNick'; | 291 if (!strlen($nick)) $nick = 'NoNick'; |
292 else if (strlen($nick) > 20) $nick = substr($nick, 0, 20); | |
280 switch ($config['ircd']['nick_format']) { | 293 switch ($config['ircd']['nick_format']) { |
281 case 'plain': break; | 294 case 'plain': break; |
282 case 'prefix': $nick = $config['ircd']['nick_prefix'].$nick; break; | 295 case 'prefix': $nick = $config['ircd']['nick_prefix'].$nick; break; |
283 case 'suffix': $nick = $nick.$config['ircd']['nick_suffix']; break; | 296 case 'suffix': $nick = $nick.$config['ircd']['nick_suffix']; break; |
284 } | 297 } |
329 case 'PRIVMSG': case 'NOTICE': | 342 case 'PRIVMSG': case 'NOTICE': |
330 if ($parts[1] == '--print-internals' && $parts[0][0] == '#') { | 343 if ($parts[1] == '--print-internals' && $parts[0][0] == '#') { |
331 ircd_send(':'.$bot_nick.' PRIVMSG '.$parts[0].' :We have '.count($GLOBALS['iusers']).' IRC users of which '.count($GLOBALS['uusers']).' UDPMSG users, and '.count($GLOBALS['ichannels']).' channels.'); | 344 ircd_send(':'.$bot_nick.' PRIVMSG '.$parts[0].' :We have '.count($GLOBALS['iusers']).' IRC users of which '.count($GLOBALS['uusers']).' UDPMSG users, and '.count($GLOBALS['ichannels']).' channels.'); |
332 break; | 345 break; |
333 } | 346 } |
334 $ch = ircd_getchannel($parts[0]); | |
335 $usr = ircd_getuser($sendernick, FALSE); | 347 $usr = ircd_getuser($sendernick, FALSE); |
336 if ($ch === NULL || $usr === NULL) break; | 348 if ($parts[0][0] == '#') { |
337 udpmsg_send(array('CMD' => 'MSG', 'CHN' => $ch->uname, 'MSG' => $parts[1], 'USR' => $usr->iname)); | 349 $ch = ircd_getchannel($parts[0]); |
350 if ($ch === NULL || $usr === NULL) break; | |
351 udpmsg_send(array('CMD' => 'MSG', 'CHN' => $ch->uname, 'MSG' => $parts[1], 'USR' => $usr->iname)); | |
352 } else { | |
353 $tousr = ircd_getuser($parts[0], FALSE); | |
354 if ($tousr === NULL || $usr === NULL) break; | |
355 udpmsg_send(array('CMD' => 'PMSG', 'DUSR' => $tousr->uname, 'MSG' => $parts[1], 'USR' => $usr->iname)); | |
356 } | |
338 break; | 357 break; |
339 case 'SAJOIN': | 358 case 'SAJOIN': |
340 case 'SVSJOIN': | 359 case 'SVSJOIN': |
341 $sendernick = array_shift($parts); | 360 $sendernick = array_shift($parts); |
342 case 'JOIN': | 361 case 'JOIN': |