Bitcoin Forum
April 27, 2024, 11:47:21 PM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: Decoupling message IDs from topic IDs (SMF patch)  (Read 273 times)
PowerGlove (OP)
Hero Member
*****
hacker
Offline Offline

Activity: 508
Merit: 3974



View Profile
August 23, 2023, 03:07:29 PM
Merited by Welsh (50), LoyceV (42), TryNinja (35), theymos (30), ABCbits (15), dkbit98 (15), Foxpup (12), hugeblack (10), Cyrus (5), DdmrDdmr (5), joker_josue (5), dzungmobile (5), Pmalek (4), Husna QA (3), FatFork (2), suchmoon (1), DireWolfM14 (1), Upgrade00 (1), dragonvslinux (1), shahzadafzal (1), SamReomo (1)
 #1

This is something I've been working on since chatting with @TryNinja and @LoyceV about how they repair holes in their post archives after an outage. The way SMF combines topic IDs with message IDs makes it very awkward for scrapers to fill in gaps, because even though they know what ranges of message IDs they're missing, they often don't know what the corresponding topic IDs are.

Normally, the link format for a given (anchored) message, looks like this: /index.php?topic={topic_id}.msg{message_id}#msg{message_id}

This patch changes SMF so that it will also accept an asterisk [1] as the topic ID: /index.php?topic=*.msg{message_id}#msg{message_id}

Here's the diff for @theymos:

Code:
--- baseline/Sources/QueryString.php	2011-02-07 16:45:09.000000000 +0000
+++ modified/Sources/QueryString.php 2023-08-23 12:36:25.000000000 +0000
@@ -65,41 +65,41 @@
  - makes sure a string only contains character which are allowed in
    XML/XHTML (not 0-8, 11, 12, and 14-31.)
  - tries to handle UTF-8 properly, and shouldn't negatively affect
    character sets like ISO-8859-1.
  - does not effect keys, only changes values.
  - may call itself recursively if necessary.
 
  string ob_sessrewrite(string buffer)
  - rewrites the URLs outputted to have the session ID, if the user
    is not accepting cookies and is using a standard web browser.
  - handles rewriting URLs for the queryless URLs option.
  - can be turned off entirely by setting $scripturl to an empty
    string, ''. (it wouldn't work well like that anyway.)
  - because of bugs in certain builds of PHP, does not function in
    versions lower than 4.3.0 - please upgrade if this hurts you.
 */
 
 // Clean the request variables - add html entities to GET and slashes if magic_quotes_gpc is Off.
 function cleanRequest()
 {
- global $board, $topic, $boardurl, $scripturl, $modSettings;
+ global $board, $topic, $boardurl, $scripturl, $modSettings, $db_prefix;
 
  // Makes it easier to refer to things this way.
  $scripturl = $boardurl . '/index.php';
 
  // Save some memory.. (since we don't use these anyway.)
  unset($GLOBALS['HTTP_POST_VARS'], $GLOBALS['HTTP_POST_VARS']);
  unset($GLOBALS['HTTP_POST_FILES'], $GLOBALS['HTTP_POST_FILES']);
 
  // These keys shouldn't be set...ever.
  if (isset($_REQUEST['GLOBALS']) || isset($_COOKIE['GLOBALS']))
  die('Invalid request variable.');
 
  // Same goes for numeric keys.
  foreach (array_merge(array_keys($_POST), array_keys($_GET), array_keys($_FILES)) as $key)
  if (is_numeric($key))
  die('Invalid request variable.');
 
  // Numeric keys in cookies are less of a problem. Just unset those.
  foreach ($_COOKIE as $key => $value)
  if (is_numeric($key))
@@ -214,40 +214,49 @@
  else
  $board = 0;
 
  // If there's a threadid, it's probably an old YaBB SE link.  Flow with it.
  if (isset($_REQUEST['threadid']) && !isset($_REQUEST['topic']))
  $_REQUEST['topic'] = $_REQUEST['threadid'];
 
  // We've got topic!
  if (isset($_REQUEST['topic']))
  {
  // Make sure that its a string and not something else like an array
  $_REQUEST['topic'] = (string)$_REQUEST['topic'];
 
  // Slash means old, beta style, formatting.  That's okay though, the link should still work.
  if (strpos($_REQUEST['topic'], '/') !== false)
  list ($_REQUEST['topic'], $_REQUEST['start']) = explode('/', $_REQUEST['topic']);
  // Dots are useful and fun ;).  This is ?topic=1.15.
  elseif (strpos($_REQUEST['topic'], '.') !== false)
  list ($_REQUEST['topic'], $_REQUEST['start']) = explode('.', $_REQUEST['topic']);
 
+ // If a message ID was given with a topic ID of '*', then search for (and use) the correct topic ID.
+ if($_REQUEST['topic'] == '*' && !empty($_REQUEST['start']) && substr($_REQUEST['start'], 0, 3) == 'msg')
+ {
+ $result = db_query('SELECT ID_TOPIC FROM ' . $db_prefix . 'messages WHERE ID_MSG = ' . (int)substr($_REQUEST['start'], 3), __FILE__, __LINE__);
+ $row = mysql_fetch_row($result);
+ mysql_free_result($result);
+ $_REQUEST['topic'] = !empty($row) ? (int)$row[0] : -1;
+ }
+
  $topic = (int) $_REQUEST['topic'];
 
  // Now make sure the online log gets the right number.
  $_GET['topic'] = $topic;
  }
  else
  $topic = 0;
 
  // There should be a $_REQUEST['start'], some at least.  If you need to default to other than 0, use $_GET['start'].
  if (empty($_REQUEST['start']) || $_REQUEST['start'] < 0 || (int) $_REQUEST['start'] > 2147473647)
  $_REQUEST['start'] = 0;
 
  // The action needs to be a string and not an array or anything else
  if (isset($_REQUEST['action']))
  $_REQUEST['action'] = (string) $_REQUEST['action'];
  if (isset($_GET['action']))
  $_GET['action'] = (string) $_GET['action'];
 
  // Store the REMOTE_ADDR for later - even though we HOPE to never use it...
  $_SERVER['BAN_CHECK_IP'] = isset($_SERVER['REMOTE_ADDR']) && preg_match('~^((([1]?\d)?\d|2[0-4]\d|25[0-5])\.){3}(([1]?\d)?\d|2[0-4]\d|25[0-5])$~', $_SERVER['REMOTE_ADDR']) === 1 ? $_SERVER['REMOTE_ADDR'] : 'unknown';

(I made a previous attempt at this, based on HTTP redirects that would've meant a maximum of 30 requests per minute because of the rate-limiter. I'm hoping that this new redirection-free attempt meets with theymos' approval and ends up simplifying LoyceV's and TryNinja's scrapers and making them more reliable.)

[1] An asterisk (*) makes sense to me, and is safe to use according to my reading of RFC 3986, but zero (0) and underscore (_) both make sense too, I guess. (It's easy for theymos to adjust.)
Be very wary of relying on JavaScript for security on crypto sites. The site can change the JavaScript at any time unless you take unusual precautions, and browsers are not generally known for their airtight security.
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction.
1714261641
Hero Member
*
Offline Offline

Posts: 1714261641

View Profile Personal Message (Offline)

Ignore
1714261641
Reply with quote  #2

1714261641
Report to moderator
1714261641
Hero Member
*
Offline Offline

Posts: 1714261641

View Profile Personal Message (Offline)

Ignore
1714261641
Reply with quote  #2

1714261641
Report to moderator
1714261641
Hero Member
*
Offline Offline

Posts: 1714261641

View Profile Personal Message (Offline)

Ignore
1714261641
Reply with quote  #2

1714261641
Report to moderator
Upgrade00
Legendary
*
Offline Offline

Activity: 2016
Merit: 2171


Professional Community manager


View Profile WWW
August 23, 2023, 03:22:15 PM
 #2

I'm not exactly certain what the patch does even after reading the thread twice and don't know the problem it is trying to solve, but if it helps make the work of TryNinja and LoyceV easier then I am all down for it.

Good job yet again PowerGlove.

.BEST..CHANGE.███████████████
██
██
██
██
██
██
██
██
██
██
██
██
██
██
██
██
██
██
██
██
██
██
██
██
███████████████
..BUY/ SELL CRYPTO..
TryNinja
Legendary
*
Offline Offline

Activity: 2814
Merit: 6971



View Profile WWW
August 23, 2023, 03:26:44 PM
Merited by dkbit98 (1)
 #3

This would make a huge difference for current and future features on multiple projects of mine, thank you for coding it, @PowerGlove.

Please, theymos… Grin

I'm not exactly certain what the patch does even after reading the thread twice
Good job yet again PowerGlove.
Sometimes my archive is missing a post of id XXXX and I can’t scrape it because I have no idea on which topic the post is. With this change, I can find it without knowing the topic id.

.
.HUGE.
▄██████████▄▄
▄█████████████████▄
▄█████████████████████▄
▄███████████████████████▄
▄█████████████████████████▄
███████▌██▌▐██▐██▐████▄███
████▐██▐████▌██▌██▌██▌██
█████▀███▀███▀▐██▐██▐█████

▀█████████████████████████▀

▀███████████████████████▀

▀█████████████████████▀

▀█████████████████▀

▀██████████▀▀
█▀▀▀▀











█▄▄▄▄
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
.
CASINSPORTSBOOK
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▀▀▀▀█











▄▄▄▄█
LoyceV
Legendary
*
Offline Offline

Activity: 3290
Merit: 16561


Thick-Skinned Gang Leader and Golden Feather 2021


View Profile WWW
August 23, 2023, 04:37:49 PM
Merited by Foxpup (2)
 #4

I guess an asterisk was easier to patch than isolating just one post? It does mean the server has to look up (up to) 20 posts for each request, but I guess that's tiny compared to the rest of the page loads.
One question: will the resulting page also show the topicID somewhere? If so, I can work with this and add the (couple of thousand) missing posts to my archive. Thanks for writing this!

Please, theymos… Grin
^What he says^

█▀▀▀











█▄▄▄
▀▀▀▀▀▀▀▀▀▀▀
e
▄▄▄▄▄▄▄▄▄▄▄
█████████████
████████████▄███
██▐███████▄█████▀
█████████▄████▀
███▐████▄███▀
████▐██████▀
█████▀█████
███████████▄
████████████▄
██▄█████▀█████▄
▄█████████▀█████▀
███████████▀██▀
████▀█████████
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
c.h.
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▀▀▀█











▄▄▄█
▄██████▄▄▄
█████████████▄▄
███████████████
███████████████
███████████████
███████████████
███░░█████████
███▌▐█████████
█████████████
███████████▀
██████████▀
████████▀
▀██▀▀
PowerGlove (OP)
Hero Member
*****
hacker
Offline Offline

Activity: 508
Merit: 3974



View Profile
August 25, 2023, 05:36:35 AM
 #5

Good job yet again PowerGlove.
Thanks, man. Wink

This would make a huge difference for current and future features on multiple projects of mine, thank you for coding it, @PowerGlove.
No problem, it's cool to hear that it'll make a difference to your projects. I enjoy messing around with SMF, but it means a lot to me when my stuff ends up making a positive difference (of course, I'm at the mercy of theymos' preferences and schedule, but I think there's a pretty good chance that this one will get merged).

I guess an asterisk was easier to patch than isolating just one post?
Yup, this patch is basically just one if statement with a 4-line body, placed in just the right spot. I could make it more complicated and isolate a single post, but I don't think that's worth the complication.

When this feature is being used for its intended purpose (helping scrapers to fill in gaps in their archives, and gracefully recover from DDoS attacks, etc.), I don't think efficiency is a major factor; like you said, you only have a few thousand posts missing from your archive.

Interestingly, if you misuse this feature, and try to build a complete scraper from it, then it returning multiple posts per request actually helps efficiency. What you would do is start from post 1 (/index.php?topic=*.msg1) and then parse all the posts that come back (if any), being careful to (conceptually) knock their message IDs off the list before advancing to the next post. In practice, that'll probably amount to keeping track of already-visited messages with some kind of data structure that allows for doing lookups in sublinear time (like a map, or a set).

One question: will the resulting page also show the topicID somewhere?
Yup, the asterisk is (mostly) transparent to the rest of SMF, so the page will render just as if you had supplied the correct topic ID.
LoyceV
Legendary
*
Offline Offline

Activity: 3290
Merit: 16561


Thick-Skinned Gang Leader and Golden Feather 2021


View Profile WWW
August 25, 2023, 05:44:59 AM
 #6

Interestingly, if you misuse this feature, and try to build a complete scraper from it, then it returning multiple posts per request actually helps efficiency. What you would do is start from post 1 (/index.php?topic=*.msg1) and then parse all the posts that come back (if any), being careful to (conceptually) knock their message IDs off the list before advancing to the next post. In practice, that'll probably amount to keeping track of already-visited messages with some kind of data structure that allows for doing lookups in sublinear time (like a map, or a set).
Been there, done that Cheesy But it make much more sense to use topicIDs instead of msgIDs to scrape everything.

█▀▀▀











█▄▄▄
▀▀▀▀▀▀▀▀▀▀▀
e
▄▄▄▄▄▄▄▄▄▄▄
█████████████
████████████▄███
██▐███████▄█████▀
█████████▄████▀
███▐████▄███▀
████▐██████▀
█████▀█████
███████████▄
████████████▄
██▄█████▀█████▄
▄█████████▀█████▀
███████████▀██▀
████▀█████████
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
c.h.
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▀▀▀█











▄▄▄█
▄██████▄▄▄
█████████████▄▄
███████████████
███████████████
███████████████
███████████████
███░░█████████
███▌▐█████████
█████████████
███████████▀
██████████▀
████████▀
▀██▀▀
theymos
Administrator
Legendary
*
Offline Offline

Activity: 5180
Merit: 12900


View Profile
August 31, 2023, 02:30:55 AM
Merited by PowerGlove (15), TryNinja (10), dkbit98 (5), DdmrDdmr (4), Foxpup (2), Cyrus (2), joker_josue (2), LoyceV (1), FatFork (1)
 #7

Added, thanks!

It would be better if message-links didn't have the topic in them, but I'm worried that changing the links in [quote]s etc. would break something, so this will only be used by people in-the-know about it, not in any forum-generated HTML.

(I've also been meaning to write a very simple API which would allow bots to function more efficiently in general, but I haven't gotten to it yet.)

1NXYoJ5xU91Jp83XfVMHwwTUyZFK64BoAD
LoyceV
Legendary
*
Offline Offline

Activity: 3290
Merit: 16561


Thick-Skinned Gang Leader and Golden Feather 2021


View Profile WWW
August 31, 2023, 05:53:11 AM
 #8

Added, thanks!
https://bitcointalk.org/index.php?topic=*.msg62772227#msg62772227
It works! Thank you and OP so much!

█▀▀▀











█▄▄▄
▀▀▀▀▀▀▀▀▀▀▀
e
▄▄▄▄▄▄▄▄▄▄▄
█████████████
████████████▄███
██▐███████▄█████▀
█████████▄████▀
███▐████▄███▀
████▐██████▀
█████▀█████
███████████▄
████████████▄
██▄█████▀█████▄
▄█████████▀█████▀
███████████▀██▀
████▀█████████
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
c.h.
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▀▀▀█











▄▄▄█
▄██████▄▄▄
█████████████▄▄
███████████████
███████████████
███████████████
███████████████
███░░█████████
███▌▐█████████
█████████████
███████████▀
██████████▀
████████▀
▀██▀▀
joker_josue
Legendary
*
Offline Offline

Activity: 1638
Merit: 4543


**In BTC since 2013**


View Profile WWW
September 01, 2023, 08:57:34 AM
 #9

Congratulations PowerGlove for another useful and quickly implemented patch.
Personally, I don't even know how to thank you.


Without a doubt, it is a patch that will be very useful for those who like to collect information on the forum.
Happy scraping to everyone who likes to do them.


By the way, just one question (which I almost certainly have the answer to, but to confirm), the numbering of the posts is sequential, correct?

.
.HUGE.
▄██████████▄▄
▄█████████████████▄
▄█████████████████████▄
▄███████████████████████▄
▄█████████████████████████▄
███████▌██▌▐██▐██▐████▄███
████▐██▐████▌██▌██▌██▌██
█████▀███▀███▀▐██▐██▐█████

▀█████████████████████████▀

▀███████████████████████▀

▀█████████████████████▀

▀█████████████████▀

▀██████████▀▀
█▀▀▀▀











█▄▄▄▄
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
.
CASINSPORTSBOOK
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▀▀▀▀█











▄▄▄▄█
LoyceV
Legendary
*
Offline Offline

Activity: 3290
Merit: 16561


Thick-Skinned Gang Leader and Golden Feather 2021


View Profile WWW
September 01, 2023, 09:09:00 AM
Merited by Buchi-88 (1)
 #10

the numbering of the posts is sequential, correct?
Yes. Although some posts are made on non-public forums.



While we're at the subject of forum patches (and I don't think this deserves another topic), there's one thing I'd like to see: "scrollable quotes"! I'm thinking of posts like this:
Code:
[b]1. Vispilio: $3159.06[/b]
[url=https://www.coingecko.com/en/coins/radiant-capital]Radiant Capital Price[/url] (12244.32322564 RDNT): $2819.32
[url=https://www.coingecko.com/en/coins/digits-dao]Digits DAO Price[/url] (51110.45992599 DIGITS): $213.89
[url=https://www.coingecko.com/en/coins/gigaswap]GigaSwap Price[/url] (4377517.07231658 GIGA): $49.12
[url=https://www.coingecko.com/en/coins/band-protocol]Band Protocol Price[/url] (70.92198582 BAND): $76.74

[b]2. xSkylarx: $1727.15[/b]
[url=https://www.coingecko.com/en/coins/xrp]XRP Price[/url] (735.10817852 XRP): $375.13
[url=https://www.coingecko.com/en/coins/solana]Solana Price[/url] (25.10040161 SOL): $494.98
[url=https://www.coingecko.com/en/coins/terra-luna-classic]Terra Luna Classic Price[/url] (689084.89525910 LUNC): $42.65
[url=https://www.coingecko.com/en/coins/ronin]Ronin Price[/url] (1513.07676595 RON): $814.39

[b]3. Bitcoin: $1571.40[/b]
[url=https://www.coingecko.com/en/coins/bitcoin]Bitcoin Price[/url] (0.06045697 BTC): $1571.40

[b]4. slackovic: $1336.50[/b]
[url=https://www.coingecko.com/en/coins/aleph-zero]Aleph Zero Price[/url] (362.37704849 AZERO): $285.80
[url=https://www.coingecko.com/en/coins/solana]Solana Price[/url] (30.12048193 SOL): $595.78
[url=https://www.coingecko.com/en/coins/gains-network]Gains Network Price[/url] (64.51612903 GNS): $218.06
[url=https://www.coingecko.com/en/coins/vela-exchange]Vela Exchange Price[/url] (226.43209811 DXP): $236.85

[b]5. Inwestour: $1317.26[/b]
[url=https://www.coingecko.com/en/coins/xrp]XRP Price[/url] (1470.21635704 XRP): $751.53
[url=https://www.coingecko.com/en/coins/ethereum]Ethereum Price[/url] (0.16713883 ETH): $275.02
[url=https://www.coingecko.com/en/coins/loopring]Loopring Price[/url] (1062.77831507 LRC): $190.85
[url=https://www.coingecko.com/en/coins/usd-coin]USD Coin Price[/url] (99.90009990 USDC): $99.86

[b]6. Yabes: $1306.52[/b]
[url=https://www.coingecko.com/en/coins/litecoin]Litecoin Price[/url] (2.85918513 LTC): $182.62
[url=https://www.coingecko.com/en/coins/dogecoin]Dogecoin Price[/url] (4975.97315818 DOGE): $317.30
[url=https://www.coingecko.com/en/coins/solana]Solana Price[/url] (35.14056225 SOL): $692.97
[url=https://www.coingecko.com/en/coins/waves]Waves Price[/url] (75.75757576 WAVES): $113.64

[b]7. casperBGD: $1282.67[/b]
[url=https://www.coingecko.com/en/coins/fantom]Fantom Price[/url] (2002.86409566 FTM): $402.29
[url=https://www.coingecko.com/en/coins/audius]Audius Price[/url] (1564.50452142 AUDIO): $234.46
[url=https://www.coingecko.com/en/coins/velodrome-finance]Velodrome Finance Price[/url] (11012.44571553 VELO): $614.45
[url=https://www.coingecko.com/en/coins/evmos-domains]Evmos Domains Price[/url] (38459.91131144 EVD): $31.47

[b]8. jokers10: $1230.26[/b]
[url=https://www.coingecko.com/en/coins/solana]Solana Price[/url] (30.12048193 SOL): $593.98
[url=https://www.coingecko.com/en/coins/iota]IOTA Price[/url] (591.84905482 MIOTA): $92.50
[url=https://www.coingecko.com/en/coins/iotex]IoTeX Price[/url] (14319.56984012 IOTX): $197.09
[url=https://www.coingecko.com/en/coins/cartesi]Cartesi Price[/url] (2912.45170184 CTSI): $346.70

[b]9. xandry: $1218.93[/b]
[url=https://www.coingecko.com/en/coins/true-usd]TrueUSD Price[/url] (498.00796813 TUSD): $497.18
[url=https://www.coingecko.com/en/coins/helium]Helium Price[/url] (65.35947712 HNT): $103.92
[url=https://www.coingecko.com/en/coins/gmx]GMX Price[/url] (4.79961603 GMX): $167.84
[url=https://www.coingecko.com/en/coins/maker]Maker Price[/url] (0.38974959 MKR): $449.99

[b]10. Halab: $1159.37[/b]
[url=https://www.coingecko.com/en/coins/bnb]BNB Price[/url] (1.21624909 BNB): $263.77
[url=https://www.coingecko.com/en/coins/solana]Solana Price[/url] (25.10040161 SOL): $495.23
[url=https://www.coingecko.com/en/coins/aleph-zero]Aleph Zero Price[/url] (301.98087374 AZERO): $238.13
[url=https://www.coingecko.com/en/coins/ultra]Ultra Price[/url] (1106.77011278 UOS): $162.24

[b]11. F2b: $1151.95[/b]
[url=https://www.coingecko.com/en/coins/ethereum]Ethereum Price[/url] (0.26742213 ETH): $440.61
[url=https://www.coingecko.com/en/coins/hackenai]Hacken Price[/url] (15698.70008222 HAI): $290.57
[url=https://www.coingecko.com/en/coins/quant]Quant Price[/url] (2.27165168 QNT): $226.48
[url=https://www.coingecko.com/en/coins/monero]Monero Price[/url] (1.35749678 XMR): $194.28

[b]12. cryptofrka: $1115.41[/b]
[url=https://www.coingecko.com/en/coins/optimism]Optimism Price[/url] (436.06378305 OP): $606.13
[url=https://www.coingecko.com/en/coins/aleph-zero]Aleph Zero Price[/url] (241.58469899 AZERO): $190.51
[url=https://www.coingecko.com/en/coins/ethereum-name-service]Ethereum Name Service Price[/url] (18.58736059 ENS): $145.72
[url=https://www.coingecko.com/en/coins/curve-dao-token]Curve DAO Price[/url] (381.04455745 CRV): $173.05

[b]13. UserU: $1109.26[/b]
[url=https://www.coingecko.com/en/coins/ethereum]Ethereum Price[/url] (0.41784708 ETH): $688.55
[url=https://www.coingecko.com/en/coins/bnb]BNB Price[/url] (1.01354091 BNB): $219.46
[url=https://www.coingecko.com/en/coins/shiba-inu]Shiba Inu Price[/url] (18518518.51851850 SHIB): $148.33
[url=https://www.coingecko.com/en/coins/safemoon]SafeMoon Price[/url] (418567.66146248 SFM): $52.91

[b]14. Smartprofit: $1088.92[/b]
[url=https://www.coingecko.com/en/coins/ethereum]Ethereum Price[/url] (0.30084990 ETH): $495.03
[url=https://www.coingecko.com/en/coins/bnb]BNB Price[/url] (1.01354091 BNB): $219.55
[url=https://www.coingecko.com/en/coins/monero]Monero Price[/url] (1.96837033 XMR): $281.58
[url=https://www.coingecko.com/en/coins/celo]Celo Price[/url] (210.86947812 CELO): $92.76

[b]15. Buchi-88: $1069.27[/b]
[url=https://www.coingecko.com/en/coins/iota]IOTA Price[/url] (1183.69810963 MIOTA): $185.04
[url=https://www.coingecko.com/en/coins/waves]Waves Price[/url] (227.27272727 WAVES): $340.91
[url=https://www.coingecko.com/en/coins/aleph-zero]Aleph Zero Price[/url] (362.37704849 AZERO): $285.71
[url=https://www.coingecko.com/en/coins/bitpanda-ecosystem-token]Bitpanda Ecosystem Price[/url] (642.69004345 BEST): $257.60

[b]16. Rikafip: $1064.10[/b]
[url=https://www.coingecko.com/en/coins/tether]Tether Price[/url] (500.00000000 USDT): $499.92
[url=https://www.coingecko.com/en/coins/ethereum]Ethereum Price[/url] (0.16713883 ETH): $275.42
[url=https://www.coingecko.com/en/coins/bnb]BNB Price[/url] (0.81083273 BNB): $175.98
[url=https://www.coingecko.com/en/coins/gala]GALA Price[/url] (5991.99948229 GALA): $112.79

[b]17. sky999: $1019.65[/b]
[url=https://www.coingecko.com/en/coins/dogecoin]Dogecoin Price[/url] (4265.11984987 DOGE): $272.01
[url=https://www.coingecko.com/en/coins/optimism]Optimism Price[/url] (327.04783729 OP): $454.60
[url=https://www.coingecko.com/en/coins/trust-wallet-token]Trust Wallet Price[/url] (140.84507042 TWT): $117.47
[url=https://www.coingecko.com/en/coins/bnb]BNB Price[/url] (0.81083273 BNB): $175.57

[b]18. perl: $1008.21[/b]
[url=https://www.coingecko.com/en/coins/monero]Monero Price[/url] (3.32586710 XMR): $475.30
[url=https://www.coingecko.com/en/coins/ethereum]Ethereum Price[/url] (0.15042495 ETH): $247.52
[url=https://www.coingecko.com/en/coins/dero]Dero Price[/url] (43.70179949 DERO): $125.42
[url=https://www.coingecko.com/en/coins/tether]Tether Price[/url] (160.00000000 USDT): $159.97

[b]19. malcovi2: $993.47[/b]
[url=https://www.coingecko.com/en/coins/dusk-network]DUSK Network Price[/url] (4216.91827612 DUSK): $420.47
[url=https://www.coingecko.com/en/coins/dogecoin]Dogecoin Price[/url] (2132.55992493 DOGE): $136.40
[url=https://www.coingecko.com/en/coins/algorand]Algorand Price[/url] (1733.91361642 ALGO): $161.55
[url=https://www.coingecko.com/en/coins/ethereum]Ethereum Price[/url] (0.16713883 ETH): $275.04

[b]20. antigin: $982.79[/b]
[url=https://www.coingecko.com/en/coins/usd-coin]USD Coin Price[/url] (499.50049950 USDC): $499.30
[url=https://www.coingecko.com/en/coins/fantom]Fantom Price[/url] (1502.14807174 FTM): $300.76
[url=https://www.coingecko.com/en/coins/bnb]BNB Price[/url] (0.60812454 BNB): $131.73
[url=https://www.coingecko.com/en/coins/chia]Chia Price[/url] (1.73852573 XCH): $50.99

[b]21. GazetaBitcoin: $975.42[/b]
[url=https://www.coingecko.com/en/coins/tether]Tether Price[/url] (500.00000000 USDT): $499.92
[url=https://www.coingecko.com/en/coins/bnb]BNB Price[/url] (1.62166545 BNB): $351.14
[url=https://www.coingecko.com/en/coins/ethereum]Ethereum Price[/url] (0.04178471 ETH): $68.76
[url=https://www.coingecko.com/en/coins/0x]0x Protocol Price[/url] (336.85458661 ZRX): $55.60

[b]22. bullrun2020bro: $971.34[/b]
[url=https://www.coingecko.com/en/coins/aleph-zero]Aleph Zero Price[/url] (301.98087374 AZERO): $237.95
[url=https://www.coingecko.com/en/coins/gmx]GMX Price[/url] (5.99952004 GMX): $210.04
[url=https://www.coingecko.com/en/coins/fantom]Fantom Price[/url] (1251.79005979 FTM): $250.76
[url=https://www.coingecko.com/en/coins/gains-network]Gains Network Price[/url] (80.64516129 GNS): $272.58

[b]23. LoyceV: $969.49[/b]
[url=https://www.coingecko.com/en/coins/tether]Tether Price[/url] (500.00000000 USDT): $499.83
[url=https://www.coingecko.com/en/coins/monero]Monero Price[/url] (2.71499355 XMR): $388.00
[url=https://www.coingecko.com/en/coins/dogecoin]Dogecoin Price[/url] (710.85330831 DOGE): $45.34
[url=https://www.coingecko.com/en/coins/tryhards]TryHards Price[/url] (22253.57503683 TRY): $36.32

[b]24. sam00: $960.33[/b]
[url=https://www.coingecko.com/en/coins/algorand]Algorand Price[/url] (1444.92801369 ALGO): $135.24
[url=https://www.coingecko.com/en/coins/aleph-zero]Aleph Zero Price[/url] (301.98087374 AZERO): $237.95
[url=https://www.coingecko.com/en/coins/ethereum]Ethereum Price[/url] (0.20892354 ETH): $344.27
[url=https://www.coingecko.com/en/coins/monero]Monero Price[/url] (1.69687097 XMR): $242.86

[b]25. Saint-loup: $939.67[/b]
[url=https://www.coingecko.com/en/coins/waves]Waves Price[/url] (189.39393939 WAVES): $284.09
[url=https://www.coingecko.com/en/coins/polygon]Polygon Price[/url] (329.30049988 MATIC): $181.01
[url=https://www.coingecko.com/en/coins/shiba-inu]Shiba Inu Price[/url] (30864197.53086420 SHIB): $247.22
[url=https://www.coingecko.com/en/coins/dogecoin]Dogecoin Price[/url] (3554.26654156 DOGE): $227.34

[b]26. GrosWesh: $913.25[/b]
[url=https://www.coingecko.com/en/coins/cheqd-network]CHEQD Network Price[/url] (9447.92022932 CHEQ): $309.47
[url=https://www.coingecko.com/en/coins/aleph-zero]Aleph Zero Price[/url] (301.98087374 AZERO): $238.09
[url=https://www.coingecko.com/en/coins/gigaswap]GigaSwap Price[/url] (4377517.07231658 GIGA): $49.12
[url=https://www.coingecko.com/en/coins/casper-network]Casper Network Price[/url] (9055.01173167 CSPR): $316.58

[b]27. CoinEraser: $898.36[/b]
[url=https://www.coingecko.com/en/coins/polygon]Polygon Price[/url] (526.88079981 MATIC): $289.24
[url=https://www.coingecko.com/en/coins/dogecoin]Dogecoin Price[/url] (1421.70661662 DOGE): $90.66
[url=https://www.coingecko.com/en/coins/aleph-zero]Aleph Zero Price[/url] (483.16939798 AZERO): $380.95
[url=https://www.coingecko.com/en/coins/ethereum]Ethereum Price[/url] (0.08356942 ETH): $137.51

[b]28. Trofo: $892.46[/b]
[url=https://www.coingecko.com/en/coins/masq]MASQ Price[/url] (1561.24124924 MASQ): $304.91
[url=https://www.coingecko.com/en/coins/algorand]Algorand Price[/url] (1444.92801369 ALGO): $135.18
[url=https://www.coingecko.com/en/coins/quant]Quant Price[/url] (2.36630383 QNT): $235.92
[url=https://www.coingecko.com/en/coins/curve-dao-token]Curve DAO Price[/url] (476.30569681 CRV): $216.44

[b]29. Betwrong: $890.22[/b]
[url=https://www.coingecko.com/en/coins/bnb]BNB Price[/url] (1.70274872 BNB): $368.70
[url=https://www.coingecko.com/en/coins/iota]IOTA Price[/url] (1183.69810963 MIOTA): $184.79
[url=https://www.coingecko.com/en/coins/xrp]XRP Price[/url] (529.27788853 XRP): $270.55
[url=https://www.coingecko.com/en/coins/edgeware]Edgeware Price[/url] (491799.24754715 EDG): $66.19

[b]30. NeuroticFish: $889.89[/b]
[url=https://www.coingecko.com/en/coins/bnb]BNB Price[/url] (1.70274872 BNB): $368.70
[url=https://www.coingecko.com/en/coins/monero]Monero Price[/url] (2.85074323 XMR): $407.80
[url=https://www.coingecko.com/en/coins/dash]Dash Price[/url] (2.61220613 DASH): $68.00
[url=https://www.coingecko.com/en/coins/golem]Golem Price[/url] (277.56035550 GLM): $45.40

[b]31. Becassine: $880.45[/b]
[url=https://www.coingecko.com/en/coins/bnb]BNB Price[/url] (0.97299927 BNB): $210.68
[url=https://www.coingecko.com/en/coins/enjin-coin]Enjin Coin Price[/url] (455.04751110 ENJ): $106.56
[url=https://www.coingecko.com/en/coins/polygon]Polygon Price[/url] (645.42897976 MATIC): $354.33
[url=https://www.coingecko.com/en/coins/safepal]SafePal Price[/url] (405.34960136 SFP): $208.88

[b]32. internetional: $873.59[/b]
[url=https://www.coingecko.com/en/coins/bilira]BiLira Price[/url] (7646.28295070 TRYB): $283.50
[url=https://www.coingecko.com/en/coins/pax-gold]PAX Gold Price[/url] (0.27425061 PAXG): $525.96
[url=https://www.coingecko.com/en/coins/zcash]Zcash Price[/url] (1.34084205 ZEC): $33.23
[url=https://www.coingecko.com/en/coins/dash]Dash Price[/url] (1.18736642 DASH): $30.91

[b]33. DireWolfM14: $871.21[/b]
[url=https://www.coingecko.com/en/coins/monero]Monero Price[/url] (2.71499355 XMR): $388.30
[url=https://www.coingecko.com/en/coins/dogecoin]Dogecoin Price[/url] (4265.11984987 DOGE): $272.81
[url=https://www.coingecko.com/en/coins/binance-usd]Binance USD Price[/url] (149.85014985 BUSD): $150.00
[url=https://www.coingecko.com/en/coins/grin]Grin Price[/url] (2035.05725294 GRIN): $60.11

[b]34. entebah: $867.54[/b]
[url=https://www.coingecko.com/en/coins/dash]Dash Price[/url] (3.56209926 DASH): $92.72
[url=https://www.coingecko.com/en/coins/cardano]Cardano Price[/url] (1014.61862515 ADA): $258.97
[url=https://www.coingecko.com/en/coins/horizen]Horizen Price[/url] (21.73913043 ZEN): $164.57
[url=https://www.coingecko.com/en/coins/bnb]BNB Price[/url] (1.62166545 BNB): $351.29

[b]35. Koal-84: $839.46[/b]
[url=https://www.coingecko.com/en/coins/cardano]Cardano Price[/url] (1217.54235018 ADA): $310.80
[url=https://www.coingecko.com/en/coins/pirate-chain]Pirate Chain Price[/url] (636.01296194 ARRR): $126.50
[url=https://www.coingecko.com/en/coins/sundaeswap]SundaeSwap Price[/url] (20800.46859296 SUNDAE): $163.80
[url=https://www.coingecko.com/en/coins/tezos]Tezos Price[/url] (347.05207030 XTZ): $238.36

[b]36. Royse777: $808.24[/b]
[url=https://www.coingecko.com/en/coins/kucoin-shares]KuCoin Price[/url] (61.63328197 KCS): $253.93
[url=https://www.coingecko.com/en/coins/bnb]BNB Price[/url] (1.21624909 BNB): $263.35
[url=https://www.coingecko.com/en/coins/cardano]Cardano Price[/url] (1014.61862515 ADA): $259.08
[url=https://www.coingecko.com/en/coins/1inch]1inch Price[/url] (130.17612830 1INCH): $31.87

[b]37. tokeweed: $802.15[/b]
[url=https://www.coingecko.com/en/coins/dogecoin]Dogecoin Price[/url] (3554.26654156 DOGE): $227.34
[url=https://www.coingecko.com/en/coins/shiba-inu]Shiba Inu Price[/url] (24691358.02469140 SHIB): $197.04
[url=https://www.coingecko.com/en/coins/ethereum]Ethereum Price[/url] (0.04178471 ETH): $68.76
[url=https://www.coingecko.com/en/coins/dogechain]Dogechain Price[/url] (524120.00251578 DC): $309.02

[b]38. n0nce: $787.69[/b]
[url=https://www.coingecko.com/en/coins/monero]Monero Price[/url] (3.05436775 XMR): $436.71
[url=https://www.coingecko.com/en/coins/grin]Grin Price[/url] (3391.76208824 GRIN): $100.05
[url=https://www.coingecko.com/en/coins/ethereum-classic]Ethereum Classic Price[/url] (12.72264631 ETC): $197.07
[url=https://www.coingecko.com/en/coins/algorand]Algorand Price[/url] (577.97120547 ALGO): $53.85

[b]39. elma: $775.92[/b]
[url=https://www.coingecko.com/en/coins/near]NEAR Protocol Price[/url] (198.41269841 NEAR): $230.16
[url=https://www.coingecko.com/en/coins/gigaswap]GigaSwap Price[/url] (4377517.07231658 GIGA): $49.20
[url=https://www.coingecko.com/en/coins/internet-computer]Internet Computer Price[/url] (63.61323155 ICP): $212.47
[url=https://www.coingecko.com/en/coins/waves]Waves Price[/url] (189.39393939 WAVES): $284.09

[b]40. julerz12: $690.43[/b]
[url=https://www.coingecko.com/en/coins/cosmos-hub]Cosmos Hub Price[/url] (48.12834225 ATOM): $333.05
[url=https://www.coingecko.com/en/coins/gnosis]Gnosis Price[/url] (2.99796139 GNO): $303.00
[url=https://www.coingecko.com/en/coins/evmos]Evmos Price[/url] (696.74515501 EVMOS): $41.52
[url=https://www.coingecko.com/en/coins/juno-network]JUNO Price[/url] (89.28571429 JUNO): $12.86

[b]41. 3meek: $663.72[/b]
[url=https://www.coingecko.com/en/coins/polkadot]Polkadot Price[/url] (58.00464037 DOT): $247.68
[url=https://www.coingecko.com/en/coins/zcash]Zcash Price[/url] (6.70421024 ZEC): $166.00
[url=https://www.coingecko.com/en/coins/shiden-network]Shiden Network Price[/url] (749.28817623 SDN): $185.73
[url=https://www.coingecko.com/en/coins/beam]BEAM Price[/url] (2347.48396668 BEAM): $64.32
Ratimov used code-tags to limit the size of the data, but it would be much better if the BBCode would still be processed. Currently it's not possible to add a scroll bar to a quote.

█▀▀▀











█▄▄▄
▀▀▀▀▀▀▀▀▀▀▀
e
▄▄▄▄▄▄▄▄▄▄▄
█████████████
████████████▄███
██▐███████▄█████▀
█████████▄████▀
███▐████▄███▀
████▐██████▀
█████▀█████
███████████▄
████████████▄
██▄█████▀█████▄
▄█████████▀█████▀
███████████▀██▀
████▀█████████
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
c.h.
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▀▀▀█











▄▄▄█
▄██████▄▄▄
█████████████▄▄
███████████████
███████████████
███████████████
███████████████
███░░█████████
███▌▐█████████
█████████████
███████████▀
██████████▀
████████▀
▀██▀▀
joker_josue
Legendary
*
Offline Offline

Activity: 1638
Merit: 4543


**In BTC since 2013**


View Profile WWW
September 01, 2023, 09:16:02 AM
 #11

Ratimov used code-tags to limit the size of the data, but it would be much better if the BBCode would still be processed. Currently it's not possible to add a scroll bar to a quote.

The idea would be, when the person makes a quote, the forum will give a maximum line limit, then generating a scroll if there are more lines than this limit. And that?

It's really not a bad idea, taking into account that some users don't use qoutes correctly and then we have huge texts, when 3 or 4 quoted lines would be enough.

.
.HUGE.
▄██████████▄▄
▄█████████████████▄
▄█████████████████████▄
▄███████████████████████▄
▄█████████████████████████▄
███████▌██▌▐██▐██▐████▄███
████▐██▐████▌██▌██▌██▌██
█████▀███▀███▀▐██▐██▐█████

▀█████████████████████████▀

▀███████████████████████▀

▀█████████████████████▀

▀█████████████████▀

▀██████████▀▀
█▀▀▀▀











█▄▄▄▄
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
.
CASINSPORTSBOOK
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▀▀▀▀█











▄▄▄▄█
LoyceV
Legendary
*
Offline Offline

Activity: 3290
Merit: 16561


Thick-Skinned Gang Leader and Golden Feather 2021


View Profile WWW
September 01, 2023, 09:21:10 AM
 #12

The idea would be, when the person makes a quote, the forum will give a maximum line limit, then generating a scroll if there are more lines than this limit.
I was thinking of a manual option, like code-tags, but automating to all posts is even better.

█▀▀▀











█▄▄▄
▀▀▀▀▀▀▀▀▀▀▀
e
▄▄▄▄▄▄▄▄▄▄▄
█████████████
████████████▄███
██▐███████▄█████▀
█████████▄████▀
███▐████▄███▀
████▐██████▀
█████▀█████
███████████▄
████████████▄
██▄█████▀█████▄
▄█████████▀█████▀
███████████▀██▀
████▀█████████
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
c.h.
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
▀▀▀█











▄▄▄█
▄██████▄▄▄
█████████████▄▄
███████████████
███████████████
███████████████
███████████████
███░░█████████
███▌▐█████████
█████████████
███████████▀
██████████▀
████████▀
▀██▀▀
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!