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

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

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

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

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

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

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

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

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

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

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

    Попробовать

Клиент Изыскания по строке Новостей

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

  1. VJean

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

    Регистрация:
    26 июл 2014
    Сообщения:
    1.772
    Симпатии:
    389
    Баллы:
    775
    Дело было вечером, Делать было нечего. (с)
    Тема уже подымалась на форуме: Вопрос по бегущей строке. и, думаю, многие задавались тем же вопросом.
    Итак, предлагаю вашему вниманию увлекательное чтиво. Слабонервным и беременным не смотреть :D

    Как известно, клиент тимспика запрашивает новости с сервера http://news.teamspeak.com. Адрес прибит гвоздями в коде, и поменять его, кроме как правки бинарника, - никак нельзя. Если нельзя, но очень хочется, - то можно: будем подменять на запросы к своему серверу ;)
    Предпологается, что у нас есть свой VPS/VDS/антресольный сервер. На нем крутится Linux с установленными nginx, php и сервер TS. Внешний айпи: 10.10.10.10

    Начнем с настройки сервера:
    1. добавляем в /etc/hosts:
    Код:
    10.10.10.10 news.teamspeak.com
    2. создаем конфиг для nginx: /etc/nginx/sites-enabled/news.teamspeak.com
    Код:
    server {
      listen 80;
      server_name news.teamspeak.com;
    
      access_log /var/log/nginx/news.teamspeak.com-access.log;
      error_log /var/log/nginx/news.teamspeak.com-error.log;
      #log_not_found off;
      #access_log off;
    
      charset utf-8;
      gzip on;
    
      add_header Cache-Control  "public, max-age=1800"; # expires: минимум и дефолтное 1800 (полчаса), на других значениях работает неадекватно.
      add_header X-TS3-SIGNATURE "empty"; # magic header, клиент проверяет, что получил новости с валидного сервера. любое не пустое значение
    
      # только GET запросы
      if ($request_method != GET) {
        return 444;
      }
      location = /en/news.txt {
        echo "Место для Вашей рекламы ";
        echo "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3wgLEAsu68m/7gAAAzxJREFUOMtt079LcgsAxvHv0XM8pmZUomEl1FvSUJE5lEMOGRHhUFtLFLUUEtTe0NhY0B5UCM2BFDQElYVdyIhI+kUIaWidfvkjTTzvcO99ucP9/AEPDw88AoCiKH/t7u66ZVnm8/OTQqHAz88PpVIJs9lMZWUlOp0OWZaxWq243W6Bfwg3Nzfq2toaPp8Ps9nM8/MzqVQKnU6HVqvl+/ubfD6PIAi8v79TLBYRBIGJiQna29sFcX19nfHxcdra2jg8PKS2thaPx4NeryeZTOJwOBBFkXg8TiaTQZZlNBoNm5ubXF1dqdrJycklv9/P7e0tn5+ffHx8EA6H+fn5obq6mvr6egwGA+VyGavVitFoxGAwIEkSj4+PiEajkWg0itFo5PLyko2NDRRFwev1IooiCwsLtLa2EgwGCQaDmM1mpqen8Xg8rK6uIiwvL6tfX19oNBp+/frFw8MDLpcLp9PJ2dkZfr+fbDZLIBBgfn4ek8lEPB7n9fUVg8GAxuFwkE6nqauro6amhrGxMUZGRpAkiaqqKnQ6HTabjampKZ6enhAEgVQqRXNz89/7FAoFcrkcdrud4+Nj0uk09/f33N3dcXFxwfv7OwMDA5hMJkKhEL29vfT29hKLxSiXywiqqqqrq6ucnJxQLBapr6/H4/EQiUTo6upClmVeX1+5vLxkdHQURVHY3t6mu7sbm82GmE6nmZubo1QqcXBwgN1uZ2dnh0QiQUdHB6enpxQKBSRJYm9vD0VReHl5IZPJ4HQ60ZbL5aX+/n5cLheJRIKenh4aGxupra0ll8uxv79PIpHg/Pyc6+trHh4eSCaTDA8PY7FY0AYCgaWtrS30ej19fX1Eo1EODg5wu90MDg6i1WqZmZmhoqKCzs5ORFGkpaWF2dlZYrEYAsDu7q4aCoUwm8243W5sNhu3t7fkcjmy2SylUol8Po/RaMRisWC1WvF6vaysrCACDA0NCQChUEgNh8NkMhl8Ph8ulwtBEFAUBVVVkSQJi8XC29sbxWIRSZL486r/CofD6tHREQB2u52mpiYaGhrQaDTIsgxALBZjb2/v/wP+FYlE1GQySTqd/tMil8thMpkoFAosLi4KvwHlEGaKPGrAOwAAAABJRU5ErkJggg==\">";
      }
    }
    

    Код:
    server {
      listen 80;
      server_name news.teamspeak.com;
    
      access_log /var/log/nginx/news.teamspeak.com-access.log;
      error_log /var/log/nginx/news.teamspeak.com-error.log;
      #log_not_found off;
      #access_log off;
    
      charset utf-8;
      gzip on;
    
      root /var/www/news.teamspeak.com;
      index index.php;
    
      add_header Cache-Control  "public, max-age=1800"; # expires: минимум и дефолтное 1800 секунд (полчаса), на других значениях работает неадекватно.
      add_header X-TS3-SIGNATURE "empty"; # magic header, клиент проверяет, что получил новости с валидного сервера. любое не пустое значение
    
      # только GET запросы
      if ($request_method != GET) {
        return 444;
      }
    
      location / {
        try_files $uri @rewrite;
      }
      location @rewrite {
        #rewrite ^/(.*)$ /index.php; #
        rewrite ^/(.*)/news.txt$ /index.php?lang=$1; # с передачей скрипту языка клиента
      }
      location ~ \.php$ {
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_cache_valid 200 301 302 304 30m;
        fastcgi_cache_key "$request_method|$host|$request_uri";
        include fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
      }
    }
    
    Проверяем конфиг nginx: sudo nginx -t
    Код:
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful
    и перезапускаем: sudo service nginx restart

    Для второго варианта дополнительно создаем файл /var/www/news.teamspeak.com/index.php:
    PHP:
    <?php
    //**************************************
    $ts3_ip '127.0.0.1';
    $ts3_queryport 10011;
    $ts3_port 9987;
    $ts3_user ''// логин SQ
    $ts3_pass ''// пароль на SQ
    $bot_name "[bot.news.12o82o15]";
    //**************************************
    $remote_addr $_SERVER['REMOTE_ADDR'];
    $txt_reklam "Место для Вашей рекламы <img alt=\"trollface\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3wgLEAsu68m/7gAAAzxJREFUOMtt079LcgsAxvHv0XM8pmZUomEl1FvSUJE5lEMOGRHhUFtLFLUUEtTe0NhY0B5UCM2BFDQElYVdyIhI+kUIaWidfvkjTTzvcO99ucP9/AEPDw88AoCiKH/t7u66ZVnm8/OTQqHAz88PpVIJs9lMZWUlOp0OWZaxWq243W6Bfwg3Nzfq2toaPp8Ps9nM8/MzqVQKnU6HVqvl+/ubfD6PIAi8v79TLBYRBIGJiQna29sFcX19nfHxcdra2jg8PKS2thaPx4NeryeZTOJwOBBFkXg8TiaTQZZlNBoNm5ubXF1dqdrJycklv9/P7e0tn5+ffHx8EA6H+fn5obq6mvr6egwGA+VyGavVitFoxGAwIEkSj4+PiEajkWg0itFo5PLyko2NDRRFwev1IooiCwsLtLa2EgwGCQaDmM1mpqen8Xg8rK6uIiwvL6tfX19oNBp+/frFw8MDLpcLp9PJ2dkZfr+fbDZLIBBgfn4ek8lEPB7n9fUVg8GAxuFwkE6nqauro6amhrGxMUZGRpAkiaqqKnQ6HTabjampKZ6enhAEgVQqRXNz89/7FAoFcrkcdrud4+Nj0uk09/f33N3dcXFxwfv7OwMDA5hMJkKhEL29vfT29hKLxSiXywiqqqqrq6ucnJxQLBapr6/H4/EQiUTo6upClmVeX1+5vLxkdHQURVHY3t6mu7sbm82GmE6nmZubo1QqcXBwgN1uZ2dnh0QiQUdHB6enpxQKBSRJYm9vD0VReHl5IZPJ4HQ60ZbL5aX+/n5cLheJRIKenh4aGxupra0ll8uxv79PIpHg/Pyc6+trHh4eSCaTDA8PY7FY0AYCgaWtrS30ej19fX1Eo1EODg5wu90MDg6i1WqZmZmhoqKCzs5ORFGkpaWF2dlZYrEYAsDu7q4aCoUwm8243W5sNhu3t7fkcjmy2SylUol8Po/RaMRisWC1WvF6vaysrCACDA0NCQChUEgNh8NkMhl8Ph8ulwtBEFAUBVVVkSQJi8XC29sbxWIRSZL486r/CofD6tHREQB2u52mpiYaGhrQaDTIsgxALBZjb2/v/wP+FYlE1GQySTqd/tMil8thMpkoFAosLi4KvwHlEGaKPGrAOwAAAABJRU5ErkJggg==\" /> ";


    require(
    "ts3admin.class.php");

    $tsAdmin = new ts3admin($ts3_ip$ts3_queryport);
    if (
    $tsAdmin->getElement('success'$tsAdmin->connect())) {
        
    $tsAdmin->login($ts3_user$ts3_pass);
        
    $tsAdmin->setName($bot_name);
        
    $srv $tsAdmin->serverList("-short")['data'];
        foreach (
    $srv as $srv_k => $srv_v) {
            if (
    $tsAdmin->getElement('success'$tsAdmin->selectServer($srv_v['virtualserver_port']))) {
                if (
    $srv_v['virtualserver_status'] == 'online') {
                    
    $cl $tsAdmin->clientList("-ip")['data'];
                    foreach (
    $cl as $cl_k => $cl_v) {
                        if ((
    $remote_addr == $cl_v['connection_client_ip']) && ($cl_v['client_type'] == 0)) {
                            
    $nick $cl_v['client_nickname'];
                            break;
                        }
                    }
                }
            }
        }
        echo (!isset(
    $nick)) ? $txt_reklam "Привет, <b>".$nick."</b>";
        
    $tsAdmin->logout();
    } else {
        echo 
    "Сервер недоступен";
    }
    ?>
    и в тот же каталог скидываем скачанный ts3admin.class.php

    Настраиваем клиент:
    Добавляем строку в конец файла hosts. Необходимы права админа/рута, в особых случаях и временная приостановка антивируса: может блокировать доступ к файлу.
    Windows: %windir%\system32\drivers\etc\hosts
    Linux: /etc/hosts
    Код:
    10.10.10.10 news.teamspeak.com
    Для проверки выбираем пункт меню:
    Помощь > Показать строку новостей
    Help > Show News Ticker​

    Не подключен к серверу TS: src0.jpg
    Подключен к серверу TS: src1.jpg



    Алгоритм работы:
    1. Ресолвинг news.teamspeak.com. (Запрос DNS записей A и AAAA)
    2.1. GET запрос http://news.teamspeak.com/ru/news.txt, где ru - используемый язык клиента TS.
    2.2. В случае неудачного запроса (404 и т.п.) - GET запрос http://news.teamspeak.com/en/news.txt
    3. Проверка непустого хидера X-TS3-SIGNATURE в ответе от сервера
    4. Парсинг полученного ответа и Вывод в статус бар.



    В чем разница между конфигами nginx?
    При проверке оказалось, что клиент не передает никаких данных, позволяющих хоть как-то идентифицировать сервер на котором сидит клиент или клиента с которого пришел запрос.
    ngx_http_userid_module оказался бессилен - $uid_set выдается, но каждый раз разный, $uid_got - вообще пустой.
    Второй вариант позволяет идентифицировать клиента и выдавать новость, хоть для каждого персонально ;)
    Но и тут "баг", из-за реализации идентификации по айпи и кода:
    1. если юзер сидит одновременно на двух виртуальных серверах одного физического сервера TS, то будет учитан только последний сервер
    2. если юзер сидит на одном сервере но с двумя никами: будет учитан первый залогинившийся ник.


    Теги и форматирование
    Из проверенного и работающих: <b>, <i>, <u>, <s>, <a>, <span>, <div>, <p>, <table>,<tr>,<th>,<td>, <br />, <img />, <!-- комментарии //-->
    Не работают (парсер - лох :( ): <script>, как и любая попытка внедрить яваскрипт, тупо игнорируется. <iframe>, <form>, <input>, <html>, <head>, <body>
    <hr> - работает, но выводится как полоска в пару пикселей, и не настраивается.

    В тегах можно задавать стили форматирования, etc:
    HTML:
    <div style="font: 7pt; background:#007E3E; color:blue; margin:10px;">Текст</div> 
    padding, text-align, border-radius - игнорируются. все стили не проверял, не настолько упорот :D

    Вставка картинок через тег <img /> только в формате base64. GIF-анимация не поддерживается - показывает первый фрейм. Альфа-прозрачность - работает. svg, включая анимацию и скрипты, - не проверял

    Поддерживаются эмодзи в текстовом или Unified Unicode представлении (пингвин: &#128039; &#x1f427; ), даже те, которые недопустимы для чата или ника :)

    Способа как отключить скроллинг слёту не нашел. Есть подозрения на очередной велосипед разрабов TS: рисование по канве и её горизонтальному скроллу по таймеру.
     
    • Нравится Нравится x 4
    • Полезный пост Полезный пост x 1
  2. hroost

    hroostIcon Voice-Server.ru ATHP Премиум Пользователь

    Регистрация:
    21 фев 2013
    Сообщения:
    222
    Симпатии:
    54
    Баллы:
    455
    Прикольно, но жаль, что необходимы правки на стороне клиента.
     
  3. VJean

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

    Регистрация:
    26 июл 2014
    Сообщения:
    1.772
    Симпатии:
    389
    Баллы:
    775
    @hroost, самому жаль. но иначе никак.
    тимспик прокси не поддерживает. ставить портабельные 3proxy+редиректор (FreeCAP/SocksCAP) - не вариант.
    как и поднимать свой DNS и/или, опять же, прописывать маршруты на клиенте.

    несколько ложек дегтя:
    1. юзер не сидит на вашем сервере, но запросы на новости все равно будут приходить к вам.
    2. запрос новостей либо по таймеру (max-age), либо ручками через меню. было бы намного лучше, если новость запрашивалась при входе на определенный сервер.

    из оставшихся вариантов, рассматриваю версию с плагином, который будет отслеживать переходы по серверам и запросом новостей с соответствующего адреса. с заменой адреса сервера новостей в памяти процесса и дерганием функции обновления при событиях. ну нафиг эту камасутру )
     
  4. hroost

    hroostIcon Voice-Server.ru ATHP Премиум Пользователь

    Регистрация:
    21 фев 2013
    Сообщения:
    222
    Симпатии:
    54
    Баллы:
    455
    мне кажется, что мало пользователей обращают внимание на этот нижний уголок, поэтому можно расслабиться.
    Разве что отправить фичреквест разработчикам.
     
  5. Xzray

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

    Регистрация:
    13 авг 2016
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    32
    не судьба просто код переписать...?*
    Я вечером опробую, не думаю что проблема.
     
  6. darkangel66

    darkangel66Icon TEAM-HOST.RU ATHP Премиум Пользователь

    Регистрация:
    12 июн 2012
    Сообщения:
    471
    Симпатии:
    201
    Баллы:
    672
    почему ты ждал год что бы ответить ?
     
  7. little_devil

    little_devilIcon Service-Voice.com Премиум Пользователь

    Регистрация:
    12 апр 2014
    Сообщения:
    184
    Симпатии:
    30
    Баллы:
    197
    Осмысливал всю суть написанного!
     
    • Смешно :) Смешно :) x 1
  8. VJean

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

    Регистрация:
    26 июл 2014
    Сообщения:
    1.772
    Симпатии:
    389
    Баллы:
    775
    какой еще код?
     
  9. little_devil

    little_devilIcon Service-Voice.com Премиум Пользователь

    Регистрация:
    12 апр 2014
    Сообщения:
    184
    Симпатии:
    30
    Баллы:
    197
    TeamSpeak 3 клиента
     
  10. darkangel66

    darkangel66Icon TEAM-HOST.RU ATHP Премиум Пользователь

    Регистрация:
    12 июн 2012
    Сообщения:
    471
    Симпатии:
    201
    Баллы:
    672
    ищу кодера для переписки ДНК кода за бигмак и сырный соус.
     
  11. little_devil

    little_devilIcon Service-Voice.com Премиум Пользователь

    Регистрация:
    12 апр 2014
    Сообщения:
    184
    Симпатии:
    30
    Баллы:
    197
    2 бигмака и сырный соус, когда можно приступать ?
     
  12. VJean

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

    Регистрация:
    26 июл 2014
    Сообщения:
    1.772
    Симпатии:
    389
    Баллы:
    775
    а смысл патчить? %))
    всеравно веб-сервер подымать. проще плагином подменять функцию в памяти.
     
  13. Xzray

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

    Регистрация:
    13 авг 2016
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    32
    я ваще не коментирую никогда, для вас сключение сделал.
     
  14. darkangel66

    darkangel66Icon TEAM-HOST.RU ATHP Премиум Пользователь

    Регистрация:
    12 июн 2012
    Сообщения:
    471
    Симпатии:
    201
    Баллы:
    672
    Вливайся, у нас висьма теплый добрый кружок завсегдаев форума.
    Периодически можно получить полезную информацию а иногда просто поднять настроение.
     
    • Смешно :) Смешно :) x 1
  15. Xzray

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

    Регистрация:
    13 авг 2016
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    32
    darkangel66[​IMG] Спасибо, я только отвык от чатов, ну их столько времени отнимают.
    --- Сообщение объединено, 14 сен 2016 ---
    ща дикомпилирую часть, займусь спиком, я думаю не составит труда переписать и прекрутить к сайту...
     
  16. darkangel66

    darkangel66Icon TEAM-HOST.RU ATHP Премиум Пользователь

    Регистрация:
    12 июн 2012
    Сообщения:
    471
    Симпатии:
    201
    Баллы:
    672
    что значит отвык...
    назааааад.

    Я помню еще чатики в локалках в конце 9х годов )) и чатики на маил ру..
    нельзя от такого отвыкать это же КЛАССИКА !
     
  17. Xzray

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

    Регистрация:
    13 авг 2016
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    32
    =) хабы дааа - у меня был свой, времена хорошие, щас только у милены держится
     
  18. VJean

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

    Регистрация:
    26 июл 2014
    Сообщения:
    1.772
    Симпатии:
    389
    Баллы:
    775
    смысл? урл не шифрован и отлично виден в бинарнике. хоть сейчас правь блокнотом.
    серьезно, не вижу смысла парится патчингом бинарника, подправить hosts - проще и быстрее.
     
  19. Xzray

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

    Регистрация:
    13 авг 2016
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    32
    VJean[​IMG] соглашусь...
     
  20. VJean

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

    Регистрация:
    26 июл 2014
    Сообщения:
    1.772
    Симпатии:
    389
    Баллы:
    775
    небольшой ап:
    с версии 3.0.17 появилась поддержка NewsSource - адрес/источник новостей.
    могу ошибаться, но по факту использование этого параметра началось где-то с версии 3.0.19
    sqlite3 -header ~/.ts3client/settings.db 'select * from News;'
    Код:
    timestamp|key|value
    1460741401|NewsSource|http://dl.4players.de
    1471513532|NewsDisabled|1
    1488993972|NewsClosed|1
    1489477616|NewsText|Subsiege: RTS с подводными баталиями до 12 игроков и интегрированным TeamSpeak SDK. <a href="http://store.steampowered.com/app/338640/">Уже доступно</a>
    1489477616|Language|ru
    1489477616|LastModified|2017-03-08T16:44:21.000
    1489477616|NextCheck|2017-03-14T11:16:56.176
    upd2. Самое веселье: клиент по прежнему ломится на news.teamspeak.com :)
     
Загрузка...