teamspeak3 php framework - skrypt wywołany przez użytkownika

0

Mam pytanie. Obecnie tworzę bota do programu teamspeak3 za pomocą ts3 php framework. Udało mi się zrobić, że jeśli uruchomię skrypt na stronie www i napiszę coś na kanale na ts to bot odpisze użytkownikowi to co mu ustawię. Problem jest w tym, że aby to działało skrypt musi być uruchomiony w momencie gdy użytkownik napisze, a na hostingu jest limit do około 4 min ciągle działającego skryptu. Czy jest jakaś możliwość, aby to ominąć lub żeby skrypt działał tylko wtedy gdy użytkownik napisze? Myślałem nad cyklicznym uruchomianiem skryptu za pomocą crona, ale hosting umożliwia ustawienie cyklu minimalnie co 5 min, więc w pewnych sytuacjach bot mógłby nie zadziałać i przy tym jest też 2 problem, bo przy każdym uruchomieniu skryptu bot łączy się z serwerem ts i jeżeli zrobi to za dużo razy 1 dnia to IP hostingu wpada na czarną listę i muszę iść wtedy do administratora aby usunął bana. Poniżej wysyłam skrypt. Jest ktoś w stanie pomóc?

<?php
require_once("libraries/TeamSpeak3/TeamSpeak3.php");


include 'config.php';
	  
/* initialize */
TeamSpeak3::init();

try
{
  /* subscribe to various events */
  TeamSpeak3_Helper_Signal::getInstance()->subscribe("serverqueryConnected", "onConnect");
  TeamSpeak3_Helper_Signal::getInstance()->subscribe("serverqueryWaitTimeout", "onTimeout");
  TeamSpeak3_Helper_Signal::getInstance()->subscribe("notifyLogin", "onLogin");
  TeamSpeak3_Helper_Signal::getInstance()->subscribe("notifyEvent", "onEvent");
  TeamSpeak3_Helper_Signal::getInstance()->subscribe("notifyServerselected", "onSelect");

  /* connect to server, login and get TeamSpeak3_Node_Host object by URI */
 $ts3 = TeamSpeak3::factory("serverquery://".$config2['QueryName'].":".$config2['QueryPass']."@".$config2['teamspeakip'].":".$config2['QueryPort']."/?server_port=".$config2['PortServer']."&nickname=". urlencode($config2['NazwaBota']) ."&blocking=0");
		
  /* wait for events */
  while(1) $ts3->getAdapter()->wait();
}
catch(Exception $e)
{
  die("[ERROR]  " . $e->getMessage() . "\n");
}

// ================= [ BEGIN OF CALLBACK FUNCTION DEFINITIONS ] =================

/**
 * Callback method for 'serverqueryConnected' signals.
 *
 * @param  TeamSpeak3_Adapter_ServerQuery $adapter
 * @return void
 */
function onConnect(TeamSpeak3_Adapter_ServerQuery $adapter)
{
	$polaczono = $adapter->getHost();
  echo $polaczono;
   
	echo '<br>';
  echo "[INFO]\tserver is running with version " . $adapter->getHost()->version("version") . " on " . $adapter->getHost()->version("platform") . "\n"; 
  echo '<br>';
}

/**
 * Callback method for 'serverqueryWaitTimeout' signals.
 *
 * @param  integer $seconds
 * @return void
 */
function onTimeout($seconds, TeamSpeak3_Adapter_ServerQuery $adapter)
{
  echo "[SIG]\tno reply from the server for " . $seconds . " seconds\n";
	echo '<br>';
  if($adapter->getQueryLastTimestamp() < time()-300)
  {
    echo "[INFO]\tsending keep-alive command\n";
	
	echo '<br>';
    $adapter->request("clientupdate");
  }
}

/**
 * Callback method for 'notifyLogin' signals.
 *
 * @param  TeamSpeak3_Node_Host $host
 * @return void
 */
function onLogin(TeamSpeak3_Node_Host $host)
{
  echo "[SIG]\tauthenticated as user " . $host->whoamiGet("client_login_name") . "\n";
  echo '<br>';
}

/**
 * Callback method for 'notifyEvent' signals.
 *
 * @param  TeamSpeak3_Adapter_ServerQuery_Event $event
 * @param  TeamSpeak3_Node_Host $host
 * @return void
 */
function onEvent(TeamSpeak3_Adapter_ServerQuery_Event $event, TeamSpeak3_Node_Host $host)
{
	global $srv;
    $info = $event->getData();
    $srv = $host->serverGetSelected();
	
	$wiadomosc = $event->getMessage();
	$msq = $info['msg'];
	if ($msq == 'jak sie nazywasz?'){
 $srv->clientGetByName($info["invokername"]->toString())->message("Hmm niech pomyślę...
 Bot mover");

	}

          echo $wiadomosc;                             
  echo '<br>';
}

/**
 * Callback method for 'notifyServerselected' signals.
 *
 * @param  string $cmd
 * @return void
 */
function onSelect(TeamSpeak3_Node_Host $host)
{
  echo "[SIG]\tselected virtual server with ID " . $host->serverSelectedId() . "\n";
  echo '<br>';
  $host->serverGetSelected()->notifyRegister("server");
  $host->serverGetSelected()->notifyRegister("channel");
  $host->serverGetSelected()->notifyRegister("textserver");
  $host->serverGetSelected()->notifyRegister("textchannel");
  $host->serverGetSelected()->notifyRegister("textprivate");
}



?>
0

Rozwiązanie to postawienie wszystkiego na własnym vps i uruchomienie bota za pomocą supervisora.

0

Nie ma żadnej innej możliwości?

1 użytkowników online, w tym zalogowanych: 0, gości: 1