VBTT - Мод торрент трекера для vBulletin. Скачать движок трекера бесплатно (не tbdev и не torrentpier). Разработка vBulletin Torrent Tracker

VBTT - Мод торрент трекера для vBulletin. Скачать движок трекера бесплатно (не tbdev и не torrentpier). Разработка vBulletin Torrent Tracker (http://www.vbtt.org/index.php)
-   VBTT v.2.0 (http://www.vbtt.org/forumdisplay.php?f=2)
-   -   Вновь про retracker.local (http://www.vbtt.org/showthread.php?t=206)

qaqaqa 06.03.2011 06:31

Вновь про retracker.local
 
Решил я вновь заняться этой темой.
Итак, что мы имеем:

1) файл benc.php, в который нужно прописать функцию, которая в свою очередь будет прописывать в поле announce-list несколько URL аннонсеров. (Поправьте, если я ошибаюсь).

2) и модуль 2.0.0826 Attachment Download, который отвечает за прописывание URL трекера в сам торрент-файл.
PHP код:

if ($extension == 'torrent' AND !($vbulletin->userinfo['permissions']['vbttpermissions'] & $vbulletin->bf_ugp_vbttpermissions['vbttcanview'])) print_no_permission();
if (
$extension == 'torrent' AND !in_array($foruminfo['forumid'], explode(',',$vbulletin->options['vbtt_forums']))) eval(standard_error(fetch_error('vbtt_disabled_forum')));
if (
$extension == 'torrent' AND $vbulletin->userinfo['userid'] AND strlen($vbulletin->userinfo['torrent_pass']) == 32 AND $attachmentinfo['info_hash']!='') {

$torrent $vbulletin->options['attachfile'] ? fread($fp2097152) : $attachmentinfo['filedata'];
    if (!
$comment=strpos($torrent,'4:infod6:lengthi')) 
        
$comment=strpos($torrent,'4:infod5:filesld6:lengthi');
    if (
$comment
        
$torrentstring=substr($torrent,$comment+6,-1);
    if (
pack('H*'sha1($torrentstring))!= $attachmentinfo['info_hash']) {
        require_once(
DIR '/includes/benc.php');
        
$torrent bdec($torrent);
        
$torrentstring $torrent['value']['info']['string'];
    }
    unset(
$torrent);


    
    
$announce_url construct_phrase($vbulletin->options['vbtt_primary_announce'],$vbulletin->userinfo['torrent_pass']); 
    
$comment=$vbulletin->options['bburl'].'/showthread.php?p='.$attachmentinfo['postid'];
    
$attachmentinfo['filedata'] = sprintf('d8:announce%d:%s7:comment%d:%s13:creation datei%de4:info%se'strlen($announce_url), $announce_urlstrlen($comment), $comment$attachmentinfo['dateline'], $torrentstring);
    
     
    
    unset(
$torrentstring,$announce_url,$comment);
    
$attachmentinfo['filesize'] = strlen($attachmentinfo['filedata']);
    
$vbulletin->options['attachfile'] = false;


Больше всего нас должен интересовать кусок
Код:

   
    $announce_url = construct_phrase($vbulletin->options['vbtt_primary_announce'],$vbulletin->userinfo['torrent_pass']);
    $comment=$vbulletin->options['bburl'].'/showthread.php?p='.$attachmentinfo['postid'];
    $attachmentinfo['filedata'] = sprintf('d8:announce%d:%s7:comment%d:%s13:creation datei%de4:info%se', strlen($announce_url), $announce_url, strlen($comment), $comment, $attachmentinfo['dateline'], $torrentstring);

также мы имеем подсказку от Skald
Цитата:

Сообщение от Skald (Сообщение 2275)
HELLRAiSER, вот самый простой пример, на основе чужого кода (заняло 5 минут поиска в гугле)
PHP код:

function put_announce_urls(&$dict,$anarray,$announce_url){
     
$liststring '';
     unset(
$dict['value']['announce']);
     unset(
$dict['value']['announce-list']);

     
$dict['value']['announce'] = bdec(benc_str($announce_url));

     
$announces[0] = array('type' => 'list''value' => array(bdec(benc_str($announce_url))), 'strlen' => strlen("l".$announce_url."e"), 'string' => "l".$announce_url."e");
     
$liststring .= "l".$announce_url."e";

     if (
is_array($anarray))
     foreach (
$anarray as $announce) {
          
$announces[] = array('type' => 'list''value' => array(bdec(benc_str($announce))), 'strlen' => strlen("l".$announce."e"), 'string' => "l".$announce."e");
          
$liststring .= "l".$announce."e";
     }
     
$dict['value']['announce-list']['type'] = 'list';
     
$dict['value']['announce-list']['value'] = $announces;


     
$dict['value']['announce-list']['string'] = "l".$liststring."e";
     
$dict['value']['announce-list']['strlen'] = strlen($dict['value']['announce-list']['string']);



примерный вариант использования:
PHP код:

put_announce_urls($torrent, array('мой_первый_урл','мой_второй_урл','мой_третий_урл'),$announce_url); 


Ну а дальше... Дальше вопрос - у кого какие соображения по реализации? Моих познаний не хватает.

Cyberdaemon 06.03.2011 18:23

Ну скажем так.... на днях ковырял - анонс прописать удалось, ход мыслей относительно правильный, в benc.php ничего нет вроде смысла прописывать (это просто парсер торрент файла).

Итак.... до чего собссно доколдовал - анонс прописывается, но возникает одно НО - файл в итоге бьётся, то ли с инфохешем грабли возникают, то ли что....... На выходных времени было в обрез, на неделе буду дальше шаманить. Проблема явно в массиве, что то я явно не так делаю.

P.S. Дело осложняется тем, что я в упор не могу понять работу использованного Скалдом benc.php (для своих разработок юзаю другую реализацию данного дела).

qaqaqa 07.03.2011 01:05

значит ковырять только модуль?

Cyberdaemon 07.03.2011 02:22

да, ибо benc.php просто для того существует, что бы декодировать торрент файл и потом закодировать его обратно в bencode - тупо парсер.
Что бы проще понималось - погугли на тему структуры торрент файла и почитай, я лично с этого начинал.

qaqaqa 07.03.2011 02:37

ясно. значит мы на правильном пути.
а ты в какое мета-поле пишешь урлы трекеров? в announce-list?

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

у меня в планах вывести урлы ретрекеров прям в админку, тем более там что-то когда-то уже присутствовало на эту тему.

Cyberdaemon 07.03.2011 12:02

1. при чём тут META ??? Я же уже написал - что бы не возникало глупых вопросов, разбирай структуру торрент файла.
2. В админку вывести - дело 1й минуты, у меня выведено изначально ибо это просто удобно (не вижу особой трудности в добавлении настройки с выводом в переменную в настройках самого трекера).
3. Выложить - да не вопрос....

PHP код:

if ($extension == 'torrent' AND !in_array($foruminfo['forumid'], explode(',',$vbulletin->options['vbtt_forums']))) eval(standard_error(fetch_error('vbtt_disabled_forum')));

if (
$extension == 'torrent' AND $vbulletin->userinfo['userid'] AND strlen($vbulletin->userinfo['torrent_pass']) == 32 AND $attachmentinfo['info_hash']!='') {

$torrent $vbulletin->options['attachfile'] ? fread($fp2097152) : $attachmentinfo['filedata'];
    if (!
$comment=strpos($torrent,'4:infod6:lengthi')) 
        
$comment=strpos($torrent,'4:infod5:filesld6:lengthi');
    if (
$comment
        
$torrentstring=substr($torrent,$comment+6,-1);
    if (
pack('H*'sha1($torrentstring))!= $attachmentinfo['info_hash']) {
        require_once(
DIR '/includes/benc.php');
        
$torrent bdec($torrent);
        
$torrentstring $torrent['value']['info']['string'];
    }
    unset(
$torrent);
    
$announce_local $vbulletin->options['announce_local'];
    
$announce_url construct_phrase($vbulletin->options['vbtt_primary_announce'],$vbulletin->userinfo['torrent_pass']);

    
$comment=$vbulletin->options['bburl'].'/showthread.php?p='.$attachmentinfo['postid'];
    
$attachmentinfo['filedata'] = sprintf('d8:announce%d:%s%d:%s7:comment%d:%s13:creation datei%de4:info%se'strlen($announce_local), $announce_localstrlen($announce_url), $announce_urlstrlen($comment), $comment$attachmentinfo['dateline'], $torrentstring);

    unset(
$torrentstring,$announce_url,$announce_local,$comment);
    
$attachmentinfo['filesize'] = strlen($attachmentinfo['filedata']);
    
$vbulletin->options['attachfile'] = false;


$vbulletin->options['announce_local'] - как раз переменная поля настройки дополнительного анонсера в настройках трекера.

qaqaqa 07.03.2011 13:35

И всё же мне кажется, что без ковыряния benc.php тут не обойтись.
Ибо нам надо в announce-list писать ретрекер при сборке торрента, а не в announce-url.

вот тут ещё почитать можно.
http://tbdevsz.ru/neskolko-announce-...ajle-t310.html
http://web-patcher.ru/democode.php.txt

Cyberdaemon 07.03.2011 18:31

что ты подразумеваешь под "announce-list"???

qaqaqa 08.03.2011 01:57

в торрент файле присутствует поле announce, куда мы пишем урл трекера.
если трекеров в торрент-файле предполагается более 1, то они пишутся торрент-файл в поле announce-list.

именно туда нам и нужно пихать основной трекер и ретрекер.
а у тебя на данный момент оба урла пытаются запихаться в поле announce, если я правильно понял.
потому клиент и не понимает торрента-файла, который ему выдать, используя твой код.

Cyberdaemon 08.03.2011 13:19

qaqaqa, Всё возможно, не вникал на столько, времени нет совсем.......тут столько гемороев свалилось - сижу разгребаюсь.
При беглом взгляде пихаются по очереди, один за другим с указанием длины.

qaqaqa 09.03.2011 07:16

Должны пихаться в анонс-лист

Skald 13.03.2011 20:54

Добавить к словам qaqaqa больше нечего.
Cyberdaemon, разберитесь со структурой и вообще с форматом данных внутри метафайлов формата торрент. Тогда и не будет проблем.
Пытаться генерировать торрент в обход benc.php можно только если 100% понимать как кодируются в торренте все данные.

Cyberdaemon 13.03.2011 22:49

Skald, А собственно про "в обход" никто и не говорил, я исправно генерю торрент в своём парсере (http://www.vbtt.org/showthread.php?t=205) используя другую реализацию парсинга торрент файла, с этой ну в упор не понимаю с какого боку подходить это раз. А второе - на benc.php свет клином не сошёлся - он на php написан, а не на сверхъестественном каком то космическом языке, и при таком раскладе "в обход" сделать тоже вполне реально (будем называть вещи своими именами - benc.php это парсер торрент файла написанный на php и то, что в нём возможно чего то не хватает - не показатель того что это нехватающее нельзя ткнуть прямо в хук).

P.S. И не надо тыкать меня носом как младенца, далеко уже не в том возрасте. Может ещё порассуждаем о 100%ном знании PHP того же, или о том, как бороздят космические корабли просторы большого театра? Бьюсь об заклад - на этом форуме не найдётся ни 1го человека 100% знающего того же PHP, так не будем же строить из себя мега супер одарённых спецов.
P.P.S. А проблем собственно и нет никаких - лично мне ретрекер не нужен (была когда то мысль прикрутить - переболел), человек спрашивал, я попытался вникнуть......да прописывается в announce-list поле, ну и никаких проблем прописать дополнительный анонс в такое поле нет, остаются мелкие ньюансы - но это мелочи, а времени у меня на эти мелочи нет ибо нет надобности. Вас же, уважаемый, просили о помощи - Вы ответили времени нема, все поняли и заткнулись......тут такая же история.

Возможно слишком резко написал, но по принципу Галки Галкиной - "каков вопрос - таков ответ".

Добавлено через 41 минуту
Вот, пожалуйста, безо всяких bencode, и прекрасно работает, точно таким же макаром можно затолкать и ещё хоть 1000 адресов анонсеров (а если ещё и не полениться и настройку добавить в продукт, то вообще удобно будет).

PHP код:

if ($extension == 'torrent' AND !in_array($foruminfo['forumid'], explode(',',$vbulletin->options['vbtt_forums']))) eval(standard_error(fetch_error('vbtt_disabled_forum')));

if (
$extension == 'torrent' AND $vbulletin->userinfo['userid'] AND strlen($vbulletin->userinfo['torrent_pass']) == 32 AND $attachmentinfo['info_hash']!='') {

$torrent $vbulletin->options['attachfile'] ? fread($fp2097152) : $attachmentinfo['filedata'];
    if (!
$comment=strpos($torrent,'4:infod6:lengthi')) 
        
$comment=strpos($torrent,'4:infod5:filesld6:lengthi');
    if (
$comment
        
$torrentstring=substr($torrent,$comment+6,-1);
    if (
pack('H*'sha1($torrentstring))!= $attachmentinfo['info_hash']) {
        require_once(
DIR '/includes/benc.php');
        
$torrent bdec($torrent);
        
$torrentstring $torrent['value']['info']['string'];
    }
    unset(
$torrent);
    
$announce_local 'http://retracker.local/announce';
    
$announce_url construct_phrase($vbulletin->options['vbtt_primary_announce'],$vbulletin->userinfo['torrent_pass']);

    
$comment=$vbulletin->options['bburl'].'/showthread.php?p='.$attachmentinfo['postid'];
    
$attachmentinfo['filedata'] = sprintf('d8:announce%d:%s13:announce-listll%d:%sel%d:%see7:comment%d:%s13:creation datei%de4:info%se'strlen($announce_url), $announce_urlstrlen($announce_url), $announce_urlstrlen($announce_local), $announce_localstrlen($comment), $comment$attachmentinfo['dateline'], $torrentstring);

    unset(
$torrentstring,$announce_url,$announce_local,$comment);
    
$attachmentinfo['filesize'] = strlen($attachmentinfo['filedata']);
    
$vbulletin->options['attachfile'] = false;


И как говорится "и не надо лохматить бабушку"!

qaqaqa 13.03.2011 22:56

Cyberdaemon, не кипятись, дискуссия есть дискуссия.

Итак, проблема решена благодаря Cyberdaemon. Собственно всё (ну разве что вывести в админку, но это уже не никакой проблемы не представляет).

Cyberdaemon 13.03.2011 23:05

qaqaqa, Господи, ну неужели даже это править надо?

Злой был - наспех писал. Удали строку - $announce_local = $announce_local."e";

P.S. Из предыдущего поста удалил в коде.
P.P.S. Так и хочется сказать - "ну что, съели? И нефиг про benc.php рассуждать!" РРРРРрррррразозлили блин.

qaqaqa 13.03.2011 23:52

Cyberdaemon, кстати - по-хорошему адрес трекера в списке в торренте должен быть первым, а уж потом ретрекер, иначе торрент-клиент Deluge будет брать только ретрекер (он не умеет с мультитрекерами работать и берёт первый в списке).

По поводу "неужели править надо?" - я же написал, что нашёл где и что, и уже у себя всё поправил. Просто не глядя взял код и вставил себе.

Cyberdaemon 15.03.2011 13:45

qaqaqa, А он разве не первым в списке стоит? Вообще при использовании ретрекера надо использовать клиенты типа uTorrent, которые поддерживают мультитрекерность.

qaqaqa 15.03.2011 15:10

1) ретрекер стоит первым, а нужно его последним.
2) именно поэтому и нужно его ставить последним, чтобы клиенты без поддержки мультитрекерности не обламывались, потому что они берут первый из списка. а первым стоит ретрекер - и это не правильно.

Cyberdaemon 15.03.2011 15:35

1. объясняю на пальцах - стоит первым, структура такая - [главный_анонсер] [анонс_лист_[главный анонсер]_[локальный анонсер]] - что не так то?
Код:

d8:announce74:http://estorrent.org/announce.php?passkey=hghghghghghghghghghghgh13:announce-listll74:http://estorrent.org/announce.php?passkey=hghghghghghghghghghghghel31:http://retracker.local/announce
При запуске торрента в том же uTorrent первой строкой идёт основной анонсер, через строку локальный.
http://img651.imageshack.us/img651/4577/98454350.jpg
Иными словами у меня именно так, как хочешь ты.........что я делаю не так?

2. Я в курсе относительно данной особенности.

qaqaqa 15.03.2011 16:02

Вот блин. А у меня он стоит ПЕРВЫМ, т.к. урл главного анонсера начинается на t.
Видимо клиент по алфавитному порядку выстраивает.
Ну значит тогда всё в порядке.


Итак тему ретрекера можно считать закрытой. Спасибо тебе, ты сделал нехилый вклад в развитие трекера на vbtt )))

Cyberdaemon 15.03.2011 21:24

qaqaqa, поверь мне, у меня тестовый форум как раз в домене на t начинающемся и точно так же всё в порядке, по крайней мере в uTorrent (другие не пробовал).

qaqaqa 16.03.2011 01:25

Ну значит всё чудненько.
У меня скорость обмена выросла в 2,5 раза.

Спасибо тебе за решение проблемы от которой Skald отнекивался два года.

Cyberdaemon 16.03.2011 13:58

qaqaqa, Если хочешь что то сделать - сделай это сам!

Интересно немного другое - в оригинальном vbtt 2 анонсера можно выставить в настройках, какими соображениями руководствовался Skald убирая второй анонсер мне лично не понять. С другой стороны - это его личное дело.

qaqaqa 16.03.2011 14:51

Cyberdaemon, я тоже заметил там присутствие секондари-анонсера. и мне тоже непонятно для чего его надо было убирать.

Cyberdaemon 16.03.2011 16:30

qaqaqa, Если сравнивать оригинал и версию от Skald, то можно найти массу интересностей - добавлено много полезных функций (авто прописывание анонса в файлы, золотые раздачи), но в то же время и убрано не меньше полезностей (статистика трекера, меню выбора сортировки торрент файлов вместе со страницей "трекер" и т.д.).

qaqaqa 16.03.2011 20:28

Cyberdaemon, отсутствующие страницы с торрентами и статистикой я сделал, и даже включил в админке (там это просто было деактивировано в продукте). Ну а сам скрипт взял из оригинального трекера, немного подпилив запрос в базу и убрав XSS-уязвимость из него.

Cyberdaemon 17.03.2011 16:33

qaqaqa, Ну у меня это дело давно тоже сделано, кстати что за уязвимость и где именно?

P.S. кстати, сегодня обнаружил один неприятный баг в версии 2.0.1 (полагаю, что в других версиях так же) - если включить в вобле коментарии в HTML, и юзать функцию шаблона имени файла, то комменты начинают лезть в имена добавляемых торрентов и получается хрень, а не имя файла - файл правда работоспособен при условии, что в настройках много знаков в имени файла выставлено (если мало - думаю расширение срежется). У меня около десятка торрентов успели залить юзеры в момент включения комментов - пришлось лезть в базу и вручную править.

P.P.S. Я бы после подключения ретрекера задумался бы как дёргать из торрент файла при загрузке на трекер состояние приват флага (не знаю, может только мне это надо) и потом его юзать в разных целях, как пример - у меня на трекере запрещены приватные торренты, юзер вываливает раздачу и далеко не постоянно её сидирует, другие же зайдя в раздачу и видя, что сидов либо мало либо вообще 0 уходят (а вдаваться в подробности никто не хочет и им пофигу, что раздача даже без сидов на трекере качаться будет и с приличной скоростью кстати). При этом если бы им вываливалось сообщение мол в раздаче активны DHT и PEX и что качаться будет в любом случае, возможно они бы не сваливали.

qaqaqa 17.03.2011 18:20

по поводу XSS - там по поиску торентов в урл можно гадостей добавить (для файла torrents.php). ну и в форме тоже фильтр по знакам, на всякий случай.

у тебя кстати xss не работает, я проверял ещё когда у себя выловил уязвимость. форму правда не проверял :)

а насчёт приват-флага - идея интересная и здравая.
надо подумать на досуге.

Cyberdaemon 17.03.2011 18:24

У меня формы как раз и нет, я её в первую очередь убрал за ненадобностью.

qaqaqa 17.03.2011 21:02

Cyberdaemon, я насчёт формы у тебя на трекере точно не помню, но вот xss точно не было на момент проверки.

Skald 18.03.2011 16:48

Цитата:

Сообщение от Cyberdaemon (Сообщение 2757)
qaqaqa, Господи, ну неужели даже это править надо?

Злой был - наспех писал. Удали строку - $announce_local = $announce_local."e";

P.S. Из предыдущего поста удалил в коде.
P.P.S. Так и хочется сказать - "ну что, съели? И нефиг про benc.php рассуждать!" РРРРРрррррразозлили блин.

для информации - внимательно надо читать что я писал, а потом говорить разозлили и т.п.

А именно, я писал, что надо сначала разобраться со структурой метафайла и с самим форматом, а потом уже писать что-то в обход benc.
Даже не зная формат, и вообще ничего не понимая можно простым копипастом сделать абсолютно рабочий код, но это не значит что это будет хороший код. Это не значит что с кодом Cyberdaemon-а что-то не так - там все в порядке :)
Я говорю вообще, что сначала надо разобраться в том что собираешься делать, а потом начитать делать, а не так как многие: "руки пишут, а голова вообще без понятия что именно"

Если бы хоть кто-то смотрел мой код, то увидел бы что им там используется прямое генерирование торрента в обход benc.php (для экономии памяти), но все равно там остается проверка на валидность торрента и в случае неудачи использование benc.php. К тому же в benc-е есть удобные функции, не потребляющие ресурсов для упрощения генерации базовых торрент структур - это значительно облегчает понимания кода другими (все-таки это лучше чем десятки параметров для sprintf).

Cyberdaemon 18.03.2011 18:26

Цитата:

там все в порядке
утешил блин....

Тут собственно надо определиться вообще что требуется - либо что бы было "всё так" либо что бы работало....А по сабжу именно надо было чтоб работало, отсюда и результат - сделано за 5 минут. Или кого то что то не устраивает? Следуя твоей логике либо надо стать гением и потом только что либо писать обложившись доками и манами, либо признать себя полным дебилом и ныть по типу "сделайте дяденька, я заплачу"

Skald 20.03.2011 18:53

Цитата:

Сообщение от Cyberdaemon (Сообщение 2776)
утешил блин....

Тут собственно надо определиться вообще что требуется - либо что бы было "всё так" либо что бы работало....А по сабжу именно надо было чтоб работало, отсюда и результат - сделано за 5 минут. Или кого то что то не устраивает? Следуя твоей логике либо надо стать гением и потом только что либо писать обложившись доками и манами, либо признать себя полным дебилом и ныть по типу "сделайте дяденька, я заплачу"

если прочитать мануал по структуре торрент файла где минимум внутренних типов элементов (насколько помню - это целое, строка, словарь и список) - это обложиться мануалами, тогда я молчу...

Я просто хотел акцентировать что в benc-е некоторые функи делают именно то же самое, но в результате код получился бы лучше.

P.S. А насчет заплачу - это уже точно не ко мне, т.к. заказы по трекеру ой как давно не принимаю...

Cyberdaemon 20.03.2011 20:26

Skald, Я немного другое хотел сказать - лично я прошу помощи только когда "всё, писец.... просто галимый тупик", до остального я всостоянии самостоятельно так или иначе допереть и поверь мне вот именно в маны я заглядываю именно при полном тупике, а в данном случае достаточно было посмотреть в 2 торрент файла (с одним анонсером и с несколькими) но как я и говорил - временем я последнее время не обременён, отсюда и проглядел на счёт announce-list, при этом тут же пошли тыканья в маны, какие то непонятные обвинения..........я вроде ни у кого штуку баксов не одалживал, что бы от меня что то требовать.

Skald 22.03.2011 15:32

Цитата:

Сообщение от Cyberdaemon (Сообщение 2778)
Skald, Я немного другое хотел сказать - лично я прошу помощи только когда "всё, писец.... просто галимый тупик", до остального я всостоянии самостоятельно так или иначе допереть и поверь мне вот именно в маны я заглядываю именно при полном тупике, а в данном случае достаточно было посмотреть в 2 торрент файла (с одним анонсером и с несколькими) но как я и говорил - временем я последнее время не обременён, отсюда и проглядел на счёт announce-list, при этом тут же пошли тыканья в маны, какие то непонятные обвинения..........я вроде ни у кого штуку баксов не одалживал, что бы от меня что то требовать.

одним словом сначала небольшое непонимание и как всегда пошло поехало... :)

stepan83 30.06.2011 21:05

Цитата:

Сообщение от Cyberdaemon (Сообщение 2754)
Вот, пожалуйста, безо всяких bencode, и прекрасно работает

Cyberdaemon подскажи куда прописывать php код?

Cyberdaemon 04.07.2011 00:43

В хук - Attachment Download, если точнее, то полностью заменить его содержимое (ну и соображалку при этом не забыть включить, чтоб не накосячить).

А вообще то стоило бы перечитать тему, ибо раз возник такой вопрос, то косяки неизбежны.

qaqaqa 24.07.2013 05:14

что-то не могу никак дотумкать, как воткнуть третий анонс.
вроде и так, и эдак пробовал - торрент-файл бьётся в итоге.


Часовой пояс GMT +3, время: 08:00.

vBulletin® 3.8.1. ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot