1. Рады видеть Вас на русскоязычном форуме TeamSpeak!

    У нас Вы можете скачать последнюю версию:

    Перед регистрацией рекомендуем ознакомиться

    с Правилами форума.

    Присоединяйтесь! Учите и обучайтесь!

    Скрыть объявление
  2. Новая группа "Новичок" на нашем форуме!

    Новые пользователи будут попадать в группу "Новичок".

    Это сделано для того чтобы "Новички" ознакомились с форумом, так как в большинстве случаев проблема с которой вы хотите обратиться уже обсуждалась.

    Перейти в тему обсуждения
    Быстрый переход в группу Пользователь
  3. VPS/VDS и дедикейт сервера в аренду с DDoS защитой

    • Низкий пинг
    • Действующий SLA
    • Рублевые цены без привязки к курсу валют

    Бесплатный тестовый период VPS-OpenVZ

    Попробовать

Сервер События

Тема в разделе "Вопросы по TeamSpeak 3", создана пользователем McKay, 13 мар 2016.

  1. McKay

    McKay Пользователь

    Регистрация:
    8 дек 2013
    Сообщения:
    28
    Симпатии:
    3
    Баллы:
    120
    Вопрос к форумчанам, можно ли отлавливать события на сервере (например, php фреймворком)?
    Очень интересует событие создания канала.
     
  2. VJean

    VJean ǝноɯʚıqж Администратор Знаток

    Регистрация:
    26 июл 2014
    Сообщения:
    1.772
    Симпатии:
    389
    Баллы:
    775
    там же в доке написано: notifyRegister
    про servernotifyregister можно почитать в доке по ServerQuery
     
    • Нравится Нравится x 1
  3. McKay

    McKay Пользователь

    Регистрация:
    8 дек 2013
    Сообщения:
    28
    Симпатии:
    3
    Баллы:
    120
    А где можно получить список событий?
     
  4. VJean

    VJean ǝноɯʚıqж Администратор Знаток

    Регистрация:
    26 июл 2014
    Сообщения:
    1.772
    Симпатии:
    389
    Баллы:
    775
    каюсь, чуток не полностью сказал.
    + нужна подписка:
    https://docs.planetteamspeak.com/ts3/php/framework/index.html пример
    #14: Create a Simple Bot waiting for Events

    список можно тут глянуть:
    https://docs.planetteamspeak.com/ts...eam_speak3___helper___signal___interface.html
    %ProgramFiles%\TeamSpeak 3 Client\plugins\lua_plugin\ts3events.lua

    ну и на офф.форуме тимспика есть тема по этому фреймворку. http://forum.teamspeak.com/threads/54132-API-TS3-PHP-Framework/page31


    сам пытался с этим фреймворком поработать, приходилось инфу по крупицам собирать. сорцы очень тяжело читать, а дока особо не помогает.
     
    • Нравится Нравится x 1
  5. McKay

    McKay Пользователь

    Регистрация:
    8 дек 2013
    Сообщения:
    28
    Симпатии:
    3
    Баллы:
    120
    Ломал голову пару часов и родил вот такое (может кому пригодится):

    PHP:
    <?php

    require_once("libraries/TeamSpeak3/TeamSpeak3.php");

    $server "127.0.0.1";
    $query_port "10011";
    $server_port "9987";
    $login "login";
    $password "password";

    $ts3 TeamSpeak3::factory("serverquery://$login:$password@$server:$query_port/?server_port=$server_port&blocking=0");

    function 
    event(TeamSpeak3_Adapter_ServerQuery_Event $eventTeamSpeak3_Node_Host $host) {

        
    $type $event->getType();
        
    $data $event->getData();
        if(
    $type == "channelcreated") {
            
    $ts3 TeamSpeak3::factory("serverquery://$login:$password@$server:$query_port/?server_port=$server_port&blocking=0");
            echo 
    $type."\n";
            
    $cid $data['cid'];
            
    $ch $ts3->channelGetById($cid);
            
    $ch['channel_maxclients'] = 2;
            
    $ch['channel_flag_maxclients_unlimited'] = FALSE;
            
    print_r($data);
        }
    }
    try {
        
    $ts3->notifyRegister("channel"); 
        
    TeamSpeak3_Helper_Signal::getInstance()->subscribe("notifyEvent""event");
        while (
    1) {
            
    $ts3->getAdapter()->wait();
        }
    } catch (
    TeamSpeak3_Exception $e) {
        echo 
    "При запросе возникли ошибки. (Ответ сервера: ".$e->getMessage().")\n";
    }

    ?>
    При создании нового канала устанавливает лимит на максимальное количество пользователей. Позже попробую допилить скрипт с проверкой типа канала (временный, постоянный).

    P.S. Запускать php нужно в косоли. Я запускаю через screen.
     
    Последнее редактирование: 13 мар 2016
  6. VJean

    VJean ǝноɯʚıqж Администратор Знаток

    Регистрация:
    26 июл 2014
    Сообщения:
    1.772
    Симпатии:
    389
    Баллы:
    775
    подправил скрипт, спалил данные )
    --- Сообщение объединено, 13 мар 2016 ---
    зачем второй $ts3 = TeamSpeak3::factory в функции?
     
  7. McKay

    McKay Пользователь

    Регистрация:
    8 дек 2013
    Сообщения:
    28
    Симпатии:
    3
    Баллы:
    120
    чет не понял)))
    не получилось в функцию передать переменную $ts3, поэтому пришлось лишнюю строчку добавить.
     
  8. VJean

    VJean ǝноɯʚıqж Администратор Знаток

    Регистрация:
    26 июл 2014
    Сообщения:
    1.772
    Симпатии:
    389
    Баллы:
    775
    хм, странно. подписка на onTextmessage, должно быть событие на создание нового канала.
    --- Сообщение объединено, 13 мар 2016 ---
    во втором $ts3
     
  9. McKay

    McKay Пользователь

    Регистрация:
    8 дек 2013
    Сообщения:
    28
    Симпатии:
    3
    Баллы:
    120
    опечатка, исправил:
    PHP:
    TeamSpeak3_Helper_Signal::getInstance()->subscribe("notifyEvent""event");
    дошло) не страшно, порт закрыт из-вне. доступен только паре айпишников.
     
  10. VJean

    VJean ǝноɯʚıqж Администратор Знаток

    Регистрация:
    26 июл 2014
    Сообщения:
    1.772
    Симпатии:
    389
    Баллы:
    775
    жырновато )
    onChannelCreated
    notifychannelcreated

    --- Сообщение объединено, 13 мар 2016 ---
    так она вроде глобальная?
     
  11. McKay

    McKay Пользователь

    Регистрация:
    8 дек 2013
    Сообщения:
    28
    Симпатии:
    3
    Баллы:
    120
    на эти события почему-то не реагирует.
    а notifyEvent по идее отлавливает все события, которые уже можно отфильтровать.
     
  12. VJean

    VJean ǝноɯʚıqж Администратор Знаток

    Регистрация:
    26 июл 2014
    Сообщения:
    1.772
    Симпатии:
    389
    Баллы:
    775
    $ts3->notifyRegister("server");


    лучше сорцы фрейворка лучше поизучать, уверен там уже есть событие на создание канала
     
  13. McKay

    McKay Пользователь

    Регистрация:
    8 дек 2013
    Сообщения:
    28
    Симпатии:
    3
    Баллы:
    120
    да, но функция видит только переданные параметры. пытался добавить 3-й параметр, но вызов идет с двумя. сам вызов наверное идет из самого фрейморка.
     
  14. VJean

    VJean ǝноɯʚıqж Администратор Знаток

    Регистрация:
    26 июл 2014
    Сообщения:
    1.772
    Симпатии:
    389
    Баллы:
    775
    TeamSpeak3_Node_Host $host
    в нем должно быть всё
     
  15. McKay

    McKay Пользователь

    Регистрация:
    8 дек 2013
    Сообщения:
    28
    Симпатии:
    3
    Баллы:
    120
    там нет метода channelGetById Search_man7
    TeamSpeak3_Node_Server $ts3 там этот метод есть
    --- Сообщение объединено, 13 мар 2016 ---
    все отбой, решил проблему таким образом:
    PHP:
    $ch $host->serverGetSelected()->channelGetById($cid);
    serverGetSelected возвращает TeamSpeak3_Node_Server, где уже есть нужный методDeclare_man57
    --- Сообщение объединено, 14 мар 2016 ---
    В процессе работы выяснилось, что через 600 секунд адаптер теряет коннект к серверу и нужно запускать скрипт заного. Зациклил коннект и скрипт отрабатывает уже 9 с лишним часов. Осталось правильно отловить нужное событие.
    ts3connect.php
    PHP:
    $server "127.0.0.1";
    $query_port "10011";
    $server_port "9987";
    $login "login";
    $password "password";
    event.php
    PHP:
    require_once "libraries/TeamSpeak3/TeamSpeak3.php";
    include 
    "ts3connect.php";

    function 
    event(TeamSpeak3_Adapter_ServerQuery_Event $eventTeamSpeak3_Node_Host $host) {
        
    $type $event->getType();
        
    $data $event->getData();
        
    $message $event->getMessage();
        if(
    $type == "channelcreated") {
            
    // Обработка создания канала
            
    echo date("Y-d-m H:i:s")." - ".$type."\n";
            
    $cid $data['cid'];
            
    $ch $host->serverGetSelected()->channelGetById($cid);
            
    $ch['channel_maxclients'] = 2;
            
    $ch['channel_flag_maxclients_unlimited'] = FALSE;
            
    print_r($data);
        } else {
            
    // Обработка других событий
            
    echo date("Y-d-m H:i:s")." - ".$type."\n";
        }
    }

    while(
    $ts3 TeamSpeak3::factory("serverquery://$login:$password@$server:$query_port/?server_port=$server_port&blocking=0")) {
        try {
            
    $ts3->notifyRegister("server");
            
    $ts3->notifyRegister("channel");
            
    TeamSpeak3_Helper_Signal::getInstance()->subscribe("notifyEvent""event");
            while (
    1) {
                
    $ts3->getAdapter()->wait();
            }
        } catch (
    TeamSpeak3_Exception $e) {
            echo 
    "При запросе возникли ошибки. (Ответ сервера: ".$e->getMessage().")\n";
        }
    }
     
    • Нравится Нравится x 1
Загрузка...