| Both sides previous revisionPrevious revision | |
| provenance:design:platforms:messaging_channels [2026/09/27 12:24] – Review log for the three focused passes; regenerated outputs (report, verifier 79 needles, external checks 80). Authored by Claude. karel.kubicek.claude | provenance:design:platforms:messaging_channels [2026/09/27 12:36] (current) – Generic review logged (16 findings, 15 accepted, 1 in part); mistakes list extended; regenerated verifier (68 spans, 83 needles) and external checks (80 OK). Authored by Claude. karel.kubicek.claude |
|---|
| * **The draft over-generalised two paper quotes.** It credited "two criminology-trained groups" with a consent-waiver argument that only one paper makes in those terms, and wrote "no paper here describes entering a group by deception" without saying that one of the 26 interacted with the operators it studied. Both rewritten against the text. | * **The draft over-generalised two paper quotes.** It credited "two criminology-trained groups" with a consent-waiver argument that only one paper makes in those terms, and wrote "no paper here describes entering a group by deception" without saying that one of the 26 interacted with the operators it studied. Both rewritten against the text. |
| * **The external-check script silently skipped its last section on the first run.** ''set -u'' aborted on an unset ''$1'' inside the Crossref loop, and the run printed nine FAILED lines above it — all nine were my regexes (tag-stripped text searched for values that live in HTML attributes), not the sources. Fixed; the script now reaches its final ''FAILED checks: N'' line, and exits with N. | * **The external-check script silently skipped its last section on the first run.** ''set -u'' aborted on an unset ''$1'' inside the Crossref loop, and the run printed nine FAILED lines above it — all nine were my regexes (tag-stripped text searched for values that live in HTML attributes), not the sources. Fixed; the script now reaches its final ''FAILED checks: N'' line, and exits with N. |
| | * **Two hand codes behind headline figures were wrong until review.** {[vu2025_assessing]} also monitored Discord channels (Discord 5 → 6), and {[gao2026_doxing]}'s only denominator caveat concerns a secondary sample, so "all nine core papers acknowledge the denominator" was eight. Three more codes (two join modes, one ethics review) were recoded; see [[#Review log]]. |
| | * **The external-source sub-agent said TeraGram had no DOI yet.** It is in the ICWSM 2026 proceedings; the external-currency reviewer caught it. |
| | * **The page missed an application route.** It said no platform offers researchers a way in while its own parent page documents that Meta's Content Library covers WhatsApp Channels. The generic reviewer caught it by reading the two pages together. |
| * **A located note quote is not a published quote.** The readers' notes carry 606 quotes; 501 (82.7%) were located verbatim. The page quotes only strings that the page's own verifier locates, and the notes stay unpublished. | * **A located note quote is not a published quote.** The readers' notes carry 606 quotes; 501 (82.7%) were located verbatim. The page quotes only strings that the page's own verifier locates, and the notes stay unpublished. |
| |
| ===== Quote and figure checks ===== | ===== Quote and figure checks ===== |
| |
| * **Page quotes**: ''verify_messaging_channels_figures.mjs'' pulls **every** ''%%//"…"//%%'' span out of the page source (64 at the last run) and requires each to be located in the paper of a citekey on the same line, or to be an EXTERNAL span whose external check printed OK, or to be on a two-entry NOT_A_QUOTE list. One span needed a ligature fallback (the IMC 2020 PDF has an unmapped ''ff'' glyph in "different" in both renderings), and one a de-hyphenation fallback ("self- constructed" across a line break); both routes are labelled in the output. | * **Page quotes**: ''verify_messaging_channels_figures.mjs'' pulls **every** ''%%//"…"//%%'' span out of the page source (68 at the last run) and requires each to be located in the paper of a citekey on the same line, or to be an EXTERNAL span whose external check printed OK, or to be on a two-entry NOT_A_QUOTE list. One span needed a ligature fallback (the IMC 2020 PDF has an unmapped ''ff'' glyph in "different" in both renderings), and one a de-hyphenation fallback ("self- constructed" across a line break); both routes are labelled in the output. |
| * **Per-paper figures**: 79 needles, located in ''.cols'' or, for twelve, only in the ''pypdf'' re-extraction. Three mutated needles (250→350, 0.8%→0.9%, 4,709→4,790) must not be found and are not. | * **Per-paper figures**: 83 needles, located in ''.cols'' or, for twelve, only in the ''pypdf'' re-extraction. Three mutated needles (250→350, 0.8%→0.9%, 4,709→4,790) must not be found and are not. |
| * **Two numbers are verified in the form the PDF prints them**: {[gao2026_doxing]}'s "411, 707" and {[saha2021_short]}'s "8, 000 … 1, 000 … 3, 000" carry a stray space inside the number in every rendering. | * **Two numbers are verified in the form the PDF prints them**: {[gao2026_doxing]}'s "411, 707" and {[saha2021_short]}'s "8, 000 … 1, 000 … 3, 000" carry a stray space inside the number in every rendering. |
| * **Reader notes**: ''msgch_notes_quotecheck.py'' (output below) — 501 of 606 quotes located (82.7%). The misses are dominated by readers stitching two sentences with an ellipsis, against the brief, and by column splices. No page quote depends on an unlocated note quote. | * **Reader notes**: ''msgch_notes_quotecheck.py'' (output below) — 501 of 606 quotes located (82.7%). The misses are dominated by readers stitching two sentences with an ellipsis, against the brief, and by column splices. No page quote depends on an unlocated note quote. |
| ==== Pass 4 — generic (model: fable) ==== | ==== Pass 4 — generic (model: fable) ==== |
| |
| Running on the corrected pages; its findings will be logged here. | Ran on the corrected pages (content rev 1790511893, provenance rev 1790511895). 16 findings (1 high, 6 medium, 9 low); it also re-derived several of the fixes above and found them sound. |
| | |
| | ^ # ^ Finding ^ Disposition ^ |
| | | G1 | high — the page said none of the three platforms has a research route and called WhatsApp Channels "new and untested", while [[design:platforms]] documents that Meta's Content Library covers WhatsApp Channels | **accepted**. Re-fetched Meta's page (headless browser): "public content archive from Facebook, Instagram and WhatsApp Channels". The intro box, the terms section, the currency table and the open questions now say that Channels have an application route, that groups do not, and that no paper here used it; an external check was added | |
| | | G2 | medium — "specific, recent" terms applied to 2019–2024 papers when the page cannot date the clause | **accepted**: "recent" dropped; "read against today's terms", and the page says whether the clauses existed at collection time was not established | |
| | | G3 | medium — the artefact sentence gave base rates only for the two rows where group studies exceed the corpus | **accepted**: public 34.6% vs 47.7% added; the sentence now says they share less openly and shift to gated release | |
| | | G4 | medium — "the only compliant path [on Discord] is a bot an admin invites" ignores a person reading as a member, which the page's own codes record | **accepted**, rewritten in the terms section and the open questions | |
| | | G5 | medium — "still possible at scale in 2025" generalised one platform's pre-mitigation window to the whole route | **accepted**: now "capped on most platforms", with WhatsApp's window, Meta's mitigation statement and the capped platforms named | |
| | | G6 | medium — "what the careful papers converge on" rests on one paper for two bullets, and one is contradicted by {[roy2025_darkgram]}, which sent 11,800 collected posts to the GPT-4 API | **accepted**: reframed as what individual papers did; the third-party-service bullet is marked contested, cites both papers, and states the page's position | |
| | | G7 | medium — "what the 2020–2024 Discord papers describe or imply" attributes user-account automation to six papers when only one is coded that way | **accepted**: names {[hoseini2020_demystifying]} only | |
| | | G8 | low — Twitter as a seed surface is still used (2025); only the free API is historical | **accepted**, currency row split accordingly | |
| | | G9 | low — "known official channels" vs the fourth n/a paper reached through a forum advert | **accepted**: "known groups or channels" | |
| | | G10 | low — the recruitment row named two platforms where the 19 include Telegram and WeChat; two cells had no citation | **accepted**: platforms listed; the two uncited cells point to the verdict list | |
| | | G11 | low — the seed table omitted the "not stated" row (2 papers) | **accepted**, row added | |
| | | G12 | low — "almost all of it is Telegram" (81%) | **accepted**: "four papers in five" | |
| | | G13 | low — the Discord 100-server cap rests on a 2020 measurement while Telegram's is documented | **partly accepted**: both measured caps are now dated "in 2020" and the Discord one is marked "not re-checked against Discord's current documentation"; Discord's support page was not re-fetched for a current figure | |
| | | G14 | low — the page explains Discord bots' limits but not Telegram bots' | **accepted**: a table row on bot accounts, with Telegram's own privacy-mode sentence, and an external check | |
| | | G15 | low — message-level attrition (deletions between back-fill and live polling) not mentioned | **accepted**: {[kireev2025_characterizing]} added — export history "does not contain deleted messages", and moderators removed from below 20% to over 80% of propaganda messages | |
| | | G16 | low — no read-first entry for Discord or for the commoner "one source among several" case | **accepted**: {[shen2024_anything]} and {[vu2025_assessing]} named under //What to Read First// | |
| | |
| | Not re-run after these fixes: the generic pass's own findings were applied as stated, every changed figure re-checked by the number guard, and every new quote by the verifier (68 spans, 83 needles, 0 not located) and the external script. A second generic pass was not run. |
| | |
| | ==== What the review layer was worth ==== |
| | |
| | 37 findings over four passes; 35 accepted in full, 1 in part, 1 rejected as an already-recorded judgement call. The two that changed headline figures came from the focused passes (the missing Discord code, and the one core paper that does not acknowledge its denominator). The one that changed what the page tells a reader to do — an application route to WhatsApp Channels the page had missed — came from the generic pass, reading this page against its parent. |
| |
| ===== The report script ===== | ===== The report script ===== |
| OK paper.cols.txt line 28 kireev2025_characterizing | OK paper.cols.txt line 28 kireev2025_characterizing |
| "given the small selection, we cannot make any statement about the pervasiveness of this propaganda activity in Telegram" | "given the small selection, we cannot make any statement about the pervasiveness of this propaganda activity in Telegram" |
| OK paper.cols.txt line 61 hoseini2020_demystifying | OK paper.cols.txt line 62 hoseini2020_demystifying |
| "presumably owing to Discord group URLs automatically expiring after a day" | "presumably owing to Discord group URLs automatically expiring after a day" |
| OK EXTERNAL line 61 Discord invites default to 7 days | OK EXTERNAL line 62 Discord invites default to 7 days |
| "a 7 days access link by default" | "a 7 days access link by default" |
| OK EXTERNAL line 62 Discord Server Discovery needs 1,000 members | OK EXTERNAL line 63 Discord Server Discovery needs 1,000 members |
| "at least 1,000 members" | "at least 1,000 members" |
| OK EXTERNAL line 62 TGStat self-reported catalogue size | OK EXTERNAL line 63 TGStat self-reported catalogue size |
| "More than 2 864 885 channels and groups" | "More than 2 864 885 channels and groups" |
| OK EXTERNAL line 63 durov/345: problematic content no longer accessible in Search | OK EXTERNAL line 64 durov/345: problematic content no longer accessible in Search |
| "All the problematic content we identified in Search is no longer accessible" | "All the problematic content we identified in Search is no longer accessible" |
| OK EXTERNAL line 73 Telegram documents the public-channel web preview | OK EXTERNAL line 74 Telegram bots: privacy mode on by default unless added as admin |
| | "Privacy mode is enabled by default for all bots, except bots that were added to a group as admins" |
| | OK EXTERNAL line 75 Telegram documents the public-channel web preview |
| "The contents of public channels can be seen on the Web without a Telegram account" | "The contents of public channels can be seen on the Web without a Telegram account" |
| OK paper.cols.txt line 80 kireev2025_characterizing | OK paper.cols.txt line 82 kireev2025_characterizing |
| "never interacted with the channels" | "never interacted with the channels" |
| OK paper.cols.txt line 81 hoseini2020_demystifying | OK paper.cols.txt line 83 hoseini2020_demystifying |
| "translates to a need for hundreds of phones and SIM cards to join all discovered groups" | "translates to a need for hundreds of phones and SIM cards to join all discovered groups" |
| OK EXTERNAL line 81 Telegram: unofficial-client logins put under observation | OK EXTERNAL line 83 Telegram: unofficial-client logins put under observation |
| "all accounts that log in using unofficial Telegram API clients are automatically put under observation" | "all accounts that log in using unofficial Telegram API clients are automatically put under observation" |
| OK paper.cols.txt line 87 resende2019_information | OK paper.cols.txt line 89 resende2019_information |
| "we are not aware of an approach that would allow us to assess the representativeness of our data as even the total number of groups available in the country is " | "we are not aware of an approach that would allow us to assess the representativeness of our data as even the total number of groups available in the country is " |
| OK paper.cols.txt line 88 saha2021_short | OK paper.cols.txt line 90 saha2021_short |
| "Given that WhatsApp does not provide an API or tools to access the data, there is no way of knowing the representativeness of our dataset" | "Given that WhatsApp does not provide an API or tools to access the data, there is no way of knowing the representativeness of our dataset" |
| OK paper.cols.txt line 88 saha2021_short | OK paper.cols.txt line 90 saha2021_short |
| "a convenience sample" | "a convenience sample" |
| OK paper.cols.txt+lig line 89 hoseini2020_demystifying | OK paper.cols.txt+lig line 91 hoseini2020_demystifying |
| "The use of Twitter as the only data source for discovering public groups of the different messaging platforms potentially introduces some bias in our sample" | "The use of Twitter as the only data source for discovering public groups of the different messaging platforms potentially introduces some bias in our sample" |
| OK paper.cols.txt line 95 marjanov2026_stayin | OK paper.cols.txt line 97 marjanov2026_stayin |
| "inactive/banned" | "inactive/banned" |
| OK paper.cols.txt line 95 marjanov2026_stayin | OK paper.cols.txt line 97 marjanov2026_stayin |
| "the most influential predictor of channel durability" | "the most influential predictor of channel durability" |
| OK paper.cols.txt line 95 marjanov2026_stayin (WARN: located in a citekey other than the nearest) | OK paper.cols.txt line 97 marjanov2026_stayin (WARN: located in a citekey other than the nearest) |
| "might miss short-lived channels due to the retroactive nature of data collection" | "might miss short-lived channels due to the retroactive nature of data collection" |
| OK paper.cols.txt line 97 arunasalam2024_security | OK paper.cols.txt line 97 kireev2025_characterizing |
| | "The data collected through "Export chat history" does not contain deleted messages" |
| | OK paper.cols.txt line 99 arunasalam2024_security |
| "that can only be joined via invitation" | "that can only be joined via invitation" |
| OK paper.cols.txt line 97 arunasalam2024_security | OK paper.cols.txt line 99 arunasalam2024_security |
| "an unintentional leak of the group's "invite link"" | "an unintentional leak of the group's "invite link"" |
| OK NOT-A-QUOTE line 100 template of the sentence NOT to write, in the denominator box | OK NOT-A-QUOTE line 102 template of the sentence NOT to write, in the denominator box |
| "we collected N messages from Telegram" | "we collected N messages from Telegram" |
| OK EXTERNAL line 112 Telethon README: moved to Codeberg | OK EXTERNAL line 114 Telethon README: moved to Codeberg |
| "Moved to https://codeberg.org/Lonami/Telethon" | "Moved to https://codeberg.org/Lonami/Telethon" |
| OK EXTERNAL line 112 Telethon README (reST links rendered): be careful not to break ToS | OK EXTERNAL line 114 Telethon README (reST links rendered): be careful not to break ToS |
| "be careful not to break Telegram's ToS or Telegram can ban the account" | "be careful not to break Telegram's ToS or Telegram can ban the account" |
| OK EXTERNAL line 116 whatsapp-web.js README: WhatsApp does not allow unofficial clients | OK EXTERNAL line 118 whatsapp-web.js README: WhatsApp does not allow unofficial clients |
| "WhatsApp does not allow bots or unofficial clients on their platform, so this shouldn't be considered totally safe" | "WhatsApp does not allow bots or unofficial clients on their platform, so this shouldn't be considered totally safe" |
| OK EXTERNAL line 119 DiscordChatExporter README: automating user accounts is against Discord TOS | OK EXTERNAL line 121 DiscordChatExporter README: automating user accounts is against Discord TOS |
| "automating user accounts is against Discord TOS and may result in you getting banned" | "automating user accounts is against Discord TOS and may result in you getting banned" |
| OK EXTERNAL line 125 Telegram ToS: scraping prohibited for all users and third parties | OK EXTERNAL line 125 Meta Content Library covers WhatsApp Channels |
| | "provide[s] comprehensive access to the public content archive from Facebook, Instagram and WhatsApp Channels" |
| | OK EXTERNAL line 127 Telegram ToS: scraping prohibited for all users and third parties |
| "Telegram additionally prohibits data scraping as part of its Content Licensing and AI Scraping Terms, which apply to all users, businesses, and third-party serv" | "Telegram additionally prohibits data scraping as part of its Content Licensing and AI Scraping Terms, which apply to all users, businesses, and third-party serv" |
| OK EXTERNAL line 125 Telegram Content Licensing: access beyond ordinary use prohibited | OK EXTERNAL line 127 Telegram Content Licensing: access beyond ordinary use prohibited |
| "Access to user-generated content for any purpose other than ordinary, legitimate, and intended use of the Telegram platform as its user is prohibited" | "Access to user-generated content for any purpose other than ordinary, legitimate, and intended use of the Telegram platform as its user is prohibited" |
| OK EXTERNAL line 125 Telegram API ToS 1.5: no ML training on API data | OK EXTERNAL line 127 Telegram API ToS 1.5: no ML training on API data |
| "prohibited from using, accessing or aggregating data obtained from the Telegram platform to train, fine-tune or otherwise engage in the development" | "prohibited from using, accessing or aggregating data obtained from the Telegram platform to train, fine-tune or otherwise engage in the development" |
| OK EXTERNAL line 125 Telegram self-reports below the VLOP threshold | OK EXTERNAL line 127 Telegram self-reports below the VLOP threshold |
| "significantly fewer than 45 million" | "significantly fewer than 45 million" |
| OK EXTERNAL line 126 WhatsApp ToS: no access or collection through automated means | OK EXTERNAL line 128 WhatsApp ToS: no access or collection through automated means |
| "through automated or other means" | "through automated or other means" |
| OK EXTERNAL line 126 WhatsApp ToS: no collecting information about users in impermissible ways | OK EXTERNAL line 128 WhatsApp ToS: no collecting information about users in impermissible ways |
| "collect information of or about our users in any impermissible or unauthorized manner" | "collect information of or about our users in any impermissible or unauthorized manner" |
| OK EXTERNAL line 126 EC: private messaging stays excluded | OK EXTERNAL line 128 EC: private messaging stays excluded |
| "private messaging service" | "private messaging service" |
| OK EXTERNAL line 127 Discord ToS: no scraping without written consent | OK EXTERNAL line 129 Discord ToS: no scraping without written consent |
| "scraping our services without our written consent" | "scraping our services without our written consent" |
| OK EXTERNAL line 127 Discord Community Guidelines: no self-bots | OK EXTERNAL line 129 Discord Community Guidelines: no self-bots |
| "Do not use self-bots or user-bots" | "Do not use self-bots or user-bots" |
| OK EXTERNAL line 127 Discord Developer Policy: do not mine or scrape | OK EXTERNAL line 129 Discord Developer Policy: do not mine or scrape |
| "Do not mine or scrape any data" | "Do not mine or scrape any data" |
| OK EXTERNAL line 132 FLOOD_WAIT_X: a wait of X seconds is required | OK EXTERNAL line 134 FLOOD_WAIT_X: a wait of X seconds is required |
| "A wait of X seconds is required" | "A wait of X seconds is required" |
| OK paper.cols.txt line 132 roy2025_darkgram | OK paper.cols.txt line 134 roy2025_darkgram |
| "at 10-minute intervals to capture new posts while adhering to the API rate limits" | "at 10-minute intervals to capture new posts while adhering to the API rate limits" |
| OK paper.cols.txt line 133 vu2025_assessing | OK paper.cols.txt line 135 vu2025_assessing |
| "often banned rapidly by Discord" | "often banned rapidly by Discord" |
| OK pypdf line 140 schrittwieser2012_guess | OK pypdf line 142 schrittwieser2012_guess |
| "the WhatsApp server did not prevent us from uploading ten million phone numbers and returned 21095 valid phone numbers" | "the WhatsApp server did not prevent us from uploading ten million phone numbers and returned 21095 valid phone numbers" |
| OK paper.cols.txt line 141 hagen2021_numbers | OK paper.cols.txt line 143 hagen2021_numbers |
| "accounts get banned when excessively using the contact discovery service" | "accounts get banned when excessively using the contact discovery service" |
| OK pypdf line 143 gegenhuber2026_there | OK pypdf line 145 gegenhuber2026_there |
| "We encountered no rate limits, our accounts were not banned from the platform" | "We encountered no rate limits, our accounts were not banned from the platform" |
| OK paper.cols.txt line 157 kireev2025_characterizing | OK paper.cols.txt line 159 kireev2025_characterizing |
| "never interacted with the channels" | "never interacted with the channels" |
| OK paper.cols.txt line 163 marjanov2026_stayin | OK paper.cols.txt line 165 marjanov2026_stayin |
| "We do not lie or pretend to be an interested buyer to be admitted into groups. We also do not attempt to join any groups that require payments or vouching by an" | "We do not lie or pretend to be an interested buyer to be admitted into groups. We also do not attempt to join any groups that require payments or vouching by an" |
| OK paper.cols.txt line 163 he2025_unmasking | OK paper.cols.txt line 165 he2025_unmasking |
| "joined several related Telegram groups" | "joined several related Telegram groups" |
| OK paper.cols.txt line 163 he2025_unmasking | OK paper.cols.txt line 165 he2025_unmasking |
| "communicated with operators, acquired wallet drainers" | "communicated with operators, acquired wallet drainers" |
| OK paper.cols.txt line 164 vu2025_assessing | OK paper.cols.txt line 166 vu2025_assessing |
| "sending thousands of messages could be regarded as spamming" | "sending thousands of messages could be regarded as spamming" |
| OK paper.cols.txt line 165 roy2025_darkgram | OK paper.cols.txt line 167 roy2025_darkgram |
| "we did not download or read the payload files" | "we did not download or read the payload files" |
| OK pypdf line 166 marjanov2026_stayin | OK pypdf line 168 marjanov2026_stayin |
| "to avoid sending stolen and potentially sensitive data to third-party servers" | "to avoid sending stolen and potentially sensitive data to third-party servers" |
| OK pypdf+dehyph line 167 li2025_investigating | OK paper.cols.txt line 168 roy2025_darkgram |
| | "we utilized the GPT-4 API" |
| | OK pypdf+dehyph line 169 li2025_investigating |
| "Although PWUD is also active in other online communities such as Telegram groups and self-constructed forums, for ethical reasons, we limited our online data co" | "Although PWUD is also active in other online communities such as Telegram groups and self-constructed forums, for ethical reasons, we limited our online data co" |
| OK paper.cols.txt line 169 albrecht2021_collective | OK paper.cols.txt line 171 albrecht2021_collective |
| "all participants in our study also assumed police monitoring of the public Telegram groups" | "all participants in our study also assumed police monitoring of the public Telegram groups" |
| OK EXTERNAL line 171 Barbosa and Milan 2019: avoid by all means covert bypasses | OK EXTERNAL line 173 Barbosa and Milan 2019: avoid by all means covert bypasses |
| "by all means covert bypasses" | "by all means covert bypasses" |
| OK paper.cols.txt line 260 hoseini2020_demystifying | OK paper.cols.txt line 262 hoseini2020_demystifying |
| "exposes at least one social media account for 30% of the Discord users we monitored" | "exposes at least one social media account for 30% of the Discord users we monitored" |
| OK paper.cols.txt line 263 roy2025_darkgram | OK paper.cols.txt line 265 roy2025_darkgram |
| "only 64 channels (19%) were removed" | "only 64 channels (19%) were removed" |
| OK paper.cols.txt line 263 roy2025_darkgram | OK paper.cols.txt line 265 roy2025_darkgram |
| "led to the removal of all 196 channels, with a median response time of 4 days" | "led to the removal of all 196 channels, with a median response time of 4 days" |
| OK paper.cols.txt line 264 gao2026_doxing | OK paper.cols.txt line 266 gao2026_doxing |
| "over 300,000 unique individuals" | "over 300,000 unique individuals" |
| OK pypdf line 266 saha2021_short | OK pypdf line 268 saha2021_short |
| "8% of these fear speech users are also admins in the groups where they post fear speech" | "8% of these fear speech users are also admins in the groups where they post fear speech" |
| spans: 64; by route: EXTERNAL 23, paper.cols.txt 34, paper.cols.txt+lig 1, NOT-A-QUOTE 1, pypdf 4, pypdf+dehyph 1 | spans: 68; by route: EXTERNAL 25, paper.cols.txt 36, paper.cols.txt+lig 1, NOT-A-QUOTE 1, pypdf 4, pypdf+dehyph 1 |
| |
| == B. Per-paper figures == | == B. Per-paper figures == |
| OK paper.cols.txt vu2025_assessing | Discord channels monitored too | OK paper.cols.txt vu2025_assessing | Discord channels monitored too |
| "Booters may use Discord; we also monitored these channels" | "Booters may use Discord; we also monitored these channels" |
| | OK paper.cols.txt kireev2025_characterizing | over 80% removed by moderators |
| | "more than 80% of propaganda messages removed" |
| | OK paper.cols.txt kireev2025_characterizing | below 20% removed |
| | "ranging from below 20%" |
| | OK paper.cols.txt guo2024_moderating | manual collection |
| | "constrained by a manually collected dataset" |
| | OK paper.cols.txt roy2025_darkgram | 11,800 posts to the GPT-4 API |
| | "across all the 11,800 posts identified by the classifier, we utilized the GPT-4 API" |
| OK paper.cols.txt xu2019_anatomy | 300+ channels | OK paper.cols.txt xu2019_anatomy | 300+ channels |
| "we trace the message history of over 300 Telegram channels" | "we trace the message history of over 300 Telegram channels" |
| OK paper.cols.txt WEAK yu2024_listen | yu2024: Discord named (weak by design; role checked in the hand codes) | OK paper.cols.txt WEAK yu2024_listen | yu2024: Discord named (weak by design; role checked in the hand codes) |
| "Discord" | "Discord" |
| needles: 79; by route: paper.cols.txt 67, pypdf 12; weak (<20 chars): 4 | needles: 83; by route: paper.cols.txt 71, pypdf 12; weak (<20 chars): 4 |
| |
| === EXTERNAL FIGURES (non-corpus; each re-fetched by external_checks_messaging_channels.sh — see its labels) === | === EXTERNAL FIGURES (non-corpus; each re-fetched by external_checks_messaging_channels.sh — see its labels) === |
| pw https://support.discord.com/hc/en-us/articles/360030843331-Enabling-Server-Discovery $TMP/dc_disc.txt | pw https://support.discord.com/hc/en-us/articles/360030843331-Enabling-Server-Discovery $TMP/dc_disc.txt |
| check 'Discord Server Discovery needs 1,000 members' $TMP/dc_disc.txt 'at least 1,000 members' | check 'Discord Server Discovery needs 1,000 members' $TMP/dc_disc.txt 'at least 1,000 members' |
| | |
| | pw https://transparency.meta.com/researchtools/meta-content-library/ $TMP/meta_mcl.html |
| | check_raw 'Meta Content Library covers WhatsApp Channels' $TMP/meta_mcl.html 'provide comprehensive access to the public content archive from Facebook, Instagram and WhatsApp Channels' |
| | get https://core.telegram.org/bots/features $TMP/tg_botfeat.html |
| | check 'Telegram bots: privacy mode on by default unless added as admin' $TMP/tg_botfeat.html 'Privacy mode is enabled by default for all bots, except bots that were added to a group as admins' |
| |
| echo; echo "== 3. Telegram API limits ==" | echo; echo "== 3. Telegram API limits ==" |
| |
| <file text external_checks_messaging_channels-output.txt> | <file text external_checks_messaging_channels-output.txt> |
| run: 2026-09-27T12:23Z | run: 2026-09-27T12:35Z |
| |
| == 1. Client tooling (GitHub / Codeberg / PyPI / npm / Go proxy) == | == 1. Client tooling (GitHub / Codeberg / PyPI / npm / Go proxy) == |
| |
| == 2. Terms == | == 2. Terms == |
| GET https://telegram.org/tos/content-licensing -> 8333 bytes | GET https://telegram.org/tos/content-licensing -> 8332 bytes |
| > upload, share and view content in public and private chats. Access to user-generated content for any purpose other than ordinary, legitimate, and intended use of the Telegram platform as its user is prohibited. As a limited exception, Telegram permits access to data re | > upload, share and view content in public and private chats. Access to user-generated content for any purpose other than ordinary, legitimate, and intended use of the Telegram platform as its user is prohibited. As a limited exception, Telegram permits access to data re |
| OK Telegram Content Licensing: access beyond ordinary use prohibited | OK Telegram Content Licensing: access beyond ordinary use prohibited |
| > ateway API , Telegram API Developers , and Bot Developers . Telegram additionally prohibits data scraping as part of its Content Licensing and AI Scraping Terms , which apply to all users, businesses, and third-party services accessing the platform. Terms of Service for Telegram Stars Telegram users can acq | > ateway API , Telegram API Developers , and Bot Developers . Telegram additionally prohibits data scraping as part of its Content Licensing and AI Scraping Terms , which apply to all users, businesses, and third-party services accessing the platform. Terms of Service for Telegram Stars Telegram users can acq |
| OK Telegram ToS: scraping prohibited for all users and third parties | OK Telegram ToS: scraping prohibited for all users and third parties |
| GET https://core.telegram.org/api/terms -> 10293 bytes | GET https://core.telegram.org/api/terms -> 10294 bytes |
| > ce for Content Licensing and AI Scraping . As such, you are prohibited from using, accessing or aggregating data obtained from the Telegram platform to train, fine-tune or otherwise engage in the development, enhancement or deployment of artificial intelligence, mach | > ce for Content Licensing and AI Scraping . As such, you are prohibited from using, accessing or aggregating data obtained from the Telegram platform to train, fine-tune or otherwise engage in the development, enhancement or deployment of artificial intelligence, mach |
| OK Telegram API ToS 1.5: no ML training on API data | OK Telegram API ToS 1.5: no ML training on API data |
| > ounts that log in using unofficial Telegram API clients are automatically put under observation to avoid violations of the Terms of Service . If you didn't | > ounts that log in using unofficial Telegram API clients are automatically put under observation to avoid violations of the Terms of Service . If you didn't |
| OK Telegram: unofficial-client logins put under observation | OK Telegram: unofficial-client logins put under observation |
| GET https://telegram.org/tour/channels -> 29885 bytes | GET https://telegram.org/tour/channels -> 29886 bytes |
| > vate – but you can edit their profile to make them public . The contents of public channels can be seen on the Web without a Telegram account and are indexed by search engines. For example, try t.me/s/ | > vate – but you can edit their profile to make them public . The contents of public channels can be seen on the Web without a Telegram account and are indexed by search engines. For example, try t.me/s/ |
| OK Telegram documents the public-channel web preview | OK Telegram documents the public-channel web preview |
| GET https://t.me/s/telegram -> 127695 bytes | GET https://t.me/s/telegram -> 127690 bytes |
| > data-before="441"></a></div><div class="tgme_widget_message_wrap js-widget_message_wrap"><div class="tgm | > data-before="441"></a></div><div class="tgme_widget_message_wrap js-widget_message_wrap"><div class="tgm |
| OK t.me/s/<channel> serves channel posts | OK t.me/s/<channel> serves channel posts |
| > Very Telegram. Wow. "> <link rel="prev" href="/s/telegram?before=441"> <link rel="canonical" href="/s/telegra | > Very Telegram. Wow. "> <link rel="prev" href="/s/telegram?before=441"> <link rel="canonical" href="/s/telegra |
| OK t.me/s/<channel> paginates with ?before= | OK t.me/s/<channel> paginates with ?before= |
| PW https://www.whatsapp.com/legal/terms-of-service -> 262682 bytes | PW https://www.whatsapp.com/legal/terms-of-service -> 262683 bytes |
| > . You must not (or assist others to) directly, indirectly, through automated or other means, access, use, copy, adapt, modify, prepare derivative works based upon, distri | > . You must not (or assist others to) directly, indirectly, through automated or other means, access, use, copy, adapt, modify, prepare derivative works based upon, distri |
| OK WhatsApp ToS: no access or collection through automated means | OK WhatsApp ToS: no access or collection through automated means |
| > e our Platform Manipulation Policy Explainer for more.) 14. Do not use self-bots or user-bots. Each account must be associated with a human, not a bot. ( | > e our Platform Manipulation Policy Explainer for more.) 14. Do not use self-bots or user-bots. Each account must be associated with a human, not a bot. ( |
| OK Discord Community Guidelines: no self-bots | OK Discord Community Guidelines: no self-bots |
| PW https://support-dev.discord.com/hc/en-us/articles/8563934450327-Discord-Developer-Policy -> 157305 bytes | PW https://support-dev.discord.com/hc/en-us/articles/8563934450327-Discord-Developer-Policy -> 157304 bytes |
| > engineer API Data from the form in which you obtain it. 20. Do not mine or scrape any data, content, or information available on or through Discord se | > engineer API Data from the form in which you obtain it. 20. Do not mine or scrape any data, content, or information available on or through Discord se |
| OK Discord Developer Policy: do not mine or scrape | OK Discord Developer Policy: do not mine or scrape |
| > Discord services (as defined in our Terms of Service). 21. Do not use message content obtained through the APIs to train machine learning or AI models (including large language models) unless expre | > Discord services (as defined in our Terms of Service). 21. Do not use message content obtained through the APIs to train machine learning or AI models (including large language models) unless expre |
| OK Discord Developer Policy: no ML training on message content | OK Discord Developer Policy: no ML training on message content |
| PW https://support.discord.com/hc/en-us/articles/208866998-Invites-101 -> 142202 bytes | PW https://support.discord.com/hc/en-us/articles/208866998-Invites-101 -> 142204 bytes |
| > sages or copy the invite link. The invite panel will appear displaying a 7 days access link by default if you haven't already adjusted the invite settings for tha | > sages or copy the invite link. The invite panel will appear displaying a 7 days access link by default if you haven't already adjusted the invite settings for tha |
| OK Discord invites default to 7 days | OK Discord invites default to 7 days |
| PW https://support.discord.com/hc/en-us/articles/360030843331-Enabling-Server-Discovery -> 146311 bytes | PW https://support.discord.com/hc/en-us/articles/360030843331-Enabling-Server-Discovery -> 146310 bytes |
| > afety requirements for a safe environment. Server must have at least 1,000 members to qualify. Servers need to be at least 8 weeks old to be i | > afety requirements for a safe environment. Server must have at least 1,000 members to qualify. Servers need to be at least 8 weeks old to be i |
| OK Discord Server Discovery needs 1,000 members | OK Discord Server Discovery needs 1,000 members |
| | PW https://transparency.meta.com/researchtools/meta-content-library/ -> 685212 bytes |
| | > Content Library and Content Library API provide comprehensive access to the public content archive from Facebook, Instagram and WhatsApp Channels. Individuals can apply for access using |
| | OK Meta Content Library covers WhatsApp Channels |
| | GET https://core.telegram.org/bots/features -> 116993 bytes |
| | > chats. All messages from channels where they are a member. Privacy mode is enabled by default for all bots, except bots that were added to a group as admins (bot admins always receive all messages ). It can be disabl |
| | OK Telegram bots: privacy mode on by default unless added as admin |
| |
| == 3. Telegram API limits == | == 3. Telegram API limits == |
| GET https://core.telegram.org/api/config -> 181820 bytes | GET https://core.telegram.org/api/config -> 181819 bytes |
| > drawal_enabled ": true, " channel_wallpaper_level_min ": 9, " channels_limit_default ": 500, " channels_limit_premium ": 1000, " channels_public_limit_ | > drawal_enabled ": true, " channel_wallpaper_level_min ": 9, " channels_limit_default ": 500, " channels_limit_premium ": 1000, " channels_public_limit_ |
| OK Telegram default join limit 500 channels/supergroups | OK Telegram default join limit 500 channels/supergroups |
| > https://t.me/durov/343"><time datetime="2024-09-06T13:52:50+00:00" class="datetime">Sep 6, | > https://t.me/durov/343"><time datetime="2024-09-06T13:52:50+00:00" class="datetime">Sep 6, |
| OK durov/343 dated 2024-09-06 | OK durov/343 dated 2024-09-06 |
| GET https://t.me/durov/345?embed=1 -> 17334 bytes | GET https://t.me/durov/345?embed=1 -> 17335 bytes |
| > e consistent across the world. We've made it clear that the IP addresses and phone numbers of those who violate our rules can be disclosed to relevant authorities in response to valid legal requests | > e consistent across the world. We've made it clear that the IP addresses and phone numbers of those who violate our rules can be disclosed to relevant authorities in response to valid legal requests |
| OK Search clean-up + IP/phone disclosure (Durov, 2024-09-23) | OK Search clean-up + IP/phone disclosure (Durov, 2024-09-23) |
| > Find Telegram channels for advertising placement Telemetrio has 7M+ channels categorized into 41 categories Search channels by keywords | > Find Telegram channels for advertising placement Telemetrio has 7M+ channels categorized into 41 categories Search channels by keywords |
| OK Telemetr.io (Web Archive 2026-09-26): 7M+ channels | OK Telemetr.io (Web Archive 2026-09-26): 7M+ channels |
| PW https://disboard.org/ -> 407293 bytes | PW https://disboard.org/ -> 408712 bytes |
| > admin? Add Your Server! DISBOARD is the place where you can list/find Discord servers . Find and join some awesome servers listed here. Or login | > admin? Add Your Server! DISBOARD is the place where you can list/find Discord servers . Find and join some awesome servers listed here. Or login |
| OK Disboard is a self-listing directory | OK Disboard is a self-listing directory |