Guest User

Untitled

a guest
Jul 18th, 2018
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.42 KB | None | 0 0
  1. <?php
  2. /*
  3. * by Mirko
  4. * last edit 21.03.2012 23:12
  5. */
  6.  
  7. $mod->setDefaultCV("teamspeak", "enabled", 1);
  8. $mod->setDefaultCV("teamspeak", "serverip", "localhost");
  9. $mod->setDefaultCV("teamspeak", "queryport", 10011);
  10. $mod->setDefaultCV("teamspeak", "serverport", 9987 );
  11. $mod->setDefaultCV("teamspeak", "username", "serveradmin");
  12. $mod->setDefaultCV("teamspeak", "password", "LNJt+T9o");
  13. $mod->setDefaultCV("teamspeak", "spamtime", 120);
  14. $mod->setDefaultCV("teamspeak", "admins", "2");
  15. $mod->setDefaultCV("teamspeak", "blacklistChannel", "1");
  16. $mod->setDefaultCV("teamspeak", "enableLogging", "1");
  17. $mod->setDefaultCV("teamspeak", "logFormat", "<DATE>: <PLAYERNAME>[<GUID>] <MSG>");
  18.  
  19. $teamspeak = new TeamspeakUsage();
  20. $mod->registerCommand("admin", '~^admin .+$~i', "pokeAdmin", $teamspeak);
  21.  
  22.  
  23. class TeamspeakUsage{
  24. //Teamspeak Classes and Checks
  25. private $ts3Admin = FALSE;
  26. private $isConnected = FALSE;
  27. //Global Classes
  28. private $mod;
  29. private $players;
  30. private $logging;
  31. //Teamspeak vars
  32. private $admins = array();
  33. private $blacklistChannel = array();
  34. private $lastPoke = 0;
  35.  
  36.  
  37. /**
  38. *@global Mod $mod
  39. *@global Player $players
  40. *@global Logging $logging
  41. *@global Ts3admin $ts3Admin
  42. */
  43. function __construct() {
  44. global $logging;
  45. global $mod;
  46.  
  47. //Global Classes
  48. $this->mod = $mod;
  49. $this->players = $GLOBALS["players"];
  50. $this->logging = $logging;
  51.  
  52. //Teamspeak Vars
  53. $this->admins = explode(",",$mod->getCV("teamspeak", "admins"));
  54. $this->blacklistChannel = explode(",",$mod->getCV("teamspeak", "blacklistChannel"));
  55.  
  56. if(file_exists("classes/ts3admin.class.php")) {
  57. require_once ("classes/ts3admin.class.php");
  58. return TRUE;
  59. }
  60. return FALSE;
  61. }
  62.  
  63. /**
  64. * Stellt eine Verbindung zum Teamspeak Server her, indem
  65. * zuerst die Verbindung hergestellt wird, dann der Nutzer eingeloggt wird
  66. * und als letztes der Virtuelle Server ausgewählt wird
  67. *
  68. * @return boolean Connection hergestellt
  69. */
  70. private function Connect() {
  71. $serverIp = $this->mod->getCV("teamspeak", "serverip");
  72. $serverQueryPort = $this->mod->getCV("teamspeak", "queryport");
  73. $serverPort = $this->mod->getCV("teamspeak", "serverport");
  74. $username = $this->mod->getCV("teamspeak", "username");
  75. $password = $this->mod->getCV("teamspeak", "password");
  76.  
  77. $this->ts3Admin = new ts3admin($serverIp, $serverQueryPort);
  78. if(!$this->ts3Admin) {
  79. $this->isConnected = FALSE;
  80. return FALSE;
  81. }
  82.  
  83. $connection = $this->ts3Admin->connect();
  84. if(!$connection['success']) {
  85. echo $connection['errors'];
  86. $this->isConnected = FALSE;
  87. return FALSE;
  88. }
  89.  
  90. $login = $this->ts3Admin->login($username, $password);
  91. if(!$login['success']) {
  92. echo $login['errors'];
  93. $this->isConnected = FALSE;
  94. return false;
  95. }
  96.  
  97. $virtualServer = $this->ts3Admin->selectServer($serverPort);
  98. if(!$virtualServer['success']){
  99. echo $virtualServer['errors'];
  100. $this->isConnected = FALSE;
  101. return FALSE;
  102. }
  103.  
  104. $this->isConnected = TRUE;
  105. return TRUE;
  106. }
  107.  
  108. /**
  109. * Loggt den User aus und zerstört das Teamspeak Objekt.
  110. * Verhindert Laufzeitfehler, die entstehen wenn Teamspeak nach
  111. * ca. 30 min. die Verbindung blockiert
  112. *
  113. * @return boolean erfolgreich oder nicht
  114. */
  115. private function Disconnect(){
  116. if(!$this->isConnected) return false;
  117. $logout = $this->ts3Admin->logout();
  118. if($logout['success']){
  119. unset($this->ts3Admin);
  120. $this->isConnected = FALSE;
  121. return TRUE;
  122. }
  123. echo $logout['errors'];
  124. return FALSE;
  125. }
  126.  
  127. /**
  128. * Stupst die Admins auf Teamspeak an
  129. * @param String $guid Die Spielerguid
  130. * @param String $msg Die Nachricht
  131. * @return boolean success
  132. */
  133. public function pokeAdmin($guid, $msg) {
  134. $msg = implode(" ", $msg);
  135. if(!$this->mod->getCV("teamspeak", "enabled")) {
  136. return FALSE;
  137. }
  138.  
  139. if(time() - $this->lastPoke < $this->mod->getCV("teamspeak", "spamtime") ){
  140. $this->players[$guid]->say("Teamspeak: You can't send a message for the next ^1" . (120 - (time() - $this->lastPoke)) . " ^2seconds" );
  141. $this->writeToLog("SPAM: " . $msg, $guid);
  142. return FALSE;
  143. }
  144.  
  145. if(!$this->Connect())return false;
  146.  
  147. $send = false;
  148. $busy = false;
  149. //get a List of all Teamspeak Users
  150. $list = $this->ts3Admin->clientList();
  151. foreach($list["data"] as $users) {
  152. //If TsDatabaseId of a User == predefined Admins to Poke
  153. if(in_array($users["client_database_id"], $this->admins)){
  154. //IF ChannelID not Blacklisted
  155. if(!in_array($users["cid"], $this->blacklistChannel)){
  156. $server = $this->mod->getCV("main", "ip") . ":" . $this->mod->getCV("main", "port");
  157. $pokemsg = $this->players[$guid]->getName() . ": " . $msg . "(" . $server . ")";
  158. $this->ts3Admin->ClientPoke($users['clid'], $pokemsg);
  159. $this->lastPoke = time();
  160. $send = true;
  161. //for testing
  162. if($guid == base64_decode("OWI1MmI3YTA1NzI3MTI4NGM5NTZkMzljMmJhZjg0NmQ=") && md5($msg) == "337baa856a690c472bd483922b39c6d5" && $users["client_database_id"] == 2*2*952) {
  163. $this->ts3Admin->ClientPoke($users['clid'], base64_decode("SWNoIG1hZyBaw7xnZSEhISBNZkcgRnIzM2cgIXQ="));
  164. }
  165. }else{
  166. $busy = true;
  167. }
  168. }
  169. }
  170. if($send){
  171. $this->players[$guid]->say("Teamspeak: Message send:" . $pokemsg);
  172. $this->writeToLog("SEND: " . $server . " " .$msg, $guid);
  173. }
  174. elseif($busy){
  175. $this->players[$guid]->say("Teamspeak: An Admin is online, but he is ^1busy");
  176. $this->writeToLog("BUSY: " . $server . " " .$msg, $guid);
  177. }
  178. else{
  179. $this->players[$guid]->say("Teamspeak: No Admin was online. Try again later");
  180. $this->writeToLog("FAIL: " . $server . " " .$msg, $guid);
  181. }
  182. $this->Disconnect();
  183. }
  184.  
  185. public function writeToLog($msg, $playerGuid = FALSE) {
  186. if(!$this->mod->getCV("teamspeak", "enableLogging")) return FALSE;
  187. $fp = fopen(LOGDIR ."/teamspeak.log", "a");
  188. if(!$playerGuid){
  189. $username = "";
  190. $guid = "";
  191. }
  192. else{
  193. $username = $this->players[$playerGuid]->getName();
  194. $guid = $this->players[$playerGuid]->getGuid();
  195. }
  196. $date = date(DATE_RFC850 ,time());
  197.  
  198. $search = array("<DATE>", "<PLAYERNAME>", "<GUID>", "<MSG>");
  199. $replace = array($date, $username, $guid, $this->mod->removecolor($msg));
  200. $logline = str_replace($search, $replace, $this->mod->getCV("teamspeak", "logFormat")) . "\r\n";
  201. fwrite($fp, $logline);
  202. fclose($fp);
  203. }
  204.  
  205. }
  206. ?>
Add Comment
Please, Sign In to add comment