в работе Недостача сидбонусов

sхс

Легенда
Если вдруг решите отключить сидбонусы, а потом к примеру включить через мес, то пользователям добавится овердохера бонусов. Чтоб такого не произошло лучше исправить последнюю строку на

PHP:
$user_points = ($cron_job_last_run<3600) ? round((float)$points*($cron_job_last_run/3600),2) : 0; // сколько сидбонусов заработали за эти секи

Время выполнения задачи нельзя выставлять более чем раз в 45минут. Я у себя поставил раз в 10мин
 

belomaxorka

Разработчик
Администратор
Если вдруг решите отключить сидбонусы, а потом к примеру включить через мес, то пользователям добавится овердохера бонусов. Чтоб такого не произошло лучше исправить последнюю строку на

PHP:
$user_points = ($cron_job_last_run<3600) ? round((float)$points*($cron_job_last_run/3600),2) : 0; // сколько сидбонусов заработали за эти секи

Время выполнения задачи нельзя выставлять более чем раз в 45минут. Я у себя поставил раз в 10мин
Подниму эту тему спустя долгое время с её начала. sхс, как думаешь, за неимением альтернатив, можно ли данный код добавить на постоянку в движок? Я так понимаю проблема актуальна.

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

sхс

Легенда
Ну и ещё вопрос
Прошлый код считал довольно грубо. Т.к. крон задача не всегда выполняется ровно каждые 15мин и деление на 4 давало погрешность. Сейчас же все считается посекундно. Больше изменений не делал в сидбонусах. Самый главный вопрос по ним от пользователей: где мои бонусы? Решил вывести уведомление в профиле о том, что сидбонусы могут считаться неверно, т.к. включен dht в профиле
 
Последнее редактирование:

belomaxorka

Разработчик
Администратор
Прошлый код считал довольно грубо. Т.к. крон задача на всегда выполяется ровно каждые 15мин и деление на 4 давало погрешность. Сейчас же все считается посекундно. Больше изменений не делал в сидбонусах. Самый главный вопрос по ним от пользователей: где мои бонусы? Решил вывести уведомление в профиле о том, что сидбонусы могут считаться неверно, т.к. включен dht в профиле
Спасибо за объяснение. Твой вариант добавлен теперь по умолчанию в LTS и основную версию.
 

sхс

Легенда
Забыл, но отмечу. Добавил в профиль вывод такого, т.к многие не понимали, что за сид бонусы
2024-06-22_02-59-48.jpg
2024-06-22_02-59-37.jpg
2024-06-22_02-59-48.jpg
2024-06-23_04-54-29.jpg
Если потребуется код, дайте знать, поделюсь
 
Последнее редактирование:

sхс

Легенда
Имеем два запроса
Первый в jobs/tr_seed_bonus.php (крон задача которая считает число активных торрентов)
Код:
DB()->query("INSERT INTO tmp_bonus
   SELECT bt.user_id, count(bt.seeder) AS release_count
      FROM ". BB_BT_TRACKER ." bt, ". BB_BT_TORRENTS ." tor
      WHERE tor.topic_id = bt.topic_id
         AND tor.size   > 0
         AND bt.seeder  > 0
         AND bt.user_id not IN(". EXCLUDED_USERS_CSV .")
      GROUP BY user_id
");
Второй в viewporfile.php или vietorrent.php (отображение в профиле числа активных торрентов)
Код:
$sql = "
        SELECT
                f.forum_id, f.forum_name,
                t.topic_title,
                tor.tor_type, tor.size,
                trs.seeders, trs.leechers,
                tr.*
        FROM ". BB_TOPICS ." t, ". BB_FORUMS ." f,  ". BB_BT_TRACKER ." tr, ". BB_BT_TORRENTS ." tor, ". BB_BT_TRACKER_SNAP ." trs
        WHERE tr.user_id = $user_id
                AND tr.topic_id = t.topic_id
                AND tor.topic_id = t.topic_id
                AND trs.topic_id = t.topic_id
                AND f.forum_id = t.forum_id
                        $not_auth_forums_sql
        GROUP BY t.topic_id
        ORDER BY tr.releaser DESC, tr.seeder DESC, f.forum_name ASC, t.topic_title ASC";

Первый запрос выдает, что у пользователя 24тыс активных торрентов, второй выдает 5.9тыс активных торрентов (из-за GROUP BY t.topic_id)
Соответсвенно пользователь получает сидбонусы на основе первого запроса

2025-02-17_22-54-20.jpg

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

Есть ли идеи что с этим делать и нужно ли?
 
Последнее редактирование:

belomaxorka

Разработчик
Администратор
Имеем два запроса
Первый в jobs/tr_seed_bonus.php (крон задача которая считает число активных торрентов)
Код:
DB()->query("INSERT INTO tmp_bonus
   SELECT bt.user_id, count(bt.seeder) AS release_count
      FROM ". BB_BT_TRACKER ." bt, ". BB_BT_TORRENTS ." tor
      WHERE tor.topic_id = bt.topic_id
         AND tor.size   > 0
         AND bt.seeder  > 0
         AND bt.user_id not IN(". EXCLUDED_USERS_CSV .")
      GROUP BY user_id
");
Второй в viewporfile.php или vietorrent.php (отображение в профиле числа активных торрентов)
Код:
$sql = "
        SELECT
                f.forum_id, f.forum_name,
                t.topic_title,
                tor.tor_type, tor.size,
                trs.seeders, trs.leechers,
                tr.*
        FROM ". BB_TOPICS ." t, ". BB_FORUMS ." f,  ". BB_BT_TRACKER ." tr, ". BB_BT_TORRENTS ." tor, ". BB_BT_TRACKER_SNAP ." trs
        WHERE tr.user_id = $user_id
                AND tr.topic_id = t.topic_id
                AND tor.topic_id = t.topic_id
                AND trs.topic_id = t.topic_id
                AND f.forum_id = t.forum_id
                        $not_auth_forums_sql
        GROUP BY t.topic_id
        ORDER BY tr.releaser DESC, tr.seeder DESC, f.forum_name ASC, t.topic_title ASC";

Первый запрос выдает, что у пользователя 24тыс активных торрентов, второй выдает 5.9тыс активных торрентов (из-за GROUP BY t.topic_id)
Соответсвенно пользователь получает сидбонусы на основе первого запроса

Посмотреть вложение 6376

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

Есть ли идеи что с этим делать и нужно ли?
Спасибо большое за наблюдения. Эта проблема актуальна до сих пор.

Попробуйте в первом запросе заменить
SQL:
GROUP BY user_id
На
SQL:
GROUP BY bt.user_id
Мне кажется проблема в этом, это как минимум не рабочая группировка.
 

sхс

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

Мой mysql видимо закрывал глаза на это и не выдавал ошибок, ничего не изменилось после замены. Проблема в GROUP BY topic_id
В первом варианте присутсвуют копии с одинаковым topic_id
 

belomaxorka

Разработчик
Администратор
Мой mysql видимо закрывал глаза на это и не выдавал ошибок, ничего не изменилось после замены. Проблема в GROUP BY topic_id
В первом варианте присутсвуют копии с одинаковым topic_id
Попробуйте добавить bt.topic_id в GROUP BY
 
Сверху