Tutaj znajduje się zbiór dostępnych dla TBDEV.NET modów oraz porad jak właściwie zmodyfikować skrypt naszego trackera.
Chciałem dodać tutaj bardzo interesujący mod, i przy okazji bardzo praktyczny. Tyle się słyszy o włamaniach na konkurencyjne stronki torrentowe różnych Hackerów. By spać bezpiecznie warto robić Backupy ale są one nieco uciążliwe.
Oto mod który będzie nam automatycznie robił Backupy i wysyłał na dowolny adres e-mail.
mysql.backup.rar |
Pobierz Plik ściągnięto 0 raz(y) 2,31 KB |
Instrukcja:
1. My najpierw musimy utworzyć nową kolumnę w phpmyadmin ( w bazie MySQL ) w tabeli "torrents"
Kod: |
ALTER TABLE `torrents` ADD `freeleech` VARCHAR( 3 ) DEFAULT 'no' NOT NULL; |
2. Nastepnie edytujemy plik announce.php
Znajdź poniższą linijkę ( powinna być 170)
Kod: |
if ($upthis > 0 || $downthis > 0) mysql_query("UPDATE users SET uploaded = uploaded + $upthis, downloaded = downloaded + $downthis WHERE id=$userid") or err("Tracker error 3"); |
Zamień ja na:
Kod: |
if ($upthis > 0 || $downthis > 0) { $freelech = mysql_query("SELECT * FROM torrents WHERE id='$torrentid' AND freeleech='yes'"); if (mysql_num_rows($freelech) == 1) { mysql_query("UPDATE users SET uploaded = uploaded + $upthis WHERE id=$userid") or err("Tracker error 3"); } else { mysql_query("UPDATE users SET uploaded = uploaded + $upthis, downloaded = downloaded + $downthis WHERE id=$userid") or err("Tracker error 3"); } } |
3. Teraz utwórz nowy plik freeleech.php w głównym katalogu i wklej poniższy kod do niego:
Kod: |
echo "<table width=\"500\" border=\"0\"> <tr> <td class=rowhead><center>Id</center></td> <td class=rowhead><center>Ime</center></td> <td class=rowhead><center>FreeLeech</center></td> </tr>"; // Ime = Name while ($vrstica = mysql_fetch_array($rezultat)) { echo " <tr> <td><center>$vrstica[id]</center></td> <td><center><a href=\"http://www.slo-scene.net/details.php?id=$vrstica[id]\" target=\"_blank\">".format_comment($vrstica[name])."</a></center></td> <td><center><a href=\"freeleech.php?akcija=odstrani&odstraniid=$vrstica[id]\">Odstrani</a></center></td> </tr>"; // Odstrani = Remove } echo "</table><br /><br />Copyrights © for free leech by Kami</div>"; if ($akcija == "odstrani") { $rezultat = mysql_query("SELECT * from torrents WHERE id='$odstraniid'"); mysql_query("UPDATE torrents SET freeleech='no' WHERE id='$odstraniid'"); while ($vrstica = mysql_fetch_array($rezultat)) { $ime = str_replace(" [FreeLeech]", " ", $vrstica[name]); mysql_query("UPDATE torrents SET name='$ime' WHERE id='$odstraniid'"); } header("Location: freeleech.php?napaka=3"); } stdfoot(); die(); ?> |
To wygląda mniej więcej tak:
4. Teraz musimy edytować plik bittorrent.php
Znajdź to:
Kod: |
$dispname = htmlspecialchars($row["name"]); |
Zamień na to:
Kod: |
$dispname = format_comment(htmlspecialchars($row["name"])); |
5. Teraz zedytujemy plik userdetails.php
Znajdź to:
Kod: |
while ($a = mysql_fetch_assoc($r)) { $r2 = mysql_query("SELECT name, image FROM categories WHERE id=$a[category]") or sqlerr(__FILE__, __LINE__); $a2 = mysql_fetch_assoc($r2); $cat = "<img src=\"/pic/$a2[image]\" alt=\"$a2[name]\">"; $torrents .= "<tr><td style='padding: 0px'>$cat</td><td><a href=details.php?id=" . $a["id"] . "&hit=1><b>" . htmlspecialchars($a["name"]) . "</b></a></td>" . "<td align=right>$a[seeders]</td><td align=right>$a[leechers]</td></tr>\n"; } |
Zamień na to:
Kod: |
while ($a = mysql_fetch_assoc($r)) { $r2 = mysql_query("SELECT name, image FROM categories WHERE id=$a[category]") or sqlerr(__FILE__, __LINE__); $a2 = mysql_fetch_assoc($r2); $cat = "<img src=\"/pic/$a2[image]\" alt=\"$a2[name]\">"; $torrents .= "<tr><td style='padding: 0px'>$cat</td><td><a href=details.php?id=" . $a["id"] . "&hit=1><b>" . format_comment(htmlspecialchars($a["name"])) . "</b></a></td>" . "<td align=right>$a[seeders]</td><td align=right>$a[leechers]</td></tr>\n"; } |
A następnie znajdź to:
Kod: |
$ret .= "<tr><td style='padding: 0px'><img src=\"pic/$catimage\" alt=\"$catname\" width=42 height=42></td>\n" . "<td><a href=details.php?id=$arr[torrent]&hit=1><b>" . htmlspecialchars($arr["torrentname"]) . "</b></a></td><td align=center>$ttl</td><td align=center>$size</td><td align=right>$seeders</td><td align=right>$leechers</td><td align=center>$uploaded</td>\n" . "<td align=center>$downloaded</td><td align=center>$ratio</td></tr>\n"; |
i analogicznie zamień na to:
Kod: |
$ret .= "<tr><td style='padding: 0px'><img src=\"pic/$catimage\" alt=\"$catname\" width=42 height=42></td>\n" . "<td><a href=details.php?id=$arr[torrent]&hit=1><b>" . format_comment(htmlspecialchars($arr["torrentname"])) . "</b></a></td><td align=center>$ttl</td><td align=center>$size</td><td align=right>$seeders</td><td align=right>$leechers</td><td align=center>$uploaded</td>\n" . "<td align=center>$downloaded</td><td align=center>$ratio</td></tr>\n"; |
Z tym modem ty możesz robić na swojej stronce freeleech, Free Leech oznacza zliczanie tylko uploadu na wybranych torrentach
Utwórz nowyplik anonymous.php
<?php $res=mysql_query("SELECT id,username, class FROM users WHERE class < '4' AND anonymous='yes' ORDER BY id") or print(mysql_error()); $unco2 = number_format(get_row_count("users", "WHERE anonymous='yes'")); $res=mysql_query("SELECT id,username, class FROM users WHERE class < '11' AND anonymous='yes' ORDER BY id") or print(mysql_error()); |
Utwórz następnie plik takeanonymous.php
<? if (empty($_POST["delusr"])) $do="UPDATE users SET anonymous='no' WHERE id IN (" . implode(", ", $_POST[delusr]) . ")"; |
Mod, który pozwala dać wszystkim użytkownikom po 1 lub innej, zdefiniowanej przez nas liczbie zaproszeń.
Utworz plik massinvite.php i daj do niego kod:
<? dbconn(); loggedinorreturn(); if (get_user_class() < UC_ADMINISTRATOR) if ($_POST['doit'] == 'yes') { stdhead('Masowe rozdawanie zaproszeń'); <h2>Po jednym zaproszeniu dla wszystkich użytkowników?</h2> <form action="massinvite.php" method="post"> <? stdfoot(); ?> |
Mod ten pokazuje, jaki są ostatnio wydane release na stronie nforce.nl. Korzysta on z plików xml
1.Utwórz plik nforce.php i dodaj do niego kod:
<?php ob_start("ob_gzhandler"); require_once("include/bittorrent.php"); dbconn(true); stdhead(); include './lastRSS.php'; // create lastRSS object $rss = new lastRSS; // setup transparent cache $rss->cache_dir = './newsCache'; $rss->cache_time = 3600; // one hour ?> <h2>Ostatnie release na nforce.nl</h2> <table width=100% border="1" cellspacing="0" cellpadding="10" class="stats" background=images/mainbox_bg.jpg><tr><td align=center> <table cellspacing="0" cellpadding="5" border="0" class=main border=1> <tr> <td width="50%" valign="top"> <table cellspacing="0" cellpadding="0" border="0" width="100%"> <tr> <td class="upper"><strong>Ostatnie release DVD</strong></td> </tr> </table> <font size="1"> <? if ($rs = $rss->get('http://www.nforce.nl/rss/rss_18.xml')) { foreach($rs['items'] as $item) { echo "<a href=\"$item[link]\">".$item['title']."</a><br>\n"; } } else { print ('Error: NForce not reachable...'); } ?> </td> <td width="50%" valign="top"> <table cellspacing="0" cellpadding="0" border="0" width="100%"> <tr> <td class="upper"><strong>Ostatnie release SVCD</strong></td> </tr> </table> <font size="1"> <? if ($rs = $rss->get('http://www.nforce.nl/rss/rss_15.xml')) { foreach($rs['items'] as $item) { echo "<a href=\"$item[link]\">".$item['title']."</a><br>\n"; } } else { print ('Error: NForce not reachable...'); } ?> </td> </tr> <tr> <td width="50%" valign="top"> <table cellspacing="0" cellpadding="0" border="0" width="100%"> <tr> <td class="upper"><strong>Ostatnie release w kategorii Tv-Rip</strong></td> </tr> </table> <font size="1"> <? if ($rs = $rss->get('http://www.nforce.nl/rss/rss_19.xml')) { foreach($rs['items'] as $item) { echo "<a href=\"$item[link]\">".$item['title']."</a><br>\n"; } } else { print ('Error: NForce not reachable...'); } ?> </td> <td width="50%" valign="top"> <table cellspacing="0" cellpadding="0" border="0" width="100%"> <tr> <td class="upper"><strong>Ostatnie release XXX</strong></td> </tr> </table> <font size="1"> <? $max = 0; if ($rs = $rss->get('http://www.nforce.nl/rss/rss_17.xml')) { foreach($rs['items'] as $item) { if ($max >= 10) { break; } echo "<a href=\"$item[link]\">".$item['title']."</a><br>\n"; $max++; } } else { print ('Error: NForce not reachable...'); } ?> </td> </tr> <tr> <td width="50%" valign="top"> <table cellspacing="0" cellpadding="0" border="0" width="100%"> <tr> <td class="upper"><strong> PS2</strong></td> </tr> </table> <font size="1"> <? if ($rs = $rss->get('http://www.nforce.nl/rss/rss_9.xml')) { foreach($rs['items'] as $item) { echo "<a href=\"$item[link]\">".$item['title']."</a><br>\n"; } } else { print ('Error: NForce not reachable...'); } ?> </td> <td width="50%" valign="top"> <table cellspacing="0" cellpadding="0" border="0" width="100%"> <tr> <td class="upper"><strong>Ostatnie release na konsolę xBox</strong></td> </tr> </table> <font size="1"> <? if ($rs = $rss->get('http://www.nforce.nl/rss/rss_11.xml')) { foreach($rs['items'] as $item) { echo "<a href=\"$item[link]\">".$item['title']."</a><br>\n"; } } else { print ('Error: NForce not reachable...'); } ?> </td> </tr> <tr> <td width="50%" valign="top"> <table cellspacing="0" cellpadding="0" border="0" width="100%"> <tr> <td class="upper"><strong>Ostatnie release w kategori PC/ISo</strong></td> </tr> </table> <font size="1"> <? if ($rs = $rss->get('http://www.nforce.nl/rss/rss_2.xml')) { foreach($rs['items'] as $item) { echo "<a href=\"$item[link]\">".$item['title']."</a><br>\n"; } } else { print ('Error: NForce not reachable...'); } ?> </td> <td width="50%" valign="top"> <table cellspacing="0" cellpadding="0" border="0" width="100%"> <tr> <td class="upper"><strong>Ostatnie release w kategori Programy/PC ISO</strong></td> </tr> </table> <font size="1"> <? $max = 0; if ($rs = $rss->get('http://www.nforce.nl/rss/rss_6.xml')) { foreach($rs['items'] as $item) { if ($max >= 10) { break; } echo "<a href=\"$item[link]\">".$item['title']."</a><br>\n"; $max++; } } else { print ('Error: NForce not reachable...'); } ?> </td> </tr> </table> </td></tr></table> <? stdfoot(); ?> |
2.Utwórz plik lastRSS.php i dodaj do niego kod:
<?php 'webMaster', 'lastBuildDate', 'rating', 'docs'); |
3.Screen:
Tłumaczenie: Kuba1530
Mod napisany przez Wilba
Poniższa modyfikacja dodaje statystyki na forum TBDEV.NET
1. Znajdź w pliku forums.php
print("</table>\n"); print("<p align=center><a href=?action=search><b>Search</b></a> | <a href=?action=viewunread><b>View unread</b></a> | <a href=?catchup><b>Catch up</b></a></p>"); |
Dodaj po tym:
print("<tr><td class=colhead>Statystki forum</td></tr>\n"); $registered = number_format(get_row_count("users", "WHERE enabled = 'yes'")); $a = @mysql_fetch_assoc(@mysql_query("SELECT id,username FROM users WHERE status='confirmed' ORDER BY id DESC LIMIT 1")) or die(mysql_error()); $totalonline = number_format(get_row_count("users", "WHERE UNIX_TIMESTAMP(" . get_dt_num() . ") - UNIX_TIMESTAMP(last_access) < 1200")); $topiccount = mysql_query("select sum(topiccount) as topiccount from forums"); $postcount = mysql_query("select sum(postcount) as postcount from forums"); print("<tr><td> print("</table>"); |
Efekt:
Mod wypisuje na forum, nicki osób, które wyuploadowały xxx gb/min np:)
Pliki potrzebe do zmodyfikowania skryptu:
announce.php
forums.php
global.php
1.Otwórz plik global.php i znajdź
Znajdź:
function get_ratio_color($ratio) |
Dodaj przed tym:
function auto_post($subject = "Error - Subject Missing",$body = "Error - No Body") // Function to use the special system message forum $res = mysql_query("SELECT id FROM topics WHERE forumid = ".$forumid" AND subject = ".$subject) or sqlerr(__FILE__, __LINE__); if(mysql_num_rows($res)==1) { // Topic already exists in the system forum. $added = "'" . get_date_time() . "'"; mysql_query( "INSERT INTO posts (topicid, userid, added, body) " . $res = mysql_query("SELECT id FROM posts WHERE topicid=$topicid ORDER BY id DESC LIMIT 1") or sqlerr(__FILE__, __LINE__); |
Oczywscie zamiast XX w linicje
$forumid = 'XX' |
Wpisz swoj ID forum
2.Otwórz plik forums.php
a) Znajdź:
if ($postername == "") { $by = "unknown[$posterid]"; $avatar = ""; } |
Zamień na:
if ($postername == "") { if( $posterid == 0 ) $by = "System"; else $by = "unknown[$posterid]"; $avatar = ""; } |
b) Znajdź:
if (mysql_num_rows($res) == 1) { $arr = mysql_fetch_assoc($res); $lpusername = "$arr[username]"; } else $lpusername = "unknown[$topic_userid]"; |
Zamień na:
if (mysql_num_rows($res) == 1) { $arr = mysql_fetch_assoc($res); $lpusername = "$arr[username]"; } else if( $lpuserid == 0 ) $lpusername = "System"; else $lpusername = "unknown[$lpuserid]"; |
c) Znajdź:
if (mysql_num_rows($res) == 1) { $arr = mysql_fetch_assoc($res); $lpauthor = "$arr[username]"; } else $lpauthor = "unknown[$topic_userid]"; |
Zamień na:
if (mysql_num_rows($res) == 1) { $arr = mysql_fetch_assoc($res); $lpauthor = "$arr[username]"; } else if( $topic_userid == 0 ) $lpauthor = "System"; else $lpauthor = "unknown[$topic_userid]"; |
Zamknij i zapisz plik forums.php
3. Otwórz plik announce.php i dokonaj modyfikacji:
Znajdź:
mysql_query("UPDATE peers SET uploaded = $uploaded, downloaded = $downloaded, to_go = $left, last_action = NOW(), seeder = '$seeder'" . ($seeder == "yes" && $self["seeder"] != $seeder ? ", finishedat = " . time() : "") . " WHERE $selfwhere"); |
Zamień na:
mysql_query("UPDATE peers SET uploaded = $uploaded, downloaded = $downloaded, to_go = $left, last_action = NOW(), seeder = '$seeder'" . ($seeder == "yes" && $self["seeder"] != $seeder ? ", finishedat = " . time() : "") . ", ip = " . sqlesc($ip) . " WHERE $selfwhere") |
Znajdź:
if (mysql_affected_rows() && $self["seeder"] != $seeder) { |
Dodaj PO TYM
// Initial sanity check xMB/s for 1 second auto_post( $subject , $body ); |
Znajdź:
$upthis = max(0, $uploaded - $self["uploaded"]); $downthis = max(0, $downloaded - $self["downloaded"]); if ($upthis > 0 || $downthis > 0) mysql_query("UPDATE users SET uploaded = uploaded + $upthis, downloaded = downloaded + $downthis WHERE id=$userid") or err("Tracker error 3"); }/ |
Zamien na:
$upthis = max(0, $uploaded - $self["uploaded"]); $downthis = max(0, $downloaded - $self["downloaded"]); if ($upthis > 0 || $downthis > 0) mysql_query("UPDATE users SET uploaded = uploaded + $upthis, downloaded = downloaded + $downthis WHERE id=$userid") or err("Tracker error 3"); } |
Znajdź:
$fields = "seeder, peer_id, ip, port, uploaded, downloaded, userid"; |
Zamień na:
$fields = "seeder, peer_id, agent, ip, port, uploaded, downloaded, userid, UNIX_TIMESTAMP(last_action) AS ts"; |
Zamknij plik announce.php