11/08/09 10:11:53.98 発信元:124.147.108.71 0
HAPを更新せずに忍法帖の連投規制をかいくぐるやつ対策
書き込んだ忍者IDを片っ端から有効期限付きでredis DBに放り込む
期限内は書き込み不可
redisは0番~15番まで複数のDBを持てる(デフォルト設定。増減可)
指定しなければ0番を使う
ここでは1番を指定した
my $NINJA_Samba_DB = 1; # 1番のDBに名前を付けてみた
my $r = Redis->new(server => '127.0.0.1:6379', encoding => undef);
$r->auth("foobared");
$r->ping || die "no server?";
$r->select($NINJA_Samba_DB); # 1番のDBを使う
my $ninjaid = "Ddummy1310123456789012"; # 忍者ID(例)
my $lvl = "15"; # レベル(例)
die "Lv=0 は書けない" if $lvl == 0;
# レベルに応じた連投規制値
my $ninja_samba = ( $lvl < 2 ? 120 :
$lvl < 4 ? 60 :
$lvl < 6 ? 45 :
$lvl < 8 ? 30 :
$lvl < 20 ? 15 :
$lvl < 30 ? 5 :
2 );
# DBに忍者IDが記録されている間は書けない
if ($r->exists($ninjaid)) {
my $ninja_samba_ttl = $r->ttl($ninjaid);
print "$ninjaid はあと $ninja_samba_ttl秒書けない\n";
}
else{
print "書き込みOK\n";
$r->setex($ninjaid => $ninja_samba => time());
}
$r->quit;