0

私は自分の vBulletin フォーラムに多くの変更を加えてきました。また、さまざまな形式の AI とフォーラムでのボットに特に関心を持っています。最近、ボットが呼び出された場合にスレッドに投稿するプラグインを作成しました。ある時は動作し、他の時は動作しません。なぜ信頼性が低いのか理解できません。

フックの場所「newpost_complete」で起動し、次のコードがあります。

if (stristr($postinfo['pagetext'],'.robot:')){
    preg_match('@^(?:.robot:)?([^:]+)@i',$postinfo['pagetext'], $matches);
    $host = $matches[1];
    require_once(DIR . '/includes/functions_robot.php');
    run($host,$threadinfo['threadid']);
}

私は正規表現が苦手なので、 preg_match が最適かどうかわかりません。.robot:hi: を投稿するとほとんどコードが実行されないことがわかりましたが、.robot:hi: を含む投稿を引用すると、実際の引用内容が別のものに変更されても、必ず実行されます。

functions_robot.php ファイル内の関連コードは次のとおりです。

function run($command,$threadid) {
    global $vbulletin;
    global $db;
    if ($command == 'hi') {
        $output = 'Hello.';
        //Queries
    }
}

信頼性が低い原因について何か考えはありますか? スムーズに運用できれば、可能性は大いにあります。

4

1 に答える 1

0

http://regex.larsolavtorvik.com/を使用してそれを理解することができました

newpost_complete の代わりに postdata_presave フックに切り替えました。

$pagetext =& $this->fetch_field('pagetext', 'post');
$threadid =& $this->fetch_field('threadid', 'post');
if (stristr($pagetext,'.robot:')){
    preg_match('/(\.robot:)(.*)(:)/iU',$pagetext, $matches);
    $host = $matches[2];
    require_once(DIR . '/includes/functions_robot.php');
    run($host,$threadid);
} 

新しいフックの位置は、通常、実際のポストのインサートよりも速く発射され、ロボットが私の前にポストすることを意味しました. usleep(500000);run() 関数の先頭に追加することでこれを修正しました。

于 2012-06-01T06:05:24.037 に答える