1: <?php
2:
3: namespace Budabot\User\Modules;
4:
5: use Exception;
6:
7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
21: class TeamspeakController {
22:
23: 24: 25: 26:
27: public $moduleName;
28:
29:
30: public $chatBot;
31:
32:
33: public $settingManager;
34:
35:
36: public $text;
37:
38: 39: 40:
41: public function setup() {
42: $this->settingManager->add($this->moduleName, "ts_username", "TS Server username", "edit", "text", 'serveradmin', 'serveradmin');
43: $this->settingManager->add($this->moduleName, "ts_password", "TS Server password", "edit", "text", 'password');
44: $this->settingManager->add($this->moduleName, "ts_queryport", "TS Server query port", "edit", "number", '10011', '10011');
45: $this->settingManager->add($this->moduleName, "ts_clientport", "TS Server client port", "edit", "number", '9987', '9987');
46: $this->settingManager->add($this->moduleName, "ts_description", "TS Server description", "edit", "text", 'Teamspeak 3 Server');
47: $this->settingManager->add($this->moduleName, "ts_server", "TS Server IP/domain name", "edit", "text", '127.0.0.1', '127.0.0.1');
48: $this->settingManager->add($this->moduleName, "ts_server_id", "TS Server id", "edit", "number", '1', '1');
49: }
50:
51: 52: 53: 54: 55:
56: public function sendTSStatusLogonEvent($eventObj) {
57: if ($this->chatBot->isReady() && isset($this->chatBot->guildmembers[$eventObj->sender])) {
58: $msg = $this->getTeamspeak3Status();
59: $this->chatBot->sendTell($msg, $eventObj->sender);
60: }
61: }
62:
63: 64: 65: 66:
67: public function tsCommand($message, $channel, $sender, $sendto, $args) {
68: $msg = $this->getTeamspeak3Status();
69: $sendto->reply($msg);
70: }
71:
72: public function getTeamspeak3Status() {
73: $ts = new Teamspeak3(
74: $this->settingManager->get('ts_username'),
75: $this->settingManager->get('ts_password'),
76: $this->settingManager->get('ts_server'),
77: $this->settingManager->get('ts_queryport'),
78: $this->settingManager->get('ts_server_id'));
79:
80: try {
81: $server = $this->settingManager->get('ts_server');
82: $clientPort = $this->settingManager->get('ts_clientport');
83: $serverLink = $this->text->makeChatcmd($server, "/start http://ts3server:://$server:$clientPort");
84:
85: $users = $ts->exec('clientlist');
86: $tmp = $ts->exec('channellist');
87: $channels = Array();
88: foreach($tmp as $c) {
89: $channels[$c['cid']]['name'] = str_replace('\s', ' ', $c['channel_name']);
90: $channels[$c['cid']]['users'] = Array();
91: }
92: $count = 0;
93: foreach($users as $u) {
94: if($u['client_type'] == 0) {
95: $channels[$u['cid']]['users'][] = str_replace('\s', ' ', $u['client_nickname']);
96: $count++;
97: }
98: }
99: $msg = Array();
100: if($count) {
101: foreach($channels as $c) {
102: if(count($c['users'])) {
103: $msg[] = sprintf("<highlight>%s<end>:\n<tab>%s", $c['name'], implode(', ', $c['users']));
104: }
105: }
106: }
107: else {
108: $msg[] = '<i>No users connected</i>';
109: }
110: $msg = sprintf("Server: %s\nDescription: <highlight>%s<end>\n\n%s\n\nTeamspeak 3 support by Tshaar (RK2)", $serverLink, $this->settingManager->get('ts_description'), implode("\n\n", $msg));
111: $msg = $this->text->makeBlob("Teamspeak ($count)", $msg);
112: } catch (Exception $e) {
113: $msg = "Error! " . $e->getMessage();
114: }
115:
116: return $msg;
117: }
118: }
119: