Bitcoin Forum
June 27, 2019, 07:42:19 AM *
News: Latest Bitcoin Core release: 0.18.0 [Torrent] (New!)
  Home Help Search Login Register More  
  Show Posts
Pages: [1] 2 3 »
1  Economy / Reputation / Can a DT member (or any member) oppose their own flag? on: June 14, 2019, 07:42:57 PM
I think this question was touched upon in the main flag discussion thread but I lost track of it due to off topic posts and personal squabbles. That, and the fact that all my off topic reports are still unhandled Wink, prompted me to create this thread and make it self-mod.

I'm not aware of any DT members having a real flag. iasenko put one on himself, clearly a mixup of some sort. It did expose one important detail though: the system allows any user to oppose (or support too I guess) a flag that has been put on them.

So let's say that happens for real, and it likely will eventually: someone flags a DT member. Is it ok for that member to oppose such flag?

Keep in mind a few aspects of this:

  • DT member's support or opposition carries more weight. For example, if you flag a non-DT-member with the guest/newbie flag, you would need at least one DT member to support it in order for the flag to reach most of their intended audience (guests and newbies without custom trust lists). But if you flag a DT member with the same guest/newbie flag, you need to get at least two other DT members to support the flag, if we assume that the target will oppose it.
  • Getting other DT members to support a flag against a DT member might be an uphill battle, and getting two supports even more so.
  • Other self-serving actions - such as meriting or sending trust feedback to yourself - are not allowed. Meriting your alts, trusting your alts, etc is heavily frowned upon.
  • Does it matter only for DT members or for everyone? If we prevent only DT members from doing so then it puts them at a slight disadvantage to everyone else.
  • LoyceMobile: Someone on DT1 can also include or exclude a user who left him feedback (positive or negative). Isn't that more or less the same thing?
  • LoyceMobile: If the DT1 is guilty, he'll shouldn't be on DT, and once he's excluded his opposing vote loses it's power.

Anything else that should be considered?

Self-moderated thread. Please stay on topic. There are plenty of drama threads already so if you want to say something unpleasant to another user please use one of those threads or hold your peace.
2  Economy / Reputation / Quickseller is a dangerous person to deal with - avoid on: June 13, 2019, 12:35:15 PM
This a thread to substantiate a warning flag on Quickseller. I believe that if you engage in any kind of deal with Quickseller, or even as much as debate him on a forum topic, you risk being attacked via frivolous accusations with the intent to damage your reputation and your ability to conduct business on the forum. This may happen for any reason, such as the deal not going the way Quickseller expected, or no particular reason at all.

Exhibit A

Quickseller was hired then fired as a participant in a signature campaign managed by Hhampuz. Shortly after being fired he launched an unsubstantiated scam accusation against Hhampuz. Quickseller is not a victim or otherwise affected by the alleged scam, there is no proof, and it is based on the mere fact of coins being moved by Hhampuz. Despite the extremely flimsy basis Quickseller makes bold claims such as "Hhampuz has stolen the excess money from the BestMixer campaign for his own personal use". Note that he didn't use the trust system (old or new) to label Hhampuz and when called out on this he said this:

I did not say that I wanted others to tag him as a scammer. I said I believe him to be a scammer, and the reason he has not been tagged is due to tribalism.

I do think he should be tagged, but due to the trust system being broken, I don't think anyone tagging him will have any affect any anything. In lieu of tagging him, I will leave this thread open and any potential customers of his (and his current customers) can look at the evidence themselves, including the fact that many of those defending him are being paid his advertisers money by him.

Which makes me think he's seeking to damage HH's business and doesn't have an actual concern or proof of a scam, which would necessitate feedback/flag.

Exhibit B

Quickseller took a 20 BTC payment from a known scammer to sue Vod, whose "crime" was to suggest that Quickseller should repay victims of his (Quickseller's) escrow scam. Eventually Quickseller failed to sue and claims to have returned part of the payment.

Quickseller has also repeatedly posted unfounded allegations against Vod that originated from a known shady website specializing in extorting targets of such allegations.

Exhibit C

Quickseller accused Lauda of having a pill addiction. Quickseller's conflicts with Lauda are numerous, proof of addiction is non-existent to the point where Quickseller was claiming that Lauda's lack of denial was proof and that other users trying to dispute the frivolous accusation were Lauda's alts.

Exhibit D

Quockseller accused dooglus of supporting a Ponzi scheme with the alleged reasons being that dooglus fixed a bug in open-source code used by a Ponzi site. The accusation was an attempt to put pressure on dooglus (a DT1 member at the time) to exclude Vod and/or cryptodevil who both had posted negative trust ratings for Quickseller, as well as for dooglus' role in the tspacepilot conflict (see below).

Later Quickseller accused dooglus and other users of condoning violence just because they included a person Quickseller doesn't like (and who in Quickseller's opinion threatened him) in their trust lists. A few years later Quickseller edited the thread to remove the accusation.

Exhibit E

Quickseller used his later-exposed alt Panthers52 to argue in his dispute against tspacepilot pretending he's someone else as can be seen from references to himself in the 3rd person. Later Quickseller faked a ban in an apparent attempt to give himself and/or his alts more credibility.

Exhibits F through Z

More examples of Quickseller's retaliatory destructive actions:

3  Other / Meta / PM from admin demanding to exclude a certain user on: June 12, 2019, 09:00:43 PM
Since the "Lauda PM" is now public knowledge let me just state that this sort of thing - forum owner/admin sending a PM demanding "recommending" to exclude a certain user from my trust network - is deeply unwelcome. Theymos can blacklist anyone he wants, there is no need for him to coerce others into doing this. At the very least this call for action should have been done publicly. I want to put this out in case anyone wants to exclude (or blacklist  Wink) me for this opinion.

If you're not quite familiar with the events, please read cryptodevil's excellent write-up.

Not sure if this is more a Meta topic or a Reputation topic, feel free to move as appropriate.
4  Other / Meta / Let me be the first to start a bitching thread about the flags on: June 12, 2019, 12:33:37 PM

I wish the "#" would be more prominent though, and the less-than-3-supporters contract violation flags had some sort of indicator too. Not red and scary, just more visible.

Here is roughly what I had in mind:

Instead of the current:

I think non-guests and non-newbies deserve a better warning than the tiny inconspicuous "#".

The answer is "no".


Add a one-click option to convert an old (pre-flag-system) red trust rating to a newbie/guest yellow box flag. There are many of those ratings with proper references that really should be visible to guests. All other rules would still apply, it would be just a shortcut to make it easier for some folks who look out for scams in Marketplace, ANN/ICO dumpster, etc and would likely be adding hundreds of these flags now.


Color confusion. The count of red ratings should be red, not orange. The "+" / "-" signs should be the same color. The green should be more green (not sure if it still turns dark green at a certain value like it used to be). For example:

+2 / =1 / -10

instead of

+2 / =1 / -10


More color confusion. The newbie flag (the "yellow box") has this wording:

"... This determination is based on concrete red flags which any knowledgeable & reasonable forum user should agree with ..."

The "red flags" part trips my OCD alarm. I know it's figurative but still. Plus there might be some cultural misinterpretations. I think it should be replaced with "warning signals" or "danger signs" or something like that.
5  Economy / Reputation / Quickseller vs cleaning up the forum on: June 08, 2019, 09:19:03 PM
I'm getting tired of Quicksy polluting unrelated threads with personal attacks and frivolous accusations related to my efforts to report plagiarised posts to moderators. I will not engage him on this topic elsewhere except to redirect to this thread.
6  Economy / Reputation / Tomatocage wakes up, posts a ref link... be careful on: June 06, 2019, 10:52:31 PM
Edit June 10: Tomatocage signed a message with an old address from March 2015:

Bare sig (Bitcoin-QT compatible):
Address: 1FLnpvdXL6ooBpFj2LHqZxQsrxn2voj5uv (from
Message: Tomatocage June 10th, 2019
Signature: HAg+ZTakWF8zt6Q8PrdF2x+dVJpmXx2uuDuyMmZbj1zDAj1sAD4mfvPRudH/KgD2fKIKv1NkQO9B0T5lY5nIsx8=;u=37522




Don't know what to think here.

Or here:;u=37522

7  Economy / Services / Stitch is selling out (suchmoon's avatar for rent) - make an offer [sold] on: May 17, 2019, 07:11:57 PM
Update May 20: currently renting out to Foxpup's Merit Cycling Club.

I've had a donkey avatar, "girl power", "snitches get stitches" (the current one) - all based on something someone told me and I decided to embrace it. E.g. cyberpinoy called me a donkey for digging into his pseudo-ponzi scam.

So in that respect nothing is changing, EXCEPT now I want money for telling me what to wear as my avatar. AKA avatar space for rent.

The reason for that is purely financial. I'm involved in what could be considered a service to the community and there are some expenses (details available to serious bidders on request). I've been footing those bills on my own for the last ~year but my SO got a hold of the last one... long story short, that's no longer a viable option Wink

Please make an offer. I have no idea what the avatar is worth. I would prefer a monthly flat rate paid upfront but will entertain any reasonable offers. BTC only. I can't make any commitment for a minimum number of posts but it would likely be in the 100-300 a month range. I'm hanging out mostly in Meta and Rep these days.

No NSFW, scammy, rule-breaking stuff, or anything else that I don't like - at my discretion. I can end the deal for any reason or no reason, same for the counterparty. If I end it I'd refund pro-rated prepayment, if any.
8  Economy / Reputation / Who's your forum bestie? Make a guess and I'll prove you wrong. Probably. on: April 25, 2019, 03:16:50 PM
So who's that forum user you can't live without, the one you just can't stop chatting with, all through the night?

Make a post in this thread with the name of the user who you think is your BFF and I will mathematically show how wrong you are.

To prevent LoyceV from cheating I will not disclose my super-secret Friendship Assessment and Investigation Logic until I get a few lab rats in this experiment.

I'm counting how many times you quoted someone. Only valid (properly closed, pointing to a Bitcointalk post) quotes are counted, and only the first level (if you quote Alice and she quotes Bob - Bob's not your friend). Quotes of deleted posts get counted too but name changes don't, so if you're friends with TradeFortress - no one will ever know.

The person you quoted the most is obviously your best friend as I can't think of any other reason why you would insist on talking to someone so much Grin.

Amendment: when a post is split-quoted it will count only once.

I'll start.

I think my best friend on this forum is WildShark.


   #  Friend                     Quotes       %
   1. korvas128                     474    2.99
   2. WildShark                     421    2.65
   3. Quickseller                   234    1.47
   4. cryptohunter                  204    1.28
   5. suchmoon                      175    1.10
   6. Paul Revere                   152    0.96
   7. Gleb Gamow                    151    0.95
   8. digaran                       149    0.94
   9. o0o0                          124    0.78
  10. TECSHARE                      111    0.70

Close though.

Your turn. Please keep in mind that this takes hours to calculate so for best results make your post and come back tomorrow to check.

Let's keep it clean and on the topic of friendship.

Completed requests
(some posts contain multiple lists - scroll down if you click the link and don't see yours)

Last of the V8s:
bill gator:
9  Economy / Reputation / [Yet another Yobit topic because I'm a hypocrite] Yobit shitposting participants on: April 21, 2019, 06:02:50 PM
I said this in response to another user who started a Yobit topic:

Definitely no need for more threads. Lock and archive.

So obviously I'm gonna go ahead and create one myself Grin

My excuse is that the list of participants that I was posting in actmyname's thread has grown to 350 438 (!!!) and doesn't fit into one post anymore so to avoid derailing that thread - here it is.

These are users who have "1450 COINS" in their signature (i.e. likely a Yobit signature) and have posted recently. It's not 100% complete because I may have missed some posts or not retrieved some user profiles yet. It may take up to 24 hours for new participants to show up.

"Before" is the average number of posts per day between April 12 - 18 (before the start of the Yobit campaign) and "now" is the number of posts in the last 24 hours. "AvgLen" is the average number of characters per post, excluding quotes, in the last 24 hours. "Merit" is the total amount of earned merit.

Big thanks to Vod and LoyceV for their respective resources.

List removed due to theymos trashcanning the whole campaign.
10  Other / Meta / [SUCH GUIDE] Guaranteed method to earn many merits, statistically proven on: April 01, 2019, 12:17:29 AM

Everyone wants merits, including those who pretend to not care. However I keep hearing that earning merits the usual way (by making good posts) is too hard. There must be an easier way.

User Name

Let's start at the beginning - your Bitcointalk account. Does your chance to earn merits depend on your username? Absolutely. First you need the username of an appropriate length. The median length of a merit-earning username is 9 characters.

The username itself matters too. For example, usernames starting with "m" or "s" earned 10 times more merits than those starting with "q" or "u". That's not all. Usernames having "o" or "a" as their second letter earned 50 times more merits than those with "z" or "f" as their second letter. Here are the best letters for all 9 positions of a median-length username:


Post Length

No matter how good your post is, it won't get merits if the merit-sending person falls asleep halfway through it or the post is so short it just scrolls by in a blink of an eye. The median length of a merit-earning post is 549 characters.


Obviously the content of the post matters too. Here are the top merit-earning words (after removing stop words such as pronouns and conjunctions):



So there you have it. To earn thousands upon thousands of merits, all you need to do is:

  • Create a user account named "maeaeoane".
  • Make 549-character-long posts using the word list provided above.

Lifetime money-back no-questions-asked guarantee.

Edit: The original version of the post mistakenly claimed that letter "l" (lowercase "L") sucks bigly as the second letter of a username. It does suck but not as much as I claimed (not 50 times worse than "o" or "a" but only about 3-4 times). My apologies to the "l" but it's her own fault for being too similar to "1" (number one). It's been replaced by "z" in the example.
11  Economy / Reputation / marcotheminer - con[fidence] man on: March 19, 2019, 12:36:21 AM
Not sure how marcotheminer is able to weasel out of these shenanigans and get his reputation threads locked but I've had enough. Here's a new thread for all his bullshit.

What is the 3rd chance you are talking about? Why should 1 negative remain if I did not default nor scam?

I'm asking you to take a level-headed stance on this, if you speak with Roman you'll find he doesn't ask for any negatives to remain. Thank you.

You convinced me to revise the red rating I posted for you a week or so ago. Fair enough. That was your second chance. You blew it by being late on a loan. Therefore you're not getting a third chance from me.

It doesn't matter what your lender (who got repaid) says. It's about giving a fair warning to another person who might find themselves in this position.

Self-mod rules: serial posting, off topic BS, and other rule-breaking posts will be pulverized on sight to avoid wasting mods' time. Same with the hypertrolls (CH/Thule/et al).
12  Other / Meta / Stop animated images in FireFox / Tor browser / Chrome on: February 25, 2019, 03:16:01 PM
Update: forum no longer allows new animated PNG avatars, existing ones still remain.

Ok, I've had it with the animated avatar ads... so if you're irritated like me and don't mind missing out on an occasional meme here's how you disable them in FireFox / Tor:

Open a new tab and enter about:config in the address field. Confirm the grave warning that shows up. Search for "animation" and change the value of image.animation_mode to "none" to disable all animations, or to "once" to let them play one time (thanks to o_e_l_e_o for the tip).


Solution for Chrome:

For Google Chrome.

Animation Policy.
Author: Google Accessibility.

Run animations only once, or disable animation completely.
Disable image animation, or make animations run only once.

Works on all animated image formats and animated SVG. Does not affect video.

13  Other / Archival / My thread for Maggie on: February 21, 2019, 09:14:51 PM
The message body was left empty.
14  Economy / Reputation / What is Quickseller trying to hide? Gruesome stuff I'm sure. Hasn't denied it. on: February 12, 2019, 05:55:22 PM
Quickseller did some cleanup in this thread:

This is a self-moderated topic. If you do not want to be moderated by the person who started this topic, create a new topic. (28 posts by 13 users with 4 merit deleted.)

Here is the thread before the cleanup:

Seems like he was attacking multiple users but then decided to focus just on Vod.

And as you can obviously see, whatever accusations I'll come up with as a result of this thread, Quickseller has not denied them so they're all true.

Making this self-moderated due to assholes running around doxing people.
15  Economy / Reputation / Hate a DT1 member? Or two? All of them? Post your grievances here. UNMODERATED on: February 06, 2019, 03:35:09 PM
Just what the title says. Lay it all out. Keep that shit out of Meta.
16  Other / Meta / [HACK] One-click mod report, not for the faint of heart on: January 29, 2019, 12:09:55 AM
This originated here:

And I completely support the idea raised by that thread, i.e. make it easier to report certain types of posts. But until/unless that feature gets implemented perhaps you'll find my approach useful.


1. This is a browser extension. Never install browser extensions obtained from random strangers on the internet unless you know exactly what you're doing. I'm not responsible if this extension steals all your money and runs away with your spouse.

2. This is mostly-untested code. It's alpha quality at best. I gutted it out of a larger extension that I'm using for other purposes. Treat it as an example or an idea. Feel free to steal any bits and pieces that you like or do whatever you want with it.

3. It works in Firefox/Tor browser and may work in Chrome but again - untested. Probably won't work in mobile browsers.

4. You must have some knowledge of how WebExtensions and Promises work in order to make sense of the code. I'll try to explain below but a proper tutorial is out of the scope of this thread.

How this works

This is a browser extension built using WebExtensions API and consists of two main parts:

  • bct-content.js: content script, a copy of which runs on every Bitcointalk page once the extension is installed. Depending on which page it is, the content script will perform different actions:
    • Inside threads, on Patrol page, and in user's post/thread history it creates one-click buttons to report posts to moderators. Clicking one of the buttons sends a message to the other part of the extension, which handles queuing etc.
    • On the "Report to moderator" page it expands the comment field for better visibility. If the page was opened automatically by one of the above buttons, it inserts the pre-selected comment, waits a specified amount of time to comply with throttling, and clicks "Submit".
    • In the board view it closes the tab if it came from the automated post report, otherwise it does nothing.
  • bct-background.js: background script, which listens to messages from content scripts and for each message opens the "Report to moderator" in a new tab, which is then handled by the content script as described above. This is done without taking focus away from what you're doing so you can keep browsing and reporting other posts.

The code that runs between when you click your button and when the extension clicks the "Submit" button is wrapped in a Promise so it should succeed or fail as a whole. Please note though that the actual submission of the report is not verified, i.e. if there is a failure after "Submit" was clicked - Bitcointalk down, CF fire hydrant, etc - you'll have to double-check your report history to see if the report was submitted successfully.

If the code succeeds it will add a yellow border on the left side of the post being reported, if it fails - a red one. Styling is configurable in bct-content.css. o_e_l_e_o created a custom stylesheet for a "blend in" look-and-feel.

In case of a failure check console log and please let me know if there is a bug that's causing it.

How to install

Save the files posted below into one folder. In Firefox/Tor go to "about:debugging", click Load Temporary Add-on, and choose any file in the folder. If you're brave enough to use Chrome - you're gonna have to figure it out on your own HCP has figured out a way.

The actual clicking of the "Submit" button is commented out - see line 18 in bct-content.js. I would like to avoid spamming our dear moderators with a bunch of malformed reports if anything goes wrong. If you decide to use the extension you can test it first by manually clicking "Submit" and then uncomment the line once you're comfortable.

Line 19 sets the wait time before clicking "Submit". High activity accounts have a 4-seconds-betwen-posts allowance, so the default 5000ms delay works well with that. With a lower activity account you may run into throttling - adjust the delay as needed.

You can change button titles, report comments, add new buttons, etc around line 120 in bct-content.js.


I'm sure I missed something or messed something up. Feel free to comment in the thread.




  "manifest_version": 2,
  "name": "BCT Helper",
  "version": "0.1b",

  "description": "Adds some automation for",

  "content_scripts": [
      "matches": [ "*://*" ],
      "js": [ "bct-content.js" ],
      "css": [ "bct-content.css" ],
      "run_at": "document_idle"

    "scripts": ["bct-background.js"]
  "permissions": [


Code: {
    border-left: 4px transparent solid;
} {
    opacity: 0.5;
} {
    border-left: 4px red solid;
} {
    border-left: 4px yellow solid;

.bct-report-button-container {
    margin-top: 10px;
    background-color: #bbddbb;

.bct-report-input {
    margin-left: 5px;
    height: 12px;

.bct-report-button, .bct-report-button:hover {
    display: inline-block;
    border: 1px solid black;
    margin-left: 5px;
    padding: 1px 5px 1px 5px;
    transform: none;

.bct-report-button:hover {
    cursor: pointer;


console.log("BCT-CONTENT initialized");
console.log("Page: " + window.location.href);
console.log("Referrer: " + document.referrer);

function process_background_message(message, sender, send_response) {
    console.log("Content script received background message: " + JSON.stringify(message));
    if (message.action == "bct-tab-open-report" || message.action == "bct-tab-submit-report") {
        if (message.comment !== undefined) {
            document.getElementsByName("comment")[0].value = message.comment;
        message.result = "OK";
    if (message.action == "bct-tab-submit-report") {
        // mod report counts as post/PM for throttling - add a delay
        setTimeout(() => {
            // Uncomment the next line to allow reports to be submitted automatically
        }, 5000);
    } else {
    // this is needed to make the sender wait for a response
    return true;

function report_post(post_container, thread_id, post_id, report_comment, auto_submit) {

    let event_detail = {
        event_id: (Math.random().toString(36) + '000000000000000000').slice(2, 18),
        action_name: "bct-report",
        action_url: ";topic=" + thread_id + ";msg=" + post_id,
        action_payload: { post_id: post_id, comment: report_comment, auto: auto_submit }

        .then((message_response) => {
            //console.log("message_response: " + JSON.stringify(message_response));
            console.log("message_response size: " + JSON.stringify(message_response).length);
            post_container.classList.remove("post-wait", "post-error", "post-success");
        .catch((error) => {
            console.log("Data request failed:");
            post_container.classList.remove("post-wait", "post-error", "post-success");

function extract_ids_from_url(post_url) {
    let url_parts = post_url.split("#msg");
    let post_id = url_parts[1];
    let thread_id = url_parts[0].split(".msg")[0].split("?topic=")[1];
    return [thread_id, post_id];

function create_button(post_container, button_title, report_comment, text_field, auto_submit) {
    let button = document.createElement("button");
    button.className = "bct-report-button";
    button.innerText = button_title;
    button.title = report_comment;
    button.addEventListener("click", (e) => {
        if (text_field) {
            if (text_field.value.trim()) {
                report_comment += " " + text_field.value.trim();
            } else {
                alert("Required value missing");
        report_post(post_container, post_container.thread_id, post_container.post_id, report_comment, auto_submit);
    return button;

function create_span(text) {
    let span = document.createElement("span");
    span.innerText = text;
    return span;

function create_text_field(hint) {
    let text_field = document.createElement("input");
    text_field.className = "bct-report-input";
    text_field.type = "text";
    text_field.placeholder = hint;
    return text_field;

// inject the buttons into each message
document.querySelectorAll("").forEach(post_container => {
    // Try to determine thread ID and post ID
    let link_object = null;
    if (post_container.parentNode.classList.contains("td_headerandpost")) {
        // Thread view
        // post -> td.td_headerandpost -> table ... -> div#subject_123456
        link_object = post_container.parentNode.firstElementChild.querySelector("div[id^='subject_'] a");
    } else {
        // Other views: patrol, user's post history, user's thread history
        let post_url_start = "";
        // post -> td -> tr -> tbody -> tr ... -> a[href contains #msg123456]
        link_object = post_container.parentNode.parentNode.parentNode.firstElementChild.querySelector("a[href^='" + post_url_start + "'][href*='#msg']");
    if (link_object) {
        [post_container.thread_id, post_container.post_id] = extract_ids_from_url(link_object.getAttribute("href"));
        if (post_container.thread_id && post_container.post_id) {
            let button_container = document.createElement("div");
            button_container.className = "bct-report-button-container";
            button_container.appendChild(create_span("Report as: "));
            button_container.appendChild(create_button(post_container, "zero value", "zero-value shitpost", null, true));
            button_container.appendChild(create_button(post_container, "multi post", "two or more consecutive posts in 24h", null, true));
            button_container.appendChild(create_button(post_container, "cross spam", "spamming their service across multiple threads - please check post history", null, true));
            button_container.appendChild(create_button(post_container, "non-english", "non-English post on English board", null, true));
            let url_field = create_text_field("URL of the original");
            button_container.appendChild(create_button(post_container, "copy from:", "copy-paste from:", url_field, true));
            let board_field = create_text_field("correct board name");
            button_container.appendChild(create_button(post_container, "move to:", "wrong board, should be in", board_field, true));
        } else {
            console.log("Found and post URL but couldn't determine thread/post ID.");
    } else {
        console.log("Found but couldn't find post URL.");        

if (window.location.href.startsWith("")) {
    document.getElementsByName("comment")[0].style.width = "80%";
if (window.location.href.startsWith("")) {
    if (document.referrer &&
        document.referrer.startsWith("") &&
        document.referrer.endsWith(";a") // after automatic submission
    ) {
        console.log("Attempting to close this tab...");
        browser.runtime.sendMessage({ action_name: "close-this-tab" });


// This is an array of Promise.resolve functions that will be called sequentially with delay
let throttled_resolvers = [];
// Number of milliseconds to wait before resolving the next queued promise
// Number of milliseconds to wait before rejecting the queued promise
let PROMISE_TIMEOUT = 120000;
// Number of milliseconds to wait for a tab to load
let TAB_TIMEOUT = 60000;

function handle_next_resolver() {
    let p = throttled_resolvers.shift();
    if (p === undefined) {
        setTimeout(handle_next_resolver, PROMISE_INTERVAL);
    else {

setTimeout(handle_next_resolver, PROMISE_INTERVAL);

function queue_promise() {
    return new Promise((resolve, reject) => {
        throttled_resolvers.push({ resolve: resolve });
        setTimeout(function () { reject(new Error("Queued promise has timed out.")); }, PROMISE_TIMEOUT);

function check_if_tab_fully_loaded(tab) {

    function is_tab_complete(tab) {
        return tab.status === "complete" && tab.url !== "about:blank";

    if (is_tab_complete(tab)) {
        return tab;
    } else {
        return new Promise((resolve, reject) => {

            const timer = setTimeout(
                function () {
                    if (is_tab_complete(tab)) {
                    } else {
                        reject(new Error("Tab status " + tab.status + ": " + tab.url));
            function on_updated(tab_id, change_info, updated_tab) {
                if (tab_id == && is_tab_complete(updated_tab)) {



browser.runtime.onMessage.addListener(function(message, sender) {
    if (message.action_name === "close-this-tab") {
        //console.log("Background script closing tab:");
    else if (message.action_name === "bct-report") {
        Expected message format:
            action_name: "bct-auto-report",
            action_url: "https://...",
            action_payload: { post_id: N, comment: "...", auto: true }
        let tab_url = message.action_url;
        let tab_action = "bct-tab-open-report";
        if ( {
            tab_action = "bct-tab-submit-report";
            tab_url += ";a";
        return queue_promise()
            .then(() =>
                    url: tab_url,
                    active: false
            .then((created_tab) => check_if_tab_fully_loaded(created_tab))
            .catch((error) => {
                error_message = "Tab load/check failed: " + error.message;
                throw new Error(error_message);
            .then((loaded_tab) => browser.tabs.sendMessage(, { id:, action: tab_action, comment: message.action_payload.comment }))
            .then((tab_response) => {
                //console.log("Tab result: " + tab_response.result);
                message.action_result = tab_response.result;
                return message;
            .catch((error) => {
                console.log("Request failed in the background:");
                throw new Error(error.message);
            .finally(() => {
                setTimeout(handle_next_resolver, PROMISE_INTERVAL);

Local rules

cryptohunter and Thule are not allowed to post here. This thread is only about mod reporting and improvement thereof, not DT, merits, or anything else.

17  Economy / Reputation / The war with Russia: can we end it? Do we want to? on: January 20, 2019, 02:07:35 AM
This thread is a continuation of my post here:

I would like to have a healthy discussion on what we can do to de-escalate the conflict that shouldn't have existed in the first place. As I mentioned in the post linked above we can start by supporting the good guys in the Russian community. Any ideas of how to do that or other constructive suggestions are welcome.

Any personal disputes/insults as well as posts violating forum rules will be deleted at my discretion. Some users are not welcome here - you know who you are.
18  Economy / Reputation / Poll: is it OK to send merits to your own alts? on: January 05, 2019, 12:10:54 AM
Please vote and make a post explaining your vote.

I'm strongly against sending merits between alts. The proper use of the merit system is to award good posts. Users can't objectively judge their own posts. Self-awarded merits are as meaningless as if we allowed users to choose their own ranks, and essentially that's what self-awarded merits do.

But I'm being attacked for that opinion so I'd like to gauge community sentiment on this subject.

This is a self-moderated thread so conspiracy theories and other BS will be terminated with extreme prejudice.
19  Economy / Reputation / cryptohunter's problem with the top 200 merit receivers on: December 18, 2018, 12:20:52 AM
Let's help cryptohunter figure out her problem with the top 200 merit receivers.

The original complaint was that top 200 receivers send to much merit between themselves (in reality it's ~12% or so) and there are many users on other boards who don't get merits for posts as good as or better than the ones made by the top 200. After repeated requests to show such unmerited posts cryptohunter is just now hunting for that information so it couldn't have been the real original reason for this whole debacle.

So what's the real problem here? I hope this can serve as the main collection of all those grievances instead of getting spread out across multiple merit topics as cryptohunter has been doing lately.
20  Economy / Scam Accusations / Kristy-Leigh Minehan AKA OhGodAGirl, OhGodACompany, mineority hosting/FPGA scam on: December 17, 2018, 07:39:13 PM
This thread is work in progress. Since most of the scam took place outside of the forum it's not easy to piece it together. Please suggest sources if you can.

What happened: OhGodAGirl's business closed up shop leaving customers without the GPUs they purchased.

Scammers Profile Link:;u=838402

Reference Links:

Amount Scammed: 60 ETH (USD 30k+ at the time) - not certain about this as it seems very low

Payment Method: ETH (MetaMask)

Proof of Payment: (contract address)

PM/Chat Logs:

Additional Notes: was a "cloud mining" operation that sold hosted GPUs to mine Ethereum and other crypto currencies. Recently it was also selling hosted FPGAs. The promise was that at the end of hosting contract customers would own the hardware. Hardware and hosting costs were quoted in USD. As of now mineority is issuing refunds in ETH (devalued by 80-90%) and is not shipping GPUs. FPGA business has been taken over by their partners (SQRL).

As far as I know there was no official announcement of the demise other than the e-mail shown below. Website is gone and discord channel was abruptly closed. OhGodAGirl seems to have moved on to new ventures.

Pages: [1] 2 3 »
Sponsored by , a Bitcoin-accepting VPN.
Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!