Etsukazu_Aoi

sinusbot.class.php

Apr 13th, 2018
37
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2. /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  3.  *   file                 :  sinusbot.class.php
  4.  *   version              :  0.3
  5.  *   last modified        :  11. October 2017
  6.  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  7.  *   author               :  Manuel Hettche
  8.  *   copyright            :  (C) 2015 TS3index.com
  9.  *   email                :  info@ts3index.com
  10.  *   begin                :  25. Juli 2015
  11.  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  12.  *
  13.  *  This class is a powerful library for querying SinusBot from your website.
  14.  *
  15.  *  This program is free software: you can redistribute it and/or modify
  16.  *  it under the terms of the GNU General Public License as published by
  17.  *  the Free Software Foundation, either version 3 of the License, or
  18.  *  (at your option) any later version.
  19.  *
  20.  *  This program is distributed in the hope that it will be useful,
  21.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  22.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  23.  *  GNU General Public License for more details.
  24.  *
  25.  *  You should have received a copy of the GNU General Public License
  26.  *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
  27.  *
  28.  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
  29.  
  30. class SinusBot {
  31.   public $wiURL = NULL;
  32.   public $wiToken = NULL;
  33.   public $wiTimeout = NULL;
  34.   public $apiURL = NULL;
  35.   public $botUUID = NULL;
  36.   public $instanceUUID = NULL;
  37.  
  38.  
  39. /**
  40.   * login
  41.   *
  42.   * <b>Output:</b><br>
  43.   * <code>
  44.   *  Array
  45.   *  (
  46.   *      [token] => uAG0eyJpIjoiYjg0ZmNkZGYtZTdjZS00OGQyLWI2NTQtMmExYTJiZTY3ZDc[...]
  47.   *      [botId] => b115f224-0687-492f-a88c-ccd9a6582f44
  48.   *      [success] => 1
  49.   *  )
  50.   * </code>
  51.   *
  52.   * @access public
  53.   * @param  string  $username  admin
  54.   * @param  string  $password  foobar
  55.   * @return boolean success
  56.   */
  57.   public function login($username, $password) {
  58.     $login = $this->request('/bot/login', 'POST', json_encode(array('username' => $username, 'password' => $password, 'botId' => $this->botUUID)));
  59.     if ($login != NULL AND isset($login['token'])) $this->wiToken = $login['token'];
  60.     return $login;
  61.   }
  62.  
  63.  
  64. /**
  65.   * getFiles
  66.   *
  67.   * <b>Output:</b><br>
  68.   * <code>
  69.   *  Array
  70.   *  (
  71.   *      [0] => Array
  72.   *          (
  73.   *              [uuid] => f1152001-caa1-4237-9bf3-ed6480bb0c0c
  74.   *              [parent] =>
  75.   *              [type] => folder
  76.   *              [title] => Proximity
  77.   *          )
  78.   *      [1] => Array
  79.   *          (
  80.   *              [uuid] => 2340b137-6e1a-4774-a8a5-60eda927d1f0
  81.   *              [parent] => f1152001-caa1-4237-9bf3-ed6480bb0c0c
  82.   *              [type] =>
  83.   *              [codec] => -
  84.   *              [duration] => 177098
  85.   *              [bitrate] => 253588
  86.   *              [channels] => 2
  87.   *              [samplerate] => 44100
  88.   *              [filesize] => 5675506
  89.   *              [filename] => https://www.youtube.com/watch?v=J2Jx7fMRis8
  90.   *              [title] => Major Lazer & DJ Snake - Lean On (ft. MØ)
  91.   *              [artist] => Proximity
  92.   *          )
  93.   *      [2] => Array
  94.   *          (
  95.   *              [uuid] => 6da519a3-5aa3-4f5e-9e2d-81c88e9159ea
  96.   *              [parent] =>
  97.   *              [type] => url
  98.   *              [filename] => http://stream01.iloveradio.de/iloveradio1.mp3
  99.   *              [title] => I Love Radio
  100.   *          )
  101.   *      [...]
  102.   *  )
  103.   * </code>
  104.   *
  105.   * @access public
  106.   * @return array files
  107.   */
  108.   public function getFiles() {
  109.     return $this->request('/bot/files');
  110.   }
  111.  
  112.  
  113. /**
  114.   * getRadioStations
  115.   *
  116.   * <b>Output:</b><br>
  117.   * <code>
  118.   *  Array
  119.   *  (
  120.   *      [0] => Array
  121.   *          (
  122.   *              [n] => I Love 2 Dance (www.iloveradio.de)
  123.   *              [u] => http://87.230.53.70:80/iloveradio2.mp3
  124.   *              [g] => electronic top elektro pop 40 house dance
  125.   *              [b] => 128
  126.   *          )
  127.   *      [1] => Array
  128.   *          (
  129.   *              [n] => I Love Ibiza (www.iloveradio.de)
  130.   *              [u] => http://80.237.157.81:80/iloveradio6.mp3
  131.   *              [g] => house electronic electro deephouse ibiza chillout
  132.   *              [b] => 128
  133.   *          )
  134.   *      [...]
  135.   *  )
  136.   * </code>
  137.   *
  138.   * @access public
  139.   * @param  string  $search  iloveradio
  140.   * @return array stations
  141.   */
  142.   public function getRadioStations($search = "") {
  143.     return $this->request('/bot/stations?q='.urlencode($search));
  144.   }
  145.  
  146.  
  147. /**
  148.   * getStatus
  149.   *
  150.   * <b>Output:</b><br>
  151.   * <code>
  152.   *  Array
  153.   *  (
  154.   *      [v] => 0.9.9-b533b94
  155.   *      [currentTrack] => Array
  156.   *          (
  157.   *              [uuid] => 6da519a3-5aa3-4f5e-9e2d-81c88e9159ea
  158.   *              [parent] => 9ecbe0ed-8963-443a-9e23-4a815aa01dc2
  159.   *              [type] => url
  160.   *              [filename] => http://stream01.iloveradio.de/iloveradio1.mp3
  161.   *              [title] => I Love Radio
  162.   *              [tempArtist] => MARTIN TUNGEVAAG
  163.   *              [tempTitle] => WICKED WONDERLAND
  164.   *          )
  165.   *      [position] => 204852
  166.   *      [running] => 1
  167.   *      [playing] => 1
  168.   *      [playlist] =>
  169.   *      [playlistTrack] => -1
  170.   *      [shuffle] =>
  171.   *      [repeat] =>
  172.   *      [volume] => 5
  173.   *      [needsRestart] =>
  174.   *      [queueLen] => 0
  175.   *      [queueVersion] => 0
  176.   *      [modes] => 1
  177.   *      [downloaded] => 49804057
  178.   *  )
  179.   * </code>
  180.   *
  181.   * @access public
  182.   * @param  string  $instanceUUID  6421eedc-9705-4706-a269-cf6f38fa1a33
  183.   * @return array status
  184.   */
  185.   public function getStatus($instanceUUID = NULL) {
  186.     if ($instanceUUID == NULL) $instanceUUID = $this->instanceUUID;
  187.     return $this->request('/bot/i/'.$instanceUUID.'/status');;
  188.   }
  189.  
  190.  
  191. /**
  192.   * getInfos
  193.   *
  194.   * <b>Output:</b><br>
  195.   * <code>
  196.   *  Array
  197.   *  (
  198.   *      [bot] => Array
  199.   *          (
  200.   *              [id] => b115f224-0687-492f-a88c-ccd9a6582f44
  201.   *              [alias] =>
  202.   *              [spaceUsed] => 2250578715
  203.   *              [limitSpace] => 0
  204.   *              [limitFiles] => 0
  205.   *              [limitPlaylists] => 20
  206.   *              [limitInstances] => 2
  207.   *              [limitUsers] => 100
  208.   *              [limitDownloadRate] => 0
  209.   *              [limitDownloadSize] => 0
  210.   *              [locked] => 0
  211.   *              [deleted] => 0
  212.   *              [disallowDownload] => 0
  213.   *              [disallowStreaming] => 0
  214.   *              [downloadedBytes] => 14344525900
  215.   *              [statHTTPRequests] => 187734
  216.   *              [statPlayCount] => 46710
  217.   *              [statCommandCount] => 0
  218.   *          )
  219.   *      [usageMemory] => 49.11547
  220.   *      [system] => Array
  221.   *          (
  222.   *              [codecs] => Array
  223.   *                  (
  224.   *                      [0] => Multicolor charset for Commodore 64
  225.   *                      [1] => Apple Intermediate Codec
  226.   *                      [2] => Autodesk RLE
  227.   *                      [...]
  228.   *                  )
  229.   *              [formats] => Array
  230.   *                  (
  231.   *                      [0] => MP3 (MPEG audio layer 3)
  232.   *                      [1] => WAV / WAVE (Waveform Audio)
  233.   *                      [2] => ADTS AAC (Advanced Audio Coding)
  234.   *                      [...]
  235.   *                  )
  236.   *          )
  237.   *  )
  238.   * </code>
  239.   *
  240.   * @access public
  241.   * @return array playlists
  242.   */
  243.   public function getInfos() {
  244.     return $this->request('/bot/info');
  245.   }
  246.  
  247.  
  248. /**
  249.   * getInstanceLog
  250.   *
  251.   * <b>Output:</b><br>
  252.   * <code>
  253.   *  Array
  254.   *  (
  255.   *      [0] => Array
  256.   *          (
  257.   *              [m] => Done playing
  258.   *              [t] => 1437858096
  259.   *              [s] => 5
  260.   *          )
  261.   *      [1] => Array
  262.   *          (
  263.   *              [m] => Playing next from queue: 64c04ea4-f260-4264-9cdc-93ef26b0cffb
  264.   *              [t] => 1437858097
  265.   *              [s] => 3
  266.   *          )
  267.   *      [2] => Array
  268.   *          (
  269.   *              [m] => STOP [admin] OK
  270.   *              [t] => 1437858193
  271.   *              [s] => 3
  272.   *          )
  273.   *      [...]
  274.   *  )
  275.   * </code>
  276.   *
  277.   * @access public
  278.   * @param  string  $instanceUUID  6421eedc-9705-4706-a269-cf6f38fa1a33
  279.   * @return array log
  280.   */
  281.   public function getInstanceLog($instanceUUID = NULL) {
  282.     if ($instanceUUID == NULL) $instanceUUID = $this->instanceUUID;
  283.     return $this->request('/bot/i/'.$instanceUUID.'/log');
  284.   }
  285.  
  286.  
  287. /**
  288.   * getPlaylists
  289.   *
  290.   * <b>Output:</b><br>
  291.   * <code>
  292.   *  Array
  293.   *  (
  294.   *      [0] => Array
  295.   *          (
  296.   *              [uuid] => a5414bca-ba23-435f-bec4-79d7a1cfd138
  297.   *              [name] => Proximity
  298.   *              [count] => 51
  299.   *          )
  300.   *      [1] => Array
  301.   *          (
  302.   *              [uuid] => fb9491d9-b67d-4d5d-94a7-349366532d59
  303.   *              [name] => Radio
  304.   *              [count] => 4
  305.   *          )
  306.   *      [...]
  307.   *  )
  308.   * </code>
  309.   *
  310.   * @access public
  311.   * @return array playlists
  312.   */
  313.   public function getPlaylists() {
  314.     return $this->request('/bot/playlists');
  315.   }
  316.  
  317.  
  318. /**
  319.   * createPlaylist
  320.   *
  321.   * <b>Output:</b><br>
  322.   * <code>
  323.   *  Array
  324.   *  (
  325.   *      [success] => 1
  326.   *      [uuid] => a5414bca-ba23-435f-bec4-79d7a1cfd138
  327.   *  )
  328.   * </code>
  329.   *
  330.   * @access public
  331.   * @param  string  $playlistName  Playlist
  332.   * @return array status
  333.   */
  334.   public function createPlaylist($playlistName) {
  335.     return $this->request('/bot/playlists', 'POST', json_encode(array("name" => $playlistName)));
  336.   }
  337.  
  338.  
  339. /**
  340.   * renamePlaylist
  341.   *
  342.   * <b>Output:</b><br>
  343.   * <code>
  344.   *  Array
  345.   *  (
  346.   *      [success] => 1
  347.   *  )
  348.   * </code>
  349.   *
  350.   * @access public
  351.   * @param  string  $playlistName  Playlist
  352.   * @param  string  $playlistUUID  a5414bca-ba23-435f-bec4-79d7a1cfd138
  353.   * @return array status
  354.   */
  355.   public function renamePlaylist($playlistName, $playlistUUID) {
  356.     return $this->request('/bot/playlists/'.$playlistUUID, 'PATCH', json_encode(array("name" => $playlistName)));
  357.   }
  358.  
  359.  
  360. /**
  361.   * deletePlaylist
  362.   *
  363.   * <b>Output:</b><br>
  364.   * <code>
  365.   *  Array
  366.   *  (
  367.   *      [success] => 1
  368.   *  )
  369.   * </code>
  370.   *
  371.   * @access public
  372.   * @param  string  $playlistUUID  a5414bca-ba23-435f-bec4-79d7a1cfd138
  373.   * @return array status
  374.   */
  375.   public function deletePlaylist($playlistUUID) {
  376.     return $this->request('/bot/playlists/'.$playlistUUID, 'DELETE');
  377.   }
  378.  
  379.  
  380. /**
  381.   * getPlaylistTracks
  382.   *
  383.   * <b>Output:</b><br>
  384.   * <code>
  385.   *  Array
  386.   *  (
  387.   *      [uuid] => a5414bca-ba23-435f-bec4-79d7a1cfd138
  388.   *      [name] => Proximity
  389.   *      [entries] => Array
  390.   *          (
  391.   *              [0] => 56e046b5-05e9-4e53-b5be-42a3176f368e
  392.   *              [1] => fdb9d65d-90b0-4ed0-b17f-aff5d627db6d
  393.   *              [2] => 55add8ac-e265-489c-afa7-0bd8877f8b24
  394.   *              [3] => e7dd610c-39b9-4d0b-abbe-54010b696ae7
  395.   *              [...]
  396.   *          )
  397.   *      [count] => 51
  398.   *  )
  399.   * </code>
  400.   *
  401.   * @access public
  402.   * @param  string  $playlistUUID  a5414bca-ba23-435f-bec4-79d7a1cfd138
  403.   * @return array files
  404.   */
  405.   public function getPlaylistTracks($playlistUUID) {
  406.     return $this->request('/bot/playlists/'.$playlistUUID);
  407.   }
  408.  
  409.  
  410. /**
  411.   * addPlaylistTrack
  412.   *
  413.   * <b>Output:</b><br>
  414.   * <code>
  415.   *  Array
  416.   *  (
  417.   *      [success] => 1
  418.   *  )
  419.   * </code>
  420.   *
  421.   * @access public
  422.   * @param  string  $trackUUID     2340b137-6e1a-4774-a8a5-60eda927d1f0
  423.   * @param  string  $playlistUUID  a5414bca-ba23-435f-bec4-79d7a1cfd138
  424.   * @return array status
  425.   */
  426.   public function addPlaylistTrack($trackUUID, $playlistUUID) {
  427.     return $this->request('/bot/playlists/'.$playlistUUID, 'POST', json_encode(array("uuid" => $trackUUID)));
  428.   }
  429.  
  430.  
  431. /**
  432.   * deletePlaylistTrack
  433.   *
  434.   * <b>Output:</b><br>
  435.   * <code>
  436.   *  Array
  437.   *  (
  438.   *      [success] => 1
  439.   *  )
  440.   * </code>
  441.   *
  442.   * @access public
  443.   * @param  integer  $trackPosition  first entry = 0
  444.   * @param  string   $playlistUUID   a5414bca-ba23-435f-bec4-79d7a1cfd138
  445.   * @return array status
  446.   */
  447.   public function deletePlaylistTrack($trackPosition, $playlistUUID) {
  448.     return $this->request('/bot/playlists/'.$playlistUUID.'/'.$trackPosition, 'DELETE');
  449.   }
  450.  
  451.  
  452. /**
  453.   * deletePlaylistTracks
  454.   *
  455.   * <b>Output:</b><br>
  456.   * <code>
  457.   *  Array
  458.   *  (
  459.   *      [success] => 1
  460.   *  )
  461.   * </code>
  462.   *
  463.   * @access public
  464.   * @param  string   $playlistUUID   a5414bca-ba23-435f-bec4-79d7a1cfd138
  465.   * @return array status
  466.   */
  467.   public function deletePlaylistTracks($playlistUUID) {
  468.     $currentTracks = $this->getPlaylistTracks($playlistUUID);
  469.     if ($currentTracks == NULL OR !is_array($currentTracks)) return NULL;
  470.    
  471.     return $this->request('/bot/bulk/playlist/'.$playlistUUID.'/files', 'POST', json_encode(array("op" => "delete", "files" => array_keys($currentTracks['entries']))));
  472.   }
  473.  
  474.  
  475. /**
  476.   * getQueueTracks
  477.   *
  478.   * <b>Output:</b><br>
  479.   * <code>
  480.   *  Array
  481.   *  (
  482.   *      [0] => 64c04ea4-f260-4264-9cdc-93ef26b0cffb
  483.   *      [1] => c5c6ca41-258d-4478-8043-c1a5f037c835
  484.   *  )
  485.   * </code>
  486.   *
  487.   * @access public
  488.   * @param  string  $instanceUUID  6421eedc-9705-4706-a269-cf6f38fa1a33
  489.   * @return array files
  490.   */
  491.   public function getQueueTracks($instanceUUID = NULL) {
  492.     if ($instanceUUID == NULL) $instanceUUID = $this->instanceUUID;
  493.     return $this->request('/bot/i/'.$instanceUUID.'/queue');
  494.   }
  495.  
  496.  
  497. /**
  498.   * appendQueueTrack
  499.   *
  500.   * <b>Output:</b><br>
  501.   * <code>
  502.   *  Array
  503.   *  (
  504.   *      [success] => 1
  505.   *  )
  506.   * </code>
  507.   *
  508.   * @access public
  509.   * @param  string  $trackUUID     2340b137-6e1a-4774-a8a5-60eda927d1f0
  510.   * @param  string  $instanceUUID  6421eedc-9705-4706-a269-cf6f38fa1a33
  511.   * @return array status
  512.   */
  513.   public function appendQueueTrack($trackUUID, $instanceUUID = NULL) {
  514.     if ($instanceUUID == NULL) $instanceUUID = $this->instanceUUID;
  515.     return $this->request('/bot/i/'.$instanceUUID.'/queue/append/'.$trackUUID, 'POST', "");
  516.   }
  517.  
  518.  
  519. /**
  520.   * prependQueueTrack
  521.   *
  522.   * <b>Output:</b><br>
  523.   * <code>
  524.   *  Array
  525.   *  (
  526.   *      [success] => 1
  527.   *  )
  528.   * </code>
  529.   *
  530.   * @access public
  531.   * @param  string  $trackUUID     2340b137-6e1a-4774-a8a5-60eda927d1f0
  532.   * @param  string  $instanceUUID  6421eedc-9705-4706-a269-cf6f38fa1a33
  533.   * @return array status
  534.   */
  535.   public function prependQueueTrack($trackUUID, $instanceUUID = NULL) {
  536.     if ($instanceUUID == NULL) $instanceUUID = $this->instanceUUID;
  537.     return $this->request('/bot/i/'.$instanceUUID.'/queue/prepend/'.$trackUUID, 'POST', "");
  538.   }
  539.  
  540.  
  541. /**
  542.   * deleteQueueTrack
  543.   *
  544.   * <b>Output:</b><br>
  545.   * <code>
  546.   *  Array
  547.   *  (
  548.   *      [success] => 1
  549.   *  )
  550.   * </code>
  551.   *
  552.   * @access public
  553.   * @param  integer  $trackPosition  first entry = 0
  554.   * @param  string   $instanceUUID   6421eedc-9705-4706-a269-cf6f38fa1a33
  555.   * @return array status
  556.   */
  557.   public function deleteQueueTrack($trackPosition, $instanceUUID) {
  558.     if ($instanceUUID == NULL) $instanceUUID = $this->instanceUUID;
  559.    
  560.     $currentTracks = $this->getQueueTracks($instanceUUID);
  561.     if ($currentTracks == NULL OR !is_array($currentTracks)) return NULL;
  562.     unset($currentTracks[$trackPosition]);
  563.    
  564.     return $this->request('/bot/i/'.$instanceUUID.'/queue', 'PATCH', json_encode(array_values($currentTracks)));
  565.   }
  566.  
  567.  
  568. /**
  569.   * deleteQueueTracks
  570.   *
  571.   * <b>Output:</b><br>
  572.   * <code>
  573.   *  Array
  574.   *  (
  575.   *      [success] => 1
  576.   *  )
  577.   * </code>
  578.   *
  579.   * @access public
  580.   * @param  string   $instanceUUID   6421eedc-9705-4706-a269-cf6f38fa1a33
  581.   * @return array status
  582.   */
  583.   public function deleteQueueTracks($instanceUUID = NULL) {
  584.     if ($instanceUUID == NULL) $instanceUUID = $this->instanceUUID;
  585.     return $this->request('/bot/i/'.$instanceUUID.'/queue', 'PATCH', json_encode(array()));
  586.   }
  587.  
  588.  
  589. /**
  590.   * say
  591.   *
  592.   * <b>Output:</b><br>
  593.   * <code>
  594.   *  Array
  595.   *  (
  596.   *      [success] => 1
  597.   *  )
  598.   * </code>
  599.   *
  600.   * @access public
  601.   * @param  string  $text          Welcome
  602.   * @param  string  $locale        en
  603.   * @param  string  $instanceUUID  6421eedc-9705-4706-a269-cf6f38fa1a33
  604.   * @return array status
  605.   */
  606.   public function say($text, $locale, $instanceUUID = NULL) {
  607.     if ($instanceUUID == NULL) $instanceUUID = $this->instanceUUID;
  608.     return $this->request('/bot/i/'.$instanceUUID.'/say', 'POST', json_encode(array("text" => $text, "locale" => $locale)));
  609.   }
  610.  
  611.  
  612. /**
  613.   * playTrack
  614.   *
  615.   * <b>Output:</b><br>
  616.   * <code>
  617.   *  Array
  618.   *  (
  619.   *      [success] => 1
  620.   *  )
  621.   * </code>
  622.   *
  623.   * @access public
  624.   * @param  string  $trackUUID     6da519a3-5aa3-4f5e-9e2d-81c88e9159ea
  625.   * @param  string  $instanceUUID  6421eedc-9705-4706-a269-cf6f38fa1a33
  626.   * @return array status
  627.   */
  628.   public function playTrack($trackUUID, $instanceUUID = NULL) {
  629.     if ($instanceUUID == NULL) $instanceUUID = $this->instanceUUID;
  630.     return $this->request('/bot/i/'.$instanceUUID.'/play/byId/'.$trackUUID, 'POST', '');
  631.   }
  632.  
  633.  
  634. /**
  635.   * playURL
  636.   *
  637.   * <b>Output:</b><br>
  638.   * <code>
  639.   *  Array
  640.   *  (
  641.   *      [success] => 1
  642.   *  )
  643.   * </code>
  644.   *
  645.   * @access public
  646.   * @param  string  $url           http://stream06.iloveradio.de/iloveradio1.mp3
  647.   * @param  string  $instanceUUID  6421eedc-9705-4706-a269-cf6f38fa1a33
  648.   * @return array status
  649.   */
  650.   public function playURL($url, $instanceUUID = NULL) {
  651.     if ($instanceUUID == NULL) $instanceUUID = $this->instanceUUID;
  652.     return $this->request('/bot/i/'.$instanceUUID.'/playUrl?url='.urlencode($url), 'POST', '');
  653.   }
  654.  
  655.  
  656. /**
  657.   * playPlaylist
  658.   *
  659.   * <b>Output:</b><br>
  660.   * <code>
  661.   *  Array
  662.   *  (
  663.   *      [success] => 1
  664.   *  )
  665.   * </code>
  666.   *
  667.   * @access public
  668.   * @param  string  $playlistUUID   a5414bca-ba23-435f-bec4-79d7a1cfd138
  669.   * @param  string  $playlistIndex  0
  670.   * @param  string  $instanceUUID   6421eedc-9705-4706-a269-cf6f38fa1a33
  671.   * @return array status
  672.   */
  673.   public function playPlaylist($playlistUUID, $playlistIndex = 0, $instanceUUID = NULL) {
  674.     if ($instanceUUID == NULL) $instanceUUID = $this->instanceUUID;
  675.     return $this->request('/bot/i/'.$instanceUUID.'/play/byList/'.$playlistUUID.'/'.$playlistIndex, 'POST', '');
  676.   }
  677.  
  678.  
  679. /**
  680.   * playPrevious
  681.   *
  682.   * <b>Output:</b><br>
  683.   * <code>
  684.   *  Array
  685.   *  (
  686.   *      [success] => 1
  687.   *  )
  688.   * </code>
  689.   *
  690.   * @access public
  691.   * @param  string  $instanceUUID  6421eedc-9705-4706-a269-cf6f38fa1a33
  692.   * @return array status
  693.   */
  694.   public function playPrevious($instanceUUID = NULL) {
  695.     if ($instanceUUID == NULL) $instanceUUID = $this->instanceUUID;
  696.     return $this->request('/bot/i/'.$instanceUUID.'/playPrevious', 'POST', '');
  697.   }
  698.  
  699.  
  700. /**
  701.   * playNext
  702.   *
  703.   * <b>Output:</b><br>
  704.   * <code>
  705.   *  Array
  706.   *  (
  707.   *      [success] => 1
  708.   *  )
  709.   * </code>
  710.   *
  711.   * @access public
  712.   * @param  string  $instanceUUID  6421eedc-9705-4706-a269-cf6f38fa1a33
  713.   * @return array status
  714.   */
  715.   public function playNext($instanceUUID = NULL) {
  716.     if ($instanceUUID == NULL) $instanceUUID = $this->instanceUUID;
  717.     return $this->request('/bot/i/'.$instanceUUID.'/playNext', 'POST', '');
  718.   }
  719.  
  720.  
  721. /**
  722.   * playRepeat
  723.   *
  724.   * <b>Output:</b><br>
  725.   * <code>
  726.   *  Array
  727.   *  (
  728.   *      [success] => 1
  729.   *  )
  730.   * </code>
  731.   *
  732.   * @access public
  733.   * @param  integer $repeatState   {0=disable,1=enable}
  734.   * @param  string  $instanceUUID  6421eedc-9705-4706-a269-cf6f38fa1a33
  735.   * @return array status
  736.   */
  737.   public function playRepeat($repeatState = 1, $instanceUUID = NULL) {
  738.     if ($instanceUUID == NULL) $instanceUUID = $this->instanceUUID;
  739.     return $this->request('/bot/i/'.$instanceUUID.'/repeat/'.$repeatState, 'POST', '');
  740.   }
  741.  
  742.  
  743. /**
  744.   * playShuffle
  745.   *
  746.   * <b>Output:</b><br>
  747.   * <code>
  748.   *  Array
  749.   *  (
  750.   *      [success] => 1
  751.   *  )
  752.   * </code>
  753.   *
  754.   * @access public
  755.   * @param  integer $shuffleState  {0=disable,1=enable}
  756.   * @param  string  $instanceUUID  6421eedc-9705-4706-a269-cf6f38fa1a33
  757.   * @return array status
  758.   */
  759.   public function playShuffle($shuffleState = 1, $instanceUUID = NULL) {
  760.     if ($instanceUUID == NULL) $instanceUUID = $this->instanceUUID;
  761.     return $this->request('/bot/i/'.$instanceUUID.'/shuffle/'.$shuffleState, 'POST', '');
  762.   }
  763.  
  764.  
  765. /**
  766.   * stop
  767.   *
  768.   * <b>Output:</b><br>
  769.   * <code>
  770.   *  Array
  771.   *  (
  772.   *      [success] => 1
  773.   *  )
  774.   * </code>
  775.   *
  776.   * @access public
  777.   * @param  string  $instanceUUID  6421eedc-9705-4706-a269-cf6f38fa1a33
  778.   * @return array status
  779.   */
  780.   public function stop($instanceUUID = NULL) {
  781.     if ($instanceUUID == NULL) $instanceUUID = $this->instanceUUID;
  782.     return $this->request('/bot/i/'.$instanceUUID.'/stop', 'POST', '');
  783.   }
  784.  
  785.  
  786. /**
  787.   * seekPlayback
  788.   *
  789.   * <b>Output:</b><br>
  790.   * <code>
  791.   *  Array
  792.   *  (
  793.   *      [success] => 1
  794.   *  )
  795.   * </code>
  796.   *
  797.   * @access public
  798.   * @param  integer  $position      0
  799.   * @param  string   $instanceUUID  6421eedc-9705-4706-a269-cf6f38fa1a33
  800.   * @return array status
  801.   */
  802.   public function seekPlayback($position = 0, $instanceUUID = NULL) {
  803.     if ($instanceUUID == NULL) $instanceUUID = $this->instanceUUID;
  804.     return $this->request('/bot/i/'.$instanceUUID.'/seek/'.$position, 'POST', '');
  805.   }
  806.  
  807.  
  808. /**
  809.   * getPlayedTracks
  810.   *
  811.   * @access public
  812.   * @param  string  $instanceUUID  6421eedc-9705-4706-a269-cf6f38fa1a33
  813.   * @return array   array of uuids
  814.   */
  815.   public function getPlayedTracks($instanceUUID = NULL) {
  816.     if ($instanceUUID == NULL) $instanceUUID = $this->instanceUUID;
  817.     return $this->request('/bot/i/'.$instanceUUID.'/recent', 'POST', '');
  818.   }
  819.  
  820.  
  821. /**
  822.   * moveTrack
  823.   *
  824.   * <b>Output:</b><br>
  825.   * <code>
  826.   *  Array
  827.   *  (
  828.   *      [success] => 1
  829.   *  )
  830.   * </code>
  831.   *
  832.   * @access public
  833.   * @param  string  $trackUUID  6421eedc-9705-4706-a269-cf6f38fa1a33
  834.   * @param  string  $parent     subfolder UUID, empty value = mainfolder
  835.   * @return array status
  836.   */
  837.   public function moveTrack($trackUUID, $parent = "") {
  838.     return $this->request('/bot/files/'.$trackUUID, 'PATCH', json_encode(array("parent" => $parent)));
  839.   }
  840.  
  841.  
  842. /**
  843.   * editTrack
  844.   *
  845.   * <b>Output:</b><br>
  846.   * <code>
  847.   *  Array
  848.   *  (
  849.   *      [success] => 1
  850.   *  )
  851.   * </code>
  852.   *
  853.   * @access public
  854.   * @param  string  $trackUUID  6421eedc-9705-4706-a269-cf6f38fa1a33
  855.   * @param  string  $title      Title
  856.   * @param  string  $artist     Artist
  857.   * @param  string  $album      Album
  858.   * @return array status
  859.   */
  860.   public function editTrack($trackUUID, $title, $artist = "", $album = "") {
  861.     return $this->request('/bot/files/'.$trackUUID, 'PATCH', json_encode(array("displayTitle" => $title, "title" => $title, "artist" => $artist, "album" => $album)));
  862.   }
  863.  
  864.  
  865. /**
  866.   * deleteTrack
  867.   *
  868.   * <b>Output:</b><br>
  869.   * <code>
  870.   *  Array
  871.   *  (
  872.   *      [success] => 1
  873.   *  )
  874.   * </code>
  875.   *
  876.   * @access public
  877.   * @param  string  $trackUUID  6421eedc-9705-4706-a269-cf6f38fa1a33
  878.   * @return array status
  879.   */
  880.   public function deleteTrack($trackUUID) {
  881.     return $this->request('/bot/files/'.$trackUUID, 'DELETE');
  882.   }
  883.  
  884.  
  885. /**
  886.   * getVolume
  887.   *
  888.   * @access public
  889.   * @param  string  $instanceUUID  6421eedc-9705-4706-a269-cf6f38fa1a33
  890.   * @return integer
  891.   */
  892.   public function getVolume($instanceUUID = NULL) {
  893.     if ($instanceUUID == NULL) $instanceUUID = $this->instanceUUID;
  894.     return $this->getStatus($instanceUUID)['volume'];
  895.   }
  896.  
  897.  
  898. /**
  899.   * setVolume
  900.   *
  901.   * <b>Output:</b><br>
  902.   * <code>
  903.   *  Array
  904.   *  (
  905.   *      [success] => 1
  906.   *  )
  907.   * </code>
  908.   *
  909.   * @access public
  910.   * @param  string  $volume        {0-100}
  911.   * @param  string  $instanceUUID  6421eedc-9705-4706-a269-cf6f38fa1a33
  912.   * @return array status
  913.   */
  914.   public function setVolume($volume = 50, $instanceUUID = NULL) {
  915.     if ($instanceUUID == NULL) $instanceUUID = $this->instanceUUID;
  916.     return $this->request('/bot/i/'.$instanceUUID.'/volume/set/'.$volume, 'POST', '');
  917.   }
  918.  
  919.  
  920. /**
  921.   * setVolumeUp
  922.   *
  923.   * <b>Output:</b><br>
  924.   * <code>
  925.   *  Array
  926.   *  (
  927.   *      [success] => 1
  928.   *  )
  929.   * </code>
  930.   *
  931.   * @access public
  932.   * @param  string  $instanceUUID  6421eedc-9705-4706-a269-cf6f38fa1a33
  933.   * @return array status
  934.   */
  935.   public function setVolumeUp($instanceUUID = NULL) {
  936.     if ($instanceUUID == NULL) $instanceUUID = $this->instanceUUID;
  937.     return $this->request('/bot/i/'.$instanceUUID.'/volume/up', 'POST', '');
  938.   }
  939.  
  940.  
  941. /**
  942.   * setVolumeDown
  943.   *
  944.   * <b>Output:</b><br>
  945.   * <code>
  946.   *  Array
  947.   *  (
  948.   *      [success] => 1
  949.   *  )
  950.   * </code>
  951.   *
  952.   * @access public
  953.   * @param  string  $instanceUUID  6421eedc-9705-4706-a269-cf6f38fa1a33
  954.   * @return array status
  955.   */
  956.   public function setVolumeDown($instanceUUID = NULL) {
  957.     if ($instanceUUID == NULL) $instanceUUID = $this->instanceUUID;
  958.     return $this->request('/bot/i/'.$instanceUUID.'/volume/down', 'POST', '');
  959.   }
  960.  
  961.  
  962. /**
  963.   * addURL
  964.   *
  965.   * <b>Output:</b><br>
  966.   * <code>
  967.   *  Array
  968.   *  (
  969.   *      [success] => 1
  970.   *      [uuid] => 1fa468a3-a39c-41c4-bab7-ff9491dbfb12
  971.   *  )
  972.   * </code>
  973.   *
  974.   * @access public
  975.   * @param  string  $url     http://stream06.iloveradio.de/iloveradio1.mp3
  976.   * @param  string  $title   I Love Radio
  977.   * @param  string  $parent  subfolder UUID, empty value = mainfolder
  978.   * @return array status
  979.   */
  980.   public function addURL($url, $title, $parent = "") {
  981.     return $this->request('/bot/url', 'POST', json_encode(array("url" => $url, "title" => $title, "parent" => $parent)));
  982.   }
  983.  
  984.  
  985. /**
  986.   * addFolder
  987.   *
  988.   * <b>Output:</b><br>
  989.   * <code>
  990.   *  Array
  991.   *  (
  992.   *      [success] => 1
  993.   *      [uuid] => 1fa468a3-a39c-41c4-bab7-ff9491dbfb12
  994.   *  )
  995.   * </code>
  996.   *
  997.   * @access public
  998.   * @param  string  $folderName  Folder
  999.   * @param  string  $parent      subfolder UUID, empty value = mainfolder
  1000.   * @return array status
  1001.   */
  1002.   public function addFolder($folderName = "Folder", $parent = "") {
  1003.     return $this->request('/bot/folders', 'POST', json_encode(array("name" => $folderName, "parent" => $parent)));
  1004.   }
  1005.  
  1006.  
  1007. /**
  1008.   * moveFolder
  1009.   *
  1010.   * <b>Output:</b><br>
  1011.   * <code>
  1012.   *  Array
  1013.   *  (
  1014.   *      [success] => 1
  1015.   *  )
  1016.   * </code>
  1017.   *
  1018.   * @access public
  1019.   * @param  string  $folderUUID  866828b7-5e40-4a41-a3a7-9b4584dc3992
  1020.   * @param  string  $parent      subfolder UUID, empty value = mainfolder
  1021.   * @return array status
  1022.   */
  1023.   public function moveFolder($folderUUID, $parent = "") {
  1024.     return $this->moveTrack($folderUUID, $parent);
  1025.   }
  1026.  
  1027.  
  1028. /**
  1029.   * renameFolder
  1030.   *
  1031.   * <b>Output:</b><br>
  1032.   * <code>
  1033.   *  Array
  1034.   *  (
  1035.   *      [success] => 1
  1036.   *  )
  1037.   * </code>
  1038.   *
  1039.   * @access public
  1040.   * @param  string  $folderName  Folder
  1041.   * @param  string  $folderUUID  866828b7-5e40-4a41-a3a7-9b4584dc3992
  1042.   * @return array status
  1043.   */
  1044.   public function renameFolder($folderName, $folderUUID) {
  1045.     return $this->request('/bot/files/'.$folderUUID, 'PATCH', json_encode(array("uuid" => $folderUUID, "type" => "folder", "title" => $folderName)));
  1046.   }
  1047.  
  1048.  
  1049. /**
  1050.   * deleteFolder
  1051.   *
  1052.   * <b>Output:</b><br>
  1053.   * <code>
  1054.   *  Array
  1055.   *  (
  1056.   *      [success] => 1
  1057.   *  )
  1058.   * </code>
  1059.   *
  1060.   * @access public
  1061.   * @param  string  $folderUUID  866828b7-5e40-4a41-a3a7-9b4584dc3992
  1062.   * @return array status
  1063.   */
  1064.   public function deleteFolder($folderUUID) {
  1065.     return $this->deleteTrack($folderUUID);
  1066.   }
  1067.  
  1068.  
  1069. /**
  1070.   * getJobs
  1071.   *
  1072.   * <b>Output:</b><br>
  1073.   * <code>
  1074.   *  Array
  1075.   *  (
  1076.   *      [0] => Array
  1077.   *          (
  1078.   *              [uuid] => 1fa468a3-a39c-41c4-bab7-ff9491dbfb12
  1079.   *              [url] => https://www.youtube.com/watch?v=hdMt_yUDpH8
  1080.   *              [size] => 3.34MiB
  1081.   *              [perc] => 100.0
  1082.   *              [status] => success
  1083.   *              [trackuuid] => f0cdd335-22e1-4542-b2eb-ba3933fdd7ce
  1084.   *              [msg] =>
  1085.   *              [eta] => 00:00
  1086.   *              [bw] => 61.46MiB
  1087.   *              [play] =>
  1088.   *              [done] => 1
  1089.   *              [temp] =>
  1090.   *          )
  1091.   *      [...]
  1092.   *  )
  1093.   * </code>
  1094.   *
  1095.   * @access public
  1096.   * @return array
  1097.   */
  1098.   public function getJobs() {
  1099.     return $this->request('/bot/jobs');
  1100.   }
  1101.  
  1102.  
  1103. /**
  1104.   * addJob
  1105.   *
  1106.   * <b>Output:</b><br>
  1107.   * <code>
  1108.   *  Array
  1109.   *  (
  1110.   *      [success] => 1
  1111.   *      [uuid] => 1fa468a3-a39c-41c4-bab7-ff9491dbfb12
  1112.   *  )
  1113.   * </code>
  1114.   *
  1115.   * @access public
  1116.   * @param  string  $URL  {YouTube-URL,SoundCloud-URL,Directfile}
  1117.   * @return array status
  1118.   */
  1119.   public function addJob($URL) {
  1120.     return $this->request('/bot/jobs', 'POST', json_encode(array('url'=>$URL)));
  1121.   }
  1122.  
  1123.  
  1124. /**
  1125.   * deleteJob
  1126.   *
  1127.   * <b>Output:</b><br>
  1128.   * <code>
  1129.   *  Array
  1130.   *  (
  1131.   *      [success] => 1
  1132.   *  )
  1133.   * </code>
  1134.   *
  1135.   * @access public
  1136.   * @param  string  $jobUUID  1fa468a3-a39c-41c4-bab7-ff9491dbfb12
  1137.   * @return array status
  1138.   */
  1139.   public function deleteJob($jobUUID) {
  1140.     return $this->request('/bot/jobs/'.$jobUUID, 'DELETE');
  1141.   }
  1142.  
  1143.  
  1144. /**
  1145.   * deleteFinishedJobs
  1146.   *
  1147.   * <b>Output:</b><br>
  1148.   * <code>
  1149.   *  Array
  1150.   *  (
  1151.   *      [success] => 1
  1152.   *  )
  1153.   * </code>
  1154.   *
  1155.   * @access public
  1156.   * @return array status
  1157.   */
  1158.   public function deleteFinishedJobs() {
  1159.     return $this->request('/bot/jobs', 'DELETE');
  1160.   }
  1161.  
  1162.  
  1163. /**
  1164.   * uploadTrack
  1165.   *
  1166.   * <b>Output:</b><br>
  1167.   * <code>
  1168.   *  Array
  1169.   *  (
  1170.   *      [uuid] => fa4cedf8-e71a-40a3-855e-fd628d68a159
  1171.   *      [parent] =>
  1172.   *      [type] =>
  1173.   *      [path] => 963b1543a5e0fed2680f98c509226e915b84ef082ea5c9336b1f0ee46a5dd5ab
  1174.   *      [codec] => -
  1175.   *      [duration] => 223268
  1176.   *      [bitrate] => 251854
  1177.   *      [channels] => 2
  1178.   *      [samplerate] => 44100
  1179.   *      [filesize] => 7075562
  1180.   *      [title] => Wrecking Ball
  1181.   *      [artist] => Miley Cyrus
  1182.   *      [album] =>
  1183.   *      [albumArtist] =>
  1184.   *      [thumbnail] => a00bbf5170fb96a8ebb6bc5cae388c0e455d589a56b7e3eb68d58ce7081d960e.jpg
  1185.   *  )
  1186.   * </code>
  1187.   *
  1188.   * @access public
  1189.   * @param  string  $path  /var/www/song.mp3
  1190.   * @return array status
  1191.   */
  1192.   public function uploadTrack($path) {
  1193.     return $this->request('/bot/upload', 'POST', file_get_contents($path));
  1194.   }
  1195.  
  1196.  
  1197. /**
  1198.   * uploadAvatar
  1199.   *
  1200.   * <b>Output:</b><br>
  1201.   * <code>
  1202.   *  Array
  1203.   *  (
  1204.   *      [success] => 1
  1205.   *  )
  1206.   * </code>
  1207.   *
  1208.   * @access public
  1209.   * @param  string  $path          /var/www/image.jpg
  1210.   * @param  string  $instanceUUID  6421eedc-9705-4706-a269-cf6f38fa1a33
  1211.   * @return array status
  1212.   */
  1213.   public function uploadAvatar($path, $instanceUUID = NULL) {
  1214.     if ($instanceUUID == NULL) $instanceUUID = $this->instanceUUID;    
  1215.     return $this->request('/bot/i/'.$instanceUUID.'/avatar', 'POST', file_get_contents($path));
  1216.   }
  1217.  
  1218.  
  1219. /**
  1220.   * deleteAvatar
  1221.   *
  1222.   * <b>Output:</b><br>
  1223.   * <code>
  1224.   *  Array
  1225.   *  (
  1226.   *      [success] => 1
  1227.   *  )
  1228.   * </code>
  1229.   *
  1230.   * @access public
  1231.   * @param  string  $instanceUUID  6421eedc-9705-4706-a269-cf6f38fa1a33
  1232.   * @return array status
  1233.   */
  1234.   public function deleteAvatar($instanceUUID = NULL) {
  1235.     if ($instanceUUID == NULL) $instanceUUID = $this->instanceUUID;
  1236.     return $this->request('/bot/i/'.$instanceUUID.'/avatar', 'DELETE');
  1237.   }
  1238.  
  1239.  
  1240. /**
  1241.   * getUsers
  1242.   *
  1243.   * <b>Output:</b><br>
  1244.   * <code>
  1245.   *  Array
  1246.   *  (
  1247.   *      [0] => Array
  1248.   *          (
  1249.   *              [id] => 63e42054-8316-4f5f-8099-ca964b891587
  1250.   *              [tsuid] => FeVFoq415cz7nJQfAm06WXbljVo=
  1251.   *              [tsgid] =>
  1252.   *              [locked] => 0
  1253.   *              [username] => admin
  1254.   *              [passwordTimestamp] => 2015-03-11T18:03:06.438002454+01:00
  1255.   *              [created] => 2015-03-02T21:35:46.832374338+01:00
  1256.   *              [createdBy] =>
  1257.   *              [lastchange] => 2015-03-22T14:51:05.234165657+01:00
  1258.   *              [lastchangeBy] => 63e42054-8316-4f5f-8099-ca964b891587
  1259.   *              [privileges] => 2147483647
  1260.   *              [isAdmin] => 1
  1261.   *              [lastLogin] => 2015-07-25T21:47:04.067136065+02:00
  1262.   *          )
  1263.   *      [...]
  1264.   *  )
  1265.   * </code>
  1266.   *
  1267.   * @access public
  1268.   * @return array users
  1269.   */
  1270.   public function getUsers() {
  1271.     return $this->request('/bot/users');
  1272.   }
  1273.  
  1274.  
  1275. /**
  1276.   * addUser
  1277.   *
  1278.   * <b>Output:</b><br>
  1279.   * <code>
  1280.   *  Array
  1281.   *  (
  1282.   *      [success] => 1
  1283.   *      [uuid] => 65f7473e-f820-4114-b3df-1a48adc74aeb
  1284.   *  )
  1285.   * </code>
  1286.   *
  1287.   * @access public
  1288.   * @param  string   $username    Username
  1289.   * @param  string   $password    Password
  1290.   * @param  integer  $privileges  Bitmask-Value
  1291.   * @return array status
  1292.   */
  1293.   public function addUser($username, $password, $privileges = 0) {
  1294.     return $this->request('/bot/users', 'POST', json_encode(array('username'=>$username, 'password'=>$password, 'privileges'=>$privileges)));
  1295.   }
  1296.  
  1297.  
  1298. /**
  1299.   * setUserPassword
  1300.   *
  1301.   * <b>Output:</b><br>
  1302.   * <code>
  1303.   *  Array
  1304.   *  (
  1305.   *      [id] => d9da9c9a-8198-4afd-9e49-8934e87fa243
  1306.   *      [tsuid] => Zzbfw9S5ttDeAThBhop6TlwCaRo=
  1307.   *      [tsgid] => 6
  1308.   *      [locked] => 0
  1309.   *      [username] => admin
  1310.   *      [passwordTimestamp] => 2015-07-26T03:26:31.475953355+02:00
  1311.   *      [created] =>
  1312.   *      [createdBy] =>
  1313.   *      [lastchange] =>
  1314.   *      [lastchangeBy] =>
  1315.   *      [privileges] => 2147483647
  1316.   *      [isAdmin] => 1
  1317.   *      [lastLogin] =>
  1318.   *  )
  1319.   * </code>
  1320.   *
  1321.   * @access public
  1322.   * @param  string   $password  Password
  1323.   * @param  string   $userUUID  65f7473e-f820-4114-b3df-1a48adc74aeb
  1324.   * @return array status
  1325.   */
  1326.   public function setUserPassword($password, $userUUID) {
  1327.     return $this->request('/bot/users/'.$userUUID, 'PATCH', json_encode(array('password'=>$password)));
  1328.   }
  1329.  
  1330.  
  1331. /**
  1332.   * setUserPrivileges
  1333.   *
  1334.   * <b>Output:</b><br>
  1335.   * <code>
  1336.   *  Array
  1337.   *  (
  1338.   *      [id] => d9da9c9a-8198-4afd-9e49-8934e87fa243
  1339.   *      [tsuid] => Zzbfw9S5ttDeAThBhop6TlwCaRo=
  1340.   *      [tsgid] => 6
  1341.   *      [locked] => 0
  1342.   *      [username] => admin
  1343.   *      [passwordTimestamp] => 2015-07-26T03:26:31.475953355+02:00
  1344.   *      [created] =>
  1345.   *      [createdBy] =>
  1346.   *      [lastchange] =>
  1347.   *      [lastchangeBy] =>
  1348.   *      [privileges] => 2147483647
  1349.   *      [isAdmin] => 1
  1350.   *      [lastLogin] =>
  1351.   *  )
  1352.   * </code>
  1353.   *
  1354.   * @access public
  1355.   * @param  integer  $privileges  Bitmask-Value
  1356.   * @param  string   $userUUID    65f7473e-f820-4114-b3df-1a48adc74aeb
  1357.   * @return array status
  1358.   */
  1359.   public function setUserPrivileges($privileges, $userUUID) {
  1360.     return $this->request('/bot/users/'.$userUUID, 'PATCH', json_encode(array('privileges'=>$privileges)));
  1361.   }
  1362.  
  1363.  
  1364. /**
  1365.   * setUserIdentity
  1366.   *
  1367.   * <b>Output:</b><br>
  1368.   * <code>
  1369.   *  Array
  1370.   *  (
  1371.   *      [id] => d9da9c9a-8198-4afd-9e49-8934e87fa243
  1372.   *      [tsuid] => Zzbfw9S5ttDeAThBhop6TlwCaRo=
  1373.   *      [tsgid] => 6
  1374.   *      [locked] => 0
  1375.   *      [username] => admin
  1376.   *      [passwordTimestamp] => 2015-07-26T03:26:31.475953355+02:00
  1377.   *      [created] =>
  1378.   *      [createdBy] =>
  1379.   *      [lastchange] =>
  1380.   *      [lastchangeBy] =>
  1381.   *      [privileges] => 2147483647
  1382.   *      [isAdmin] => 1
  1383.   *      [lastLogin] =>
  1384.   *  )
  1385.   * </code>
  1386.   *
  1387.   * @access public
  1388.   * @param  string   $identity    Zzbfw9S5ttDeAThBhop6TlwCaRo=
  1389.   * @param  string   $userUUID    65f7473e-f820-4114-b3df-1a48adc74aeb
  1390.   * @return array status
  1391.   */
  1392.   public function setUserIdentity($identity, $userUUID) {
  1393.     return $this->request('/bot/users/'.$userUUID, 'PATCH', json_encode(array('tsuid'=>$identity)));
  1394.   }
  1395.  
  1396.  
  1397. /**
  1398.   * setUserServergroup
  1399.   *
  1400.   * <b>Output:</b><br>
  1401.   * <code>
  1402.   *  Array
  1403.   *  (
  1404.   *      [id] => d9da9c9a-8198-4afd-9e49-8934e87fa243
  1405.   *      [tsuid] => Zzbfw9S5ttDeAThBhop6TlwCaRo=
  1406.   *      [tsgid] => 6
  1407.   *      [locked] => 0
  1408.   *      [username] => admin
  1409.   *      [passwordTimestamp] => 2015-07-26T03:26:31.475953355+02:00
  1410.   *      [created] =>
  1411.   *      [createdBy] =>
  1412.   *      [lastchange] =>
  1413.   *      [lastchangeBy] =>
  1414.   *      [privileges] => 2147483647
  1415.   *      [isAdmin] => 1
  1416.   *      [lastLogin] =>
  1417.   *  )
  1418.   * </code>
  1419.   *
  1420.   * @access public
  1421.   * @param  string   $groupID   6
  1422.   * @param  string   $userUUID  65f7473e-f820-4114-b3df-1a48adc74aeb
  1423.   * @return array status
  1424.   */
  1425.   public function setUserServergroup($groupID, $userUUID) {
  1426.     return $this->request('/bot/users/'.$userUUID, 'PATCH', json_encode(array('tsgid'=>$groupID)));
  1427.   }
  1428.  
  1429.  
  1430. /**
  1431.   * deleteUser
  1432.   *
  1433.   * <b>Output:</b><br>
  1434.   * <code>
  1435.   *  Array
  1436.   *  (
  1437.   *      [success] => 1
  1438.   *  )
  1439.   * </code>
  1440.   *
  1441.   * @access public
  1442.   * @param  string  $userUUID  65f7473e-f820-4114-b3df-1a48adc74aeb
  1443.   * @return array status
  1444.   */
  1445.   public function deleteUser($userUUID) {
  1446.     return $this->request('/bot/users/'.$userUUID, 'DELETE');
  1447.   }
  1448.  
  1449.  
  1450. /**
  1451.   * getSettings
  1452.   *
  1453.   * <b>Output:</b><br>
  1454.   * <code>
  1455.   *  Array
  1456.   *  (
  1457.   *      [name] =>
  1458.   *      [nick] => TS3index.com MusicBot 1
  1459.   *      [mode] => 0
  1460.   *      [serverHost] => ts3index.com
  1461.   *      [serverPort] => 9987
  1462.   *      [serverPassword] =>
  1463.   *      [channelName] => 4832
  1464.   *      [channelPassword] =>
  1465.   *      [updateDescription] =>
  1466.   *      [announce] => 1
  1467.   *      [announceString] =>
  1468.   *      [identity] => 40VFvxDQfcVPEUPy+keaN2ejZ6iNmFdLVlnVmAjRSZZcAUqTkZ4AF[...]
  1469.   *      [identityLevel] => 8
  1470.   *      [enableDucking] => 1
  1471.   *      [duckingVolume] => 50
  1472.   *      [channelCommander] => 1
  1473.   *      [stickToChannel] =>
  1474.   *      [ttsExternalURL] => http://translate.google.com/translate_tts?tl=__LOCALE&q=__TEXT
  1475.   *      [ttsDefaultLocale] => de
  1476.   *      [ignoreChatServer] =>
  1477.   *      [ignoreChatPrivate] =>
  1478.   *      [ignoreChatChannel] =>
  1479.   *      [idleTrack] =>
  1480.   *      [startupTrack] =>
  1481.   *      [script] =>
  1482.   *  )
  1483.   * </code>
  1484.   *
  1485.   * @access public
  1486.   * @param  string  $instanceUUID  6421eedc-9705-4706-a269-cf6f38fa1a33
  1487.   * @return array users
  1488.   */
  1489.   public function getSettings($instanceUUID = NULL) {
  1490.     if ($instanceUUID == NULL) $instanceUUID = $this->instanceUUID;
  1491.     return $this->request('/bot/i/'.$instanceUUID.'/settings');
  1492.   }
  1493.  
  1494.  
  1495. /**
  1496.   * editSettings
  1497.   *
  1498.   * <b>Input:</b><br>
  1499.   * <code>
  1500.   * $data = array();
  1501.   *
  1502.   * $data['nick'] = 'New Nickname';
  1503.   * $data['serverHost'] = '127.0.0.1';
  1504.   * $data['serverPort'] = 9987;
  1505.   * </code>
  1506.   *
  1507.   * <b>Output:</b><br>
  1508.   * <code>
  1509.   *  Array
  1510.   *  (
  1511.   *      [success] => 1
  1512.   *  )
  1513.   * </code>
  1514.   *
  1515.   * @access public
  1516.   * @param  array   $data          Properties-Array
  1517.   * @param  string  $instanceUUID  6421eedc-9705-4706-a269-cf6f38fa1a33
  1518.   * @return array status
  1519.   */
  1520.   public function editSettings($data, $instanceUUID = NULL) {
  1521.     if ($instanceUUID == NULL) $instanceUUID = $this->instanceUUID;
  1522.     return $this->request('/bot/i/'.$instanceUUID.'/settings', 'POST', json_encode($data));
  1523.   }
  1524.  
  1525.  
  1526. /**
  1527.   * getChannels
  1528.   *
  1529.   * <b>Output:</b><br>
  1530.   * <code>
  1531.   *  Array
  1532.   *  (
  1533.   *      [0] => Array
  1534.   *          (
  1535.   *              [id] => 4834
  1536.   *              [name] => Lobby
  1537.   *              [topic] =>
  1538.   *              [parent] => 0
  1539.   *              [codec] => 4
  1540.   *              [quality] => 10
  1541.   *              [maxClients] => -1
  1542.   *              [order] => 0
  1543.   *              [perm] => 1
  1544.   *              [sperm] => 0
  1545.   *              [default] => 0
  1546.   *              [pw] => 0
  1547.   *              [enc] => 1
  1548.   *              [clients] => Array
  1549.   *                  (
  1550.   *                  )
  1551.   *          )
  1552.   *      [1] => Array
  1553.   *          (
  1554.   *              [id] => 4833
  1555.   *              [name] => Support
  1556.   *              [topic] =>
  1557.   *              [parent] => 0
  1558.   *              [codec] => 4
  1559.   *              [quality] => 6
  1560.   *              [maxClients] => -1
  1561.   *              [order] => 5105
  1562.   *              [perm] => 1
  1563.   *              [sperm] => 0
  1564.   *              [default] => 0
  1565.   *              [pw] => 0
  1566.   *              [enc] => 1
  1567.   *              [clients] => Array
  1568.   *                  (
  1569.   *                      [0] => Array
  1570.   *                          (
  1571.   *                              [id] => 39
  1572.   *                              [uid] => Zzbfw9S5ttDeAThBhop6TlwCaRo=
  1573.   *                              [g] => Array
  1574.   *                                  (
  1575.   *                                      [0] => Array
  1576.   *                                          (
  1577.   *                                              [i] => 240
  1578.   *                                              [n] => Server Admin
  1579.   *                                          )
  1580.   *                                      [1] => Array
  1581.   *                                          (
  1582.   *                                              [i] => 341
  1583.   *                                              [n] => Support
  1584.   *                                          )
  1585.   *                                      [...]
  1586.   *                                  )
  1587.   *                              [nick] => TS3index.com | Manuel
  1588.   *                              [idle] => 24270370
  1589.   *                              [recording] => 0
  1590.   *                              [outputMuted] => 0
  1591.   *                              [outputOnlyMuted] => 0
  1592.   *                              [inputMuted] => 0
  1593.   *                              [away] => 0
  1594.   *                              [ko] => 0
  1595.   *                          )
  1596.   *                      [...]
  1597.   *                  )
  1598.   *          )
  1599.   *      [...]
  1600.   *  )
  1601.   * </code>
  1602.   *
  1603.   * @access public
  1604.   * @param  string  $instanceUUID  6421eedc-9705-4706-a269-cf6f38fa1a33
  1605.   * @return array channels
  1606.   */
  1607.   public function getChannels($instanceUUID = NULL) {
  1608.     if ($instanceUUID == NULL) $instanceUUID = $this->instanceUUID;
  1609.     return $this->request('/bot/i/'.$instanceUUID.'/channels');
  1610.   }
  1611.  
  1612.  
  1613. /**
  1614.   * getInstances
  1615.   *
  1616.   * <b>Output:</b><br>
  1617.   * <code>
  1618.   *  Array
  1619.   *  (
  1620.   *      [0] => Array
  1621.   *          (
  1622.   *              [uuid] => d3d41c58-9e81-4fbb-974a-a4446013c735
  1623.   *              [name] => MusicBot 1
  1624.   *              [nick] => TS3index.com MusicBot 1
  1625.   *              [running] =>
  1626.   *              [mainInstance] => 1
  1627.   *          )
  1628.   *      [1] => Array
  1629.   *          (
  1630.   *              [uuid] => f12ea1f3-0c78-4089-8a1b-529192f4b8d4
  1631.   *              [name] => MusicBot 2
  1632.   *              [nick] => TS3index.com MusicBot 2
  1633.   *              [running] =>
  1634.   *              [mainInstance] =>
  1635.   *          )
  1636.   *      [...]
  1637.   *  )
  1638.   * </code>
  1639.   *
  1640.   * @access public
  1641.   * @return array instances
  1642.   */
  1643.   public function getInstances() {
  1644.     return $this->request('/bot/instances');
  1645.   }
  1646.  
  1647.  
  1648. /**
  1649.   * selectInstance
  1650.   *
  1651.   * @access public
  1652.   * @param  string  $instanceUUID  6421eedc-9705-4706-a269-cf6f38fa1a33
  1653.   * @return boolean
  1654.   */
  1655.   public function selectInstance($instanceUUID) {
  1656.     if ($this->getStatus($instanceUUID) == NULL) {
  1657.       return false;
  1658.     } else {
  1659.       $this->instanceUUID = $instanceUUID;
  1660.       return true;
  1661.     }
  1662.   }
  1663.  
  1664.  
  1665. /**
  1666.   * createInstance
  1667.   *
  1668.   * <b>Output:</b><br>
  1669.   * <code>
  1670.   *  Array
  1671.   *  (
  1672.   *      [success] => 1
  1673.   *      [uuid] => 1fa468a3-a39c-41c4-bab7-ff9491dbfb12
  1674.   *  )
  1675.   * </code>
  1676.   *
  1677.   * @access public
  1678.   * @param  string  $nickname  Nickname
  1679.   * @return array status
  1680.   */
  1681.   public function createInstance($nickname = "TS3index.com MusicBot", $backend = "ts3") {
  1682.     return $this->request('/bot/instances', 'POST', json_encode(array("backend" => $backend, "nick" => $nickname)));
  1683.   }
  1684.  
  1685.  
  1686. /**
  1687.   * deleteInstance
  1688.   *
  1689.   * <b>Output:</b><br>
  1690.   * <code>
  1691.   *  Array
  1692.   *  (
  1693.   *      [success] => 1
  1694.   *  )
  1695.   * </code>
  1696.   *
  1697.   * @access public
  1698.   * @param  string  $instanceUUID  6421eedc-9705-4706-a269-cf6f38fa1a33
  1699.   * @return array status
  1700.   */
  1701.   public function deleteInstance($instanceUUID = NULL) {
  1702.     if ($instanceUUID == NULL) $instanceUUID = $this->instanceUUID;
  1703.     return $this->request('/bot/instances/'.$instanceUUID, 'DELETE');
  1704.   }
  1705.  
  1706.  
  1707. /**
  1708.   * spawnInstance
  1709.   *
  1710.   * <b>Output:</b><br>
  1711.   * <code>
  1712.   *  Array
  1713.   *  (
  1714.   *      [success] => 1
  1715.   *  )
  1716.   * </code>
  1717.   *
  1718.   * @access public
  1719.   * @param  string  $instanceUUID  6421eedc-9705-4706-a269-cf6f38fa1a33
  1720.   * @return array status
  1721.   */
  1722.   public function spawnInstance($instanceUUID = NULL) {
  1723.     if ($instanceUUID == NULL) $instanceUUID = $this->instanceUUID;
  1724.     return $this->request('/bot/i/'.$instanceUUID.'/spawn', 'POST', '');
  1725.   }
  1726.  
  1727.  
  1728. /**
  1729.   * respawnInstance
  1730.   *
  1731.   * <b>Output:</b><br>
  1732.   * <code>
  1733.   *  Array
  1734.   *  (
  1735.   *      [success] => 1
  1736.   *  )
  1737.   * </code>
  1738.   *
  1739.   * @access public
  1740.   * @param  string  $instanceUUID  6421eedc-9705-4706-a269-cf6f38fa1a33
  1741.   * @return array status
  1742.   */
  1743.   public function respawnInstance($instanceUUID = NULL) {
  1744.     if ($instanceUUID == NULL) $instanceUUID = $this->instanceUUID;
  1745.     return $this->request('/bot/i/'.$instanceUUID.'/respawn', 'POST', '');
  1746.   }
  1747.  
  1748.  
  1749. /**
  1750.   * killInstance
  1751.   *
  1752.   * <b>Output:</b><br>
  1753.   * <code>
  1754.   *  Array
  1755.   *  (
  1756.   *      [success] => 1
  1757.   *  )
  1758.   * </code>
  1759.   *
  1760.   * @access public
  1761.   * @param  string  $instanceUUID  6421eedc-9705-4706-a269-cf6f38fa1a33
  1762.   * @return array status
  1763.   */
  1764.   public function killInstance($instanceUUID = NULL) {
  1765.     if ($instanceUUID == NULL) $instanceUUID = $this->instanceUUID;
  1766.     return $this->request('/bot/i/'.$instanceUUID.'/kill', 'POST', '');
  1767.   }
  1768.  
  1769.  
  1770. /**
  1771.   * getWebStream
  1772.   *
  1773.   * requires: EnableWebStream = true
  1774.   *
  1775.   * @access public
  1776.   * @param  string  $instanceUUID  6421eedc-9705-4706-a269-cf6f38fa1a33
  1777.   * @return string  url (opus-encoded-ogg-stream)
  1778.   */
  1779.   public function getWebStream($instanceUUID = NULL) {
  1780.     if ($instanceUUID == NULL) $instanceUUID = $this->instanceUUID;
  1781.     $token = $this->getWebStreamToken($instanceUUID);
  1782.     if ($token == NULL) return NULL;
  1783.    
  1784.     return $this->apiURL.'/b/bot/i/'.$instanceUUID.'/stream/'.$token;
  1785.   }
  1786.  
  1787.  
  1788. /**
  1789.   * getWebStreamToken
  1790.   *
  1791.   * requires: EnableWebStream = true
  1792.   *
  1793.   * @access public
  1794.   * @param  string  $instanceUUID  6421eedc-9705-4706-a269-cf6f38fa1a33
  1795.   * @return string  token
  1796.   */
  1797.   public function getWebStreamToken($instanceUUID = NULL) {
  1798.     if ($instanceUUID == NULL) $instanceUUID = $this->instanceUUID;
  1799.     $tokenRequest = $this->request('/bot/i/'.$instanceUUID.'/streamToken', 'POST', '');
  1800.     return (isset($tokenRequest['token'])) ? $tokenRequest['token'] : NULL;
  1801.   }
  1802.  
  1803.  
  1804. /**
  1805.   * getDefaultBot
  1806.   *
  1807.   * <b>Output:</b>
  1808.   * b115f224-0687-492f-a88c-ccd9a6582f441
  1809.   *
  1810.   * @access public
  1811.   * @return string
  1812.   */
  1813.   public function getDefaultBot() {
  1814.     $botRequest = $this->request('/botId');
  1815.     return (isset($botRequest['defaultBotId'])) ? $botRequest['defaultBotId'] : NULL;
  1816.   }
  1817.  
  1818.  
  1819. /**
  1820.   * getBotLog
  1821.   *
  1822.   * <b>Output:</b><br>
  1823.   * <code>
  1824.   *  Array
  1825.   *  (
  1826.   *      [0] => Array
  1827.   *          (
  1828.   *              [m] => LOGIN [admin] OK
  1829.   *              [t] => 1437853448
  1830.   *              [s] => 3
  1831.   *          )
  1832.   *      [1] => Array
  1833.   *          (
  1834.   *              [m] => PLAYLIST-ENTRY-ADD [admin] 4e62232e-a025-446b-a781-9563abef628b 2340b137-6e1a-4774-a8a5-60eda927d1f0 OK
  1835.   *              [t] => 1437853448
  1836.   *              [s] => 3
  1837.   *          )
  1838.   *      [2] => Array
  1839.   *          (
  1840.   *              [m] => FILE-DELETE [admin] (011098e6-cece-417e-a38d-297b27598efa) OK
  1841.   *              [t] => 1437860391
  1842.   *              [s] => 3
  1843.   *          )
  1844.   *      [...]
  1845.   *  )
  1846.   * </code>
  1847.   *
  1848.   * @access public
  1849.   * @return array log
  1850.   */
  1851.   public function getBotLog() {
  1852.     return $this->request('/bot/log');
  1853.   }
  1854.  
  1855.  
  1856. /**
  1857.   * getThumbnail
  1858.   *
  1859.   * <b>Output:</b>
  1860.   * http://127.0.0.1:8087/cache/2e507f2190ec65d23a41e0894bf6a2eb0e050283d6cdbdb089f1b7efcef2449e.jpg
  1861.   *
  1862.   * @access public
  1863.   * @param  string  $thumbnail  see getFiles()
  1864.   * @return string  url
  1865.   */
  1866.   public function getThumbnail($thumbnail) {
  1867.     return $this->wiURL.'/cache/'.$thumbnail;
  1868.   }
  1869.  
  1870.  
  1871. /**
  1872.   * isPlaying
  1873.   *
  1874.   * @access public
  1875.   * @param  string  $instanceUUID  6421eedc-9705-4706-a269-cf6f38fa1a33
  1876.   * @return boolean
  1877.   */
  1878.   public function isPlaying($instanceUUID = NULL) {
  1879.     if ($instanceUUID == NULL) $instanceUUID = $this->instanceUUID;
  1880.     return (boolean) $this->getStatus($instanceUUID)['playing'];
  1881.   }
  1882.  
  1883.  
  1884. /**
  1885.   * isRunning
  1886.   *
  1887.   * @access public
  1888.   * @param  string  $instanceUUID  6421eedc-9705-4706-a269-cf6f38fa1a33
  1889.   * @return boolean
  1890.   */
  1891.   public function isRunning($instanceUUID = NULL) {
  1892.     if ($instanceUUID == NULL) $instanceUUID = $this->instanceUUID;
  1893.     return (boolean) $this->getStatus($instanceUUID)['running'];
  1894.   }
  1895.  
  1896.  
  1897. //----------------------------------------------------------------------
  1898. // Internal Functions
  1899. //----------------------------------------------------------------------
  1900.  
  1901.  
  1902. /**
  1903.   * __construct
  1904.   *
  1905.   * @access private
  1906.   * @param  string  $wiURL    http://127.0.0.1:8087
  1907.   * @param  string  $botUUID  4852efdc-9705-4706-e469-cfvf77favf33
  1908.   * @return void
  1909.   */
  1910.   function __construct($wiURL = 'http://127.0.0.1:8087', $botUUID = NULL, $wiTimeout = 8000) {
  1911.     $this->wiURL = $wiURL;
  1912.     $this->apiURL = $this->wiURL.'/api/v1';
  1913.     $this->wiTimeout = $wiTimeout;
  1914.     $this->botUUID = ($botUUID == NULL) ? $this->getDefaultBot() : $botUUID;
  1915.   }
  1916.  
  1917.  
  1918. /**
  1919.   * __destruct
  1920.   *
  1921.   * @access private
  1922.   * @return void
  1923.   */
  1924.   function __destruct() {
  1925.   }
  1926.  
  1927.  
  1928. /**
  1929.   * __call
  1930.   *
  1931.   * @access private
  1932.   * @param  string  $name   method name
  1933.   * @param  array   $args   method arguments
  1934.   * @return void
  1935.   */
  1936.   function __call($name, $args) {
  1937.     return 'Method '.$name.' doesn\'t exist';
  1938.   }
  1939.  
  1940.  
  1941. /**
  1942.   * request
  1943.   *
  1944.   * @access private
  1945.   * @param  string  $path    /bot/instances
  1946.   * @param  string  $method  GET
  1947.   * @param  string  $method  NULL
  1948.   * @return array
  1949.   */
  1950.   private function request($path, $method = "GET", $fields = NULL) {
  1951.     $ch = curl_init();
  1952.     curl_setopt_array($ch, array(
  1953.         CURLOPT_URL => $this->apiURL.$path,
  1954.         CURLOPT_HTTPHEADER => array(
  1955.             "Accept:application/json, text/plain, */*",
  1956.             "Accept-Encoding:gzip, deflate",
  1957.             "Content-Type:application/json",
  1958.             "Authorization: Bearer ".$this->wiToken
  1959.         ),
  1960.         CURLOPT_CUSTOMREQUEST => $method,
  1961.         CURLOPT_RETURNTRANSFER => true,
  1962.         CURLOPT_SSL_VERIFYHOST => false,
  1963.         CURLOPT_SSL_VERIFYPEER => false,
  1964.         CURLOPT_TIMEOUT_MS => $this->wiTimeout
  1965.     ));
  1966.     if ($fields != NULL) curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
  1967.     $data = curl_exec($ch);
  1968.    
  1969.     if ($data === false) {
  1970.       $data = array('success' => false, 'error' => curl_error($ch));
  1971.     } else {
  1972.       $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  1973.       if ($httpcode != 200 AND $httpcode != 201) $data = array('success' => false, 'error' => $this->getError($httpcode));
  1974.     }
  1975.    
  1976.     curl_close($ch);
  1977.     return (is_array($data)) ? $data : json_decode($data, TRUE);
  1978.   }
  1979.  
  1980.  
  1981. /**
  1982.   * getError
  1983.   *
  1984.   * @access private
  1985.   * @param  integer  $code    401
  1986.   * @return string
  1987.   */  
  1988.   private function getError($code = 0) {
  1989.     switch ($code) {
  1990.         case 100: return 'Continue';
  1991.         case 101: return 'Switching Protocols';
  1992.         case 200: return 'OK';
  1993.         case 201: return 'Created';
  1994.         case 202: return 'Accepted';
  1995.         case 203: return 'Non-Authoritative Information';
  1996.         case 204: return 'No Content';
  1997.         case 205: return 'Reset Content';
  1998.         case 206: return 'Partial Content';
  1999.         case 300: return 'Multiple Choices';
  2000.         case 301: return 'Moved Permanently';
  2001.         case 302: return 'Moved Temporarily';
  2002.         case 303: return 'See Other';
  2003.         case 304: return 'Not Modified';
  2004.         case 305: return 'Use Proxy';
  2005.         case 400: return 'Bad Request';
  2006.         case 401: return 'Unauthorized';
  2007.         case 402: return 'Payment Required';
  2008.         case 403: return 'Forbidden';
  2009.         case 404: return 'Not Found';
  2010.         case 405: return 'Method Not Allowed';
  2011.         case 406: return 'Not Acceptable';
  2012.         case 407: return 'Proxy Authentication Required';
  2013.         case 408: return 'Request Time-out';
  2014.         case 409: return 'Conflict';
  2015.         case 410: return 'Gone';
  2016.         case 411: return 'Length Required';
  2017.         case 412: return 'Precondition Failed';
  2018.         case 413: return 'Request Entity Too Large';
  2019.         case 414: return 'Request-URI Too Large';
  2020.         case 415: return 'Unsupported Media Type';
  2021.         case 500: return 'Internal Server Error';
  2022.         case 501: return 'Not Implemented';
  2023.         case 502: return 'Bad Gateway';
  2024.         case 503: return 'Service Unavailable';
  2025.         case 504: return 'Gateway Time-out';
  2026.         case 505: return 'HTTP Version not supported';
  2027.         default: return 'Unknown HTTP status code: ' . $code;
  2028.     }
  2029.   }
  2030. }
RAW Paste Data