- Совместимость
- проверялся на совместимость
- Изменения в БД
- требуются
- Дополнительные требования
- msqli.so, curl.so, серверный крон
- Автор
- Wertos
- Общественное достояние
- да
Описание: добавляет возможность парсить число пиров с других ресурсов.
Фактически не добавляет пиров в таблицы движка, лишь увеличивает число отображаемых на самом форуме. При скачивании, пиры будут искаться через обмен пирами и DHT.
Фактически не добавляет пиров в таблицы движка, лишь увеличивает число отображаемых на самом форуме. При скачивании, пиры будут искаться через обмен пирами и DHT.
- Инструкция по установке
-
PHP:
------------------------------------------------------------------------------------- 1. !!!ВНИМАНИЕ!!! Для работы модификации необходимы расширения: msqli.so, curl.so и серверный cron. 2. Скопировать папку mult и её содержимое в корень трекера. 3. На сервере настроить крон задачу: */05 * * * * wget http://ваш домен.ru/mult/ann.php где {*/05 * * * *} - выполнение каждые 5 минут По умолчанию: * Обновление пиров и сидов каждые пять минут по 20 раздач. * Интервал обновления одной раздачи: 12 часов. Настраиваете под себя в заисимости от кол-ва раздач, и тайм-апа сервера на внешку. 4. Выполнить запросы в базу: ALTER TABLE `bb_bt_torrents` ADD `last_update` int(11) not null default 0; ALTER TABLE `bb_bt_torrents` ADD `ext_seeder` int(11) not null default 0; ALTER TABLE `bb_bt_torrents` ADD `ext_leecher` int(11) not null default 0; 5. Заполнить своими данными /mult/config.php (переодически проверяйте анонсеры на предмет доступности, во избежание долгого обновления) -------------------------------------------------------------------------------------- ОТКРЫТЬ \attach_mod\displaying_torrent.php---------------------------------------- НАЙТИ $peers_cnt = $seed_count = 0; ЗАМЕНИТЬ $peers_cnt = $seed_count = $leech_count = 0; НАЙТИ // SQL for each mode if ($s_mode == 'count') { $sql = "SELECT seeders, leechers, speed_up, speed_down FROM ". BB_BT_TRACKER_SNAP ." WHERE topic_id = $tor_id LIMIT 1"; } else if ($s_mode == 'names') { $sql = "SELECT tr.user_id, tr.ip, tr.port, tr.remain, tr.seeder, u.username, u.user_rank FROM ". BB_BT_TRACKER ." tr, ". BB_USERS ." u WHERE tr.topic_id = $tor_id AND u.user_id = tr.user_id GROUP BY tr.ip, tr.user_id, tr.port, tr.seeder ORDER BY u.username LIMIT $show_peers_limit"; } else { $sql = "SELECT tr.user_id, tr.ip, tr.port, tr.uploaded, tr.downloaded, tr.remain, tr.seeder, tr.releaser, tr.speed_up, tr.speed_down, tr.update_time, u.username, u.user_rank FROM ". BB_BT_TRACKER ." tr LEFT JOIN ". BB_USERS ." u ON u.user_id = tr.user_id WHERE tr.topic_id = $tor_id GROUP BY tr.ip, tr.user_id, tr.port, tr.seeder ORDER BY $full_mode_order $full_mode_sort_dir LIMIT $show_peers_limit"; } ЗАМЕНИТЬ: // SQL for each mode if ($s_mode == 'count') { $sql = "SELECT sn.seeders, sn.leechers, sn.speed_up, sn.speed_down, tor.ext_seeder, tor.ext_leecher FROM ". BB_BT_TORRENTS ." tor LEFT JOIN ". BB_BT_TRACKER_SNAP ." sn ON(sn.topic_id = tor.topic_id) WHERE tor.topic_id = $tor_id LIMIT 1"; } else if ($s_mode == 'names') { $sql = "SELECT tr.user_id, tr.ip, tr.port, tr.remain, tr.seeder, u.username, u.user_rank, tor.ext_seeder, tor.ext_leecher FROM ". BB_BT_TORRENTS ." tor LEFT JOIN ". BB_BT_TRACKER ." tr ON(tr.topic_id = tor.topic_id) LEFT JOIN ". BB_USERS ." u ON(u.user_id = tr.user_id) WHERE tor.topic_id = $tor_id GROUP BY tr.ip, tr.user_id, tr.port, tr.seeder ORDER BY u.username LIMIT $show_peers_limit"; } else { $sql = "SELECT tr.user_id, tr.ip, tr.port, tr.uploaded, tr.downloaded, tr.remain, tr.seeder, tr.releaser, tr.speed_up, tr.speed_down, tr.update_time, u.username, u.user_rank, tor.ext_seeder, tor.ext_leecher FROM ". BB_BT_TORRENTS ." tor LEFT JOIN ". BB_BT_TRACKER ." tr ON(tr.topic_id = tor.topic_id) LEFT JOIN ". BB_USERS ." u ON (u.user_id = tr.user_id) WHERE tor.topic_id = $tor_id AND tr.topic_id = tor.topic_id GROUP BY tr.ip, tr.user_id, tr.port, tr.seeder ORDER BY $full_mode_order $full_mode_sort_dir LIMIT $show_peers_limit"; } НАЙТИ $tmp[0]['username'] = (int) @$peers[0]['leechers']; $tmp[1]['username'] = (int) @$peers[0]['seeders']; ЗАМЕНИТЬ $tmp[0]['username'] = (int) @$peers[0]['leechers'] + @$peers[0]['ext_leecher']; $tmp[1]['username'] = (int) @$peers[0]['seeders'] + @$peers[0]['ext_seeder']; НАЙТИ if ($bb_cfg['bt_allow_spmode_change'] && $s_mode != 'full') ЗАМЕНИТЬ if ($bb_cfg['bt_allow_spmode_change'] && $s_mode != 'full' && ($seed_count || $leech_count)) ОТКРЫТЬ \includes\datastore\build_stats.php----------------------------------------------------------- НАЙТИ // peers stat $row = DB()->fetch_row("SELECT SUM(seeders) AS seeders, SUM(leechers) AS leechers, ((SUM(speed_up) + SUM(speed_down))/2) AS speed FROM ". BB_BT_TRACKER_SNAP); $data['seeders'] = number_format($row['seeders']); $data['leechers'] = number_format($row['leechers']); $data['peers'] = number_format($row['seeders'] + $row['leechers']); $data['speed'] = $row['speed']; ЗАМЕНИТЬ // peers stat $row = DB()->fetch_row("SELECT SUM(seeders) AS seeders, SUM(leechers) AS leechers, ((SUM(speed_up) + SUM(speed_down))/2) AS speed FROM ". BB_BT_TRACKER_SNAP); $row2 = DB()->fetch_row("SELECT SUM(ext_seeder) AS seeders, SUM(ext_leecher) AS leechers FROM ". BB_BT_TORRENTS); $data['seeders'] = number_format($row['seeders'] + $row2['seeders']); $data['leechers'] = number_format($row['leechers'] + $row2['leechers']); $data['peers'] = number_format($row['seeders'] + $row['leechers'] + $row2['seeders'] + $row2['leechers']); $data['speed'] = $row['speed']; ОТКРЫТЬ \tracker.php---------------------------------------------------------------------------------- НАЙТИ sn.seeders, sn.leechers, tor.info_hash В ЭТОЙ ЖЕ СТРОКЕ ДОБАВИТЬ , tor.ext_seeder, tor.ext_leecher НАЙТИ $seeds = $tor['seeders']; $leechs = $tor['leechers']; ЗАМЕНИТЬ $seeds = $tor['seeders'] + $tor['ext_seeder']; $leechs = $tor['leechers'] + $tor['ext_leecher']; ОТКРЫТЬ \viewforum.php-------------------------------------------------------------------------------- НАЙТИ sn.seeders, sn.leechers В ЭТОЙ ЖЕ СТРОКЕ ДОБАВИТЬ , tor.ext_seeder, tor.ext_leecher НАЙТИ 'SEEDERS' => (int) $topic['seeders'], 'LEECHERS' => (int) $topic['leechers'], ЗАМЕНИТЬ 'SEEDERS' => (int) $topic['seeders'] + $topic['ext_seeder'], 'LEECHERS' => (int) $topic['leechers'] + $topic['ext_leecher'], ОТКРЫТЬ \ajax.php------------------------------------------------------------------------------------ НАЙТИ case 'view_post': require(INC_DIR . 'bbcode.php'); break; ПОСЛЕ ДОБАВИТЬ case 'update_peers': require(BB_ROOT .'mult/config.php'); require(BB_ROOT .'mult/func.php'); require(BB_ROOT .'mult/class.remote.php'); require(BB_ROOT .'mult/class.fbenc.php'); require(BB_ROOT .'mult/class.bittorrent.php'); require(BB_ROOT .'mult/class.getpeers.php'); break; НАЙТИ 'index_data' => array('guest'), ПОСЛЕ ДОБАВИТЬ 'update_peers' => array('mod'), НАЙТИ ПОСЛЕДНИЮ СКОБКУ - } - И ПЕРЕД НЕЙ ДОБАВИТЬ function update_peers() { global $db, $cfg_ann, $lang; $seed = $leech = 0; $topic_id = (int) $this->request['topic_id']; $row = DB()->fetch_row("SELECT info_hash FROM ".BB_BT_TORRENTS." WHERE topic_id = ".$topic_id." LIMIT 1"); if($row && $info_hash = $row['info_hash']) { $gp = new getpeers(); $data = $gp->get_peers(1, serialize($cfg_ann), bin2hex($info_hash), false); foreach($data['peers'] as $announce) { $seed = (int) $seed + $announce[0]; $leech = (int) $leech + $announce[1]; } //DB()->query("UPDATE ".BB_BT_TORRENTS." SET last_update = ".$data['last_update'].", ext_seeder = ".$seed.", ext_leecher = ".$leech." WHERE info_hash = '".DB()->escape($info_hash)."'"); DB()->query("UPDATE ".BB_BT_TORRENTS." SET last_update = ".$data['last_update'].", ext_seeder = ".$seed.", ext_leecher = ".$leech." WHERE topic_id = $topic_id"); $html = '<div class="mrg_4 pad_4">'; $html .= '<span class="seed">'. $lang['SEEDERS'] .': <b>'. $seed .'</b> [ 0 KB/s ]</span> '; $html .= '<span class="leech">'. $lang['LEECHERS'] .': <b>'. $leech .'</b> [ 0 KB/s ]</span> '; $html .= '</div>'; } $this->response['html'] = $html; $this->response['topic_id'] = $topic_id; } ОТКРЫТЬ \templates\default\viewtopic_torrent.tpl------------------------------------------------------- НАЙТИ <tr> <td colspan="2" class="catTitle"><a href="{DL_LIST_HREF}"> {L_DL_LIST_AND_TORRENT_ACTIVITY} </a> </td> </tr> ЗАМЕНИТЬ <tr> <td colspan="2" class="catTitle"><a href="{DL_LIST_HREF}"> {L_DL_LIST_AND_TORRENT_ACTIVITY} </a> <script type="text/javascript"> ajax.callback.update_peers = function(data) { $('#peers').html(data.html); }; </script> <a class="txtb" href="#peers" onclick="ajax.exec({action : 'update_peers', topic_id: '{TOPIC_ID}'});">[{L_UPDATE} пиров]</a> </td> </tr> НАЙТИ <tr> <td colspan="2" class="<!-- IF SHOW_DL_LIST -->row2<!-- ELSE -->row1<!-- ENDIF --> pad_2"> <!-- IF not SEED_COUNT --> ЗАМЕНИТЬ <tr> <td id="peers" colspan="2" class="<!-- IF SHOW_DL_LIST -->row2<!-- ELSE -->row1<!-- ENDIF --> pad_2"> <a name="peers"></a> <!-- IF not SEED_COUNT --> --------------------------------------ВСЕ СОХРАНИТЬ, ОЧИСТИТЬ КЭШ В АДМИНКЕ, ЮЗАТЬ----------------------------------