release 1.3.0

This commit is contained in:
Newcomer1989
2019-06-11 13:04:44 +02:00
parent 311a751f52
commit 46c5f0a6ce
76 changed files with 2580 additions and 4352 deletions

View File

@@ -35,9 +35,8 @@ function addon_assign_groups($addons_config,$ts3,$cfg,$dbname,$allclients,$selec
}
}
}
$sqlexec .= "DELETE FROM `$dbname`.`addon_assign_groups`; ";
}
return($sqlexec);
return $sqlexec;
}
?>

View File

@@ -12,14 +12,15 @@ function shutdown($mysqlcon = NULL,$cfg,$loglevel,$reason,$nodestroypid = TRUE)
}
}
enter_logfile($cfg,$loglevel,$reason." Shutting down!");
enter_logfile($cfg,4,"###################################################################");
if(isset($mysqlcon)) {
$mysqlcon->close();
$mysqlcon = null;
}
exit;
}
function enter_logfile($cfg,$loglevel,$logtext,$norotate = false) {
global $phpcommand;
if($loglevel > $cfg['logs_debug_level']) return;
$file = $cfg['logs_path'].'ranksystem.log';
if ($loglevel == 1) {
$loglevel = " CRITICAL ";
@@ -37,14 +38,12 @@ function enter_logfile($cfg,$loglevel,$logtext,$norotate = false) {
$loghandle = fopen($file, 'a');
fwrite($loghandle, DateTime::createFromFormat('U.u', number_format(microtime(true), 6, '.', ''))->setTimeZone(new DateTimeZone($cfg['logs_timezone']))->format("Y-m-d H:i:s.u ").$loglevel.$logtext."\n");
fclose($loghandle);
if($norotate == false && filesize($file) > 5242880) {
if($norotate == false && filesize($file) > ($cfg['logs_rotation_size'] * 1048576)) {
$loghandle = fopen($file, 'a');
fwrite($loghandle, DateTime::createFromFormat('U.u', number_format(microtime(true), 6, '.', ''))->setTimeZone(new DateTimeZone($cfg['logs_timezone']))->format("Y-m-d H:i:s.u ")." NOTICE Logfile filesie of 5 MiB reached.. Rotate logfile.\n");
fclose($loghandle);
$file2 = "$file.old";
if (file_exists($file2)) {
unlink($file2);
}
if(file_exists($file2)) unlink($file2);
rename($file, $file2);
$loghandle = fopen($file, 'a');
fwrite($loghandle, DateTime::createFromFormat('U.u', number_format(microtime(true), 6, '.', ''))->setTimeZone(new DateTimeZone($cfg['logs_timezone']))->format("Y-m-d H:i:s.u ")." NOTICE Rotated logfile...\n");
@@ -74,10 +73,9 @@ if(!in_array('ssh2', get_loaded_extensions()) && $cfg['teamspeak_query_encrypt_s
shutdown($mysqlcon,$cfg,1,"PHP SSH2 is missed. Installation of PHP SSH2 is required, when using secured (SSH) connection to TeamSpeak! If you are not able to install PHP SSH2 (i.e. hosted webspace), you need to deactivate the TS3 Query encryption inside the Webinterface.");
}
enter_logfile($cfg,5,"###################################################################");
enter_logfile($cfg,5,"");
enter_logfile($cfg,5,"###################################################################");
enter_logfile($cfg,5,"Initialize Bot...");
enter_logfile($cfg,4,"");
enter_logfile($cfg,4,"###################################################################");
enter_logfile($cfg,4,"Initialize Bot...");
require_once(substr(__DIR__,0,-4).'libs/ts3_lib/TeamSpeak3.php');
require_once(substr(__DIR__,0,-4).'jobs/calc_user.php');
require_once(substr(__DIR__,0,-4).'jobs/get_avatars.php');
@@ -90,11 +88,14 @@ require_once(substr(__DIR__,0,-4).'jobs/handle_messages.php');
require_once(substr(__DIR__,0,-4).'jobs/event_userenter.php');
require_once(substr(__DIR__,0,-4).'jobs/update_rs.php');
enter_logfile($cfg,6,"Running on OS: ".php_uname("s")." ".php_uname("r"));
enter_logfile($cfg,6,"Using PHP Version: ".phpversion());
enter_logfile($cfg,6,"Database Version: ".$mysqlcon->getAttribute(PDO::ATTR_SERVER_VERSION));
enter_logfile($cfg,5,"Running on OS: ".php_uname("s")." ".php_uname("r"));
enter_logfile($cfg,5,"Using PHP Version: ".phpversion());
enter_logfile($cfg,5,"Database Version: ".$mysqlcon->getAttribute(PDO::ATTR_SERVER_VERSION));
$cfg = check_db($mysqlcon,$lang,$cfg,$dbname);
$cfg['temp_db_version'] = $mysqlcon->getAttribute(PDO::ATTR_SERVER_VERSION);
$cfg['temp_last_botstart'] = time();
$cfg['temp_reconnect_attempts'] = 0;
enter_logfile($cfg,5,"Check Ranksystem files for updates...");
if(isset($cfg['version_current_using']) && isset($cfg['version_latest_available']) && $cfg['version_latest_available'] != NULL && version_compare($cfg['version_latest_available'], $cfg['version_current_using'], '>')) {
update_rs($mysqlcon,$lang,$cfg,$dbname,$phpcommand);
@@ -102,8 +103,8 @@ if(isset($cfg['version_current_using']) && isset($cfg['version_latest_available'
enter_logfile($cfg,5,"Check Ranksystem files for updates [done]");
function check_shutdown($cfg) {
if(!is_file(substr(__DIR__,0,-4).'logs/pid')) {
shutdown(NULL,$cfg,5,"Received signal to stop!");
if(!file_exists(substr(__DIR__,0,-4).'logs/pid')) {
shutdown(NULL,$cfg,4,"Received signal to stop!");
}
}
@@ -114,318 +115,379 @@ $addons_config = load_addons_config($mysqlcon,$lang,$cfg,$dbname);
if($addons_config['assign_groups_active']['value'] == '1') {
enter_logfile($cfg,5," Addon: 'assign_groups' [ON]");
include(substr(__DIR__,0,-4).'jobs/addon_assign_groups.php');
define('assign_groups',1);
$cfg['temp_addon_assign_groups'] = "enabled";
} else {
enter_logfile($cfg,5," Addon: 'assign_groups' [OFF]");
$cfg['temp_addon_assign_groups'] = "disabled";
}
enter_logfile($cfg,5,"Loading addons [done]");
enter_logfile($cfg,5,"Connect to TS3 Server (Address: \"".$cfg['teamspeak_host_address']."\" Voice-Port: \"".$cfg['teamspeak_voice_port']."\" Query-Port: \"".$cfg['teamspeak_query_port']."\" SSH: \"".$cfg['teamspeak_query_encrypt_switch']."\").");
function sendmessage($ts3, $cfg, $uuid, $msg, $erromsg=NULL, $errcode=NULL, $successmsg=NULL, $nolog=NULL) {
try {
if($cfg['teamspeak_query_encrypt_switch'] == 1) {
$ts3host = TeamSpeak3::factory("serverquery://".rawurlencode($cfg['teamspeak_query_user']).":".rawurlencode($cfg['teamspeak_query_pass'])."@".$cfg['teamspeak_host_address'].":".$cfg['teamspeak_query_port']."/?ssh=1");
} else {
$ts3host = TeamSpeak3::factory("serverquery://".rawurlencode($cfg['teamspeak_query_user']).":".rawurlencode($cfg['teamspeak_query_pass'])."@".$cfg['teamspeak_host_address'].":".$cfg['teamspeak_query_port']."/?blocking=0");
}
enter_logfile($cfg,5,"Connection to TS3 Server established.");
try{
$ts3version = $ts3host->version();
enter_logfile($cfg,5," TS3 Server version: ".$ts3version['version']." on ".$ts3version['platform']." [Build: ".$ts3version['build']." from ".date("Y-m-d H:i:s",$ts3version['build'])."]");
} catch (Exception $e) {
enter_logfile($cfg,2," Error due getting TS3 server version - ".$e->getCode().': '.$e->getMessage());
}
enter_logfile($cfg,5," Select virtual server...");
try {
if(version_compare($ts3version['version'],'3.4.0','>=')) {
if(strlen($msg) > 1024) {
$fragarr = explode("##*##", wordwrap($msg, 1022, "##*##", TRUE), 1022);
foreach($fragarr as $frag) {
usleep($cfg['teamspeak_query_command_delay']);
$ts3server = $ts3host->serverGetByPort($cfg['teamspeak_voice_port'], $cfg['teamspeak_query_nickname']);
} else {
enter_logfile($cfg,3," Your TS3 server is outdated, please update it!");
usleep($cfg['teamspeak_query_command_delay']);
$ts3server = $ts3host->serverGetByPort($cfg['teamspeak_voice_port']);
for ($updcld = 0; $updcld < 10; $updcld++) {
try {
usleep($cfg['teamspeak_query_command_delay']);
if($updcld == 0) {
$ts3server->selfUpdate(array('client_nickname' => $cfg['teamspeak_query_nickname']));
} else {
$ts3server->selfUpdate(array('client_nickname' => $cfg['teamspeak_query_nickname'].$updcld));
}
break;
}
catch (Exception $e) {
enter_logfile($cfg,3,' '.$lang['errorts3'].$e->getCode().': '.$e->getMessage());
}
$ts3->serverGetSelected()->clientGetByUid($uuid)->message("\n".$frag);
if($nolog==NULL) {
enter_logfile($cfg,6,"sendmessage to uuid $uuid (fragment): ".$frag);
}
}
enter_logfile($cfg,5," Select virtual server [done]");
} catch (Exception $e) {
enter_logfile($cfg,2," Error due selecting virtual server - ".$e->getCode().': '.$e->getMessage());
} else {
usleep($cfg['teamspeak_query_command_delay']);
$ts3->serverGetSelected()->clientGetByUid($uuid)->message($msg);
if($nolog==NULL) {
enter_logfile($cfg,6,"sendmessage to uuid $uuid: ".$msg);
}
}
if($successmsg!=NULL) {
enter_logfile($cfg,5,$successmsg);
}
} catch (Exception $e) {
if($errcode!=NULL) {
enter_logfile($cfg,$errcode,$erromsg." TS3: ".$e->getCode().': '.$e->getMessage());
} else {
enter_logfile($cfg,2,"sendmessage: ".$e->getCode().': '.$e->getMessage());
}
}
}
$sqlexec = '';
function run_bot() {
global $cfg, $mysqlcon, $dbname, $dbtype, $lang, $phpcommand, $addons_config, $sqlexec;
enter_logfile($cfg,4,"Connect to TS3 Server (Address: \"".$cfg['teamspeak_host_address']."\" Voice-Port: \"".$cfg['teamspeak_voice_port']."\" Query-Port: \"".$cfg['teamspeak_query_port']."\" SSH: \"".$cfg['teamspeak_query_encrypt_switch']."\").");
try {
usleep($cfg['teamspeak_query_command_delay']);
$ts3server->notifyRegister("server");
$ts3server->notifyRegister("textprivate");
$ts3server->notifyRegister("textchannel");
$ts3server->notifyRegister("textserver");
TeamSpeak3_Helper_Signal::getInstance()->subscribe("notifyTextmessage", "handle_messages");
TeamSpeak3_Helper_Signal::getInstance()->subscribe("notifyCliententerview", "event_userenter");
} catch (Exception $e) {
enter_logfile($cfg,2," Error due notifyRegister on TS3 server - ".$e->getCode().': '.$e->getMessage());
}
if($cfg['teamspeak_query_encrypt_switch'] == 1) {
$ts3host = TeamSpeak3::factory("serverquery://".rawurlencode($cfg['teamspeak_query_user']).":".rawurlencode($cfg['teamspeak_query_pass'])."@".$cfg['teamspeak_host_address'].":".$cfg['teamspeak_query_port']."/?ssh=1");
} else {
$ts3host = TeamSpeak3::factory("serverquery://".rawurlencode($cfg['teamspeak_query_user']).":".rawurlencode($cfg['teamspeak_query_pass'])."@".$cfg['teamspeak_host_address'].":".$cfg['teamspeak_query_port']."/?blocking=0");
}
enter_logfile($cfg,4,"Connection to TS3 Server established.");
try{
$ts3version = $ts3host->version();
enter_logfile($cfg,5," TS3 Server version: ".$ts3version['version']." on ".$ts3version['platform']." [Build: ".$ts3version['build']." from ".date("Y-m-d H:i:s",$ts3version['build'])."]");
$cfg['temp_ts_version'] = $ts3version['version'];
} catch (Exception $e) {
enter_logfile($cfg,2," Error due getting TS3 server version - ".$e->getCode().': '.$e->getMessage());
}
if(version_compare($ts3version['version'],'3.6.9','=<')) {
enter_logfile($cfg,3," Your TS3 server is outdated, please update it.. also to be ready for TS5!");
}
enter_logfile($cfg,5," Select virtual server...");
try {
if(version_compare($ts3version['version'],'3.4.0','>=')) {
usleep($cfg['teamspeak_query_command_delay']);
$ts3server = $ts3host->serverGetByPort($cfg['teamspeak_voice_port'], $cfg['teamspeak_query_nickname']);
} else {
usleep($cfg['teamspeak_query_command_delay']);
$ts3server = $ts3host->serverGetByPort($cfg['teamspeak_voice_port']);
for ($updcld = 0; $updcld < 10; $updcld++) {
try {
usleep($cfg['teamspeak_query_command_delay']);
if($updcld == 0) {
$ts3server->selfUpdate(array('client_nickname' => $cfg['teamspeak_query_nickname']));
} else {
$ts3server->selfUpdate(array('client_nickname' => $cfg['teamspeak_query_nickname'].$updcld));
}
break;
} catch (Exception $e) {
enter_logfile($cfg,3,' '.$lang['errorts3'].$e->getCode().': '.$e->getMessage());
shutdown($mysqlcon,$cfg,1,"Critical TS3 error on core function!");
}
}
}
enter_logfile($cfg,5," Select virtual server [done]");
$cfg['temp_reconnect_attempts'] = 0;
} catch (Exception $e) {
enter_logfile($cfg,2," Error due selecting virtual server - ".$e->getCode().': '.$e->getMessage());
}
$whoami = $ts3server->whoami();
if($cfg['teamspeak_default_channel_id'] != 0) {
try {
usleep($cfg['teamspeak_query_command_delay']);
$ts3server->clientMove($whoami['client_id'],$cfg['teamspeak_default_channel_id']);
enter_logfile($cfg,5," Joined to specified Channel.");
$ts3server->notifyRegister("server");
$ts3server->notifyRegister("textprivate");
$ts3server->notifyRegister("textchannel");
$ts3server->notifyRegister("textserver");
TeamSpeak3_Helper_Signal::getInstance()->subscribe("notifyTextmessage", "handle_messages");
TeamSpeak3_Helper_Signal::getInstance()->subscribe("notifyCliententerview", "event_userenter");
} catch (Exception $e) {
if($e->getCode() != 770) {
enter_logfile($cfg,2," Could not join specified channel (Channel ID: ".$cfg['teamspeak_default_channel_id'].") - ".$e->getCode().': '.$e->getMessage());
} else {
enter_logfile($cfg,5," Joined to specified channel (already member of it).");
}
enter_logfile($cfg,2," Error due notifyRegister on TS3 server - ".$e->getCode().': '.$e->getMessage());
}
} else {
enter_logfile($cfg,4," No channel defined where the Ranksystem Bot should be entered.");
}
enter_logfile($cfg,5,"Config check started...");
if(($groupslist = $mysqlcon->query("SELECT * FROM `$dbname`.`groups`")->fetchAll(PDO::FETCH_UNIQUE|PDO::FETCH_ASSOC)) === false) {
enter_logfile($cfg,1," Select on DB failed for group check: ".print_r($mysqlcon->errorInfo(), true));
}
$checkgroups = 0;
if(isset($groupslist) && $groupslist != NULL) {
if(isset($cfg['rankup_definition']) && $cfg['rankup_definition'] != NULL) {
foreach($cfg['rankup_definition'] as $time => $groupid) {
if(!isset($groupslist[$groupid]) && $groupid != NULL) {
$checkgroups++;
$whoami = $ts3server->whoami();
if($cfg['teamspeak_default_channel_id'] != 0) {
try {
usleep($cfg['teamspeak_query_command_delay']);
$ts3server->clientMove($whoami['client_id'],$cfg['teamspeak_default_channel_id']);
enter_logfile($cfg,5," Joined to specified TS channel with channel-ID ".$cfg['teamspeak_default_channel_id'].".");
} catch (Exception $e) {
if($e->getCode() != 770) {
enter_logfile($cfg,2," Could not join specified TS channel (channel-ID: ".$cfg['teamspeak_default_channel_id'].") - ".$e->getCode().': '.$e->getMessage());
} else {
enter_logfile($cfg,5," Joined to specified TS channel with channel-ID ".$cfg['teamspeak_default_channel_id']." (already member of it).");
}
}
} else {
enter_logfile($cfg,5," No channel defined where the Ranksystem Bot should be entered.");
}
if(isset($cfg['rankup_boost_definition']) && $cfg['rankup_boost_definition'] != NULL) {
foreach($cfg['rankup_boost_definition'] as $groupid => $value) {
if(!isset($groupslist[$groupid]) && $groupid != NULL) {
$checkgroups++;
}
}
}
if(isset($cfg['rankup_excepted_group_id_list']) && $cfg['rankup_excepted_group_id_list'] != NULL) {
foreach($cfg['rankup_excepted_group_id_list'] as $groupid => $value) {
if(!isset($groupslist[$groupid]) && $groupid != NULL) {
$checkgroups++;
}
}
}
}
if($checkgroups > 0) {
enter_logfile($cfg,4," Found servergroups in config, which are unknown. Redownload all servergroups from TS3 server.");
if($mysqlcon->exec("DELETE FROM groups;") === false) {
enter_logfile($cfg,2," Executing SQL commands failed: ".print_r($mysqlcon->errorInfo(), true));
}
$nobreak = 1;
$sqlexec = '';
$serverinfo = $ts3server->serverInfo();
$select_arr = array();
$sqlexec .= update_groups($ts3server,$mysqlcon,$lang,$cfg,$dbname,$serverinfo,$select_arr,$nobreak);
if($mysqlcon->exec($sqlexec) === false) {
enter_logfile($cfg,2,"Executing SQL commands failed: ".print_r($mysqlcon->errorInfo(), true));
}
unset($sqlexec, $select_arr, $groupslist);
$errcnf = 0;
enter_logfile($cfg,4," Downloading of servergroups finished. Recheck the config.");
enter_logfile($cfg,4,"Config check started...");
if(($groupslist = $mysqlcon->query("SELECT * FROM `$dbname`.`groups`")->fetchAll(PDO::FETCH_UNIQUE|PDO::FETCH_ASSOC)) === false) {
enter_logfile($cfg,1," Select on DB failed for group check: ".print_r($mysqlcon->errorInfo(), true));
}
$checkgroups = 0;
if(isset($groupslist) && $groupslist != NULL) {
if(isset($cfg['rankup_definition']) && $cfg['rankup_definition'] != NULL) {
foreach($cfg['rankup_definition'] as $time => $groupid) {
if(!isset($groupslist[$groupid]) && $groupid != NULL) {
enter_logfile($cfg,1,' '.sprintf($lang['upgrp0001'], $groupid, $lang['wigrptime']));
$errcnf++;
$checkgroups++;
}
}
}
if(isset($cfg['rankup_boost_definition']) && $cfg['rankup_boost_definition'] != NULL) {
foreach($cfg['rankup_boost_definition'] as $groupid => $value) {
if(!isset($groupslist[$groupid]) && $groupid != NULL) {
enter_logfile($cfg,2,' '.sprintf($lang['upgrp0001'], $groupid, $lang['wiboost']));
$checkgroups++;
}
}
}
if(isset($cfg['rankup_excepted_group_id_list']) && $cfg['rankup_excepted_group_id_list'] != NULL) {
foreach($cfg['rankup_excepted_group_id_list'] as $groupid => $value) {
if(!isset($groupslist[$groupid]) && $groupid != NULL) {
enter_logfile($cfg,2,' '.sprintf($lang['upgrp0001'], $groupid, $lang['wiexgrp']));
$checkgroups++;
}
}
}
}
if($errcnf > 0) {
shutdown($mysqlcon,$cfg,1,"Critical Config error!");
if($checkgroups > 0) {
enter_logfile($cfg,4," Found servergroups in config, which are unknown. Redownload all servergroups from TS3 server.");
if($mysqlcon->exec("DELETE FROM groups;") === false) {
enter_logfile($cfg,2," Executing SQL commands failed: ".print_r($mysqlcon->errorInfo(), true));
}
$nobreak = 1;
$serverinfo = $ts3server->serverInfo();
$select_arr = array();
$sqlexec2 .= update_groups($ts3server,$mysqlcon,$lang,$cfg,$dbname,$serverinfo,$select_arr,$nobreak);
if($mysqlcon->exec($sqlexec2) === false) {
enter_logfile($cfg,2,"Executing SQL commands failed: ".print_r($mysqlcon->errorInfo(), true));
}
unset($sqlexec2, $select_arr, $groupslist);
$errcnf = 0;
enter_logfile($cfg,4," Downloading of servergroups finished. Recheck the config.");
if(($groupslist = $mysqlcon->query("SELECT * FROM `$dbname`.`groups`")->fetchAll(PDO::FETCH_UNIQUE|PDO::FETCH_ASSOC)) === false) {
enter_logfile($cfg,1," Select on DB failed for group check: ".print_r($mysqlcon->errorInfo(), true));
}
if(isset($groupslist) && $groupslist != NULL) {
if(isset($cfg['rankup_definition']) && $cfg['rankup_definition'] != NULL) {
foreach($cfg['rankup_definition'] as $time => $groupid) {
if(!isset($groupslist[$groupid]) && $groupid != NULL) {
enter_logfile($cfg,1,' '.sprintf($lang['upgrp0001'], $groupid, $lang['wigrptime']));
$errcnf++;
}
}
}
if(isset($cfg['rankup_boost_definition']) && $cfg['rankup_boost_definition'] != NULL) {
foreach($cfg['rankup_boost_definition'] as $groupid => $value) {
if(!isset($groupslist[$groupid]) && $groupid != NULL) {
enter_logfile($cfg,2,' '.sprintf($lang['upgrp0001'], $groupid, $lang['wiboost']));
}
}
}
if(isset($cfg['rankup_excepted_group_id_list']) && $cfg['rankup_excepted_group_id_list'] != NULL) {
foreach($cfg['rankup_excepted_group_id_list'] as $groupid => $value) {
if(!isset($groupslist[$groupid]) && $groupid != NULL) {
enter_logfile($cfg,2,' '.sprintf($lang['upgrp0001'], $groupid, $lang['wiexgrp']));
}
}
}
}
if($errcnf > 0) {
shutdown($mysqlcon,$cfg,1,"Critical Config error!");
} else {
enter_logfile($cfg,4," No critical problems found! All seems to be fine...");
}
}
if(($lastupdate = $mysqlcon->query("SELECT `timestamp` FROM `$dbname`.`job_check` WHERE `job_name`='last_update'")->fetch()) === false) {
enter_logfile($cfg,1," Select on DB failed for job check: ".print_r($mysqlcon->errorInfo(), true));
} else {
enter_logfile($cfg,4," No critical problems found! All seems to be fine...");
}
}
if(($lastupdate = $mysqlcon->query("SELECT `timestamp` FROM `$dbname`.`job_check` WHERE `job_name`='last_update'")->fetch()) === false) {
enter_logfile($cfg,1," Select on DB failed for job check: ".print_r($mysqlcon->errorInfo(), true));
} else {
if($lastupdate['timestamp'] != 0 && ($lastupdate['timestamp'] + 10) > time()) {
if(isset($cfg['webinterface_admin_client_unique_id_list']) && $cfg['webinterface_admin_client_unique_id_list'] != NULL) {
foreach(array_flip($cfg['webinterface_admin_client_unique_id_list']) as $clientid) {
usleep($cfg['teamspeak_query_command_delay']);
try {
$ts3server->clientGetByUid($clientid)->message(sprintf($lang['upmsg2'], $cfg['version_current_using']));
enter_logfile($cfg,4," ".sprintf($lang['upusrinf'], $clientid));
} catch (Exception $e) {
enter_logfile($cfg,6," ".sprintf($lang['upusrerr'], $clientid));
if($lastupdate['timestamp'] != 0 && ($lastupdate['timestamp'] + 10) > time()) {
if(isset($cfg['webinterface_admin_client_unique_id_list']) && $cfg['webinterface_admin_client_unique_id_list'] != NULL) {
foreach(array_flip($cfg['webinterface_admin_client_unique_id_list']) as $clientid) {
sendmessage($ts3server, $cfg, $clientid, sprintf($lang['upmsg2'], $cfg['version_current_using'], 'https://ts-ranksystem.com/#changelog'), sprintf($lang['upusrerr'], $clientid), 6, sprintf($lang['upusrinf'], $clientid));
}
}
}
}
}
unset($groupslist,$errcnf,$checkgroups);
enter_logfile($cfg,5,"Config check [done]");
enter_logfile($cfg,5,"Bot starts now his work!");
$looptime = $rotated_cnt = 0; $rotated = '';
usleep(3000000);
while(1) {
$sqlexec = $sqlexec2 = '';
$starttime = microtime(true);
$weekago = time() - 604800;
$monthago = time() - 2592000;
if(($get_db_data = $mysqlcon->query("SELECT * FROM `$dbname`.`user`; SELECT MAX(`timestamp`) AS `timestamp` FROM `$dbname`.`user_snapshot`; SELECT `version`, COUNT(`version`) AS `count` FROM `$dbname`.`user` GROUP BY `version` ORDER BY `count` DESC; SELECT MAX(`timestamp`) AS `timestamp` FROM `$dbname`.`server_usage`; SELECT * FROM `$dbname`.`job_check`; SELECT `uuid` FROM `$dbname`.`stats_user`; SELECT `timestamp` FROM `$dbname`.`user_snapshot` WHERE `timestamp`>$weekago ORDER BY `timestamp` ASC LIMIT 1; SELECT `timestamp` FROM `$dbname`.`user_snapshot` WHERE `timestamp`>$monthago ORDER BY `timestamp` ASC LIMIT 1; SELECT * FROM `$dbname`.`groups`; SELECT * FROM `$dbname`.`addon_assign_groups`; SELECT * FROM `$dbname`.`admin_addtime`; ")) === false) {
shutdown($mysqlcon,$cfg,1,"Select on DB failed: ".print_r($mysqlcon->errorInfo(), true));
}
unset($groupslist,$errcnf,$checkgroups);
enter_logfile($cfg,4,"Config check [done]");
$count_select = 0;
$select_arr = array();
while($single_select = $get_db_data) {
$fetched_array = $single_select->fetchAll(PDO::FETCH_UNIQUE|PDO::FETCH_ASSOC);
$count_select++;
enter_logfile($cfg,4,"Bot starts now his work!");
$looptime = 0; $cfg['temp_last_laptime'] = '';
usleep(3000000);
switch ($count_select) {
case 1:
$select_arr['all_user'] = $fetched_array;
break;
case 2:
$select_arr['max_timestamp_user_snapshot'] = $fetched_array;
break;
case 3:
$select_arr['count_version_user'] = $fetched_array;
break;
case 4:
$select_arr['max_timestamp_server_usage'] = $fetched_array;
break;
case 5:
$select_arr['job_check'] = $fetched_array;
break;
case 6:
$select_arr['uuid_stats_user'] = $fetched_array;
break;
case 7:
$select_arr['usersnap_min_week'] = $fetched_array;
break;
case 8:
$select_arr['usersnap_min_month'] = $fetched_array;
break;
case 9:
$select_arr['groups'] = $fetched_array;
break;
case 10:
$select_arr['addon_assign_groups'] = $fetched_array;
break;
case 11:
$select_arr['admin_addtime'] = $fetched_array;
break 2;
while(1) {
$starttime = microtime(true);
$weekago = time() - 604800;
$monthago = time() - 2592000;
if(($get_db_data = $mysqlcon->query("SELECT * FROM `$dbname`.`user`; SELECT MAX(`timestamp`) AS `timestamp` FROM `$dbname`.`user_snapshot`; SELECT `version`, COUNT(`version`) AS `count` FROM `$dbname`.`user` GROUP BY `version` ORDER BY `count` DESC; SELECT MAX(`timestamp`) AS `timestamp` FROM `$dbname`.`server_usage`; SELECT * FROM `$dbname`.`job_check`; SELECT `uuid` FROM `$dbname`.`stats_user`; SELECT `timestamp` FROM `$dbname`.`user_snapshot` WHERE `timestamp`>$weekago ORDER BY `timestamp` ASC LIMIT 1; SELECT `timestamp` FROM `$dbname`.`user_snapshot` WHERE `timestamp`>$monthago ORDER BY `timestamp` ASC LIMIT 1; SELECT * FROM `$dbname`.`groups`; SELECT * FROM `$dbname`.`addon_assign_groups`; SELECT * FROM `$dbname`.`admin_addtime`; ")) === false) {
shutdown($mysqlcon,$cfg,1,"Select on DB failed: ".print_r($mysqlcon->errorInfo(), true));
}
$get_db_data->nextRowset();
}
unset($get_db_data, $fetched_array, $single_select);
check_shutdown($cfg);
$addons_config = load_addons_config($mysqlcon,$lang,$cfg,$dbname);
$ts3server->clientListReset();
usleep($cfg['teamspeak_query_command_delay']);
$allclients = $ts3server->clientList();
$ts3server->serverInfoReset();
usleep($cfg['teamspeak_query_command_delay']);
$serverinfo = $ts3server->serverInfo();
$sqlexec .= calc_user($ts3server,$mysqlcon,$lang,$cfg,$dbname,$allclients,$phpcommand,$select_arr);
get_avatars($ts3server,$cfg);
$sqlexec .= clean($ts3server,$mysqlcon,$lang,$cfg,$dbname,$select_arr);
$sqlexec .= calc_serverstats($ts3server,$mysqlcon,$cfg,$dbname,$dbtype,$serverinfo,$ts,$select_arr,$phpcommand);
$sqlexec .= calc_userstats($ts3server,$mysqlcon,$cfg,$dbname,$select_arr);
$sqlexec .= update_groups($ts3server,$mysqlcon,$lang,$cfg,$dbname,$serverinfo,$select_arr);
$sqlexec .= $sqlexec2;
if($addons_config['assign_groups_active']['value'] == '1') {
if(!defined('assign_groups')) {
enter_logfile($cfg,5,"Loading new addon...");
enter_logfile($cfg,5," Addon: 'assign_groups' [ON]");
include(substr(__DIR__,0,-4).'jobs/addon_assign_groups.php');
define('assign_groups',1);
enter_logfile($cfg,5,"Loading new addon [done]");
}
$sqlexec .= addon_assign_groups($addons_config,$ts3server,$cfg,$dbname,$allclients,$select_arr);
}
if($mysqlcon->exec($sqlexec) === false) {
enter_logfile($cfg,2,"Executing SQL commands failed: ".print_r($mysqlcon->errorInfo(), true));
}
unset($sqlexec, $sqlexec2, $select_arr);
$count_select = 0;
$select_arr = array();
while($single_select = $get_db_data) {
$fetched_array = $single_select->fetchAll(PDO::FETCH_UNIQUE|PDO::FETCH_ASSOC);
$count_select++;
$looptime = microtime(true) - $starttime;
$rotated = substr((number_format(round($looptime, 5),5) . ';' . $rotated),0,79);
if($looptime < 1) {
$loopsleep = (1 - $looptime) * 1000000;
#enter_logfile($cfg,6,"last loop: ".round($looptime, 5)." sec.");
usleep($loopsleep);
} elseif($cfg['teamspeak_query_command_delay'] == 0) {
#enter_logfile($cfg,6,"last loop: ".round($looptime, 5)." sec.");
$rotated_cnt++;
if($rotated_cnt > 3600) {
$rotated_arr = explode(';', $rotated);
$sum_time = 0;
foreach ($rotated_arr as $time) {
$sum_time = $sum_time + $time;
switch ($count_select) {
case 1:
$select_arr['all_user'] = $fetched_array;
break;
case 2:
$select_arr['max_timestamp_user_snapshot'] = $fetched_array;
break;
case 3:
$select_arr['count_version_user'] = $fetched_array;
break;
case 4:
$select_arr['max_timestamp_server_usage'] = $fetched_array;
break;
case 5:
$select_arr['job_check'] = $fetched_array;
break;
case 6:
$select_arr['uuid_stats_user'] = $fetched_array;
break;
case 7:
$select_arr['usersnap_min_week'] = $fetched_array;
break;
case 8:
$select_arr['usersnap_min_month'] = $fetched_array;
break;
case 9:
$select_arr['groups'] = $fetched_array;
break;
case 10:
$select_arr['addon_assign_groups'] = $fetched_array;
break;
case 11:
$select_arr['admin_addtime'] = $fetched_array;
break 2;
}
if(($sum_time / 10) > 1) {
$rotated_cnt = 0;
enter_logfile($cfg,4," Your Ranksystem seems to be slow. This is not a big deal, but it needs more ressources then necessary.");
enter_logfile($cfg,4," Here you'll find some information to optimize it: https://ts-n.net/ranksystem.php#optimize");
enter_logfile($cfg,4," Last 10 runtimes in seconds (lower values are better): ".$rotated);
foreach ($uniqueid as $clientid) {
usleep($cfg['teamspeak_query_command_delay']);
try {
$ts3server->clientGetByUid($clientid)->message("\nYour Ranksystem seems to be slow. This is not a big deal, but it needs more ressources then necessary.\nHere you'll find some information to optimize it: [URL]https://ts-n.net/ranksystem.php#optimize[/URL]\nLast 10 runtimes in seconds (lower values are better):\n".$rotated);
} catch (Exception $e) { }
$get_db_data->nextRowset();
}
unset($get_db_data, $fetched_array, $single_select);
check_shutdown($cfg);
$addons_config = load_addons_config($mysqlcon,$lang,$cfg,$dbname);
$ts3server->clientListReset();
usleep($cfg['teamspeak_query_command_delay']);
$allclients = $ts3server->clientList();
usleep($cfg['teamspeak_query_command_delay']);
$ts3server->serverInfoReset();
usleep($cfg['teamspeak_query_command_delay']);
$serverinfo = $ts3server->serverInfo();
$sqlexec .= calc_user($ts3server,$mysqlcon,$lang,$cfg,$dbname,$allclients,$phpcommand,$select_arr);
get_avatars($ts3server,$cfg);
$sqlexec .= clean($ts3server,$mysqlcon,$lang,$cfg,$dbname,$select_arr);
$sqlexec .= calc_serverstats($ts3server,$mysqlcon,$cfg,$dbname,$dbtype,$serverinfo,$select_arr,$phpcommand,$lang);
$sqlexec .= calc_userstats($ts3server,$mysqlcon,$cfg,$dbname,$select_arr);
$sqlexec .= update_groups($ts3server,$mysqlcon,$lang,$cfg,$dbname,$serverinfo,$select_arr);
if($addons_config['assign_groups_active']['value'] == '1') {
if($cfg['temp_addon_assign_groups'] == "disabled") {
enter_logfile($cfg,5,"Loading new addon...");
enter_logfile($cfg,5," Addon: 'assign_groups' [ON]");
if(!function_exists('addon_assign_groups')) {
include(substr(__DIR__,0,-4).'jobs/addon_assign_groups.php');
}
$cfg['temp_addon_assign_groups'] = "enabled";
enter_logfile($cfg,5,"Loading new addon [done]");
}
$sqlexec .= addon_assign_groups($addons_config,$ts3server,$cfg,$dbname,$allclients,$select_arr);
} elseif ($cfg['temp_addon_assign_groups'] == "enabled") {
enter_logfile($cfg,5,"Disable addon...");
enter_logfile($cfg,5," Addon: 'assign_groups' [OFF]");
$cfg['temp_addon_assign_groups'] = "disabled";
enter_logfile($cfg,5,"Disable addon [done]");
}
if($mysqlcon->exec($sqlexec) === false) {
enter_logfile($cfg,2,"Executing SQL commands failed: ".print_r($mysqlcon->errorInfo(), true));
}
if($cfg['logs_debug_level'] > 5) {
$sqlfile = $cfg['logs_path'].'temp_sql_dump.sql';
$sqldump = fopen($sqlfile, 'wa+');
fwrite($sqldump, DateTime::createFromFormat('U.u', number_format(microtime(true), 6, '.', ''))->setTimeZone(new DateTimeZone($cfg['logs_timezone']))->format("Y-m-d H:i:s.u ").' SQL: '.$sqlexec."\n");
fclose($sqldump);
}
unset($sqlexec, $select_arr);
$sqlexec = '';
$looptime = microtime(true) - $starttime;
$cfg['temp_last_laptime'] = substr((number_format(round($looptime, 5),5) . ';' . $cfg['temp_last_laptime']),0,79);
enter_logfile($cfg,6,"last loop: ".round($looptime, 5)." sec.");
if($looptime < 1) {
$loopsleep = (1 - $looptime);
$ts3server->getAdapter()->waittsn($loopsleep, 50000); // 50ms delay for CPU reason
}
}
}
} catch (Exception $e) {
enter_logfile($cfg,2,$lang['errorts3'].$e->getCode().': '.$e->getMessage());
$offline_status = array(110,257,258,1024,1026,1031,1032,1033,1034,1280,1793);
if(in_array($e->getCode(), $offline_status)) {
if($mysqlcon->exec("UPDATE $dbname.stats_server SET server_status='0'") === false) {
enter_logfile($cfg,2,$lang['error'].print_r($mysqlcon->errorInfo(), true));
} catch (Exception $e) {
enter_logfile($cfg,2,$lang['errorts3'].$e->getCode().': '.$e->getMessage());
$offline_status = array(110,257,258,1024,1026,1031,1032,1033,1034,1280,1793);
if(in_array($e->getCode(), $offline_status)) {
if($mysqlcon->exec("UPDATE $dbname.stats_server SET server_status='0'") === false) {
enter_logfile($cfg,2,$lang['error'].print_r($mysqlcon->errorInfo(), true));
}
}
if($cfg['temp_last_botstart'] < (time() - 10)) {
if($cfg['temp_reconnect_attempts'] < 4) {
$wait_reconnect = 5;
} elseif($cfg['temp_reconnect_attempts'] < 10) {
$wait_reconnect = 60;
} elseif($cfg['temp_reconnect_attempts'] < 20) {
$wait_reconnect = 300;
} elseif($cfg['temp_reconnect_attempts'] < 66) {
$wait_reconnect = 1800;
} elseif($cfg['temp_reconnect_attempts'] < 288) {
$wait_reconnect = 3600;
} else {
$wait_reconnect = 43200;
}
enter_logfile($cfg,4,"Try to reconnect in ".$wait_reconnect." seconds.");
for($z = 1; $z <= $wait_reconnect; $z++) {
sleep(1);
check_shutdown($cfg);
}
$cfg['temp_reconnect_attempts'] = $cfg['temp_reconnect_attempts'] + 1;
return $cfg;
} else {
shutdown($mysqlcon,$cfg,1,"Critical TS3 error on core function!");
}
}
shutdown($mysqlcon,$cfg,1,"Critical TS3 error on core function!");
}
?>
while(1) {
run_bot();
}
?>

View File

@@ -1,5 +1,5 @@
<?PHP
function calc_serverstats($ts3,$mysqlcon,$cfg,$dbname,$dbtype,$serverinfo,$ts,$select_arr,$phpcommand) {
function calc_serverstats($ts3,$mysqlcon,$cfg,$dbname,$dbtype,$serverinfo,$select_arr,$phpcommand,$lang) {
$nowtime = time();
$sqlexec = '';
@@ -35,7 +35,7 @@ function calc_serverstats($ts3,$mysqlcon,$cfg,$dbname,$dbtype,$serverinfo,$ts,$s
}
$allinsertsnap = substr($allinsertsnap, 0, -1);
if ($allinsertsnap != '') {
$sqlexec .= "INSERT INTO $dbname.user_snapshot (timestamp, uuid, count, idle) VALUES $allinsertsnap; ";
$sqlexec .= "INSERT INTO `$dbname`.`user_snapshot` (`timestamp`, `uuid`, `count`, `idle`) VALUES $allinsertsnap; ";
}
}
$fp = eval(base64_decode("Zm9wZW4oc3Vic3RyKF9fRElSX18sMCwtNCkuInN0YXRzL25hdi5waHAiLCAiciIpOw=="));
@@ -47,7 +47,7 @@ function calc_serverstats($ts3,$mysqlcon,$cfg,$dbname,$dbtype,$serverinfo,$ts,$s
array_push($buffer, $line);
}
fclose($fp);
$checkarr = array_flip(array('CQkJCQkJPGEgaHJlZj0iaW5mby5waHAiPjxpIGNsYXNzPSJmYSBmYS1mdyBmYS1pbmZvLWNpcmNsZSI+PC9pPiZuYnNwOzw/UEhQIGVjaG8gJGxhbmdbJ3N0bnYwMDMwJ107','CQkJCQk8P1BIUCBlY2hvICc8bGknLihiYXNlbmFtZSgkX1NFUlZFUlsnU0NSSVBUX05BTUUnXSkgPT0gImluZm8ucGhwIiA/ICcgY2xhc3M9ImFjdGl2ZSI+JyA6ICc+Jyk7'));
$checkarr = array_flip(array('PD9QSFAgZWNobyAnPGxpJy4oYmFzZW5hbWUoJF9TRVJWRVJbJ1NDUklQVF9OQU1FJ10pID09ICJpbmZvLnBocCIgPyAnIGNsYXNzPSJhY3RpdmUiPicgOiAnPicpOyA/PgoJCQkJCQk8YSBocmVmPSJpbmZvLnBocCI+PGkgY2xhc3M9ImZhcyBmYS1pbmZvLWNpcmNsZSI+PC9pPiZuYnNwOzw/UEhQIGVjaG8gJGxhbmdbJ3N0bnYwMDMwJ107ID8+PC9hPg=='));
$countcheck = 0;
foreach($buffer as $line) {
if(isset($checkarr[substr(base64_encode($line), 0, 132)])) {
@@ -66,7 +66,7 @@ function calc_serverstats($ts3,$mysqlcon,$cfg,$dbname,$dbtype,$serverinfo,$ts,$s
}
fclose($fp);
foreach($buffer as $line) {
if(strstr(base64_encode($line), "VGhlIDxhIGhyZWY9Ii8vdHMtbi5uZXQvcmFua3N5c3RlbS5waHAiIHRhcmdldD0iX2JsYW5rIj5SYW5rc3lzdGVtPC9hPiB3YXMgY29kZWQgYnkgPHN0cm9uZz5OZXdjb21lcjE5ODk8L3N0cm9uZz4gQ29weXJpZ2h0ICZjb3B5OyAyMDA5LTIwMTggPGEgaHJlZj0iLy90cy1uLm5ldC8iIHRhcmdldD0iX2JsYW5rIj5UZWFtU3BlYWsgU3BvbnNvcmluZyBUUy1OLk5FVDwvYT4=")) {
if(strstr(base64_encode($line), "PHA+VGhlIDxhIGhyZWY9Ii8vdHMtcmFua3N5c3RlbS5jb20iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiPlJhbmtzeXN0ZW08L2E+IHdhcyBjb2RlZCBieSA8c3Ryb25nPk5ld2NvbWVyMTk4OTwvc3Ryb25nPiBDb3B5cmlnaHQgJmNvcHk7IDIwMDktMjAxOSBwb3dlcmVkIGJ5IDxhIGhyZWY9Ii8vdHMtbi5uZXQvIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIj5UUy1OLk5FVDwvYT48L3A+")) {
$countcheck++;
}
}
@@ -190,7 +190,7 @@ function calc_serverstats($ts3,$mysqlcon,$cfg,$dbname,$dbtype,$serverinfo,$ts,$s
// Stats for Server Usage
if(key($select_arr['max_timestamp_server_usage']) == 0 || ($nowtime - key($select_arr['max_timestamp_server_usage'])) > 898) { // every 15 mins
//Calc time next rankup
//enter_logfile($cfg,6,"Calc next rankup for offline user");
enter_logfile($cfg,6,"Calc next rankup for offline user");
$upnextuptime = $nowtime - 1800;
if(($uuidsoff = $mysqlcon->query("SELECT `uuid`,`idle`,`count` FROM `$dbname`.`user` WHERE `online`<>1 AND `lastseen`>$upnextuptime")->fetchAll(PDO::FETCH_ASSOC)) === false) {
enter_logfile($cfg,2,"calc_serverstats 13:".print_r($mysqlcon->errorInfo(), true));
@@ -202,11 +202,11 @@ function calc_serverstats($ts3,$mysqlcon,$cfg,$dbname,$dbtype,$serverinfo,$ts,$s
if ($cfg['rankup_time_assess_mode'] == 1) {
$activetime = $count - $uuid['idle'];
$dtF = new DateTime("@0");
$dtT = new DateTime("@$activetime");
$dtT = new DateTime("@".round($activetime));
} else {
$activetime = $count;
$dtF = new DateTime("@0");
$dtT = new DateTime("@$count");
$dtT = new DateTime("@".round($count));
}
$grpcount=0;
foreach ($cfg['rankup_definition'] as $time => $groupid) {
@@ -240,7 +240,7 @@ function calc_serverstats($ts3,$mysqlcon,$cfg,$dbname,$dbtype,$serverinfo,$ts,$s
} else {
$sqlexec .= "INSERT INTO `$dbname`.`server_usage` (`timestamp`,`clients`,`channel`) VALUES ($nowtime,$server_used_slots,$server_channel_amount); ";
}
//enter_logfile($cfg,6,"Calc next rankup for offline user [DONE]");
enter_logfile($cfg,6,"Calc next rankup for offline user [DONE]");
}
// Calc Values for server stats
@@ -297,7 +297,9 @@ function calc_serverstats($ts3,$mysqlcon,$cfg,$dbname,$dbtype,$serverinfo,$ts,$s
$total_online_week.";".
$total_online_month.";".
$total_active_time.";".
$total_inactive_time
$total_inactive_time.";".
$cfg['temp_ts_version'].";".
$cfg['temp_db_version']
);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,false);
@@ -314,7 +316,7 @@ function calc_serverstats($ts3,$mysqlcon,$cfg,$dbname,$dbtype,$serverinfo,$ts,$s
foreach(array_flip($cfg['webinterface_admin_client_unique_id_list']) as $clientid) {
usleep($cfg['teamspeak_query_command_delay']);
try {
$ts3->clientGetByUid($clientid)->message(sprintf($lang['upmsg'], $cfg['version_current_using'], $cfg['version_latest_available']));
$ts3->clientGetByUid($clientid)->message(sprintf($lang['upmsg'], $cfg['version_current_using'], $cfg['version_latest_available'], 'https://ts-ranksystem.com/#changelog'));
enter_logfile($cfg,4," ".sprintf($lang['upusrinf'], $clientid));
} catch (Exception $e) {
enter_logfile($cfg,6," ".sprintf($lang['upusrerr'], $clientid));
@@ -323,14 +325,18 @@ function calc_serverstats($ts3,$mysqlcon,$cfg,$dbname,$dbtype,$serverinfo,$ts,$s
}
update_rs($mysqlcon,$lang,$cfg,$dbname,$phpcommand);
}
$sqlexec .= "UPDATE `$dbname`.`job_check` SET `timestamp`='$nowtime' WHERE `job_name`='get_version'; ";
$sqlexec .= "UPDATE `$dbname`.`job_check` SET `timestamp`='$nowtime' WHERE `job_name`='get_version'; UPDATE `$dbname`.`cfg_params` SET `value`='{$cfg['version_latest_available']}' WHERE `param`='version_latest_available';";
}
//Calc Rank
if ($cfg['rankup_time_assess_mode'] == 1) {
$sqlexec .= "SET @a:=0; UPDATE `$dbname`.`user` AS `u` INNER JOIN (SELECT @a:=@a+1 `nr`,`uuid` FROM `$dbname`.`user` WHERE `except`<2 ORDER BY (`count` - `idle`) DESC) AS `s` USING (`uuid`) SET `u`.`rank`=`s`.`nr`; ";
//MySQL 8 or above
//UPDATE `user` AS `u` INNER JOIN (SELECT RANK() OVER (ORDER BY (`count` - `idle`) DESC) AS `rank`, `uuid` FROM `user` WHERE `except`<2) AS `s` USING (`uuid`) SET `u`.`rank`=`s`.`rank`;
} else {
$sqlexec .= "SET @a:=0; UPDATE `$dbname`.`user` AS `u` INNER JOIN (SELECT @a:=@a+1 `nr`,`uuid` FROM `$dbname`.`user` WHERE `except`<2 ORDER BY `count` DESC) AS `s` USING (`uuid`) SET `u`.`rank`=`s`.`nr`; ";
//MySQL 8 or above
//UPDATE `user` AS `u` INNER JOIN (SELECT RANK() OVER (ORDER BY `count` DESC) AS `rank`, `uuid` FROM `user` WHERE `except`<2) AS `s` USING (`uuid`) SET `u`.`rank`=`s`.`rank`;
}
}
return($sqlexec);

View File

@@ -46,7 +46,7 @@ function calc_user($ts3,$mysqlcon,$lang,$cfg,$dbname,$allclients,$phpcommand,$se
$name = $mysqlcon->quote($client['client_nickname'], ENT_QUOTES);
$uid = htmlspecialchars($client['client_unique_identifier'], ENT_QUOTES);
$sgroups = array_flip(explode(",", $client['client_servergroups']));
if (!isset($yetonline[$uid]) && $client['client_version'] != "ServerQuery") {
if (!isset($yetonline[$uid]) && $client['client_version'] != "ServerQuery" && $client['client_type']!="1") {
$clientidle = floor($client['client_idle_time'] / 1000);
if(isset($cfg['rankup_ignore_idle_time']) && $clientidle < $cfg['rankup_ignore_idle_time']) {
$clientidle = 0;
@@ -116,7 +116,7 @@ function calc_user($ts3,$mysqlcon,$lang,$cfg,$dbname,$allclients,$phpcommand,$se
} else {
$activetime = $count;
}
$dtT = new DateTime("@$activetime");
$dtT = new DateTime("@".round($activetime));
foreach ($cfg['rankup_definition'] as $time => $groupid) {
if (isset($sgroups[$groupid])) {
$grpid = $groupid;
@@ -157,16 +157,11 @@ function calc_user($ts3,$mysqlcon,$lang,$cfg,$dbname,$allclients,$phpcommand,$se
}
$grpid = $groupid;
if ($cfg['rankup_message_to_user_switch'] == 1) {
usleep($cfg['teamspeak_query_command_delay']);
$days = $dtF->diff($dtT)->format('%a');
$hours = $dtF->diff($dtT)->format('%h');
$mins = $dtF->diff($dtT)->format('%i');
$secs = $dtF->diff($dtT)->format('%s');
try {
$ts3->clientGetByUid($uid)->message(sprintf($cfg['rankup_message_to_user'], $days, $hours, $mins, $secs, $select_arr['groups'][$groupid]['sgidname'], $client['client_nickname']));
} catch (Exception $e) {
enter_logfile($cfg,2,"TS3 error: ".$e->getCode().': '.$e->getMessage()." ; ".sprintf($lang['sgrprerr'], $name, $uid, $cldbid, $select_arr['groups'][$groupid]['sgidname'], $groupid));
}
sendmessage($ts3, $cfg, $uid, sprintf($cfg['rankup_message_to_user'],$days,$hours,$mins,$secs,$select_arr['groups'][$groupid]['sgidname'],$client['client_nickname']), sprintf($lang['sgrprerr'], $name, $uid, $cldbid, $select_arr['groups'][$groupid]['sgidname'],$groupid), 2);
}
}
if($grpcount == 1) {

View File

@@ -23,7 +23,7 @@ function calc_userstats($ts3,$mysqlcon,$cfg,$dbname,$select_arr) {
$uuids = substr($uuids, 0, -1);
if(isset($sqlhis) && $max_timestamp != NULL && $min_timestamp_week != NULL && $min_timestamp_month != NULL) {
#enter_logfile($cfg,6,"Update User Stats between ".$job_begin." and ".$job_end.":");
enter_logfile($cfg,6,"Update User Stats between ".$job_begin." and ".$job_end.":");
if(($userdataweekbegin = $mysqlcon->query("SELECT `uuid`,`count`,`idle` FROM `$dbname`.`user_snapshot` WHERE `timestamp`=$min_timestamp_week AND `uuid` IN ($uuids)")->fetchAll(PDO::FETCH_ASSOC|PDO::FETCH_UNIQUE)) === false) {
enter_logfile($cfg,2,"calc_userstats 6:".print_r($mysqlcon->errorInfo(), true));
}
@@ -62,7 +62,7 @@ function calc_userstats($ts3,$mysqlcon,$cfg,$dbname,$select_arr) {
$clientdesc = $mysqlcon->quote($clientinfo['client_description'], ENT_QUOTES);;
$allupdateuuid .= "('" . $uuid . "','" .$userstats['rank'] . "','" . $count_week . "','" . $count_month . "','" . $idle_week . "','" . $idle_month . "','" . $active_week . "','" . $active_month . "','" . $clientinfo['client_totalconnections'] . "','" . $clientinfo['client_base64HashClientUID'] . "','" . $clientinfo['client_total_bytes_uploaded'] . "','" . $clientinfo['client_total_bytes_downloaded'] . "'," . $clientdesc . "),";
} catch (Exception $e) {
#enter_logfile($cfg,6,$e->getCode() . ': ' . $e->getMessage()."; Client (uuid: ".$uuid." cldbid: ".$userstats['cldbid'].") was missing in TS database, perhaps its already deleted");
enter_logfile($cfg,6,$e->getCode() . ': ' . $e->getMessage()."; Client (uuid: ".$uuid." cldbid: ".$userstats['cldbid'].") was missing in TS database, perhaps its already deleted. Run !clean to correct this.");
}
}
unset($sqlhis, $userdataweekbegin, $userdataend, $userdatamonthbegin);

View File

@@ -1,6 +1,6 @@
<?PHP
function check_db($mysqlcon,$lang,$cfg,$dbname) {
$cfg['version_latest_available'] = '1.2.12';
$cfg['version_latest_available'] = '1.3.0';
enter_logfile($cfg,5,"Check Ranksystem database for updates...");
function set_new_version($mysqlcon,$cfg,$dbname) {
@@ -13,128 +13,77 @@ function check_db($mysqlcon,$lang,$cfg,$dbname) {
return $cfg;
}
}
function check_chmod($cfg,$lang) {
if(substr(sprintf('%o', fileperms(substr(__DIR__,0,-4).'tsicons/')), -3, 1)!='7') {
enter_logfile($cfg,2,sprintf($lang['isntwichm'],'tsicons'));
}
if(substr(sprintf('%o', fileperms($cfg['logs_path'])), -3, 1)!='7') {
enter_logfile($cfg,2,sprintf($lang['isntwichm'],'logs'));
}
if(substr(sprintf('%o', fileperms(substr(__DIR__,0,-4).'avatars/')), -3, 1)!='7') {
enter_logfile($cfg,2,sprintf($lang['isntwichm'],'avatars'));
}
if(substr(sprintf('%o', fileperms(substr(__DIR__,0,-4).'update/')), -3, 1)!='7') {
enter_logfile($cfg,2,sprintf($lang['isntwichm'],'update'));
}
}
function old_files($cfg) {
if(is_file(substr(__DIR__,0,-4).'install.php')) {
if(!unlink('install.php')) {
enter_logfile($cfg,4,"Unnecessary file, please delete it from your webserver: install.php");
}
}
if(is_dir(substr(__DIR__,0,-4).'icons/')) {
if(!rmdir(substr(__DIR__,0,-4).'icons/')) {
enter_logfile($cfg,4,"Unnecessary folder, please delete it from your webserver: icons/");
}
}
if(is_file(substr(__DIR__,0,-4).'libs/combined_stats.css')) {
if(!unlink(substr(__DIR__,0,-4).'libs/combined_stats.css')) {
enter_logfile($cfg,4,"Unnecessary file, please delete it from your webserver: libs/combined_stats.css");
}
}
if(is_file(substr(__DIR__,0,-4).'libs/combined_stats.js')) {
if(!unlink(substr(__DIR__,0,-4).'libs/combined_stats.js')) {
enter_logfile($cfg,4,"Unnecessary file, please delete it from your webserver: libs/combined_stats.js");
}
}
if(is_file(substr(__DIR__,0,-4).'webinterface/admin.php')) {
if(!unlink(substr(__DIR__,0,-4).'webinterface/admin.php')) {
enter_logfile($cfg,4,"Unnecessary file, please delete it from your webserver: webinterface/admin.php");
}
}
if(is_file(substr(__DIR__,0,-4).'libs/ts3_lib/Adapter/Blacklist/Exception.php')) {
if(!unlink(substr(__DIR__,0,-4).'libs/ts3_lib/Adapter/Blacklist/Exception.php')) {
enter_logfile($cfg,4,"Unnecessary file, please delete it from your webserver: libs/ts3_lib/Adapter/Blacklist/Exception.php");
}
}
if(is_dir(substr(__DIR__,0,-4).'libs/ts3_lib/Adapter/Blacklist/')) {
if(!rmdir(substr(__DIR__,0,-4).'libs/ts3_lib/Adapter/Blacklist/')) {
enter_logfile($cfg,4,"Unnecessary folder, please delete it from your webserver: libs/ts3_lib/Adapter/Blacklist/");
}
}
if(is_file(substr(__DIR__,0,-4).'libs/ts3_lib/Adapter/TSDNS/Exception.php')) {
if(!unlink(substr(__DIR__,0,-4).'libs/ts3_lib/Adapter/TSDNS/Exception.php')) {
enter_logfile($cfg,4,"Unnecessary file, please delete it from your webserver: libs/ts3_lib/Adapter/TSDNS/Exception.php");
}
}
if(is_dir(substr(__DIR__,0,-4).'libs/ts3_lib/Adapter/TSDNS/')) {
if(!rmdir(substr(__DIR__,0,-4).'libs/ts3_lib/Adapter/TSDNS/')) {
enter_logfile($cfg,4,"Unnecessary folder, please delete it from your webserver: libs/ts3_lib/Adapter/TSDNS/");
}
}
if(is_file(substr(__DIR__,0,-4).'libs/ts3_lib/Adapter/Update/Exception.php')) {
if(!unlink(substr(__DIR__,0,-4).'libs/ts3_lib/Adapter/Update/Exception.php')) {
enter_logfile($cfg,4,"Unnecessary file, please delete it from your webserver: libs/ts3_lib/Adapter/Update/Exception.php");
}
}
if(is_dir(substr(__DIR__,0,-4).'libs/ts3_lib/Adapter/Update/')) {
if(!rmdir(substr(__DIR__,0,-4).'libs/ts3_lib/Adapter/Update/')) {
enter_logfile($cfg,4,"Unnecessary folder, please delete it from your webserver: libs/ts3_lib/Adapter/Update/");
}
}
if(is_file(substr(__DIR__,0,-4).'libs/ts3_lib/Adapter/Blacklist.php')) {
if(!unlink(substr(__DIR__,0,-4).'libs/ts3_lib/Adapter/Blacklist.php')) {
enter_logfile($cfg,4,"Unnecessary file, please delete it from your webserver: libs/ts3_lib/Adapter/Blacklist.php");
}
}
if(is_file(substr(__DIR__,0,-4).'libs/ts3_lib/Adapter/TSDNS.php')) {
if(!unlink(substr(__DIR__,0,-4).'libs/ts3_lib/Adapter/TSDNS.php')) {
enter_logfile($cfg,4,"Unnecessary file, please delete it from your webserver: libs/ts3_lib/Adapter/TSDNS.php");
}
}
if(is_file(substr(__DIR__,0,-4).'libs/ts3_lib/Adapter/Update.php')) {
if(!unlink(substr(__DIR__,0,-4).'libs/ts3_lib/Adapter/Update.php')) {
enter_logfile($cfg,4,"Unnecessary file, please delete it from your webserver: libs/ts3_lib/Adapter/Update.php");
}
}
}
function check_writable($cfg) {
enter_logfile($cfg,5," Check files permissions...");
$counterr=0;
$scandir = new RecursiveIteratorIterator(new RecursiveDirectoryIterator(substr(__DIR__,0,-4)));
$files = array();
foreach ($scandir as $object) {
if(!strstr($object, '/.') && !strstr($object, '\.')) {
if (!$object->isDir()) {
if(!is_writable($object->getPathname())) {
enter_logfile($cfg,3," File is not writeable ".$object);
$counterr++;
}
$del_folder = array('icons/','libs/ts3_lib/Adapter/Blacklist/','libs/ts3_lib/Adapter/TSDNS/','libs/ts3_lib/Adapter/Update/','libs/fonts/');
$del_files = array('install.php','libs/combined_stats.css','libs/combined_stats.js','webinterface/admin.php','libs/ts3_lib/Adapter/Blacklist/Exception.php','libs/ts3_lib/Adapter/TSDNS/Exception.php','libs/ts3_lib/Adapter/Update/Exception.php','libs/ts3_lib/Adapter/Blacklist.php','libs/ts3_lib/Adapter/TSDNS.php','libs/ts3_lib/Adapter/Update.php');
function rmdir_recursive($folder) {
foreach(scandir($folder) as $file) {
if ('.' === $file || '..' === $file) continue;
if (is_dir("$folder/$file")) {
rmdir_recursive("$folder/$file");
} else {
if(!is_writable($object->getPathname())) {
enter_logfile($cfg,3," Folder is not writeable ".$object);
$counterr++;
if(!unlink("$folder/$file")) {
enter_logfile($cfg,4,"Unnecessary file, please delete it from your webserver: ".$folder."/".$file);
}
}
}
if(!rmdir($folder)) {
enter_logfile($cfg,4,"Unnecessary folder, please delete it from your webserver: ".$folder);
}
}
foreach($del_folder as $folder) {
if(is_dir(substr(__DIR__,0,-4).$folder)) {
rmdir_recursive(substr(__DIR__,0,-4).$folder);
}
}
foreach($del_files as $file) {
if(is_file(substr(__DIR__,0,-4).$file)) {
if(!unlink($file)) {
enter_logfile($cfg,4,"Unnecessary file, please delete it from your webserver: ".$file);
}
}
}
}
function check_writable($cfg,$mysqlcon) {
enter_logfile($cfg,5," Check files permissions...");
$counterr=0;
try {
$scandir = new RecursiveIteratorIterator(new RecursiveDirectoryIterator(substr(__DIR__,0,-4)));
$files = array();
foreach ($scandir as $object) {
if(!strstr($object, '/.') && !strstr($object, '\.')) {
if (!$object->isDir()) {
if(!is_writable($object->getPathname())) {
enter_logfile($cfg,3," File is not writeable ".$object);
$counterr++;
}
} else {
if(!is_writable($object->getPathname())) {
enter_logfile($cfg,3," Folder is not writeable ".$object);
$counterr++;
}
}
}
}
} catch (Exception $e) {
shutdown($mysqlcon,$cfg,1,"File Permissions Error: ".$e->getCode()." ".$e->getMessage());
enter_logfile($cfg,3,"File Permissions Error: ".$e->getCode()." ".$e->getMessage());
}
if($counterr!=0) {
enter_logfile($cfg,1,"Please check the files pemissions. Shutting down!\n\n");
exit;
shutdown($mysqlcon,$cfg,1,"Wrong file/folder permissions (see messages before!)! Check and correct the owner (chown) and access permissions (chmod)!");
} else {
enter_logfile($cfg,5," Check files permissions [done]");
}
}
check_writable($cfg,$mysqlcon);
old_files($cfg);
if($cfg['version_current_using'] == $cfg['version_latest_available']) {
enter_logfile($cfg,5," No newer version detected; Database check finished.");
old_files($cfg);
check_chmod($cfg,$lang);
check_writable($cfg);
} else {
enter_logfile($cfg,4," Update the Ranksystem Database to new version...");
if(version_compare($cfg['version_current_using'], '1.2.1', '<')) {
@@ -305,11 +254,6 @@ function check_db($mysqlcon,$lang,$cfg,$dbname) {
if($mysqlcon->exec("DROP TABLE `$dbname`.`bak_addon_assign_groups`") === false) { }
}
if(version_compare($cfg['version_current_using'], '1.2.12', '<')) {
if($mysqlcon->exec("UPDATE `$dbname`.`job_check` SET `timestamp`='".time()."' WHERE `job_name`='last_update'") === false) { } else {
enter_logfile($cfg,4," [1.2.12] Stored timestamp of last update successfully.");
}
if($mysqlcon->exec("DELETE FROM `$dbname`.`admin_addtime`") === false) { }
if($mysqlcon->exec("DELETE FROM `$dbname`.`addon_assign_groups`") === false) { }
if($mysqlcon->exec("ALTER TABLE `$dbname`.`user_iphash` MODIFY COLUMN `uuid` char(29) CHARACTER SET utf8 COLLATE utf8_unicode_ci PRIMARY KEY, `iphash` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci") === false) { } else {
enter_logfile($cfg,4," [1.2.12] Adjusted table user_iphash successfully.");
}
@@ -335,6 +279,57 @@ function check_db($mysqlcon,$lang,$cfg,$dbname) {
if($mysqlcon->exec("ALTER TABLE `$dbname`.`admin_addtime` MODIFY COLUMN `uuid` char(29) CHARACTER SET utf8 COLLATE utf8_unicode_ci") === false) { } else {
enter_logfile($cfg,4," [1.2.12] Adjusted table admin_addtime successfully.");
}
}
if(version_compare($cfg['version_current_using'], '1.3.0', '<')) {
if($mysqlcon->exec("UPDATE `$dbname`.`job_check` SET `timestamp`='".time()."' WHERE `job_name`='last_update';") === false) { } else {
enter_logfile($cfg,4," [1.3.0] Stored timestamp of last update successfully.");
}
if($mysqlcon->exec("DELETE FROM `$dbname`.`admin_addtime`;") === false) { }
if($mysqlcon->exec("DELETE FROM `$dbname`.`addon_assign_groups`;") === false) { }
if(empty($cfg['teamspeak_host_address']) || $cfg['teamspeak_host_address'] == '') {
enter_logfile($cfg,4," [1.3.0] Table cfg_params needs to be repaired.");
$oldconfigs = $mysqlcon->query("SELECT * FROM `$dbname`.`config`")->fetch();
if($mysqlcon->exec("CREATE TABLE `$dbname`.`cfg_params` (`param` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci PRIMARY KEY, `value` varchar(65535) CHARACTER SET utf8 COLLATE utf8_unicode_ci)") === false) { }
if($mysqlcon->exec("DELETE FROM `$dbname`.`cfg_params`") === false) { }
if($mysqlcon->exec("INSERT INTO `$dbname`.`cfg_params` (`param`,`value`) VALUES ('default_date_format', '".$oldconfigs['dateformat']."'), ('default_language', '".$oldconfigs['language']."'), ('logs_path', '".$oldconfigs['logpath']."'), ('logs_timezone', '".$oldconfigs['timezone']."'), ('rankup_boost_definition', '".$oldconfigs['boost']."'), ('rankup_clean_clients_period', '".$oldconfigs['cleanperiod']."'), ('rankup_clean_clients_switch', '".$oldconfigs['cleanclients']."'), ('rankup_client_database_id_change_switch', '".$oldconfigs['resetbydbchange']."'), ('rankup_definition', '".$oldconfigs['grouptime']."'), ('rankup_excepted_channel_id_list', '".$oldconfigs['exceptcid']."'), ('rankup_excepted_group_id_list', '".$oldconfigs['exceptgroup']."'), ('rankup_excepted_mode', '".$oldconfigs['resetexcept']."'), ('rankup_excepted_unique_client_id_list', '".$oldconfigs['exceptuuid']."'), ('rankup_hash_ip_addresses_mode', '".$oldconfigs['iphash']."'), ('rankup_ignore_idle_time', '".$oldconfigs['ignoreidle']."'), ('rankup_message_to_user_switch', '".$oldconfigs['msgtouser']."'), ('rankup_next_message_mode', '".$oldconfigs['nextupinfo']."'), ('rankup_time_assess_mode', '".$oldconfigs['substridle']."'), ('stats_column_active_time_switch', '".$oldconfigs['showcolat']."'), ('stats_column_current_group_since_switch', '".$oldconfigs['showgrpsince']."'), ('stats_column_current_server_group_switch', '".$oldconfigs['showcolas']."'), ('stats_column_client_db_id_switch', '".$oldconfigs['showcoldbid']."'), ('stats_column_client_name_switch', '".$oldconfigs['showcolcld']."'), ('stats_column_idle_time_switch', '".$oldconfigs['showcolit']."'), ('stats_column_last_seen_switch', '".$oldconfigs['showcolls']."'), ('stats_column_next_rankup_switch', '".$oldconfigs['showcolnx']."'), ('stats_column_next_server_group_switch', '".$oldconfigs['showcolsg']."'), ('stats_column_online_time_switch', '".$oldconfigs['showcolot']."'), ('stats_column_rank_switch', '".$oldconfigs['showcolrg']."'), ('stats_column_unique_id_switch', '".$oldconfigs['showcoluuid']."'), ('stats_server_news', '".$oldconfigs['servernews']."'), ('stats_show_clients_in_highest_rank_switch', '".$oldconfigs['showhighest']."'), ('stats_show_excepted_clients_switch', '".$oldconfigs['showexcld']."'), ('stats_show_site_navigation_switch', '".$oldconfigs['shownav']."'), ('teamspeak_avatar_download_delay', '".$oldconfigs['avatar_delay']."'), ('teamspeak_default_channel_id', '".$oldconfigs['defchid']."'), ('teamspeak_host_address', '".$oldconfigs['tshost']."'), ('teamspeak_query_command_delay', '".$oldconfigs['slowmode']."'), ('teamspeak_query_encrypt_switch', '".$oldconfigs['tsencrypt']."'), ('teamspeak_query_nickname', '".$oldconfigs['queryname']."'), ('teamspeak_query_pass', '".$oldconfigs['tspass']."'), ('teamspeak_query_port', '".$oldconfigs['tsquery']."'), ('teamspeak_query_user', '".$oldconfigs['tsuser']."'), ('teamspeak_verification_channel_id', '".$oldconfigs['registercid']."'), ('teamspeak_voice_port', '".$oldconfigs['tsvoice']."'), ('version_current_using', '".$oldconfigs['currvers']."'), ('version_latest_available', '".$oldconfigs['newversion']."'), ('version_update_channel', '".$oldconfigs['upchannel']."'), ('webinterface_access_count', '".$oldconfigs['count_access']."'), ('webinterface_access_last', '".$oldconfigs['last_access']."'), ('webinterface_admin_client_unique_id_list', '".$oldconfigs['adminuuid']."'), ('webinterface_advanced_mode', '".$oldconfigs['advancemode']."'), ('webinterface_pass', '".$oldconfigs['webpass']."'), ('webinterface_user', '".$oldconfigs['webuser']."')") === false) { } else {
enter_logfile($cfg,4," [1.3.0] Repaired new config table cfg_params (part 1).");
}
$oldmsg0 = $mysqlcon->quote($oldconfigs['rankupmsg']);
$oldmsg1 = $mysqlcon->quote($oldconfigs['nextupinfomsg1']);
$oldmsg2 = $mysqlcon->quote($oldconfigs['nextupinfomsg2']);
$oldmsg3 = $mysqlcon->quote($oldconfigs['nextupinfomsg3']);
if($mysqlcon->exec("INSERT INTO `$dbname`.`cfg_params` (`param`,`value`) VALUES ('rankup_message_to_user', {$oldmsg0}), ('rankup_next_message_1', {$oldmsg1}), ('rankup_next_message_2', {$oldmsg2}), ('rankup_next_message_3', {$oldmsg3})") === false) { } else {
enter_logfile($cfg,4," [1.3.0] Repaired new config table cfg_params (part 2).");
}
}
if($mysqlcon->exec("DROP TABLE `$dbname`.`bak_config`;") === false) { }
if($mysqlcon->exec("INSERT INTO `$dbname`.`cfg_params` (`param`,`value`) VALUES ('logs_debug_level', '5'),('logs_rotation_size', '5'),('stats_column_default_sort', 'rank'),('stats_column_default_order', 'asc'),('stats_time_bronze','50'),('stats_time_silver','100'),('stats_time_gold','250'),('stats_time_legend','500'),('stats_connects_bronze','50'),('stats_connects_silver','100'),('stats_connects_gold','250'),('stats_connects_legend','500');") === false) { } else {
enter_logfile($cfg,4," [1.3.0] Added new cfg_params value.");
}
if($mysqlcon->exec("ALTER TABLE `$dbname`.`cfg_params` MODIFY COLUMN `value` varchar(21588) CHARACTER SET utf8 COLLATE utf8_unicode_ci;") === false) { } else {
enter_logfile($cfg,4," [1.3.0] Adjusted table cfg_params successfully.");
}
if($mysqlcon->exec("UPDATE TABLE `$dbname`.`cfg_params` SET `value`='stable' WHERE `param`='version_update_channel' AND `value`='version';") === false) { } else {
enter_logfile($cfg,4," [1.3.0] Updated table cfg_params successfully.");
}
if($mysqlcon->exec("ALTER TABLE `$dbname`.`user` MODIFY COLUMN `count` DECIMAL(14,3);") === false) { } else {
enter_logfile($cfg,4," [1.3.0] Adjusted table user (part 1) successfully.");
}
if($mysqlcon->exec("ALTER TABLE `$dbname`.`user` MODIFY COLUMN `idle` DECIMAL(14,3);") === false) { } else {
enter_logfile($cfg,4," [1.3.0] Adjusted table user (part 2) successfully.");
}
if($mysqlcon->exec("ALTER TABLE `$dbname`.`user` MODIFY COLUMN `rank` int(10) NOT NULL default '9999999'") === false) { } else {
enter_logfile($cfg,4," [1.3.0] Adjusted table user successfully.");
}
if($mysqlcon->exec("DROP TABLE `$dbname`.`config`;") === false) { } else {
enter_logfile($cfg,4," [1.3.0] Dropped old table config.");
}
if($mysqlcon->exec("CREATE INDEX `snapshot_timestamp` ON `$dbname`.`user_snapshot` (`timestamp`)") === false) { }
if($mysqlcon->exec("CREATE INDEX `serverusage_timestamp` ON `$dbname`.`server_usage` (`timestamp`)") === false) { }
if($mysqlcon->exec("CREATE INDEX `user_version` ON `$dbname`.`user` (`version`)") === false) { }
@@ -342,8 +337,6 @@ function check_db($mysqlcon,$lang,$cfg,$dbname) {
if($mysqlcon->exec("CREATE INDEX `user_online` ON `$dbname`.`user` (`online`,`lastseen`)") === false) { }
}
$cfg = set_new_version($mysqlcon,$cfg,$dbname);
old_files($cfg);
check_chmod($cfg,$lang);
}
enter_logfile($cfg,5,"Check Ranksystem database for updates [done]");
return $cfg;

View File

@@ -14,7 +14,6 @@ function clean($ts3,$mysqlcon,$lang,$cfg,$dbname,$select_arr) {
enter_logfile($cfg,5," Get TS3 Clientlist...");
while($getclientdblist=$ts3->clientListDb($start, $break)) {
check_shutdown($cfg);
$dummy = $mysqlcon->query("SELECT * FROM `$dbname`.`job_check`"); //TeamSpeak became very slow on sending dblist with 3.3.0.. needs to hold the connection
$clientdblist=array_merge($clientdblist, $getclientdblist);
$start=$start+$break;
$count_tsuser=array_shift($getclientdblist);
@@ -90,13 +89,10 @@ function clean($ts3,$mysqlcon,$lang,$cfg,$dbname,$select_arr) {
// clean usersnaps older then 1 month + clean old server usage - older then a year
if ($select_arr['job_check']['clean_db']['timestamp'] < ($nowtime - 86400)) {
$sqlexec .= "DELETE `a` FROM `$dbname`.`user_snapshot` AS `a` CROSS JOIN(SELECT DISTINCT(`timestamp`) FROM `$dbname`.`user_snapshot` ORDER BY `timestamp` DESC LIMIT 1000 OFFSET 121) AS `b` WHERE `a`.`timestamp`=`b`.`timestamp`; DELETE FROM `$dbname`.`server_usage` WHERE `timestamp` < (UNIX_TIMESTAMP() - 31536000); DELETE `b` FROM `$dbname`.`user` AS `a` RIGHT JOIN `$dbname`.`stats_user` AS `b` ON `a`.`uuid`=`b`.`uuid` WHERE `a`.`uuid` IS NULL; UPDATE `$dbname`.`job_check` SET `timestamp`='$nowtime' WHERE `job_name`='clean_db'; DELETE FROM `$dbname`.`csrf_token` WHERE `timestamp` < (UNIX_TIMESTAMP() - 3600); ";
$sqlexec .= "DELETE `a` FROM `$dbname`.`user_snapshot` AS `a` CROSS JOIN(SELECT DISTINCT(`timestamp`) FROM `$dbname`.`user_snapshot` ORDER BY `timestamp` DESC LIMIT 1000 OFFSET 121) AS `b` WHERE `a`.`timestamp`=`b`.`timestamp`; DELETE FROM `$dbname`.`server_usage` WHERE `timestamp` < (UNIX_TIMESTAMP() - 31536000); DELETE `b` FROM `$dbname`.`user` AS `a` RIGHT JOIN `$dbname`.`stats_user` AS `b` ON `a`.`uuid`=`b`.`uuid` WHERE `a`.`uuid` IS NULL; UPDATE `$dbname`.`job_check` SET `timestamp`='$nowtime' WHERE `job_name`='clean_db'; DELETE FROM `$dbname`.`csrf_token` WHERE `timestamp` < (UNIX_TIMESTAMP() - 3600); DELETE `h` FROM `$dbname`.`user_iphash` AS `h` LEFT JOIN `$dbname`.`user` AS `u` ON `u`.`uuid` = `h`.`uuid` WHERE (`u`.`uuid` IS NULL OR `u`.`online`!=1); ";
enter_logfile($cfg,4,$lang['clean0003']);
}
// delete IP address of offline user
$sqlexec .= "DELETE `a` FROM `$dbname`.`user_iphash` AS `a` INNER JOIN `$dbname`.`user` AS `b` ON `a`.`uuid`=`b`.`uuid` WHERE `b`.`online`!=1; ";
return($sqlexec);
}
?>

View File

@@ -1,62 +1,57 @@
<?PHP
function event_userenter(TeamSpeak3_Adapter_ServerQuery_Event $event, TeamSpeak3_Node_Host $host) {
global $cfg, $mysqlcon, $dbname, $sqlexec2;
global $cfg, $mysqlcon, $dbname;
$sqlexec3 = '';
if($event['client_type'] == 0) {
#enter_logfile($cfg,6,"User ".$event['client_nickname']." (uuid: ".$event['client_unique_identifier'].") connected to the server.");
enter_logfile($cfg,6,"User ".$event['client_nickname']." (uuid: ".$event['client_unique_identifier'].") connected to the server.");
try {
$host->serverGetSelected()->clientListReset();
usleep($cfg['teamspeak_query_command_delay']);
$clientinfo = $host->serverGetSelected()->clientInfoDb($event["client_database_id"]);
if($clientinfo['client_lastip'] == NULL) { //TeamSpeak sucks sometimes and gives a empty result
enter_logfile($cfg,4,"event_userenter: TeamSpeak gives an empty value for the IP address of ".$event['client_nickname']." (uuid: ".$event['client_unique_identifier'].").. retry in 0,1 seconds..");
usleep(100000);
try {
unset($clientinfo);
usleep($cfg['teamspeak_query_command_delay']);
$clientinfo = $host->serverGetSelected()->clientInfoDb($event["client_database_id"]);
if($clientinfo['client_lastip'] == NULL) {
enter_logfile($cfg,4,"event_userenter: TeamSpeak gives an empty value for the IP address of ".$event['client_nickname']." (uuid: ".$event['client_unique_identifier'].").. retry in 0,5 seconds..");
usleep(500000);
try {
unset($clientinfo);
usleep($cfg['teamspeak_query_command_delay']);
$clientinfo = $host->serverGetSelected()->clientInfoDb($event["client_database_id"]);
if($clientinfo['client_lastip'] == NULL) {
enter_logfile($cfg,2,"event_userenter: Fuck it.. TeamSpeak gives an empty value for the IP address of of ".$event['client_nickname']." (uuid: ".$event['client_unique_identifier'].").");
return 0;
}
} catch (Exception $e) {
enter_logfile($cfg,2,"event_userenter 4:".$e->getCode().': '.$e->getMessage());
}
$clientlist = $host->serverGetSelected()->clientList();
foreach ($clientlist as $client) {
if($client['client_database_id'] == $event['client_database_id']) {
if(strstr($client['connection_client_ip'], '[')) {
$ip = str_replace(array('[',']'),'',$client['connection_client_ip']);
} else {
$ip = $client['connection_client_ip'];
}
} catch (Exception $e) {
enter_logfile($cfg,2,"event_userenter 4:".$e->getCode().': '.$e->getMessage());
break;
}
}
if($cfg['rankup_hash_ip_addresses_mode'] == 1) {
$hash = password_hash($clientinfo['client_lastip'], PASSWORD_DEFAULT);
$ip = '';
} elseif($cfg['rankup_hash_ip_addresses_mode'] == 2) {
$salt = md5(dechex(crc32(substr(__DIR__,0,-4))));
$hash = password_hash($clientinfo['client_lastip'], PASSWORD_DEFAULT, array("cost" => 10, "salt" => $salt));
$ip = '';
if(!isset($ip)) {
enter_logfile($cfg,6,"New user (".$event['client_nickname']." [".$event['client_database_id']."]) joined the server, but can't found a valid IP address.");
} else {
$hash = '';
$ip = $clientinfo['client_lastip'];
if($cfg['rankup_hash_ip_addresses_mode'] == 1) {
$hash = password_hash($ip, PASSWORD_DEFAULT);
$ip = '';
} elseif($cfg['rankup_hash_ip_addresses_mode'] == 2) {
$salt = md5(dechex(crc32(substr(__DIR__,0,-4))));
$hash = password_hash($ip, PASSWORD_DEFAULT, array("cost" => 10, "salt" => $salt));
$ip = '';
} else {
$hash = '';
}
enter_logfile($cfg,6,"Event Userenter: Users IP-hash: ".$hash);
if(($sqlhashs = $mysqlcon->query("SELECT * FROM `$dbname`.`user_iphash`")->fetchAll(PDO::FETCH_ASSOC|PDO::FETCH_UNIQUE)) === false) {
enter_logfile($cfg,2,"event_userenter 2:".print_r($mysqlcon->errorInfo(), true));
}
$uuid = htmlspecialchars($event['client_unique_identifier'], ENT_QUOTES);
if(isset($sqlhashs[$uuid])) {
$sqlexec3 .= "UPDATE `$dbname`.`user_iphash` SET `iphash`='".$hash."',`ip`='".$ip."' WHERE `uuid`='".$event['client_unique_identifier']."'; ";
enter_logfile($cfg,6,"Userenter: UPDATE `$dbname`.`user_iphash` SET `iphash`='".$hash."',`ip`='".$ip."' WHERE `uuid`='".$event['client_unique_identifier']."'; ");
} else {
$sqlexec3 .= "INSERT INTO `$dbname`.`user_iphash` (`uuid`,`iphash`,`ip`) VALUES ('".$event['client_unique_identifier']."','".$hash."','".$ip."'); ";
enter_logfile($cfg,6,"Userenter: INSERT INTO `$dbname`.`user_iphash` (`uuid`,`iphash`,`ip`) VALUES ('".$event['client_unique_identifier']."','".$hash."','".$ip."'); ");
}
if($mysqlcon->exec($sqlexec3) === false) {
enter_logfile($cfg,2,"event_userenter 3:".print_r($mysqlcon->errorInfo(), true));
}
}
#enter_logfile($cfg,6,"Event Userenter: Users IP-hash: ".$hash." IP: ".$ip);
if(($sqlhashs = $mysqlcon->query("SELECT * FROM `$dbname`.`user_iphash`")->fetchAll(PDO::FETCH_ASSOC|PDO::FETCH_UNIQUE)) === false) {
enter_logfile($cfg,2,"event_userenter 1:".print_r($mysqlcon->errorInfo(), true));
}
#enter_logfile($cfg,6,"User-hash-Table: ".print_r($sqlhashs, true));
$uuid = htmlspecialchars($event['client_unique_identifier'], ENT_QUOTES);
if(isset($sqlhashs[$uuid])) {
$sqlexec2 .= "UPDATE `$dbname`.`user_iphash` SET `iphash`='".$hash."',`ip`='".$ip."' WHERE `uuid`='".$event['client_unique_identifier']."'; ";
} else {
$sqlexec2 .= "INSERT INTO `$dbname`.`user_iphash` (`uuid`,`iphash`,`ip`) VALUES ('".$event['client_unique_identifier']."','".$hash."','".$ip."'); ";
}
} catch (Exception $e) {
enter_logfile($cfg,2,"event_userenter 4:".$e->getCode().': '.$e->getMessage());
}

View File

@@ -1,21 +1,21 @@
<?PHP
function handle_messages(TeamSpeak3_Adapter_ServerQuery_Event $event, TeamSpeak3_Node_Host $host) {
global $lang,$cfg,$mysqlcon, $dbname, $phpcommand;
global $lang,$cfg,$mysqlcon,$dbname,$phpcommand,$ts3,$whoami;
if($host->whoami()["client_unique_identifier"] != $event["invokeruid"]) {
if($host->whoami()["client_unique_identifier"] != $event["invokeruid"] && substr($event["msg"],0,1) === "!") {
$uuid = $event["invokeruid"];
$admin = 0;
foreach(array_flip($cfg['webinterface_admin_client_unique_id_list']) as $auuid) {
if($uuid == $auuid) {
if ($uuid == $auuid) {
$admin = 1;
break;
}
}
enter_logfile($cfg,6,"Client ".$event["invokername"]." (".$event["invokeruid"].") sent textmessage: ".$event["msg"]);
if((strstr($event["msg"], '!nextup') || strstr($event["msg"], '!next')) && $cfg['rankup_next_message_mode'] != 0) {
//enter_logfile($cfg,6,"Client ".$event["invokername"]." (".$event["invokeruid"].") sent textmessage: ".$event["msg"]);
if(($user = $mysqlcon->query("SELECT `count`,`nextup`,`idle`,`except`,`name` FROM `$dbname`.`user` WHERE `uuid`='$uuid'")->fetch()) === false) {
if(($user = $mysqlcon->query("SELECT `count`,`nextup`,`idle`,`except`,`name`,`rank`,`grpsince`,`grpid` FROM `$dbname`.`user` WHERE `uuid`='$uuid'")->fetch()) === false) {
enter_logfile($cfg,2,"handle_messages 1:".print_r($mysqlcon->errorInfo(), true));
}
@@ -33,7 +33,7 @@ function handle_messages(TeamSpeak3_Adapter_ServerQuery_Event $event, TeamSpeak3
$nextup = $time - $user['count'];
}
$dtF = new DateTime("@0");
$dtT = new DateTime("@$nextup");
$dtT = new DateTime("@".round($nextup));
$days = $dtF->diff($dtT)->format('%a');
$hours = $dtF->diff($dtT)->format('%h');
$mins = $dtF->diff($dtT)->format('%i');
@@ -41,29 +41,14 @@ function handle_messages(TeamSpeak3_Adapter_ServerQuery_Event $event, TeamSpeak3
$name = $user['name'];
$grpcount++;
if ($nextup > 0 && $nextup < $time || $grpcount == $countgrp && $nextup <= 0) {
check_shutdown($cfg); usleep($cfg['teamspeak_query_command_delay']);
if ($grpcount == $countgrp && $nextup <= 0) {
usleep($cfg['teamspeak_query_command_delay']);
try {
$host->serverGetSelected()->clientGetByUid($event["invokeruid"])->message(sprintf($cfg['rankup_next_message_2'], $days, $hours, $mins, $secs, $sqlhisgroup[$groupid]['sgidname'], $name));
} catch (Exception $e) {
enter_logfile($cfg,2,"handle_messages 3:".$e->getCode().': '.$e->getMessage());
}
$msg = sprintf($cfg['rankup_next_message_2'], $days, $hours, $mins, $secs, $sqlhisgroup[$groupid]['sgidname'], $name, $user['rank'], $sqlhisgroup[$user['grpid']]['sgidname'], date('Y-m-d H:i:s', $user['grpsince']));
} elseif ($user['except'] == 2 || $user['except'] == 3) {
usleep($cfg['teamspeak_query_command_delay']);
try {
$host->serverGetSelected()->clientGetByUid($event["invokeruid"])->message(sprintf($cfg['rankup_next_message_3'], $days, $hours, $mins, $secs, $sqlhisgroup[$groupid]['sgidname'], $name));
} catch (Exception $e) {
enter_logfile($cfg,2,"handle_messages 4:".$e->getCode().': '.$e->getMessage());
}
$msg = sprintf($cfg['rankup_next_message_3'], $days, $hours, $mins, $secs, $sqlhisgroup[$groupid]['sgidname'], $name, $user['rank'], $sqlhisgroup[$user['grpid']]['sgidname'], date('Y-m-d H:i:s', $user['grpsince']));
} else {
usleep($cfg['teamspeak_query_command_delay']);
try {
$host->serverGetSelected()->clientGetByUid($event["invokeruid"])->message(sprintf($cfg['rankup_next_message_1'], $days, $hours, $mins, $secs, $sqlhisgroup[$groupid]['sgidname'], $name));
} catch (Exception $e) {
enter_logfile($cfg,2,"handle_messages 5:".$e->getCode().': '.$e->getMessage());
}
$msg = sprintf($cfg['rankup_next_message_1'], $days, $hours, $mins, $secs, $sqlhisgroup[$groupid]['sgidname'], $name, $user['rank'], $sqlhisgroup[$user['grpid']]['sgidname'], date('Y-m-d H:i:s', $user['grpsince']));
}
sendmessage($host,$cfg,$event["invokeruid"],$msg);
if($cfg['rankup_next_message_mode'] == 1) {
break;
}
@@ -73,110 +58,128 @@ function handle_messages(TeamSpeak3_Adapter_ServerQuery_Event $event, TeamSpeak3
if(strstr($event["msg"], '!version')) {
if(version_compare($cfg['version_latest_available'], $cfg['version_current_using'], '>') && $cfg['version_latest_available'] != '') {
usleep($cfg['teamspeak_query_command_delay']);
try {
$host->serverGetSelected()->clientGetByUid($event["invokeruid"])->message(sprintf($lang['upmsg'], $cfg['version_current_using'], $cfg['version_latest_available']));
} catch (Exception $e) {
enter_logfile($cfg,2,"handle_messages 6:".$e->getCode().': '.$e->getMessage());
}
sendmessage($host,$cfg,$event["invokeruid"],sprintf($lang['upmsg'], $cfg['version_current_using'], $cfg['version_latest_available'], 'https://ts-ranksystem.com/#changelog'));
} else {
usleep($cfg['teamspeak_query_command_delay']);
try {
$host->serverGetSelected()->clientGetByUid($event["invokeruid"])->message(sprintf($lang['msg0001'], $cfg['version_current_using']));
} catch (Exception $e) {
enter_logfile($cfg,2,"handle_messages 7:".$e->getCode().': '.$e->getMessage());
}
sendmessage($host,$cfg,$event["invokeruid"],sprintf($lang['msg0001'], $cfg['version_current_using']));
}
}
if(strstr($event["msg"], '!help') || strstr($event["msg"], '!info') || strstr($event["msg"], '!commands')) {
usleep($cfg['teamspeak_query_command_delay']);
try {
$host->serverGetSelected()->clientGetByUid($event["invokeruid"])->message($lang['msg0002']);
} catch (Exception $e) {
enter_logfile($cfg,2,"handle_messages 8:".$e->getCode().': '.$e->getMessage());
}
if(strstr($event["msg"], '!help') || strstr($event["msg"], '!info') || strstr($event["msg"], '!commands') || strstr($event["msg"], '!cmd')) {
sendmessage($host, $cfg, $event["invokeruid"], $lang['msg0002']);
}
if((strstr($event["msg"], '!shutdown') || strstr($event["msg"], '!quit') || strstr($event["msg"], '!stop')) && $admin == 1) {
enter_logfile($cfg,5,sprintf($lang['msg0004'], $event["invokername"], $event["invokeruid"]));
$path = substr(__DIR__, 0, -4);
usleep($cfg['teamspeak_query_command_delay']);
try {
$host->serverGetSelected()->clientGetByUid($event["invokeruid"])->message($lang['msg0005']);
} catch (Exception $e) {
enter_logfile($cfg,2,"handle_messages 9:".$e->getCode().': '.$e->getMessage());
}
sendmessage($host, $cfg, $event["invokeruid"], $lang['msg0005']);
exec($phpcommand." ".$path."worker.php stop");
} elseif (strstr($event["msg"], '!shutdown') || strstr($event["msg"], '!quit') || strstr($event["msg"], '!stop')) {
usleep($cfg['teamspeak_query_command_delay']);
try {
$host->serverGetSelected()->clientGetByUid($event["invokeruid"])->message($lang['msg0003']);
} catch (Exception $e) {
enter_logfile($cfg,2,"handle_messages 10:".$e->getCode().': '.$e->getMessage());
}
sendmessage($host, $cfg, $event["invokeruid"], $lang['msg0003']);
}
if((strstr($event["msg"], '!restart') || strstr($event["msg"], '!reboot')) && $admin == 1) {
enter_logfile($cfg,5,sprintf($lang['msg0007'], $event["invokername"], $event["invokeruid"]));
$path = substr(__DIR__, 0, -4);
usleep($cfg['teamspeak_query_command_delay']);
try {
$host->serverGetSelected()->clientGetByUid($event["invokeruid"])->message($lang['msg0006']);
} catch (Exception $e) {
enter_logfile($cfg,2,"handle_messages 11:".$e->getCode().': '.$e->getMessage());
}
sendmessage($host, $cfg, $event["invokeruid"], $lang['msg0006']);
if (substr(php_uname(), 0, 7) == "Windows") {
exec("start ".$phpcommand." ".$path."worker.php restart");
} else {
exec($phpcommand." ".$path."worker.php restart > /dev/null 2>/dev/null &");
}
} elseif (strstr($event["msg"], '!restart') || strstr($event["msg"], '!reboot')) {
usleep($cfg['teamspeak_query_command_delay']);
try {
$host->serverGetSelected()->clientGetByUid($event["invokeruid"])->message($lang['msg0003']);
} catch (Exception $e) {
enter_logfile($cfg,2,"handle_messages 12:".$e->getCode().': '.$e->getMessage());
}
sendmessage($host, $cfg, $event["invokeruid"], $lang['msg0003']);
}
if((strstr($event["msg"], '!checkupdate') || strstr($event["msg"], '!update')) && $admin == 1) {
if($mysqlcon->exec("UPDATE `$dbname`.`job_check` SET `timestamp`='0' WHERE `job_name` IN ('check_update','get_version','calc_server_stats')") === false) {
enter_logfile($cfg,4,"handle_messages 13:".print_r($mysqlcon->errorInfo(), true));
}
usleep($cfg['teamspeak_query_command_delay']);
try {
$host->serverGetSelected()->clientGetByUid($event["invokeruid"])->message($lang['msg0008']);
} catch (Exception $e) {
enter_logfile($cfg,2,"handle_messages 14:".$e->getCode().': '.$e->getMessage());
}
sendmessage($host, $cfg, $event["invokeruid"], $lang['msg0008']);
} elseif(strstr($event["msg"], '!checkupdate') || strstr($event["msg"], '!update')) {
usleep($cfg['teamspeak_query_command_delay']);
try {
$host->serverGetSelected()->clientGetByUid($event["invokeruid"])->message($lang['msg0003']);
} catch (Exception $e) {
enter_logfile($cfg,2,"handle_messages 15:".$e->getCode().': '.$e->getMessage());
}
sendmessage($host, $cfg, $event["invokeruid"], $lang['msg0003']);
}
if((strstr($event["msg"], '!clean')) && $admin == 1) {
if($mysqlcon->exec("UPDATE `$dbname`.`job_check` SET `timestamp`='0' WHERE `job_name` IN ('clean_db','clean_clients')") === false) {
enter_logfile($cfg,4,"handle_messages 13:".print_r($mysqlcon->errorInfo(), true));
}
usleep($cfg['teamspeak_query_command_delay']);
try {
$host->serverGetSelected()->clientGetByUid($event["invokeruid"])->message($lang['msg0009']);
} catch (Exception $e) {
enter_logfile($cfg,2,"handle_messages 14:".$e->getCode().': '.$e->getMessage());
}
sendmessage($host, $cfg, $event["invokeruid"], $lang['msg0009'] ." ". $lang['msg0010']);
} elseif(strstr($event["msg"], '!clean')) {
usleep($cfg['teamspeak_query_command_delay']);
try {
$host->serverGetSelected()->clientGetByUid($event["invokeruid"])->message($lang['msg0003']);
} catch (Exception $e) {
enter_logfile($cfg,2,"handle_messages 15:".$e->getCode().': '.$e->getMessage());
}
sendmessage($host, $cfg, $event["invokeruid"], $lang['msg0003']);
}
if((strstr($event["msg"], '!reloadgroups') || strstr($event["msg"], '!reloadicons')) && $admin == 1) {
if($mysqlcon->exec("DELETE FROM `$dbname`.`groups`") === false) {
enter_logfile($cfg,4,"handle_messages 14:".print_r($mysqlcon->errorInfo(), true));
}
sendmessage($host, $cfg, $event["invokeruid"], $lang['msg0011'] ." ". $lang['msg0010']);
} elseif(strstr($event["msg"], '!clean')) {
sendmessage($host, $cfg, $event["invokeruid"], $lang['msg0003']);
}
if(strstr($event["msg"], '!online') || strstr($event["msg"], '!uptime')) {
sendmessage($host, $cfg, $event["invokeruid"], sprintf("Bot is online since %s, now %s.", date('Y-m-d H:i:s',$cfg['temp_last_botstart']), (new DateTime("@0"))->diff(new DateTime("@".(time()-$cfg['temp_last_botstart'])))->format($cfg['default_date_format'])));
}
if(strstr($event["msg"], '!runtime') || strstr($event["msg"], '!runtimes')) {
sendmessage($host, $cfg, $event["invokeruid"], sprintf("Last 10 runtimes (in seconds):\n%s", str_replace(";","\n",$cfg['temp_last_laptime'])));
}
if((strstr($event["msg"], '!logs') || strstr($event["msg"], '!log')) && $admin == 1) {
$parameter = explode(' ', $event["msg"]);
if(isset($parameter[1]) && $parameter[1] > 0 && $parameter[1] < 1000) {
$number_lines = $parameter[1];
} else {
$number_lines = 5;
}
$filters = explode(',', 'CRITICAL,ERROR,WARNING,NOTICE,INFO,DEBUG');
$filter2 = $lastfilter = '';
$lines=array();
if(file_exists($cfg['logs_path']."ranksystem.log")) {
$fp = fopen($cfg['logs_path']."ranksystem.log", "r");
$buffer=array();
while($line = fgets($fp, 4096)) {
array_push($buffer, $line);
}
fclose($fp);
$buffer = array_reverse($buffer);
foreach($buffer as $line) {
if(substr($line, 0, 2) != "20" && in_array($lastfilter, $filters)) {
array_push($lines, $line);
if(count($lines)>=$number_lines) {
break;
}
continue;
}
foreach($filters as $filter) {
if(($filter != NULL && strstr($line, $filter) && $filter2 == NULL) || ($filter2 != NULL && strstr($line, $filter2) && $filter != NULL && strstr($line, $filter))) {
if($filter == "CRITICAL" || $filter == "ERROR") {
array_push($lines, '[COLOR=red]'.$line.'[/COLOR]');
} else {
array_push($lines, $line);
}
$lastfilter = $filter;
if (count($lines)>=$number_lines) {
break 2;
}
}
}
}
} else {
$lines[] = "Perhaps the logfile got rotated or something goes wrong due opening file!\n";
$lines[] = "No log entry found...\n";
}
$lines = array_reverse($lines);
$message = "\n";
foreach ($lines as $line) {
$message .= $line;
}
sendmessage($host, $cfg, $event["invokeruid"], $message, NULL, NULL, NULL, $nolog=1);
} elseif(strstr($event["msg"], '!logs') || strstr($event["msg"], '!log')) {
sendmessage($host, $cfg, $event["invokeruid"], $lang['msg0003']);
}
} elseif($host->whoami()["client_unique_identifier"] != $event["invokeruid"] && $event["targetmode"] == "1") {
sendmessage($host, $cfg, $event["invokeruid"], $lang['msg0002']);
}
}
?>

View File

@@ -131,7 +131,7 @@ function update_groups($ts3,$mysqlcon,$lang,$cfg,$dbname,$serverinfo,$select_arr
try {
$ts3->clientGetByUid($clientid)->message(sprintf($lang['upgrp0001'], $sgid, $lang['wigrptime']));
} catch (Exception $e) {
#enter_logfile($cfg,6," ".sprintf($lang['upusrerr'], $clientid));
enter_logfile($cfg,6," ".sprintf($lang['upusrerr'], $clientid));
}
}
}
@@ -144,7 +144,7 @@ function update_groups($ts3,$mysqlcon,$lang,$cfg,$dbname,$serverinfo,$select_arr
try {
$ts3->clientGetByUid($clientid)->message(sprintf($lang['upgrp0001'], $sgid, $lang['wigrptime']));
} catch (Exception $e) {
#enter_logfile($cfg,6," ".sprintf($lang['upusrerr'], $clientid));
enter_logfile($cfg,6," ".sprintf($lang['upusrerr'], $clientid));
}
}
}
@@ -157,7 +157,7 @@ function update_groups($ts3,$mysqlcon,$lang,$cfg,$dbname,$serverinfo,$select_arr
try {
$ts3->clientGetByUid($clientid)->message(sprintf($lang['upgrp0001'], $sgid, $lang['wigrptime']));
} catch (Exception $e) {
#enter_logfile($cfg,6," ".sprintf($lang['upusrerr'], $clientid));
enter_logfile($cfg,6," ".sprintf($lang['upusrerr'], $clientid));
}
}
}

View File

@@ -10,10 +10,10 @@ function update_rs($mysqlcon,$lang,$cfg,$dbname,$phpcommand,$norotate=NULL) {
foreach ($tables as $table) {
if($mysqlcon->query("SELECT 1 FROM `$dbname`.`bak_$table` LIMIT 1") !== false) {
if($mysqlcon->exec("DROP TABLE `$dbname`.`bak_$table`") === false) {
enter_logfile($cfg,1," Error due deleting old backup table ".$table.".",$norotate);
enter_logfile($cfg,1," Error due deleting old backup table bak_".$table.".",$norotate);
$countbackuperr++;
} else {
enter_logfile($cfg,4," Old backup table ".$table." successfully removed.",$norotate);
enter_logfile($cfg,4," Old backup table bak_".$table." successfully removed.",$norotate);
}
}
}
@@ -60,7 +60,7 @@ function update_rs($mysqlcon,$lang,$cfg,$dbname,$phpcommand,$norotate=NULL) {
fclose($dlHandler);
enter_logfile($cfg,4," New update successfully saved.",$norotate);
} else {
enter_logfile($cfg,5," New update file already here...",$norotate);
enter_logfile($cfg,5," New update file (update/ranksystem_".$cfg['version_latest_available'].".zip) already here...",$norotate);
}
$zipHandle = zip_open(substr(__DIR__,0,-4).'update/ranksystem_'.$cfg['version_latest_available'].'.zip');
@@ -71,30 +71,49 @@ function update_rs($mysqlcon,$lang,$cfg,$dbname,$phpcommand,$norotate=NULL) {
while ($aF = zip_read($zipHandle)) {
$thisFileName = zip_entry_name($aF);
$thisFileDir = dirname($thisFileName);
if(substr($thisFileName,-1,1) == '/') {
enter_logfile($cfg,6," Parent directory: ".$thisFileDir,$norotate);
enter_logfile($cfg,6," File/Dir: ".$thisFileName,$norotate);
if(substr($thisFileName,-1,1) == '/' || substr($thisFileName,-1,1) == '\\') {
enter_logfile($cfg,6," Check folder is existing: ".$thisFileName,$norotate);
if(!is_dir(substr(__DIR__,0,-4).substr($thisFileName,0,-1))) {
enter_logfile($cfg,5," Create folder: ".substr(__DIR__,0,-4).substr($thisFileName,0,-1),$norotate);
if(mkdir((substr(__DIR__,0,-4).substr($thisFileName,0,-1)), 0755, true)) {
enter_logfile($cfg,4," Created new folder ".substr(__DIR__,0,-4).substr($thisFileName,0,-1),$norotate);
} else {
enter_logfile($cfg,2," Error by creating folder ".substr(__DIR__,0,-4).substr($thisFileName,0,-1).". Please check the permissions on the folder one level above.",$norotate);
$countwrongfiles++;
}
} else {
enter_logfile($cfg,6," Folder still existing.",$norotate);
}
continue;
}
if(!is_dir(substr(__DIR__,0,-4).'/'.$thisFileDir)) {
if(mkdir(substr(__DIR__,0,-4).$thisFileDir, 0777, true)) {
enter_logfile($cfg,4," Create new folder ".$thisFileDir,$norotate);
enter_logfile($cfg,6," Check parent folder is existing: ".$thisFileDir,$norotate);
if(mkdir(substr(__DIR__,0,-4).$thisFileDir, 0755, true)) {
enter_logfile($cfg,4," Created new folder ".$thisFileDir,$norotate);
} else {
enter_logfile($cfg,1," Error by creating folder ".$thisFileDir.". Please check the permissions on your folder ".substr(__DIR__,0,-4),$norotate);
enter_logfile($cfg,2," Error by creating folder ".$thisFileDir.". Please check the permissions on your folder ".substr(__DIR__,0,-4),$norotate);
$countwrongfiles++;
}
} else {
enter_logfile($cfg,6," Parent folder still existing.",$norotate);
}
if(!is_dir(substr(__DIR__,0,-4).'/'.$thisFileName)) {
enter_logfile($cfg,6," Check file: ".substr(__DIR__,0,-4).$thisFileName,$norotate);
if(!is_dir(substr(__DIR__,0,-4).$thisFileName)) {
$contents = zip_entry_read($aF, zip_entry_filesize($aF));
$updateThis = '';
if($thisFileName == 'other/dbconfig.php' || $thisFileName == 'install.php' || $thisFileName == 'other/phpcommand.php') {
if($thisFileName == 'other/dbconfig.php' || $thisFileName == 'install.php' || $thisFileName == 'other/phpcommand.php' || $thisFileName == 'logs/autostart_deactivated') {
enter_logfile($cfg,5," Did not touch ".$thisFileName,$norotate);
} else {
if(($updateThis = fopen(substr(__DIR__,0,-4).'/'.$thisFileName, 'w')) === false) {
enter_logfile($cfg,1," Failed to open file ".$thisFileName,$norotate);
enter_logfile($cfg,2," Failed to open file ".$thisFileName,$norotate);
$countwrongfiles++;
} elseif(!fwrite($updateThis, $contents)) {
enter_logfile($cfg,1," Failed to write file ".$thisFileName,$norotate);
enter_logfile($cfg,2," Failed to write file ".$thisFileName,$norotate);
$countwrongfiles++;
} else {
enter_logfile($cfg,4," Replaced file ".$thisFileName,$norotate);
@@ -103,31 +122,44 @@ function update_rs($mysqlcon,$lang,$cfg,$dbname,$phpcommand,$norotate=NULL) {
fclose($updateThis);
unset($contents);
}
} else {
enter_logfile($cfg,2," Unkown thing happened.. Is the parent directory existing? ".$thisFileDir." # ".$thisFileName,$norotate);
$countwrongfiles++;
}
}
if(!unlink(substr(__DIR__,0,-4).'update/ranksystem_'.$cfg['version_latest_available'].'.zip')) {
enter_logfile($cfg,3," Could not clean update folder. Please remove the unneeded file ".substr(__DIR__,0,-4)."update/ranksystem_".$cfg['version_latest_available'].".zip",$norotate);
} else {
enter_logfile($cfg,5," Cleaned update folder.",$norotate);
}
if($countwrongfiles == 0 && $countchangedfiles != 0) {
if(!unlink(substr(__DIR__,0,-4).'update/ranksystem_'.$cfg['version_latest_available'].'.zip')) {
enter_logfile($cfg,3," Could not clean update folder. Please remove the unneeded file ".substr(__DIR__,0,-4)."update/ranksystem_".$cfg['version_latest_available'].".zip",$norotate);
} else {
enter_logfile($cfg,5," Cleaned update folder.",$norotate);
}
$nowtime = time();
if($mysqlcon->exec("UPDATE `$dbname`.`job_check` SET `timestamp`='$nowtime' WHERE `job_name`='get_version'; UPDATE `$dbname`.`cfg_params` SET `value`='{$cfg['version_latest_available']}' WHERE `param`='version_latest_available';") === false) {
enter_logfile($cfg,1," Error due updating new version in database.");
enter_logfile($cfg,1," Error due updating new version in database.",$norotate);
}
$path = substr(__DIR__, 0, -4);
if (file_exists(substr(__DIR__,0,-4).'logs/pid')) {
unlink(substr(__DIR__,0,-4).'logs/pid');
}
sleep(2);
if (substr(php_uname(), 0, 7) == "Windows") {
exec("start ".$phpcommand." ".$path."worker.php restart");
shutdown($mysqlcon,$cfg,4," Files updated successfully. Wait for restart via cron/task.");
exec("start ".$phpcommand." ".$path."worker.php start");
} else {
exec($phpcommand." ".$path."worker.php restart > /dev/null 2>/dev/null &");
shutdown($mysqlcon,$cfg,4," Files updated successfully. Wait for restart via cron/task.");
exec($phpcommand." ".$path."worker.php start > /dev/null 2>/dev/null &");
}
enter_logfile($cfg,4," Files updated successfully.",$norotate);
shutdown($mysqlcon,$cfg,4,"Update done. Wait for restart via cron/task.",TRUE);
} else {
enter_logfile($cfg,1," Files updated with at least one error. Please check the log!",$norotate);
// how to handle this.. Perhaps try again automatically in 30 minutes
enter_logfile($cfg,2,"Update of the Ranksystem failed!",$norotate);
enter_logfile($cfg,4,"Continue with normal work on old version.",$norotate);
}
}