/sys/macro.plm

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"><!-- $_ if 0; # -*- perl -*-
# $Id: show.plm,v 2.5 1998/12/20 02:25:19 magicalh Exp $
# copyright (c)2005

package sys_macro;

$_ = 'sys_macro';

sub macro_mode {
	local($clientno, $prefix, @params) = @_;
	splice(@params, 1, 0, '$#') unless(&is_joined_channel($params[1]) );
	return ($prefix, @params);
}

sub macro_privmsg {
	local($clientno, $prefix, @params) = @_;
	splice(@params, 1, 0, '$#') unless(&is_joined_channel($params[1]) );
	return ($prefix, @params);
}

sub is_joined_channel {
	local($clientno, $prefix, $chan) = @_;
	return (&'channel($chan) && &'exist($'channellist[$clientno], $chan) && $chan eq '$#' )
}

sub cs_privmsg {
	local($clientno, $prefix, $cmd, $channel, @params) = @_;

	$macro = join(' ', @params);
	if( $macro =~ /^\-/ )
	{
		# マクロとして扱う
		@buffer = split( /\s+/, $' );
		
		$sub = "macro\_\L$buffer[0]\E";
		return () unless( defined(&$sub) );
		($prefix, @buffer) = &$sub($clientno, $prefix, @buffer);
		do {
			&'c_print($clientno, '', 'NOTICE', $'nick[$clientno], "*** Cancel Command");
			return () } unless @buffer;

		# マクロ展開
		foreach(@buffer)
		{
			$_ = $channel if( $_ eq '$#' || $_ eq '$chan' );
			$_ = $'nick[$clientno] if( $_ eq '$me' );
			$_ =~ s/\\c([A-Z])/pack('C*',(unpack('C*',$1)-64))/ieg;
		}

		&'c_print($clientno, '', 'NOTICE', $'nick[$clientno], "*** /@buffer");
		return ($prefix, @buffer);
	}
	return ($prefix, $cmd, $channel, @params);
}

__END__
--><HTML><HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-2022-JP">
<TITLE>sys/show.plm</TITLE></HEAD><BODY>

オンラインドキュメント


<HR><H3>名前</H3>

sys/macro.plm - マクロ展開用プラグイン


<HR><H3>説明</H3>
$# とか使う人用<Br>
チャンネルへのPRIVMSGで先頭に 「-」 を付けた発言をコマンドとして扱う

<HR><H3>プロパティ</H3>


<HR><H3>設定例</H3>

<PRE>
+ sys/macro.plm
</PRE>

</BODY></HTML>