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

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

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

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

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

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

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

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

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

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

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

    Попробовать

Сервер Проверка активности в комнатах

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

  1. 715kg

    715kg Пользователь

    Регистрация:
    4 ноя 2013
    Сообщения:
    54
    Симпатии:
    1
    Баллы:
    57
    Здравствуйте. Держу ТС сервер. вот уже 900 комнат постоянных. Какие то комнаты уже пустуют. Есть скрипт, который бы показывал как давно заходили в канал. ?? Или может как то по другому посмотреть можно? Потому что уследить кто и когда заходил, сложно
     
  2. VRS95KZ

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

    Регистрация:
    26 янв 2014
    Сообщения:
    105
    Симпатии:
    21
    Баллы:
    335
    Готовых скриптов не видел (если только как функционал в ботах), лично использую самописный скрипт такого функционала: беру список каналов с командой secondsempty и делаю отсейку в секундах (например 10 дней = 864000 секунд) и удаляю их. Скрипт пока что в стадии начатого, только вывод информации, в планах допилить до автоматизации с личными критериями, как появится на это время.

    Использую библиотеку на php "ts3admin"

    Да чуть не забыл, минус такого подхода, что если сервер уйдёт в ребут или пользователь просто зайдёт в него на пару секунд, то естественно отчёт непосещения сначала.

    UPDATE: Посмотреть по другому, ручной вариант через yaqta
    Снимок.jpg
     
    Последнее редактирование: 18 апр 2016
  3. 715kg

    715kg Пользователь

    Регистрация:
    4 ноя 2013
    Сообщения:
    54
    Симпатии:
    1
    Баллы:
    57
    А если попробовать например взять скрипт из паблика. мониторинг. Который генерирует список комнат, пользователей в них в HTML, ну то есть блок, думаю понял меня))) И просто парсить с него данные. Обновляя непосредственно кроном. Получится ли?
    --- Сообщение объединено, 18 апр 2016 ---
    Если пустая комната, записываем время в БД, если его нету. Далее проверяем через минуту, если пустая комната, проверяем есть ли время, если есть, оставляем его, не изменив.
    Если в комнате есть пользователь, обновляем время. И будем обновлять его при каждом запросе, если в комнате кто то есть)
    А потом делать вывод списка комнат из БД с временем как давно заходили)
    --- Сообщение объединено, 18 апр 2016 ---
    Или может скрипт мониторинга в массив записывает что то. Ему же надо построить дерево комнат с пользователями в HTML. Откуда то это тянется. Я просто еще не смотрел.
     
  4. VRS95KZ

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

    Регистрация:
    26 янв 2014
    Сообщения:
    105
    Симпатии:
    21
    Баллы:
    335
    Как раз в планах для этого и задействовать базу, когда буду допиливать свой. Но можно и без крона, если сделать демона)

    На сколько знаю, идёт построение сразу, но зависит от реализации в каждом таком скрипте. Поэтому их стоит для начала понять, а потом уже переделать под свои нужды.
     
  5. 715kg

    715kg Пользователь

    Регистрация:
    4 ноя 2013
    Сообщения:
    54
    Симпатии:
    1
    Баллы:
    57
    Что ты собираешься писать в базу? Время?)) Я так понял запрос будет такой.

    Проверяем переменную записываем время. если сервер ребутнулся, берем уже существующие значение в базе и плюсуем к нему то, что пошло заново.
    Если в комнате кто-то. Получаем not-empty и очищаем время))

    А как быть тогда если сервер долго работает и например в комнату не заходили неделю. После следующей проверки, опять брать неделю и плюсовать?)))
    Что то муторные проверочки придется шаманить я чувствую :D
    --- Сообщение объединено, 18 апр 2016 ---
    Хотя можно ориентироваться на параметре not-empty ))) А время уже unix()
    --- Сообщение объединено, 19 апр 2016 ---


    PHP:
    #Get chanel list
        
    $chanelList $tsAdmin->channelList();
       
        foreach(
    $chanelList['data'] as $info) {
           
            if(
    $info['pid'] == 0){
               
                
    $info $tsAdmin->channelInfo($info['pid']);
               
                echo 
    $client['channel_name']. 'На канал заходили последний раз'$info['seconds_empty']. '<br>';   
               
            }

    Список названий каналов и их pid выводит. А вот когда опрашиваю функцию channelInfo, многократно, подставив pid в значение, видимо ТС банит скрипт, за многократные коннекты. И очень долго опрашивается функция channelInfo. Как же можно решить проблему?((((( Нужно получить seconds_empty, каждого канала.
     
  6. VRS95KZ

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

    Регистрация:
    26 янв 2014
    Сообщения:
    105
    Симпатии:
    21
    Баллы:
    335
    Да время, т.е. на каждый день. Т.к. бывают такие пользователи, что просто просят им создать структуру каналов, естественно создаешь, дальше просто заходят раз в 5 пять дней например, пропрыгивают по своим каналам (тем сбивая время не посещения) и снова затишье на какое то время. И так по кругу.
    Чтобы не банило, добавить ип (с которого идут запросы) в белый список сервера.
    Примерно так в данный момент, это вид ещё кустарный, т.е. очень старый. Как дойдут руки и позволит время, то буду с нуля делать.
    PHP:
    $si $tsAdmin->serverInfo();
    $channenon $si['data']['virtualserver_channelsonline'];
    print_r($channenon.' канал(а, лов)');

    $tdc $tsAdmin->channelList("-secondsempty");
    $stdc $tdc['data'];

    while (
    $i <= $channenon) {
        
    $secem $stdc[$i]['seconds_empty'];
        
    $channame $stdc[$i]['channel_name'];

        if(
    $secem >= $timedel) {
            
    print_r($secem.' секунд(ы, а) '.' - ');
            
    print_r($channame);
        }
        
    $i++;
    }
     
  7. 715kg

    715kg Пользователь

    Регистрация:
    4 ноя 2013
    Сообщения:
    54
    Симпатии:
    1
    Баллы:
    57
    А как быть с этим.

    PHP:
    Array ( [success] => [errors] => Array ( [0] => you can't use this function if no server is selected ) [data] => )
    Как выбрать то сервер? Что то вот вылезло и все. работать вообще не хочет
     
  8. VRS95KZ

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

    Регистрация:
    26 янв 2014
    Сообщения:
    105
    Симпатии:
    21
    Баллы:
    335
    Как в данный момент в файле у меня. Данные IP, login, password, имя query пользователя при подключении (для логов удобно).

    PHP:
    require("lib/ts3admin.class.php");

    $ts3_ip '';
    $ts3_queryport 10011;
    $ts3_user '';
    $ts3_pass '';
    $ts3_port 9987;
    $namemsg "";
    $timedel 864000;

    $tsAdmin = new ts3admin($ts3_ip$ts3_queryport);

    if(
    $tsAdmin->getElement('success'$tsAdmin->connect())) {
        
    $tsAdmin->login($ts3_user$ts3_pass);
        
    $tsAdmin->selectServer($ts3_port);
        
    $tsAdmin->setName($namemsg);

        
    $si $tsAdmin->serverInfo();
        
    $channenon $si['data']['virtualserver_channelsonline'];
        
    print_r($channenon." канал(а, лов)\n");

        
    $tdc $tsAdmin->channelList("-secondsempty");
        
    $stdc $tdc['data'];

        while (
    $i <= $channenon) {
            
    $secem $stdc[$i]['seconds_empty'];
            
    $channame $stdc[$i]['channel_name'];

            if(
    $secem >= $timedel) {
                
    print_r($secem." секунд(ы, а) - ");
                
    print_r($channame."\n");
            }
            
    $i++;
        }
    } else {
        echo 
    'Connection could not be established.';
    }
     
  9. VJean

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

    Регистрация:
    26 июл 2014
    Сообщения:
    1.772
    Симпатии:
    389
    Баллы:
    775
    инициализируйте и обнуляйте переменные!
    PHP:
    $i 0;
    while (
    $i <= $channenon) {
    или вместо while и инкремента в нем
    PHP:
    for ($i 0$i <= $channenon$i++) {
     
  10. 715kg

    715kg Пользователь

    Регистрация:
    4 ноя 2013
    Сообщения:
    54
    Симпатии:
    1
    Баллы:
    57

    У меня почти тоже самое. А вот такая ошибка .
    --- Сообщение объединено, 19 апр 2016 ---
    Коннект проходит, а он пишет, you can't use this function if no server is selected
     
  11. VJean

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

    Регистрация:
    26 июл 2014
    Сообщения:
    1.772
    Симпатии:
    389
    Баллы:
    775
    @715kg в тексте ошибки явно сказано что не так: не выбран сервер.
    PHP:
    $tsAdmin->selectServer($ts3_port);
     
  12. 715kg

    715kg Пользователь

    Регистрация:
    4 ноя 2013
    Сообщения:
    54
    Симпатии:
    1
    Баллы:
    57
    Вот весь мой код
    PHP:
    header('Content-Type: text/html; charset=utf-8');
        
    error_reporting E_ALL E_WARNING E_NOTICE );
        
    ini_set 'display_errors'true );
        
    ini_set 'html_errors'false );
        
    ini_set 'error_reporting'E_ALL E_WARNING E_NOTICE );
        
    session_start();
    /*-------SETTINGS-------*/
    $ts3_ip '';
    $ts3_queryport 10011;
    $ts3_user '';
    $ts3_pass '';
    $ts3_port 9987;
    $namemsg "";
    /*----------------------*/

    Include 'ts3admin.class.php';
    //require("ts3admin.class.php");




    $tsAdmin = new ts3admin($ts3_ip$ts3_queryport);

    if(
    $tsAdmin->getElement('success'$tsAdmin->connect())) {
        
    $tsAdmin->login($ts3_user$ts3_pass);
        
    $tsAdmin->selectServer($ts3_port);
        
    $tsAdmin->setName($namemsg);

        
    $si $tsAdmin->serverInfo();
       
        
    print_r($si);

    $tsAdmin->quit();
       
    } else {
        echo 
    'Connection could not be established.';
    }
     
  13. VJean

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

    Регистрация:
    26 июл 2014
    Сообщения:
    1.772
    Симпатии:
    389
    Баллы:
    775
    проверить привилегию b_virtualserver_select
     
  14. 715kg

    715kg Пользователь

    Регистрация:
    4 ноя 2013
    Сообщения:
    54
    Симпатии:
    1
    Баллы:
    57
    123
    JIOzVHWOkqc.jpg
     
    Последнее редактирование модератором: 11 сен 2016
  15. VJean

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

    Регистрация:
    26 июл 2014
    Сообщения:
    1.772
    Симпатии:
    389
    Баллы:
    775
    b_virtualserver_info_view, b_serverinstance_info_view

    короче, проверять все *_virtualserver_*
    айпи, надеюсь, в вайт-листе

    ошибку выдает, даже при коннекте серверадмином?
     
  16. VRS95KZ

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

    Регистрация:
    26 янв 2014
    Сообщения:
    105
    Симпатии:
    21
    Баллы:
    335
    Вверху писал же что код кустарный, очень старый. А кому и как его переделывать уже дело каждого.
    Через телнет подключится к своему серверу.
    Пример:
    через телнет: telnet IP 10011
    После приглашения, ввести: use port=9987
    если error id=0 msg=ok то подключение есть.
    По привилегиям, советую сделать отдельный индетификатор с логином для подключения, создать отдельную группу query, добавить туда тот новый идентификатор и её настраивать уже.
    Какие нужны будут: b_virtualserver_select, b_virtualserver_channel_list, b_virtualserver_info_view, b_virtualserver_connectioninfo_view, b_serverquery_login
     
  17. 715kg

    715kg Пользователь

    Регистрация:
    4 ноя 2013
    Сообщения:
    54
    Симпатии:
    1
    Баллы:
    57
    Добавил в скрипт
    PHP:
    if(count($tsAdmin->getDebugLog()) > 0) {
        foreach(
    $tsAdmin->getDebugLog() as $logEntry) {
            echo 
    '<script>alert("'.$logEntry.'");</script>';
        }
    }

    Получаю ошибку что то типо Error selectServer Ban client socket error
    --- Сообщение объединено, 19 апр 2016 ---
    видимо айпи не в вайт-листе. Как добавить его можно? Я просто с ТС пока что еще на вы.
    --- Сообщение объединено, 19 апр 2016 ---
    TS3
    Welcome to the TeamSpeak 3 ServerQuery interface, type "help" for a list of commands and "help <command>" for information on a specific command.
    use port=9987
    error id=0 msg=ok

    Подключение есть.
     
  18. VJean

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

    Регистрация:
    26 июл 2014
    Сообщения:
    1.772
    Симпатии:
    389
    Баллы:
    775
    query_ip_whitelist.txt
     
  19. 715kg

    715kg Пользователь

    Регистрация:
    4 ноя 2013
    Сообщения:
    54
    Симпатии:
    1
    Баллы:
    57
    А если сервер уже забанил IP. Как быть ?? Можно где то посмотреть? через yatQA список банов пустой.
    --- Сообщение объединено, 20 апр 2016 ---
    Просто 300 человек сидят, грузить сервер не хочется...
     
  20. VRS95KZ

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

    Регистрация:
    26 янв 2014
    Сообщения:
    105
    Симпатии:
    21
    Баллы:
    335
    Если правильно помню, то банит на 600 секунд, т.е. 10 минут.
     
Загрузка...