vBulletin机器人只在某些时候调用

时间:2012-05-28 22:29:20

标签: php regex plugins bots vbulletin

我一直在对我的vBulletin论坛进行大量修改,我对论坛中不同形式的AI和botting特别感兴趣。我最近创建了一个插件,如果它被调用,它将在一个线程中发布机器人帖子。它在某些时候有效,而在其他时候则无效。我无法弄清楚为什么它如此不可靠。

它在钩子位置“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
    }
}

任何关于导致它如此不可靠的想法?如果能让它顺利运行,那就有很大的潜力。

1 个答案:

答案 0 :(得分:0)

我能够通过http://regex.larsolavtorvik.com/

来解决这个问题

我切换到postdata_presave挂钩而不是newpost_complete。

$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()函数的开头来修复此问题。