Captchaプラグインでスパムコメントのブロック

スパムコメントがひどくなったら対策を考えようと思っていましたが、最近結構な量のスパムコメントが海外から来るようになってしまったので頭に来てよくある画像にある文字を入力してください対応を行うことにしました。

Movable Typeのプラグインはこちらにありました。

http://code.as-is.net/public/wiki/Captcha_Plugin.ja_JP
必要なPerlモジュールがあったりしますが、XREAを信じて何も考えずにファイルをアップロードしました。しかし以下のようなエラーが発生しました。

Smarty error: [in mt:17 line 222]: syntax error: unrecognized tag 'MTCaptchaJsURL' (Smarty_Compiler.class.php, line 580)

SmartyのエラーなのでPerlのモジュールが無いわけではありません。phpによるダイナミックパブリッシングを行っていたので、Captcha Plug-inの独自タグを解釈できていないということです。だからといってPerlのダイナミックパブリッシングをする気も起きないのでSmartyのプラグインを入れました。

<?php
function smarty_function_MTCaptchaJsURL($args, &$ctx) {
/*
captcha.pl
sub captcha_js_url {
my ($ctx, $args) = @_;
my $blog_id = $ctx->stash('blog')->id;
my $path = MT::ConfigMgr->instance->CGIPath;
$path .= '/' unless $path =~ m!/$!;
$path . 'plugins/captcha/captcha_js.cgi?blog_id=' . $blog_id;
}
*/
$blog = $ctx->stash('blog');
$path = $ctx->mt->config['CGIPath'];
if (!preg_match('!/$!', $path))
$path .= '/';
$path .= 'plugins/captcha/captcha_js.cgi?blog_id=' . $blog->id;
return $path;
}
?>

このファイルをmt\php\plugins\function.MTCaptchaJsURL.phpとして保存すればphpでダイナミックパブリッシングしていても大丈夫です。

version 0.13時点で対応したファイルを以下にも置いておきます
mt-Captcha-Plugin patch
これでスパムコメントがこなくなったので効果覿面のようです。