Skip to content

Instantly share code, notes, and snippets.

@ViskoB
Last active August 29, 2015 14:20
Show Gist options
  • Save ViskoB/cfbff6f72f1c143b95a1 to your computer and use it in GitHub Desktop.
Save ViskoB/cfbff6f72f1c143b95a1 to your computer and use it in GitHub Desktop.
GW2 TS3 Authentication - Cron
<?php
require_once('TS3F/libraries/TeamSpeak3/TeamSpeak3.php');
require_once('request.inc.php');
$ts3_squeryuser = "squeryuser";
$ts3_squerypass = "squerypass";
$ts3_squery_urlport = "ts3.example.com:10011";
$ts3_server_port = "9987";
$AuthWorldID = 2014; // Set this to your world ID you wish to allow access
$ts3_groupid = 1; // Group ID with access
$db_hostname = "dbhost";
$db_name = "dbname";
$db_user = "dbuser";
$db_password = "dbpass";
$hardcodedHours = 12;
try{
$dbh_me = new PDO( "mysql:host=$db_hostname; dbname=$db_name", $db_user, $db_password);
}catch(PDOException $e){
echo $e->getMessage();
}
$dbh_me->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_SILENT);
$stmt = $db->prepare("SELECT * FROM ts3auth WHERE last_check <= '" . date('Y-m-d H:i:s', strtotime("-$hardcodedHours hours")) . "' and type='apikey'");
$stmt->execute();
while($result = $stmt->fetchObject()){
$response = gw2_api_request('/v2/account', $result->gw2_apikey);
if($response){
$stmt2 = $db->prepare("UPDATE ts3auth SET gw2_name='{$response['name']}', gw2_world='{$response['world']}', last_check = '". date('Y-m-d H:i:s') ."' WHERE ts3_uniqueid='{$result->ts3_uniqueid}'");
$stmt2->execute(array());
}else{
$stmt2 = $db->prepare("UPDATE ts3auth SET gw2_world = 0, last_check = '". date('Y-m-d H:i:s') ."' WHERE ts3_uniqueid='{$result->ts3_uniqueid}'");
$stmt2->execute();
}
}
$db_members = $current_members = $new_members = $old_members = array();
$stmt = $db->prepare("SELECT * FROM ts3auth where gw2_world = ? and type='apikey'");
$stmt->execute($AuthWorldID);
while($result = $stmt->fetchObject()){
$db_members[] = $result->ts3_uniqueid;
}
// connect to ts3, authenticate and spawn an object for the virtual server on port 9987
$ts3_VirtualServer = TeamSpeak3::factory("serverquery://{$ts3_squeryuser}:{$ts3_squerypass}@{$ts3_squery_urlport}/?server_port={$ts3_server_port}");
$group_members = $ts3_VirtualServer->execute("servergroupclientlist", array("sgid" => $ts3_groupid, "-names"))->toAssocArray("cldbid");
foreach($group_members as $member){
ob_start();
echo $member['client_unique_identifier'];
$uniqueID = ob_get_clean();
$current_members[] = $uniqueID;
}
$new_members = array_diff($db_members, $current_members);
$old_members = array_diff($current_members, $db_members);
foreach($new_members as $newmember){
$ts3_dbid = 0;
try{
$ts3_dbid = $ts3_VirtualServer->clientFindDb($newmember, true);
$ts3_dbid = $ts3_dbid[0];
}catch(exception $e){
$ts3_dbid = 0;
}
if($ts3_dbid <> 0){
$ts3_VirtualServer->execute("servergroupaddclient", array("sgid" => $ts3_groupid, "cldbid" => $ts3_dbid));
}
}
foreach($old_members as $oldmember){
$ts3_dbid = 0;
try{
$ts3_dbid = $ts3_VirtualServer->clientFindDb($oldmember, true);
$ts3_dbid = $ts3_dbid[0];
}catch(exception $e){
$ts3_dbid = 0;
}
if($ts3_dbid <> 0){
$ts3_VirtualServer->execute("servergroupdelclient", array("sgid" => $ts3_groupid, "cldbid" => $ts3_dbid));
}
}
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment