under discussion Пожелания zxc

Обязательно переносите анонсер /announce.php на отдельный домен + абузоустойчивый хостинг. Сейчас копирастеры (особенно зарубежные) умеют отслеживать p2p трафик и шлют жалобы на автомате.

Варианты:
создать домен на своем сервере, скопировать на него папку /bt/ и в announce.php и scrape.php прописать строку
define('TR_ROOT', str_ireplace('bt-site.ru','site.ru',$_SERVER['DOCUMENT_ROOT']).'/bt/');

Тоже самое можно реализовать через /etc/fstab прописав относительные пути. Пример:
/var/www/site/data/www/site.ru/bt /var/www/site/data/www/site/bt-site.ru/bt none bind 0 0

Либо админы подскажите как это правильнее сделать
Вообще, чтобы реализовать такое надо половину движка переносить, и к тому же у них должна быть одна база на двоих.

В настоящее время, анонсер очень плотно интегрирован с движком.

Я подумаю как можно такое сделать.
 
О наболевшем: новички кое как создают раздачу, но в большинстве случаев игнорируют сообщение, что нужно скачать свой торрент и согласиться с перезаписью трекеров. А в движке по умолчанию стоит ещё редирект через 5сек после этого уведомления и они просто не успевают это прочитать. И получаем раздачу с ошибкой Seeder not seen never
 
О наболевшем: новички кое как создают раздачу, но в большинстве случаев игнорируют сообщение, что нужно скачать свой торрент и согласиться с перезаписью трекеров. А в движке по умолчанию стоит ещё редирект через 5сек после этого уведомления и они просто не успевают это прочитать. И получаем раздачу с ошибкой Seeder not seen never
По сути, что можно сделать - увеличить время спустя которое будет редирект. До условных 10 секунд. Либо же вообще убрать редирект
 
Добавить время выполнения скрипта под каждой задачей
PHP:
CREATE TABLE IF NOT EXISTS `bb_cron` (
  `cron_id` smallint(5) unsigned NOT NULL,
  `cron_active` tinyint(4) NOT NULL DEFAULT 1,
  `cron_title` char(120) NOT NULL DEFAULT '',
  `cron_script` char(120) NOT NULL DEFAULT '',
  `schedule` enum('hourly','daily','weekly','monthly','interval') NOT NULL DEFAULT 'daily',
  `run_day` enum('1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28') DEFAULT NULL,
  `run_time` time DEFAULT '04:00:00',
  `run_order` tinyint(4) unsigned NOT NULL,
  `last_run` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `next_run` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `run_interval` time DEFAULT NULL,
  `log_enabled` tinyint(1) NOT NULL DEFAULT 0,
  `log_file` char(120) NOT NULL DEFAULT '',
  `log_sql_queries` tinyint(4) NOT NULL DEFAULT 0,
  `disable_board` tinyint(1) NOT NULL DEFAULT 0,
  `run_counter` bigint(20) unsigned NOT NULL DEFAULT 0,
  `last_id` int(11) NOT NULL,
  `execution_time` float NOT NULL
) ENGINE=MyISAM AUTO_INCREMENT=49 DEFAULT CHARSET=utf8;
 

Attachments

  • 2025-11-11_21-45-59.webp
    2025-11-11_21-45-59.webp
    91.2 KB · Views: 24
Last edited:
Добавить время выполнения скрипта под каждой задачей
PHP:
CREATE TABLE IF NOT EXISTS `bb_cron` (
  `cron_id` smallint(5) unsigned NOT NULL,
  `cron_active` tinyint(4) NOT NULL DEFAULT 1,
  `cron_title` char(120) NOT NULL DEFAULT '',
  `cron_script` char(120) NOT NULL DEFAULT '',
  `schedule` enum('hourly','daily','weekly','monthly','interval') NOT NULL DEFAULT 'daily',
  `run_day` enum('1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28') DEFAULT NULL,
  `run_time` time DEFAULT '04:00:00',
  `run_order` tinyint(4) unsigned NOT NULL,
  `last_run` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `next_run` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `run_interval` time DEFAULT NULL,
  `log_enabled` tinyint(1) NOT NULL DEFAULT 0,
  `log_file` char(120) NOT NULL DEFAULT '',
  `log_sql_queries` tinyint(4) NOT NULL DEFAULT 0,
  `disable_board` tinyint(1) NOT NULL DEFAULT 0,
  `run_counter` bigint(20) unsigned NOT NULL DEFAULT 0,
  `last_id` int(11) NOT NULL,
  `execution_time` float NOT NULL
) ENGINE=MyISAM AUTO_INCREMENT=49 DEFAULT CHARSET=utf8;
Спасибо за идею. К новой версии думаю добавлю.
UPD: Добавлено
 
Очередная зашкварная идея от меня. Хранить список заходивших в тему на примере https://torrentpier.com/threads/kto-prosmatrivaet-temu.42210/
Релизерам захотелось знать кто посещает их темы, качает и не жмет кнопку спасибо. Выглядит это так

2025-12-11_20-53-03.webp


делаем запрос в базу
PHP:
CREATE TABLE IF NOT EXISTS `bb_topics_views` (
  `topic_id` int(11) NOT NULL,
  `user_id` int(11) NOT NULL,
  `visitor_name` varchar(255) NOT NULL,
  `user_ip` char(32) NOT NULL,
  `visit_time` int(11) NOT NULL,
  `visits` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;
Крон задача: Запускаем раз в сутки и чистим просмотры старше 1 года
PHP:
<?php

if (!defined('BB_ROOT')) die(basename(__FILE__));

DB()->query("DELETE FROM `bb_topics_views` WHERE visit_time < UNIX_TIMESTAMP(DATE_SUB(CURRENT_DATE, INTERVAL 1 YEAR))");
ajax подгружаем список по клику
PHP:
<?php

if (!defined('IN_AJAX')) die(basename(__FILE__));

global $userdata, $bb_cfg, $lang;

if (!isset($this->request['topic_id'])){
    $this->ajax_die($lang['EMPTY_ATTACH_ID']);
}

$topic_id  = (int) $this->request['topic_id'];
$bots_off  = (int) $this->request['bots_off'];
$rowset = DB()->fetch_rowset("SELECT * FROM bb_topics_views WHERE topic_id =".$topic_id." ORDER BY visit_time DESC");
$html = [];
foreach ($rowset as $key => $visitor){

    if($bots_off==1 AND $visitor['user_id'] == '-1') continue;

    if($visitor['visits']>10 AND !IS_ADMIN){$visitor['visits']='10+';}

    $html[]='<span class="'.(($visitor['user_id'] != '-1')?"visitor-is-user":"visitor-is-bot").'">'.($visitor['user_id'] != '-1' ? profile_url(get_userdata($visitor['user_id'])):((!empty($visitor['visitor_name']))?$visitor['visitor_name']:$lang['GUEST'])).(($visitor['visits'] > 1) ? ' <sup class="cursor_help" title="'.$lang['VISITS_COUNT'].'"><small>['.$visitor['visits'].']</small></sup>':'').'</span>';
}
$this->response['bots_off'] = $bots_off;
$this->response['html'] = is_array($html) ? implode(', ',$html) : false;
Добавляем в viewtopic.php код который сохраняет посетителя в базу
PHP:
$visitor_ip = !empty($userdata['user_last_ip']) ? $userdata['user_last_ip']:encode_ip(get_ip_address());
$visitor_name = $userdata['user_id'] != '-1' ? $userdata['username']:get_botname(@$_SERVER['HTTP_USER_AGENT']);
    //get_botname($user_agent)
if(!empty($visitor_name)){
    $sql = "INSERT INTO bb_topics_views
    (topic_id,  user_id, user_ip, visitor_name, visit_time, visits) VALUES
    ($topic_id, ".$userdata['user_id'].", '".$visitor_ip."','".$visitor_name."',".TIMENOW.",1)
    ON DUPLICATE KEY UPDATE
    visits = visits + 1,visit_time=".TIMENOW;

    if (!DB()->sql_query($sql)) {
        message_die(GENERAL_ERROR, "Could not update topic views #2.", '', __line__,
            __FILE__, $sql);
    }
}
код шаблона и js ajax
Code:
<div id="tor-visitors-wrap" style="display:none">
    <div id="visitors-tbl-wrap">
        <table class="table table-bordered">
            <thead>
            <tr>
                <!--<td></td>-->
                <th>
                    <div class="pull-left" id="tor-visitors-title">{L_VISITORS}</div>
                    <div class="pull-right" id="tor-visitors-chkb">
                        <div class="checkbox checkbox-default checkbox-inline">

                            <input type="checkbox" name="viewers_hide_bots" id="viewers_hide_bots" value="0">
                            <label for="viewers_hide_bots">{L_HIDE_BOTS}</label>
                        </div>
                    </div>
                </th>
            </tr>
            </thead>
            <tbody>
            <tr>
                <td class="vTop" style="width: 100%;">
                    <div id="tor-visitors" class="border bw_TRBL med row1 scrollY max-h200"></div>
                </td>
            </tr>
            </tbody>

            <tfoot>
            <tr ><td><span class="text-muted"><i class="fa fa-info" aria-hidden="true"></i> <i>{L_LAST_DAYS_VISITORS}</i></span></td></tr>
            </tfoot>
        </table>
    </div>
</div>
<script>
function show_visitors(){
$("#ajax-loading").show();
   ajax.exec({
action    : 'show_visitors',
      topic_id : {TOPIC_ID},
      bots_off : $('#viewers_hide_bots').val()
});

}
ajax.callback.show_visitors = function(data){
$('#tor-visitors').html(data.html);

   //if(data.bots_off){
      $('#tor-visitors-wrap').show();
   //}
   //else{
      //$('#tor-visitors-wrap').toggle();
   //}

   $("#ajax-loading").hide();

   if ($("#tor-visitors-wrap").is(":visible")) {
$("#tor-visitors-btn").addClass('active');
   } else {
$("#tor-visitors-btn").removeClass('active');
   }

};

$('#tor-visitors-btn').click(function(){
show_visitors();
});

</script>
Мод не рекомендуется для высоконагруженных сайтов. При посещаемости 2тыс в сутки и сроке хранения последних посетителей 1 год имеем 1.5млн записей размером 100+мб
 
Last edited:
качает и не жмет кнопку спасибо
И вместо того чтобы хранить список тех кто непосредственно скачал или даже сделать для релизера дифф кто скачал и не поблагодарил - мы храним миллиарды записей о посещениях вообще всех? 😕
 
Back
Top