Wikipedia
testwiki
https://test.wikipedia.org/wiki/Main_Page
MediaWiki 1.46.0-wmf.23
first-letter
Media
Special
Talk
User
User talk
Wikipedia
Wikipedia talk
File
File talk
MediaWiki
MediaWiki talk
Template
Template talk
Help
Help talk
Category
Category talk
Thread
Thread talk
Summary
Summary talk
Test namespace 1
Test namespace 1 talk
Test namespace 2
Test namespace 2 talk
Draft
Draft talk
Campaign
Campaign talk
TimedText
TimedText talk
Module
Module talk
SecurePoll
SecurePoll talk
CNBanner
CNBanner talk
Translations
Translations talk
Event
Event talk
Topic
Newsletter
Newsletter talk
Page028
0
58877
737534
392963
2026-04-10T13:17:25Z
~2026-22170-92
73503
737534
wikitext
text/x-wiki
'''Page028'''
This in test page No. 028
bvggcfguhhgfg
sdjfklsdj test
[[Category:Category with multiple files]]
8is3rjhnh9mfkci7whlo45esmmrkmj0
Balena franca
0
95229
737525
314912
2026-04-10T13:12:21Z
~2026-22170-92
73503
737525
wikitext
text/x-wiki
== {{-ca-}} ==
=== Nom ===
{{ca-nom|f}}
# [[balena franca atlàntica]]
=== Referències ===
* {{ca-dicc|termcat}}
* Test
83xr5ileatxv4qh0koagagnp8bex21o
3APL
0
108741
737530
688276
2026-04-10T13:15:59Z
~2026-22170-92
73503
737530
wikitext
text/x-wiki
{{Underlinked}}
{{Wikifikovat}}
'''3APL (An Abstract Agent Programming Language)''' je [[programovací jazyk]] (a [[Počítačová platforma|platforma]]) pro tvorbu agentů a multi-agentních systémů. Test
Jazyk 3APL byl navržen na [http://www.uu.nl univerzitě v Utrechtu] za účelem ověření konceptu programovacího jazyku, který by umožňoval rychle tvořit softwarové agenty založené na BDI (belief-desire-intention) architektuře. Vývoj v této oblasti v současnosti pokračuje jazykem 2APL (A Practical Agent Programming Language), cílem je dosáhnout jediného univerzálního jazyka pro tvorbu agentů - jazyka 1APL (Single Agent Programming Language).
== Běh programu ==
Jazyk je vzhledem k tomu, o jaký typ jazyka se jedná, interpretovaný. V současné době existují 3 oficiální možnosti, jak spustit program v jazyce 3APL:
* Platforma 3APL postavená na [[Java (platforma)|Javě]] – považována za relativně stabilní, používá se při výuce multi-agentních systému na univerzitě v Utrechtu,
* [[Haskell (programovací jazyk)|Haskell]] interpret jazyka 3APL – prototyp s nepatrnými odlišnostmi – používá se při výuce na MFF UK,
* 3APL-M (Toymaker) – platforma určena pro mobilní zařízení.
== Struktura programu v 3APL ==
=== Základní struktura ===
Jazyk v některých principech vychází z Prologu, jeho vlastnosti se liší v závislosti na platformě. Jazyk není case-sensitive až na následující výjimky:
* akce a proměnná začíná velkým písmenem
* predikát začíná malým písmenem
Program v jazyce 3APL sestává z následujících částí (toto je struktura pro Java verzi, ostatní se mohou v detailech lišit).
Program by každopádně měl začínat určením názvu agenta:
<pre>
PROGRAM "nazev_programu"
</pre>
Pro zpřehlednění programu je možno načíst do BELIEFBASE (viz níže) externí soubor s [[Prolog (programovací jazyk)|Prolog]] [[Predikát (logika)|predikáty]]:
<pre>
LOAD "prolog_soubor.pl"
</pre>
Dále lze v programu specifikovat počáteční belief-bázi, tedy to, co agent na začátku ví o prostředí, ve kterém bude operovat. Jednotlivé znalosti jsou přitom Prologovské predikáty. Obsah belief-báze se během činnosti agenta mění, protože agent prováděním akcí mění prostředí a je si toho vědom.
Následující příklad ukládá do belief-báze predikát, který říká, že agent je na začátku (před spuštěním programu) unavený.
<pre>
BELIEFBASE {
unaveny().
}
</pre>
Další součástí programu je specifikace možných akcí a jejich důsledků na BELIEFBASE agenta. Jedná se pouze o vyčtení možných akcí, podmínek, které musí být splněny, aby se mohly provést a jejich efektů. Nedefinuje se zde žádné schéma uvažování.
Následující kód například popisuje co to znamená "jít spát": když je agent unavený, může jít spát a když se vyspí, tak už není unavený a cítí se dobře. Dále je v kódu uvedena druhá akce - akce "dát si pivo". Když si agent (kdykoli) dá pivo, cítí se dobře, ale na jeho únavu to (zde se jedná možná o příliš velké zjednodušení) nemá vliv.
<pre>
CAPABILITIES {
{ unaveny() } VyspiSe() { NOT unaveny(), dobryPocit() }
{ true } DejPivo() { dobryPocit() }
}
</pre>
Každý agent je navržen za nějakým účelem - tento účel je shrnut do sekce GOALBASE. Jedná se opět o sekci tvořenou Prologovskými predikáty. Cíl je považován za splněný, pokud v něj agent věří (je uložen v BELIEFBASE), potom se cíl odstraní z GOALBASE. V příkladu se náš agent snaží cítit se dobře...
<pre>
GOALBASE {
dobryPocit().
}
</pre>
Je možno také specifikovat počáteční plán agenta, to znamená akce, které má agent naplánovány pro provedení bezprostředně po spuštění programu.
<pre>
PLANBASE {
}
</pre>
Specifikace pravidel popisující způsob dosažení cíle (a pravidla revize plánů) je další důležitou části programu v jazyce 3APL. Má vždy následující syntax:
<pre>
cíl <- strážná_podmínka | { akce }
</pre>
Cíl může být navíc prázdný, podmínka může být true, akce může být složená/jednoduchá/vestavěná...
Příklad pravidel specifikující způsob dosažení cíle (pg-rules) - když se agent necítí dobře, měl by s tím něco dělat (aby se cítil dobře):
<pre>
PG-RULES {
dobryPocit() <- NOT dobryPocit() | { DelejSTimNeco(); }
}
</pre>
Dále je možno určit pravidla pro revizi plánu (pr-rules). Ta umožňují definovat chování agenta v případě, že byla zneplatněna některá z podmínek, která vedla ke stanovení současného plánu, případně je zde možno definovat složené akce pomocí akcí elementárních (tj. těch definovaných v CAPABILITIES) a vestavěných (viz níže).
Příklad - když se agent necítí dobře, tak aby s tím něco dělal, musí se napřed rozhodnout, jaká je příčina a podle toho se buď vyspat, nebo si dát pivo:
<pre>
PR-RULES {
DelejSTimNeco() <- NOT dobryPocit() | {
IF (NOT unaveny()) THEN {
DejPivo();
} ELSE {
VyspiSe();
}
}
}
</pre>
=== Řízení běhu, podmínky, další syntax jazyka ===
Formální specifikaci jazyka 3APL lze nalézt na oficiálních stránkách. Pro základní použití jazyka pravděpodobně stačí následující seznam programátorských konstruktů, které lze v 3APL použít:
* Podmíněný příkaz:
<pre>IF predikat_uspeje THEN { Akce1(); ...; AkceN(); } ELSE { ... }</pre>
* Cyklus:
<pre>WHILE predikat_plati DO { Akce1(); ...; AkceN(); }</pre>
* Konjunkce, disjunkce, negace Prologovských predikátů:
<pre>
predikat1() AND predikat2()
predikat1() OR predikat2()
NOT predikat()
</pre>
=== Vestavěné akce jazyka 3APL ===
==== Komunikace agentů ====
Jazyk 3APL byl od začátku vyvíjen jako jazyk, ve kterém je možno tvořit multi-agentní systémy. Proto jazyk nutně musí obsahovat prostředky pro komunikaci mezi agenty. Je tedy k dispozici funkce <code>Send(agent, typ_zpravy, obsah_zpravy)</code>. Pakliže agent A pošle agentovi B zprávu voláním akce <code>Send(B, X, Y)</code>, uloží se do BELIEFBASE agenta a predikát <code>sent(B,X,Y)</code> a do BELIEFBASE agenta B se uloží <code>received(A,X,Y)</code>. Takto agenti mohou - samozřejmě mají-li definovaná příslušná pravidla v PG-RULES (nebo PR-RULES) - na zprávy (jak přijaté, tak odeslané) reagovat.
==== Prostředí ====
Krom toho, co je "uvnitř" agenta je možno v 3APL pracovat s externím prostředím. To je možno vytvořit např. ve formě Java programu (požadovaný interface je definován v příručce k jazyku). Platforma 3APL postavená na Javě obsahuje standardní prostředí vhodné například pro výuku - prostředí BlockWorld (svět ze čtverečků obsahující stěny, bomby a díru, kde se agent může pohybovat).
Java implementace platformy 3APL má za účelem komunikace s libovolným prostředím k dispozici příkaz <code>Java(nazev_prostredi, akce, navrat)</code> - například ve zmíněným prostředím BlockWorld je možno zjistit bomby v okolí agenta takto: <code>Java("BlockWorld", senseBombs, BOMBS)</code>, kde BOMBS se po provedení akce naplní seznamem dvojic (se souřadnicemi bomb).
== Literatura ==
* Mehdi Dastani, B. van Riemsdijk, F. Dignum, J.J. Meyer: [http://www.cs.uu.nl/3apl/publication/goal.pdf A Programming Language for Cognitive Agents: Goal Directed 3APL] {{Webarchive|url=https://web.archive.org/web/20081031164546/http://www.cs.uu.nl/3apl/publication/goal.pdf |date=2008-10-31 }}, 2003
== Externí odkazy ==
* [http://www.cs.uu.nl/3apl/ Oficiální stránky 3APL] {{Webarchive|url=https://web.archive.org/web/20080112081258/http://www.cs.uu.nl/3apl/ |date=2008-01-12 }}
* [http://www.cs.uu.nl/3apl-m/ Oficiální stránky 3APL-M] {{Webarchive|url=https://web.archive.org/web/20071212205337/http://www.cs.uu.nl/3apl-m/ |date=2007-12-12 }}
* [https://web.archive.org/web/20081015102144/http://joshis.iprofil.cz/clanky-teoreticka-informatika Seriál o programování agentů v jazyce 3APL]
* [http://www.cs.uu.nl/3apl/download/java/userguide.pdf Programátorský manuál jazyka 3APL (Java Verze)] {{Webarchive|url=https://web.archive.org/web/20061017075607/http://www.cs.uu.nl/3apl/download/java/userguide.pdf |date=2006-10-17 }}
* [http://www.cs.uu.nl/3apl/bnf.pdf EBNF Specifikace Syntaxe 3APL] {{Webarchive|url=https://web.archive.org/web/20061218073742/http://www.cs.uu.nl/3apl/bnf.pdf |date=2006-12-18 }}
* [http://www.cs.uu.nl/3apl/publications.html 3APL Publikace - seznam]
[[Kategorie:Programovací jazyky]]
ske4g756inyeq9o3n5gwy22hfs7n6cu
Dušníky nad Vltavou
0
108748
737528
737373
2026-04-10T13:15:34Z
~2026-22170-92
73503
737528
wikitext
text/x-wiki
Kronika obce Hostín zmiňuje ještě povodeň v roce 1772, po které následovala nouze a hlad, a povodeň roku 1900 (kolem 9. 4.). K větší povodni, kterou dušnický kronikář v přehledu opominul, patří i povodeň roku 1940, která v Dušníkách zaplavila cesty a pole i chmelnice, do vsi se však nedostala. Podle dostupných údajů se vůbec nejničivějšími povodněmi (pro Prahu a pravděpodobně i pro celé dolní Povltaví) jeví povodně z roku 1432 a 1784<ref>{{Citace monografie
| příjmení = Státníková
| jméno = Pavla
| příjmení2 =
| jméno2 =
| titul = Zmizelá Praha. Povodně a záplavy.
| vydání =
| vydavatel = Paseka
| místo =
| rok = 2012
| počet stran =
| strany =
| isbn =
}}</ref>. Test
=== Ochrana proti povodním ===
Jakkoli to není při zběžném pohledu patrné, Dušníky leží na nevysokém ostrohu. Při menších povodních voda sice překonala hráze a dostala se do polí, chmelnic a zahrad, ale neohrozila obydlí. V případě stoletých vod obyvatelé zpravidla nacházeli útočiště ve statku čp. 10, nejvýše položeném. Jako částečná ochrana před povodněmi sloužily snad i tarasy (v katastru je doloženo pomístní jméno Na tarase, Na Taradii), nasucho stavěné zídky střídané hliněnými náspy. Protipovodňová opatření zesilovala od 18. století. Od poloviny 18. století se věnovali stavbě dřevěných vzpěr břehů také majitelé panství Chotkové, vzpěry byly nazývány jako sruby (dokladem je snad pomístní jméno Na zdrubech) a kobyly.
V roce 1785 tak vznikl také plán regulace Vltavy na zdejším panství od Františka Hegra, který zahrnuje regulaci toku, prorážení poloostrovů i budování hrází. Po roce 1816 docházelo k dalším průkopům a regulacím na dolní Vltavě, v dolním Povltaví pod taktovkou navigačního ředitele Gerstnera. Další úpravy a opravu dušnické hráze si vyžádala povodeň z roku 1862 (práce proběhly o sedm let později) a pak také následující z roku 1890 (opravy v roce 1896).
Po vybudování tzv. Vltavské kaskády (1930–1959) se dařilo po desetiletí tok Vltavy regulovat, a tak další „stoletá“ povodeň následovala po události 1890 se zpožděním, až v roce 2002. Přinesla však po moravských povodních z devadesátých let 20. století další „civilizační šok“. V roce 2013, patrně i díky lepší připravenosti vodohospodářů, neměla povodeň tak ničivé následky a byla hodnocena jako voda dvacetiletá nebo padesátiletá. Přesto povodeň téměř zničila nový dálniční most vystavený nad silnicí spojující Všestudy s Dušníky, který byl postaven po povodni z roku 2002. Popovodňová opatření zahrnovala především opravy protržených hrází a čištění (prohlubování koryta), ke znovuzakládání mokřadů v dolním Povltaví nedochází, nedaří se ani stavba vyšší hráze u obce Zálezlice (patřila roku 2002 a 2013 k nejvíce postiženým), zejména kvůli vlastnickým sporům.
=== Proměny řečiště Vltavy v dolním Povltaví ===
Vltava měnila koryto i v posledních staletích. V letech 1667–1683 například změnila řeka řečiště od Zelčína k Doničkám, pobořila kostel v Doničkách a roku 1798 byly z něho již jen zříceniny, přitom ves zanikla zcela. Při povodních roku 1700 de facto zanikla část blízké vsi Ouholice. Nejvýznamnější změnou pro Dušníky byl zánik „pravého“ vltavského ramene, které fungovalo v té době jako rameno hlavní, odbočovalo ve Veltrusích a vracelo se zčásti v oblasti Kubantova, vytvářeje ostrov. Rameno zčásti pokračovalo přes Vojkovice, patrně vedeno ostrohem zvaným Hebron. V 80. letech 18. století už muselo být původně hlavní rameno ve veltruském parku uměle napájeno vodou z řeky, aby si park uchoval kouzlo vodou protkané krajiny. Při pozdějších povodních se řeka vracela do starých řečišť a poškozovala stavby a hráze po svém původním toku, tedy i na dušnickém "Kubantově". Tůně v okolí vsi měnily tvar, vznikaly a zanikaly, některé z nich byly později zasypány. Například na louce při Vltavě od dušnického přívoznického domku výš proti proudu se nacházely až do roku 1904 tůňky. Při provádění kanalizace Vltavy byly zasypány výkopem materiálu z jezu u Vraňan.
=== Záznamy o povodních v Dušníkách ===
==== 18. století ====
Ve starších historických záznamech se dochovaly zápisy o povodních v Dušníkách jen sporadicky.
V roce 1752 hlásí vrchnosti velkou škodu na polích dušnický rychtář Matěj Pokorný s tím, že mu zbylo k užitku po velké povodni jen 45 ze 100 strychů polí.
Farní pamětní kniha v Lužci nad Vltavou připomíná velkou povodeň roku 1768, kdy se rozlila voda, když se nastavil led v Lužci, po celém okolí: Bukol, Hostín, Vojkovice, Křivousy, Jedibaby, Dušníky nad Vltavou byly zatopeny.
[[Soubor:Ledové kry ve Veltrusích.jpg|náhled|Ledové kry ve Veltrusích ]]
Podobné události se připomínají roku 1769, 1771 a 1773, kdy opět celá krajina až do Ouholic a Hostíně byla zatopena.
Dobře jsou dochovány zprávy o výjimečných povodních let 1784 a 1785. Lidový kronikář Pražák z Ouholic si mj. zapsal: „Roku 1783 začala počátkem prosince krutá zima a trvala nepřetržitě až do 15. února 1784. Led na Vltavě dosáhl 3/4 lokte síly. Velmi často hřmělo a blýskalo se, načež 27. února hnul se náhle led, způsobil povodeň, takže mnohé pobřežní dědiny pohubil. … V roce 1785 byla velkou vodou protržena dušnická hráz u Všestud.“ Při těchto povodních (zejména té první, ledové a smíšené) zaniklo v dolním Povltaví hned několik vesnic a řeka částečně změnila průběh toku (koryta). Ostatně povodeň roku 1784 pustošila přírodu a sídla v mnoha povodích v celé Evropě (Dunaj, Odra, Labe, Rýn, Seina, Máza, Loira) a měla na svědomí stržení několika pilířů pražského Karlova mostu.
„Roku 1799“ píše ouholický kronikář Hodek, „byla veliká povodeň s ledem, který zase náramně silný led s hřmotem dne 23. fevruára se strhnul a voda okolo pivováru šla a všady ledy s sebou nesla. U nás u sloupu zvonečkového, který stál proti č. 13 na 1/4 lokte vystoupila a opět v zahradách a gruntech dosti škody způsobila, protože když opadla a zem roztála, zase silné mrazy přešly, zkrze které mnoho stromů, zvlášť švestkových v kořenech nejlepším užitkem zmrzlo a poschlo. Příčinou tak časté velké vody jest, že je od ostrovské (veltruské) strany všechna na naši stranu sehnána a sevřena ledy.“
==== 19. století ====
Kronikáři také popisují ledové zácpy, které se opakovaly ve 40. letech 19. století od ledna do března a nesly velké nebezpečí: obrovské kusy ledu strhávaly břehy, pak znovu zamrzaly, tály a takto ztuhlé obrovské kry ohrožovaly celé okolí řek. Lidé opětovně zamrzlý povrch místy prosekávali a uvolňovali, aby se náplava ledu (obvykle se hromadící v ohybech řeky, tedy právě u Dušník) mohla volně odtéct.
[[Soubor:05-04-29-kronika-povoden1890.jpg|vlevo|náhled|Po povodni roku 1890 u dušnických tůní|alt=foto vlastní rodinný archiv]]
Ke smíšené a ledové povodni roku 1845 uvádí hostínský kronikář Vorlíček: „A co vesnic je vod Prahy až pod Mělník, a kde ještě za Mělníkem až k Litoměřicům, pořád ta voda je zatopila. Tak se rozmohla až do Chvatěrub, šla starými řečišťaty až do Veltrus a tam stavení pobořila a odtud se rozlila až pod Zlosyň, až do Vojkovic, takže Vojkovice ze všech stran vodou byly obklíčeny. U Dušník byly všechny hráze ztrhaný a pole strhaný a některý pískem aneb šutrem zanešený, takže sedláci mnoho set za to platit musili, aby jim to lidé vyvezli.“ Ouholický sedlák Pražák k této velké vodě kromě jiného uvedl: „Kubantov se podobal pískové poušti, neboť protržením dušnické hráze tam dostala voda hrozně prudký běh a tím tolik písku tam nanesla, že nebylo ani pomyšlení poznati meze neb hranice svého pozemku, tím méně snad chmelné řádky neb nějaké zaseté obilí… Po této povodni byly konané v celém mocnářství sbírky pro obce povodní poškozené. Do naší obce se však málo dostalo, bezpochyby proto, že jsme nevěděli u koho se včas hlásit. V Dušníkách byli již v této věci šťastnější, neboť vlastník č. 10 v Dušníkách dostal almužnu 1800 zlatých.“
Při únorové povodni roku 1862, která byla způsobena silnými dešti a rychlou oblevou, u Kralup vzala voda 30 [[sáh]]ů kolejí a trať musela být přeložena. Taktéž o deset let později, roku 1872, povodeň ničila a opětovně vytvořila jezero od Dušník k soutoku Vltavy s Labem. Zimní povodně napáchaly škody v polích zejména tím, že přinášely množství materiálu, písku a štěrku, a tím pole znehodnocovaly, naplavené dříví také ničilo konstrukce chmelnic a stromy.
Povodeň z roku 1872 měla charakter povodně bleskové, která přichází bez předchozího očekávání (ne po dlouhé a na sníh bohaté zimě), zpravidla vinou přívalových srážek.Nejvíce zasáhla povodí Berounky, kde způsobila stovky (!) ztrát na životech. Její síla v dolním Povltaví nebyla tak ničivá.
Větší následky pro obyvatele měly obecně právě povodně jarní a letní, při kterých byla znehodnocena veškerá úroda, jako v roce 1890, kdy jezero počínající u Dušník dosahovalo až k Neratovicím. Podle pamětnice Rosalie Králové za povodně roku 1890 voda stoupla tak, že zatopila i stavení přívozníka č. 6, takže musel odvést kozy do statku č. 10 na dvůr, kde byl už shromážděn dobytek z celé vsi. Pro chléb se tehdy jezdilo do Vojkovic na loďce. Povodeň se stala velmi "mediálně známou" hlavně vinou fotografie znovu poničeného pražského Karlova mostu, kterou otiskly nejen české noviny.
Povodeň se pak opakovala v menším rozsahu roku 1897 a 1899, kdy 15. září nešťastným pádem při vytahování stavidel za povodně zemřel tehdy šedesátiletý Antonín Bittner, poklasný z Dušník.
==== 20. století ====
Jediné dvě velké dušnické povodně 20. století líčí kronika obce Dušníky:
„10. března 1940 se Vltava též rozvodnila. Toho dne se hnuly ledy, které byly na Vltavě, zejména u Štěchovic, nakupeny. V Dušníkách chybělo jen několik decimetrů, aby se voda přelila přes ochrannou hráz. Zpětná voda Vltavy zaplavila chmelnice mezi řekou a vsí, cesta od přívozu do vsi byla u Herbstovy zahrady pod vodou. Zpětná voda zatopila i obecní silnici Dušníky-Všestudy „v topolách“ a tekla přes chmelnice u silnice, nynější višňovku Fruty k Vojkovicím. Během povodně dušničtí občané byli v pohotovosti a hráz u „společné tůně“ zesilovali pytli písku. Po povodni byla cesta k přívozu opravena, zvýšena, zejména u Herbstovy zahrady a uválcována okresním parním válcem.
V roce 1954 po suchém červnu začalo prvý týden v červenci vydatně pršet. Ve Vltavě začala voda stoupat, vylila se z břehů a dne 10. července dostoupila největší výše, a to asi 1,30 m pod korunu hráze u přívozníkova domku. Opadávání velké vody trvalo týden.“ Povodeň roku 1954 naštěstí zmírnilo rozestavěné vodní dílo Slapy, které značně snížilo kulminaci. Mýtus o kaskádě, která zabrání všem povodním, byl na světě.
==== 21. století ====
[[Povodeň v Česku (2002)|Povodně roku 2002]], které ostatně postihly i další středoevropské země, byly způsobeny dvěma vlnami tlakové níže s nimi spojenými frontálními systémy. Vydatné deště trvaly ve dnech 6.–7. srpna, a to převážně v jižních Čechách, a poté 11.–13. srpna, kdy zasáhly celé povodí Vltavy včetně přítoků Sázavy a Berounky. Obě tlakové níže zasáhly naše území nejdeštivějším sektorem a nadto postupovaly pomalu. Nádrže vltavské kaskády nasycené první vlnou vody z Vltavy a přítoků, kterou dokázaly zvládnout, neodolaly druhé vlně. Vltavská kaskáda přestala vodu zadržovat. Vltava v Praze kulminovala 13. srpna s 782 cm při průtoku 5160 m<sup>3</sup>/s, což odpovídá opakování jednou za 500 let. Poté stupňovitě klesala v souvislosti se snižováním odtoku vltavské [http://www.pvl.cz/files/download/hydrologicke-informace/zpravy-o-povodni/2002-08-zprava-o-povodni.pdf kaskády] {{Webarchive|url=https://web.archive.org/web/20140626101836/http://www.pvl.cz/files/download/hydrologicke-informace/zpravy-o-povodni/2002-08-zprava-o-povodni.pdf |date=2014-06-26 }}.
[[Soubor:Protržená povodňová hráz u Dušník - srpen 2002.jpg|vlevo|náhled|Protržená povodňová hráz u Dušník - srpen 2002]]
Teprve po pražské kulminaci dopadly na naši obec nejtěžší následky povodně. Pražské Staré Město zachránily protipovodňové stěny, dále na sever se Vltava rozlévala do šíře, kdekoli to terén umožnil, tedy i v oblasti severně od Kralup po Mělník.
[[Soubor:Povodeň 2013 Dušníky nad Vltavou.jpg|náhled|Letecký snímek Dušník nad Vltavou při povodni 2013]]
V Dušníkách a okolí byla hráz na několika místech protržena. U Všestud se voda prodrala proudem pod dálničním mostem (dálnice D8), který poškodila tak, že byl na čas zastaven, posléze omezen provoz dálnice. Most byl provizorně opraven a poté zásadním způsobem zpevněn. Veškerá pole a chmelnice byly pod vodou. V Dušníkách byly zaplaveny všechny domy s výjimkou čp. 10 a čp. 11. Veškeré obyvatelstvo bylo evakuováno a týden mohlo sledovat svou ves z protějšího vyvýšeného břehu u Mlčechvost. Při odklízení povodňových škod pomáhali kromě armádních a bezpečnostních složek také dobrovolníci.
Tlaková níže a vydatné srážky včetně přívalových dešťů byly na vině další z povodní, která proběhla povodím Vltavy počátkem června '''2013'''. Květen byl srážkově nadprůměrný a zmíněná vlna dešťů zvýšila už tak zvýšené hladiny toků. Srážky byly v jižních a středních Čechách vydatné a prudké, ke zhoršení situace přispěly drobnější taky a neměřitelné mezipovodí (stráně svažující se přímo do toků), které hrají obvykle při povodních okrajovou roli.
Voda byla v prvních dnech června zadržována vltavskou kaskádou, aby bylo možné připravit hlavní město na největší nápor. 2. června došlo k evakuaci Dušník (odmítli pouze obyvatelé domu čp. [https://www.flickr.com/photos/yancad/sets/72157634030488853/ 12]) a 3. června kulminovala voda v Praze a poté i ve Vraňanech na 785 cm / 3140 m<sup>3</sup> (11:40)[http://www.vsestudy.cz/2013/06/vody-vic-nez-v-roce-2006-a-stale-pribyva/].
Starostové Kralup a Mělníka žádali opakovaně po zajištění Prahy snížení průtoků vltavské kaskády, aby silně zvýšený odtok nepostihl jejich města tak drtivě. Na žádost starosty Kralup nad Vltavou Petra Holečka nakonec ministr zemědělství Petr Bendl rozhodl o snížení odtoku o 400 m<sup>3</sup>/s, čímž mj. pravděpodobně zabránil i zaplavení přízemí více domů v Dušníkách a dalším škodám. V Dušníkách bylo částečně zatopeno přízemí dvou domů, zahrady a [https://www.facebook.com/Dusniky/ sklepy]. Voda se opět dostala do vesnice od Dědibab a dále průrvou pod dálničním mostem u Všestud. Most, zpevněný v roce 2002, musel být včetně náspů opět opraven v následujících měsících. Voda totiž protrhla násep u Všestud, který nebyl zpevněn, a následný silný proud vymlel násep pod vozovkou u jedné části mostu tak, že odkryl až základy. Nakonec byly základy zpevněny a doplněny a násep u Všestud vybudován zcela nový s využitím železných [https://www.flickr.com/photos/yancad/sets/72157642751617153 prvků]. [https://www.rsd.cz/wps/portal/web/rsd/vyhledavani/!ut/p/a1/jZHNToNAFIWfxQXb3kvLn-5g0Bap2KhNYTYNhUlLAkyFAezj-DC-l9PGaNSUMrtJvi_nzBmgEAIt4zbbxiLjZZwf79RY-57vqQ5BfzpBFW3DvZ3o8xdEdSyBSAJ45tj420f0TLQ1x9UXUzJBC7_8H8AhRAJ3OmqLAB9tbVg-mdozzZzLRM0ao-c6M9e8fpBpxjC_p-AFfwX0hPQ1OAF9E_0Z6d8G90C3Od-c_iPaCbG_UVDBrutG2aYYJbxQMOeiqRWsWVwlO6A5T-KcQcjKwcprw6oDhO3HO6tFkx4gktOYZ98-M2DVZqyD52P_mjdVwggvBStFwFO2fmJlyqqL60o14Xvmpd8CRA7QKuI02MK-WC6XIWaLYmUJ6y3QW-_qE5MtXsU!/?urile=wcm:path%3A%2FPortal%2BSite%2FZ6_000000000000000000000000A0%2FZ6_CGAH47L0004820IDBHD79M00I6%2FZ6_KIKI1BC0K0BCC0A4F504PN0OA4%2FZ6_KIKI1BC0K83A70A47PA5RD1086%2F89e3e893-b723-4736-acc8-70c8464159ae] {{Webarchive|url=https://web.archive.org/web/20200607035715/https://www.rsd.cz/wps/portal/web/rsd/vyhledavani/%21ut/p/a1/jZHNToNAFIWfxQXb3kvLn-5g0Bap2KhNYTYNhUlLAkyFAezj-DC-l9PGaNSUMrtJvi_nzBmgEAIt4zbbxiLjZZwf79RY-57vqQ5BfzpBFW3DvZ3o8xdEdSyBSAJ45tj420f0TLQ1x9UXUzJBC7_8H8AhRAJ3OmqLAB9tbVg-mdozzZzLRM0ao-c6M9e8fpBpxjC_p-AFfwX0hPQ1OAF9E_0Z6d8G90C3Od-c_iPaCbG_UVDBrutG2aYYJbxQMOeiqRWsWVwlO6A5T-KcQcjKwcprw6oDhO3HO6tFkx4gktOYZ98-M2DVZqyD52P_mjdVwggvBStFwFO2fmJlyqqL60o14Xvmpd8CRA7QKuI02MK-WC6XIWaLYmUJ6y3QW-_qE5MtXsU%21/?urile=wcm%3Apath%3A%2FPortal%2BSite%2FZ6_000000000000000000000000A0%2FZ6_CGAH47L0004820IDBHD79M00I6%2FZ6_KIKI1BC0K0BCC0A4F504PN0OA4%2FZ6_KIKI1BC0K83A70A47PA5RD1086%2F89e3e893-b723-4736-acc8-70c8464159ae |date=2020-06-07 }}
== Doprava ==
Obcí prochází silnice III/10151.
Dušníky leží asi 7 km od exitu „Uhy“ – dálnice [http://www.ceskedalnice.cz/dalnice/d8/ D8] – jsou tedy dopravně dobře dostupné. Hromadnou dopravu obstarávají autobusy PID č. 473 – v pracovní dny celkem 7 spojů směrem na Kralupy nad Vltavou, o víkendu bez autobusového spojení. Poříční přívoz do vsi Vepřek zanikl po roce 1957.
== Turistika ==
Ves se nachází na rušné mezinárodní cyklostezce Praha – Drážďany.
Dušníky jsou přístupné pro pěší nebo cyklisty z veltruského parku (asi 3 km od Červeného mlýna) přes tzv. Kubantov, kdysi překrásnou oblast mezi Mlýnským potokem a Vltavou. Na Kubantově najdeme zbytky lužních porostů, luk, ovocných sadů a vltavských tůní (tzv. rybníčků, které sahají po Dušníky). Pěší turista musí ovšem překonat (podejít) hlučný dálniční most, který oblast znehodnocuje.
Na druhou stranu od Dušníky podél Vltavy lze dojít po hrázi nebo pobřežní polní cestě až k vraňansko-dědibabskému jezu a vodní elektrárně. V ohybu hráze najde pozorný chodec trosky nejzazšího pavilonu veltruského [http://www.vsestudy.cz/2006/02/tajemna-stavba-chotkovsky-altanek/ parku].
Okolí rybníčků a vltavské pobřeží je oblíbeným místem rybářů, konají se zde příležitostně i rybářské závody.
Ve statku čp. 10 byla zřízena v roce 2017 restaurace a penzion.
== Zajímavosti ==
Ve vesnici mají stálou adresu dva spolky, [http://www.dolnipovltavi.cz/ Dolní Povltaví] a [http://havranek.dolnipovltavi.cz/ Rodinné centrum Havránek], na hranici katastru Dušník a Všestud sídlí motorkářské sdružení [https://www.feistypistons.cz Feisty Pistons].
Od roku 2009 Dušníky každoročně na přelomu července a srpna probíhá běžci oblíbený [http://www.mkmirejovice.cz Miřejovický půlmaraton].
V roce 2001 byl zaznamenán případ tornáda na území [http://www.tornada-cz.cz/pripady/vsestudy-okr-melnik:a170.htm Dušník] (poblíž sušárny chmele u dálnice D8). Podle pamětníků se v těchto místech podobné úkazy dějí opakovaně.
[[Soubor:Znak-dušník.png|náhled|165x165pixelů|Neoficiální znak Dušník nad Vltavou od Václava Landsingera]]
V roce 2016 vytvořil Václav Landsinger z Dušník neoficiální znak osady Dušníky, který odkazuje na obecní znak všestudský a připomíná přítomnost Vltavy, chmelařskou tradici i pamětihodnost - zvoničku na návsi.
Ve školní kronice ve Zlosyni je zanesena pověst o vyhubení Vršovců. Podle vypravování Fr. Homolky, rolníka ve Zlosyni, se tradovalo, že u dušnických lesíků byl zavražděn poslední Vršovec. Zejména dušnické děti věřily, že hlubokou Černou tůň za Dušníky hlídá černý pes.
V 19. století a ještě na počátku 20. století byl poštovní úřad pro Dušníky umístěn v Jenišovicích. Transport pošty ale znemožňovala často rozvodněná Vltava a zdržoval přívoz, Dušničtí proto opakovaně žádali o změnu poštovního úřadu, ke které však došlo až po vzniku Československé republiky (dodnes je poštovním úřadem pošta Vojkovice, ačkoliv pro nadřazenou obec Všestudy platí poštovní úřad Veltrusy).
== Odkazy ==
=== Reference ===
<references />
=== Externí odkazy ===
* {{commonscat}}
* [http://dusniky.vsestudy.cz webové stránky]
* [https://www.facebook.com/Dusniky stránka na Facebooku]
{{Pahýl}}
{{Části české obce}}
{{Autoritní data}}
{{Portály|Česko|Geografie}}
[[Kategorie:Všestudy (okres Mělník)]]
[[Kategorie:Vesnice v okrese Mělník]]
[[Kategorie:Svazek obcí Dolní Povltaví]]
[[Kategorie:Sídla ve Středolabské tabuli]]
[[Kategorie:Sídla na Vltavě]]
ljsvdsc9h674zsjhxrnwu2qc1k66z5h
GFAJ-1
0
113498
737531
721752
2026-04-10T13:16:14Z
~2026-22170-92
73503
737531
wikitext
text/x-wiki
{{Use dmy dates|date=April 2020}}
{{Taxobox
| name = GFAJ-1
| image = GFAJ-1 (grown on arsenic).jpg
| image_caption = Magnified cells of bacterium GFAJ-1 grown in medium containing arsenate
| domain = [[Bacteria]]
| phylum = [[Proteobacteria]]
| classis = [[Gammaproteobacteria]]
| ordo = [[Oceanospirillales]]
| familia = [[Halomonadaceae]]
| species =
}}
'''GFAJ-1''' test is a [[strain (biology)|strain]] of [[Bacillus (shape)|rod-shaped]] [[bacteria]] in the family [[Halomonadaceae]]. It is an [[extremophile]] that was isolated from the [[hypersaline]] and [[alkaline]] [[Mono Lake]] in eastern [[California]] by geobiologist [[Felisa Wolfe-Simon]], a NASA [[research fellow]] in residence at the [[US Geological Survey]]. In a 2010 ''[[Science (journal)|Science]]'' journal publication,<ref name="Science">{{cite journal |last1=Wolfe-Simon |first1=Felisa |authorlink=Felisa Wolfe-Simon |last2=Blum |first2=Jodi Switzer |last3=Kulp |first3=Thomas R. |last4=Gordon |first4=Gwyneth W. |last5=Hoeft |first5=Shelley E. |last6=Pett-Ridge |first6=Jennifer |last7=Stolz |first7=John F. |last8=Webb |first8=Samuel M. |last9=Weber |first9=Peter K. |last10=Davies |first10=P. C. W. |last11=Anbar |first11=A. D. |last12=Oremland |first12=R. S. |title=A bacterium that can grow by using arsenic instead of phosphorus |journal=[[Science (journal)|Science]] |date=2 December 2010 |doi=10.1126/science.1197258 |pmid=21127214 |volume=332 |issue=6034 |pages=1163–1166 |display-authors=8 |bibcode=2011Sci...332.1163W |url=https://digital.library.unt.edu/ark:/67531/metadc832429/m2/1/high_res_d/1016932.pdf }}</ref> the authors claimed that the microbe, when starved of [[phosphorus]], is capable of substituting [[arsenic]] for a small percentage of its phosphorus to sustain its growth.<ref name=Alla>{{cite journal
| first=Alla
| last=Katsnelson
| title=Arsenic-eating microbe may redefine chemistry of life
| date=2 December 2010
| url=http://www.nature.com/news/2010/101202/full/news.2010.645.html
| journal=[[Nature News]]
| accessdate=2 December 2010
| doi=10.1038/news.2010.645
}}</ref><ref name='arsenic extremophile'>{{cite news
| title=Arsenic-loving bacteria may help in hunt for alien life
| date=2 December 2010
| url=https://www.bbc.co.uk/news/science-environment-11886943
| newspaper=[[BBC News]]
| accessdate=2 December 2010}}</ref> Immediately after publication, other microbiologists and biochemists expressed doubt about this claim which was robustly criticized in the scientific community. Subsequent independent studies published in 2012 found no detectable arsenate in the DNA of GFAJ-1, refuted the claim, and demonstrated that GFAJ-1 is simply an arsenate-resistant, phosphate-dependent organism.<ref name='refute'>{{cite news | title = Studies refute arsenic bug claim | date = 9 July 2012 | url = https://www.bbc.co.uk/news/science-environment-18770964 | work = BBC News | accessdate = 2012-07-10}}</ref><ref>{{cite journal | title = GFAJ-1 Is an Arsenate-Resistant, Phosphate-Dependent Organism | journal = Science | date = 8 July 2012 | author = Tobias J. Erb | author2 = Patrick Kiefer | author3 = Bodo Hattendorf | author4 = Detlef Gunter | author5 = Julia Vorholt | author5-link=Julia A. Vorholt| doi=10.1126/science.1218455 | pmid=22773139 | volume=337 | issue=6093 | pages=467–70| bibcode=2012Sci...337..467E }}</ref><ref>[http://rrresearch.fieldofscience.com/2012/01/csclmass-spectrometry-data.html RRResearch] By Rosie Redfield. 16 January 2012</ref><ref>{{cite journal | title = Absence of Detectable Arsenate in DNA from Arsenate-Grown GFAJ-1 Cells | journal = Science | date = 8 July 2012 | author = Marshall Louis Reaves |author2=Sunita Sinha |author3=Joshua Rabinowitz |author4=Leonid Kruglyak |author5=Rosemary Redfield |doi=10.1126/science.1219861 | pmid=22773140 | pmc=3845625 | volume=337 | issue=6093 | pages=470–3|arxiv=1201.6643 |bibcode=2012Sci...337..470R }}</ref>
==Discovery==
[[File:503354main Wolfe Simon.jpg|thumb|right|150px|Wolfe-Simon at Mono Lake, 2010]]
The GFAJ-1 bacterium was discovered by [[Geomicrobiology|geomicrobiologist]] [[Felisa Wolfe-Simon]], a [[NASA Astrobiology Institute|NASA]] [[astrobiology]] fellow in residence at the [[US Geological Survey]] in [[Menlo Park, California]].<ref name="nasa">{{cite web
| title=Searching for Alien Life, on Earth
| last=Bortman
| first=Henry
| publisher=Astrobiology Magazine (NASA)
| date=5 October 2009
| accessdate=2 December 2010
| url=http://www.astrobio.net/index.php?option=com_expedition&task=detail&id=3259
}}</ref> GFAJ stands for "Give Felisa a Job".<ref name="WSJ_Davies">{{cite news
| newspaper=[[Wall Street Journal]]
| title=The 'Give Me a Job' Microbe
| last=Davies
| first=Paul
| authorlink=Paul Davies
| date=4 December 2010
| url=https://www.wsj.com/articles/SB10001424052748703989004575652940497021092
| accessdate=5 December 2010
}}</ref> The organism was isolated and [[pure culture|cultured]] beginning in 2009 from samples she and her colleagues collected from sediments at the bottom of [[Mono Lake]], California, U.S.A.<ref name = "Thriving"/> Mono Lake is [[hypersaline]] (about 90 grams/liter) and highly [[alkaline]] ([[pH]] 9.8).<ref name=Oremland2003>{{cite journal
|title=The ecology of arsenic
|journal=[[Science (journal)|Science]]
|last1=Oremland
|first1=Ronald S.
|last2=Stolz
|first2=John F.
|date=9 May 2003
|volume=300
|issue=5621
|pages=939–944
|doi=10.1126/science.1081903
|pmid=12738852
|url=http://www.niehs.nih.gov/news/events/pastmtg/2006/arsenicland/docs/other/OremlandMcrblTrnsfrmtns.pdf
|url-status=dead
|archiveurl=https://web.archive.org/web/20101220202134/http://www.niehs.nih.gov/news/events/pastmtg/2006/arsenicland/docs/other/OremlandMcrblTrnsfrmtns.pdf
|archivedate=20 December 2010
|bibcode=2003Sci...300..939O
}}</ref> It also has one of the highest natural concentrations of [[arsenic]] in the world (200 μ[[Molarity|M]]).<ref name="Science"/> The discovery was widely publicized on 2 December 2010.<ref name=Alla/>
==Taxonomy and phylogeny==
{{cladogram|align=left|title=
| clade=
{{clade
|style=font-size:90%;line-height:90%
| label1=
| 1={{clade
|1={{clade
|1=''[[Escherichia coli]]'' strain [[Escherichia coli O157:H7|O157:H7]]
|2={{clade
|1={{clade
|1={{clade
|1=''[[Halomonas alkaliphila]]''
|2=''[[Halomonas venusta]]'' strain NBSL13
|3='''GFAJ-1'''
|4=''Halomonas'' sp. GTW
|5=''Halomonas'' sp. G27
}}
|2={{clade
|1=''Halomonas'' sp. DH77
|2=''Halomonas'' sp. mp3
}}
}}
|2={{clade
|1=''Halomonas'' sp. IB-O18
|2=''Halomonas'' sp. ML-185
}}
}}
}}
}}
}}
| caption=Phylogeny of GFAJ-1 based on [[ribosomal DNA]] sequences.<ref name="SupportingMaterial">{{cite journal
| author=Wolfe-Simon, Felisa
| title=A bacterium that can grow by using arsenic instead of phosphorus: Supporting online material
| journal=[[Science (journal)|Science]]
| date=2 December 2010
| doi=10.1126/science.1197258
| url=http://www.sciencemag.org/content/suppl/2010/12/01/science.1197258.DC1/Wolfe-Simon-SOM.pdf | pmid=21127214
| display-authors=2
| last2=Blum
| first2=J. S.
| last3=Kulp
| first3=T. R.
| last4=Gordon
| first4=G. W.
| last5=Hoeft
| first5=S. E.
| last6=Pett-Ridge
| first6=J.
| last7=Stolz
| first7=J. F.
| last8=Webb
| first8=S. M.
| last9=Weber
| first9=P. K.
| volume=332
| issue=6034
| pages=1163–1166| bibcode=2011Sci...332.1163W
}}</ref>
}}
[[Molecular phylogenetics|Molecular]] analysis based on [[16S ribosomal RNA|16S rRNA]] sequences shows GFAJ-1 to be closely related to other moderate [[halophile]] ("salt-loving") bacteria of the family [[Halomonadaceae]]. Although the authors produced a [[cladogram]] in which the strain is nested among members of ''[[Halomonas]]'', including ''[[Halomonas alkaliphila|H. alkaliphila]]'' and ''[[Halomonas venusta|H. venusta]]'',<ref name="SupportingMaterial"/> they did not explicitly assign the strain to that genus.<ref name="Science"/><ref name = "Thriving"/> Many bacteria are known to be able to tolerate high levels of arsenic, and to have a proclivity to take it up into their cells.<ref name="Science"/><ref name=Stoltz2006>{{cite journal
| last1=Stolz | first1=John F.
| last2=Basu | first2=Partha
| last3=Santini | first3=Joanne M.
| last4=Oremland | first4=Ronald S.
| s2cid=2575554
| title=Arsenic and selenium in microbial metabolism
| journal=Annual Review of Microbiology
| volume=60 | pages=107–130 | date=2006
| pmid=16704340
| doi=10.1146/annurev.micro.60.080805.142053
}}</ref> However, GFAJ-1 was controversially proposed to go a step further; when starved of phosphorus, it was proposed to instead incorporate arsenic into its metabolites and macromolecules and continue growing.<ref name = "Thriving"/>
The sequence of the genome of the bacterium GFAJ-1 is now posted in [[GenBank]].<ref>
{{cite web |url=https://www.ncbi.nlm.nih.gov/Traces/wgs/?val=AHBC01 |publisher= U.S. National Library of Medicine |title=Halomonas sp. GFAJ-1 |accessdate=11 December 2011}}</ref>
{{Clear}}
===Species or strain===
{{See also|Bacterial taxonomy}}
[[File:Mono Lake 1.JPG|thumb|right|200px|[[Tufa]] formations along the shore of [[Mono Lake]]]]
<!--The aim of the section is to clarify why it is referred to as a strain and not a new species-->
In the ''Science'' journal article, GFAJ-1 is referred to as a [[Strain (biology)|strain]] of Halomonadaceae and not as a new [[species]].<ref name="Science"/> The [[International Code of Nomenclature of Bacteria]], the set of regulations which govern the [[Taxonomy (biology)|taxonomy]]<!--It is actually the nomenclatural part, but this section needs to have little jargon--> of bacteria, and certain articles in the [[International Journal of Systematic and Evolutionary Microbiology]] contain the guidelines and minimal standards to describe a new species, e.g. the minimal standards to describe a member of the ''Halomonadaceae''.<ref>{{Cite journal | last1 = Arahal | first1 = D. R. | last2 = Vreeland | first2 = R. H. | last3 = Litchfield | first3 = C. D. | last4 = Mormile | first4 = M. R. | last5 = Tindall | first5 = B. J. | last6 = Oren | first6 = A. | last7 = Bejar | first7 = V. | last8 = Quesada | first8 = E. | last9 = Ventosa | first9 = A. | doi = 10.1099/ijs.0.65430-0 | title = Recommended minimal standards for describing new taxa of the family Halomonadaceae | journal = International Journal of Systematic and Evolutionary Microbiology | volume = 57 | issue = Pt 10 | pages = 2436–2446 | year = 2007
| pmid = 17911321
| doi-access = free }}</ref> Organisms are described as new species if they meet certain physiological and genetic conditions, such as generally less than 97% [[16S ribosomal RNA|16S rRNA]] sequence identity to other known species<ref name=Stackebrandt2006>{{cite journal
|last1=Stackebrandt
|first1=Erko
|last2=Ebers
|first2=Jonas
|date=2006
|title=Taxonomic parameters revisited: tarnished gold standards
|journal=Microbiology Today
|volume=33
|issue=4
|pages=152–155
|url=http://www.sgm.ac.uk/pubs/micro_today/pdf/110602.pdf
|url-status=dead
|archiveurl=https://web.archive.org/web/20110722032115/http://www.sgm.ac.uk/pubs/micro_today/pdf/110602.pdf
|archivedate=22 July 2011
}}</ref> and metabolic differences allowing them to be discerned apart. In addition to indicators to tell the novel species from other species, other analyses are required, such as [[Fatty acid methyl ester|fatty acid composition]], respiratory quinone used and tolerance ranges and deposition of the strain in at least two microbiological repositories. New proposed names are given in italics followed by ''sp. nov.'' (and ''gen. nov.'' if it is a novel genus according to the descriptions of that [[clade]]).<ref name=Sneath1992>{{cite book
| last=Sneath | first=P.H.A
| date=1992
| title=International Code of Nomenclature of Bacteria
| editor-last=Lapage S.P. |editor2=Sneath, P.H.A. |editor3=Lessel, E.F. |editor4=Skerman, V.B.D. |editor5=Seeliger, H.P.R. |editor6=Clark, W.A.
| publisher=American Society for Microbiology
| location=Washington, D.C.
| isbn=978-1-55581-039-9
| pmid=21089234
}}</ref><ref name="urlLPSN: Introduction">{{cite web
|url=http://www.bacterio.cict.fr/introduction.html
|date=2010
|title=Introduction
|author=Euzéby J.P.
|work=List of Prokaryotic names with Standing in Nomenclature
|accessdate=11 December 2010
|url-status=dead
|archiveurl=https://web.archive.org/web/20110613191625/http://www.bacterio.cict.fr/introduction.html
|archivedate=13 June 2011
}}</ref> In the instance of the GFAJ-1 strain these criteria are not met, and the strain is not claimed to be a new species.<ref name="Science"/> When a strain is not assigned to a species (e.g. due to insufficient data or choice) it is often labeled as the genus name followed by "sp." (i.e., undetermined species of that genus) and the strain name. In the case of GFAJ-1 the authors chose to refer to the strain by strain designation only. Strains closely related to GFAJ-1 include ''Halomonas'' sp. GTW and ''Halomonas'' sp. G27, neither of which were described as valid species.<ref name=Guo2008>{{cite journal
| last1=Guo | first1=Jianbo
| last2=Zhou | first2=Jiti
| last3=Wang | first3=Dong
| last4=Tian | first4=Cunping
| last5=Wang | first5=Ping
| last6=Uddin | first6=M. Salah
| title=A novel moderately halophilic bacterium for decolorizing azo dye under high salt condition
| journal=Biodegradation
| date=2008
| volume=19 | issue=1 | pages=15–19
| doi=10.1007/s10532-007-9110-1 | pmid=17347922
}}</ref><ref name=Kiesel2007>{{cite journal
| last1=Kiesel | first1=B.
| last2=Müller | first2=R.H.
| last3=Kleinsteuber | first3=R.
| title=Adaptative potential of alkaliphilic bacteria towards chloroaromatic substrates assessed by a ''gfp''-tagged 2,4-D degradation plasmid
| journal=Engineering in Life Sciences
| date=2007
| volume=7 | issue=4 | pages=361–372
| doi=10.1002/elsc.200720200
}}</ref>
If the authors had formally assigned strain GFAJ-1 to the genus ''Halomonas'',<ref name = "Thriving"/> the name would be given as ''Halomonas'' sp. GFAJ-1.
==Biochemistry==
A phosphorus-free [[growth medium]] (which actually contained 3.1 ± 0.3 μM of residual phosphate, from impurities in reagents) was used to culture the bacteria in a regime of increasing exposure to [[arsenate]]; the initial level of 0.1 mM was eventually ramped up to 40 mM. Alternative media used for comparative experiments contained either high levels of [[phosphate]] (1.5 mM) with no arsenate, or had neither added phosphate nor added arsenate. It was observed that GFAJ-1 could grow through many doublings in cell numbers when cultured in either phosphate or arsenate media, but could not grow when placed in a medium of a similar composition to which neither phosphate nor arsenate was added.<ref name="Science"/> The phosphorus content of the arsenic-fed, phosphorus-starved bacteria (as measured by [[Inductively coupled plasma mass spectrometry|ICP-MS)]] was only 0.019 (± 0.001) % by dry weight, one thirtieth of that when grown in phosphate-rich medium. This phosphorus content was also only about one tenth of the cells' average arsenic content (0.19 ± 0.25% by dry weight).<ref name="Science"/> The arsenic content of cells as measured by ICP-MS varies widely and can be lower than the phosphorus contents in some experiments, and up to fourteen times higher in others.<ref>{{cite web | url = http://dels.nas.edu/resources/static-assets/bcst/miscellaneous/WolfeSimon.pdf | title = Geobiochemistry: Microbes and the four basic strategies for Life on Earth | author = Felisa Wolfe-Simon | access-date = 6 July 2020 | archive-date = 4 June 2016 | archive-url = https://web.archive.org/web/20160604151542/http://dels.nas.edu/resources/static-assets/bcst/miscellaneous/WolfeSimon.pdf | url-status = dead }}</ref> Other data from the same study obtained with nano-[[Secondary ion mass spectrometry|SIMS]] suggest a ~75-fold excess of phosphate (P) over arsenic (As) when expressed as P:C and As:C ratios, even in cells grown with arsenate and no added phosphate.<ref name=SupportingMaterial/> When cultured in the arsenate solution, GFAJ-1 only grew 60% as fast as it did in phosphate solution.<ref name=Alla/> The phosphate-starved bacteria had an intracellular volume 1.5 times normal; the greater volume appeared to be associated with the appearance of large "[[vacuole]]-like regions".<ref name="Science"/>
[[File:GFAJ-1 (grown on phosphorus).jpg|thumb|left|200px|[[Scanning electron micrograph]] of GFAJ-1 cells grown in defined minimal medium supplemented with 1.5 mM phosphate]]
When the researchers added [[Isotopic labeling|isotope-labeled]] arsenate to the solution to [[pulse-chase analysis|track its distribution]], they found that arsenic was present in the cellular fractions containing the bacteria's [[protein]]s, [[lipid]]s and metabolites such as [[Adenosine triphosphate|ATP]], as well as its [[DNA]] and [[RNA]].<ref name=Alla/> Nucleic acids from [[Bacterial growth|stationary phase]] cells starved of phosphorus were concentrated via five [[Liquid-liquid extraction|extraction]]s (one with [[phenol]], three with [[phenol-chloroform extraction|phenol-chloroform]] and one with [[chloroform]] extraction solvent), followed by [[Ethanol precipitation#DNA Precipitation|ethanol precipitation]]. Although direct evidence of the incorporation of arsenic into biomolecules is still lacking, [[Radioactivity in the life sciences|radioactivity]] measurements suggested that approximately one-tenth (11.0 ± 0.1%) of the arsenic absorbed by these bacteria ended up in the fraction that contained the [[nucleic acids]] (DNA and RNA) and all other co-precipitated compounds not extracted by the previous treatments.<ref name="Science"/> A comparable control experiment with isotope-labeled phosphate was not performed.
With the distribution of the strain in mid-2011, other labs began to independently test the validity of the discovery. [[Rosemary Redfield]] from the [[University of British Columbia]], following issues with the growth conditions, investigated the growth requirements of GFAJ-1, and found that the strain grows better on solid [[agar]] medium than in liquid culture. Redfield attributed this to low potassium levels and hypothesized that the potassium levels in basal ML60 medium may be too low to support growth.<ref>{{cite web|url=http://rrresearch.blogspot.com/2011/07/two-mistakes-discovered.html|title=RRResearch: Two mistakes discovered |author=Rosie Redfield}}</ref> Redfield after finding and addressing further issues (ionic strength, pH and the use of glass tubes instead of polypropylene) found that arsenate marginally stimulated growth, but didn't affect the final densities of the cultures, unlike what was claimed.<ref>{{cite web|url=http://rrresearch.fieldofscience.com/2011_11_01_archive.html|title=RRResearch: Growth of GFAJ-1 in arsenate |author=Rosie Redfield}}</ref> Subsequent studies using mass spectrometry by the same group found no evidence of arsenate being incorporated into the DNA of GFAJ-1.<ref>{{Cite web | url = http://rrresearch.fieldofscience.com/2012/01/csclmass-spectrometry-data.html | title = The CsCl/mass spectrometry data | author = Rosie Redfield | date = 16 January 2012 | publisher = rrresearch.fieldofscience.com}}</ref>
===Arsenate ester stability===
[[File:Poly-(R)-3-hydroxybutyrat.svg|thumb|right|200px|Structure of poly-β-hydroxybutyrate]]
Arsenate [[ester]]s, such as those that would be [[Biological uses of arsenic#Arsenic in nuclei acids|present in DNA]], are generally expected to be [[Order of magnitude|orders of magnitude]] less stable to [[hydrolysis]] than corresponding [[Organophosphate|phosphate ester]]s.<ref name="Westheimer">{{cite journal
|last=Westheimer
|first=F.H.
|authorlink=Frank Westheimer
|title=Why nature chose phosphates
|journal=[[Science (journal)|Science]]
|volume=235
|issue=4793
|pages=1173–1178
|date=6 June 1987
|url=http://academic.evergreen.edu/curricular/m2o2006/seminar/westheimer.pdf
|doi=10.1126/science.2434996
|url-status=dead
|archiveurl=https://web.archive.org/web/20110616182714/http://academic.evergreen.edu/curricular/m2o2006/seminar/westheimer.pdf
|archivedate=16 June 2011
|bibcode=1987Sci...235.1173W
|citeseerx=10.1.1.462.3441
|pmid=2434996
}}</ref> dAMAs, the structural arsenic analog of the DNA building block [[Deoxyadenosine monophosphate|dAMP]], has a [[half-life]] of 40 minutes in water at neutral pH.<ref>{{cite journal
| last1=Lagunas | first1=Rosario
| last2=Pestana | first2=David
| last3=Diez-Masa | first3=Jose C.
| date=1984
| title=Arsenic mononucleotides. Separation by high-performance liquid chromatography and identification with myokinase and adenylate deaminase
| journal=[[Biochemistry (journal)|Biochemistry]]
| volume=23 | issue=5 | pages=955–960
| pmid=6324859
| doi=10.1021/bi00300a024
}}</ref> Estimates of the half-life in water of arsenodiester bonds, which would link the nucleotides together, are as short as 0.06 seconds—compared to 30 million years for the [[phosphodiester bond]]s in DNA.<ref>{{Cite journal | last1 = Fekry | first1 = M. I. | last2 = Tipton | first2 = P. A. | last3 = Gates | first3 = K. S. | title = Kinetic Consequences of Replacing the Internucleotide Phosphorus Atoms in DNA with Arsenic | doi = 10.1021/cb2000023 | journal = ACS Chemical Biology | volume = 6 | issue = 2 | pages = 127–30 | year = 2011 | pmid = 21268588}}</ref> The authors speculate that the bacteria may stabilize arsenate esters to a degree by using [[Polyhydroxybutyrate|poly-β-hydroxybutyrate]] (which has been found to be elevated in "vacuole-like regions" of related species of the genus ''[[Halomonas]]''<ref>{{cite journal
| last1=Mulyana | first1=Ilham
| last2=Satoko | first2=Nakanomori
| last3=Takahiro | first3=Kihara
| last4=Ayaka | first4=Hokamura
| last5=Matsusaki | first5=Hiromi
| last6=Takeharu | first6=Tsuge
| last7=Kouhei | first7=Mizuno
| date=2014
| title=Characterization of Polyhydroxyalkanoate Synthases from ''Halomonas'' sp. O-1 and ''Halomonas elongata'' DSM2581: Site-Directed Mutagenesis and Recombinant Expression
| journal=Polymer Degradation and Stability
| volume=109 | pages=416–429
| doi=10.1016/j.polymdegradstab.2014.04.024
}}</ref>
) or other means to lower the [[Activity (chemistry)|effective concentration]] of water.<ref name="Science"/><ref name="Thriving">{{cite news
| first=Henry | last=Bortman
| title=Thriving on arsenic
| date=2 December 2010
| url=http://www.astrobio.net/exclusive/3698/thriving-on-arsenic
| publisher=Astrobiology Magazine (NASA)
| accessdate=11 December 2010
}}</ref> Polyhydroxybutyrates are used by many bacteria for energy and carbon storage under conditions when growth is limited by elements other than carbon, and typically appear as large waxy granules closely resembling the "vacuole-like regions" seen in GFAJ-1 cells.<ref name="Quillaguamána">{{cite journal
| last=Quillaguamána | first=Jorge
|author2=Delgado, Osvaldo |author3=Mattiasson, Bo |author4= Hatti-Kaul, Rajni
| title=Poly(β-hydroxybutyrate) production by a moderate halophile, ''Halomonas boliviensis'' LC1
| journal=Enzyme and Microbial Technology
| volume=38 |issue=1–2 |pages=148–154
| date=January 2006| doi=10.1016/j.enzmictec.2005.05.013
| hdl=11336/45869| hdl-access=free}}</ref> The authors present no mechanism by which insoluble polyhydroxybutyrate may lower the effective concentration of water in the cytoplasm sufficiently to stabilize arsenate esters. Although all halophiles must reduce the [[water activity]] of their cytoplasm by some means to avoid desiccation,<ref name="Oren">{{cite journal
| last=Oren
| first=Aharon
| title=Bioenergetic aspects of halophilism
| journal=[[Microbiology and Molecular Biology Reviews]]
| volume=63 |issue=2 |pages=334–48
| date=June 1999
| doi=10.1128/MMBR.63.2.334-348.1999
| url=https://www.scopus.com/record/display.url?eid=2-s2.0-0033022073&origin=inward&txGid=hi_57o-KoeWoliygCUDBBf8%3a2
| issn=1092-2172 |pmid=10357854
| pmc=98969
}}</ref> the cytoplasm always remains an aqueous environment.
==Criticism==
{{Update section|date=December 2018}}
NASA's announcement of a news conference "that will impact the search for evidence of extraterrestrial life" was criticized as sensationalistic and misleading; an editorial in ''[[New Scientist]]'' commented "although the discovery of alien life, if it ever happens, would be one of the biggest stories imaginable, this was light-years from that".<ref name=NewScientist>{{cite magazine
| title=Curb your enthusiasm for aliens, NASA
| last=Opinion
| date=8 December 2010
| url=https://www.newscientist.com/article/mg20827902.100-curb-your-enthusiasm-for-aliens-nasa.html
| magazine=[[New Scientist]]
| issue=2790 |page=5
| accessdate=9 December 2010
}}</ref><ref>{{cite web
| url=http://www.nasa.gov/home/hqnews/2010/nov/HQ_M10-167_Astrobiology.html
| title=MEDIA ADVISORY : M10-167, NASA Sets News Conference on Astrobiology Discovery; Science Journal Has Embargoed Details
| date=29 November 2010
| access-date=6 July 2020
| archive-date=28 January 2012
| archive-url=https://web.archive.org/web/20120128145123/http://www.nasa.gov/home/hqnews/2010/nov/HQ_M10-167_Astrobiology.html
}}</ref>
In addition, many experts who have evaluated the paper have concluded that the reported studies do not provide enough evidence to support the claims made by the authors.<ref>{{cite journal
| author = Carmen Drahl
| journal = [[Chemical & Engineering News]]
| date = 2010
| volume = 88 | issue = 50 | page = 7
| title = Arsenic Bacteria Breed Backlash
| doi=10.1021/cen112210140356
}}</ref> In an online article on ''[[Slate (magazine)|Slate]]'', science writer [[Carl Zimmer]] discussed the skepticism of several scientists: "I reached out to a dozen experts ... Almost unanimously, they think the NASA scientists have failed to make their case".<ref name=Zimmer/><ref name=Zimmer2>{{cite news
| last=Zimmer | first=Carl
| authorlink=Carl Zimmer
| title=The Discovery of Arsenic-Based Twitter
| date=27 May 2011
| url=http://www.slate.com/id/2295724/
| work=[[Slate (magazine)|Slate]]
| accessdate=29 May 2011
}}</ref> Chemist [[Steven A. Benner]] has expressed doubts that [[arsenate]] has replaced phosphate in the DNA of this organism. He suggested that the [[trace element|trace contaminants]] in the growth medium used by Wolfe-Simon in her laboratory cultures are sufficient to supply the phosphorus needed for the cells' DNA. He believes that it is more likely that arsenic is being sequestered elsewhere in the cells.<ref name=Alla/><ref name="Thriving"/> [[University of British Columbia]] [[microbiologist]] Rosemary Redfield said that the paper "doesn't present any convincing evidence that arsenic has been incorporated into DNA or any other biological molecule", and suggests that the experiments lacked the washing steps and [[scientific control|controls]] necessary to properly validate their conclusions.<ref name="Redfield">{{cite web
| last=Redfield | first=Rosemary
| title=Arsenic-associated bacteria (NASA's claims)
| work=RR Research blog]
| date=4 December 2010
| url=http://rrresearch.blogspot.com/2010/12/arsenic-associated-bacteria-nasas.html
| accessdate=4 December 2010
}}</ref><ref name="Redfield2">{{cite web
| last=Redfield | first=Rosemary
| title=My Letter to Science
| work=RR Research blog
| date=8 December 2010
| url=http://rrresearch.blogspot.com/2010/12/my-letter-to-science.html
| accessdate=9 December 2010}}</ref> Harvard microbiologist Alex Bradley said that arsenic-containing DNA would be so unstable in water it could not have survived the analysis procedure.<ref name=Zimmer>{{cite news
| last=Zimmer | first=Carl
| authorlink=Carl Zimmer
| title=Scientists see fatal flaws in the NASA study of arsenic-based life
| date=7 December 2010
| url=http://www.slate.com/id/2276919/
| work=[[Slate (magazine)|Slate]]
| accessdate=7 December 2010
}}</ref><ref name="Beasties">{{cite web
|last = Bradley
|first = Alex
|title = Arsenate-based DNA: a big idea with big holes
|work = Science Blogs – We, Beasties blog]
|date = 5 December 2010
|url = http://scienceblogs.com/webeasties/2010/12/guest_post_arsenate-based_dna.php
|accessdate = 9 December 2010
|url-status = dead
|archiveurl = https://web.archive.org/web/20101208213626/http://scienceblogs.com/webeasties/2010/12/guest_post_arsenate-based_dna.php
|archivedate = 8 December 2010}}</ref>
On 8 December 2010, ''[[Science (journal)|Science]]'' published a response by Wolfe-Simon, in which she stated that criticism of the research was expected. In response, a "[[Frequently Asked Questions]]" page to improve understanding of the work was posted on 16 December 2010.<ref name='FAQ'>{{cite web
|url = http://ironlisa.com/gfaj/GFAJquestions_Response_16Dec2010.pdf
|title = Response to Questions Concerning the Science Article
|accessdate = 17 December 2010
|last = Wolfe-Simon
|first = Felisa
|date = 16 December 2010
|url-status = dead
|archiveurl = https://wayback.archive-it.org/all/20101230203528/http://ironlisa.com/gfaj/GFAJquestions_Response_16Dec2010.pdf
|archivedate = 30 December 2010}}</ref> The team plans to deposit the GFAJ-1 strain in the [[American Type Culture Collection|ATCC]] and [[Deutsche Sammlung von Mikroorganismen und Zellkulturen|DSMZ]] culture collections to allow widespread distribution.<ref>{{cite web
| url=http://www.monolake.org/today/2010/12/21/video-ron-oremland-discusses-arsenic/
| title=NASA Science Seminar: Arsenic and the Meaning of Life
| date=21 December 2010
| accessdate=30 January 2010
}}</ref> In late May 2011, the strain has also been made available upon request directly from the laboratory of the authors.<ref name="Science2"/> ''Science'' has made the article freely available.<ref name="PennisiE">{{cite web
|last = Pennisi
|first = Elizabeth
|title = Author of controversial arsenic paper speaks
|work = Science Insider
|date = 8 December 2010
|publisher = [[Science (journal)|Science]]
|url = http://news.sciencemag.org/scienceinsider/2010/12/author-of-controversial-arsenic-.html
|accessdate = 11 December 2010
|url-status = dead
|archiveurl = https://web.archive.org/web/20101212234229/http://news.sciencemag.org/scienceinsider/2010/12/author-of-controversial-arsenic-.html
|archivedate = 12 December 2010}}</ref> The article was published in print six months after acceptance in the 3 June 2011 issue of ''Science''. The publication was accompanied by eight technical comments addressing various concerns regarding the article's experimental procedure and conclusion,<ref>{{cite journal|last=Cotner|first=J. B.|author2=Hall, E. K.|title=Comment on 'A Bacterium That Can Grow by Using Arsenic Instead of Phosphorus'|journal=Science|date=27 May 2011|doi=10.1126/science.1201943|pmid=21622705|volume=332|issue=6034|pages=1149|bibcode=2011Sci...332R1149C|doi-access=free}}</ref><ref>{{cite journal|last=Redfield|first=R. J.|title=Comment on "A Bacterium That Can Grow by Using Arsenic Instead of Phosphorus"|journal=Science|date=27 May 2011|doi=10.1126/science.1201482|pmid=21622706|volume=332|issue=6034|pages=1149|bibcode=2011Sci...332.1149R|doi-access=free}}</ref><ref>{{cite journal | doi = 10.1126/science.1201438 | pmid = 21622707 | title = Comment on 'A Bacterium That Can Grow by Using Arsenic Instead of Phosphorus' | date = 2011 | last1 = Schoepp-Cothenet | first1 = B. | last2 = Nitschke | first2 = W. | last3 = Barge | first3 = L. M. | last4 = Ponce | first4 = A. | last5 = Russell | first5 = M. J. | last6 = Tsapin | first6 = A. I. | journal = Science | volume = 332 | issue = 6034 | pages = 1149 | bibcode = 2011Sci...332.1149S | doi-access = free }}</ref><ref>{{cite journal | doi = 10.1126/science.1201399 | pmid = 21622708 | title = Comment on 'A Bacterium That Can Grow by Using Arsenic Instead of Phosphorus' | date = 2011 | last1 = Csabai | first1 = I. | last2 = Szathmary | first2 = E. | journal = Science | volume = 332 | issue = 6034 | pages = 1149| bibcode = 2011Sci...332Q1149C | doi-access = free }}</ref><ref>{{cite journal | doi = 10.1126/science.1201255 | pmid = 21622711 | title = Comment on 'A Bacterium That Can Grow by Using Arsenic Instead of Phosphorus' | date = 2011 | last1 = Borhani | first1 = D. W. | journal = Science | volume = 332 | issue = 6034 | pages = 1149| bibcode = 2011Sci...332R1149B | doi-access = free }}</ref><ref>{{cite journal | doi = 10.1126/science.1201304 | title = Comment on 'A Bacterium That Can Grow by Using Arsenic Instead of Phosphorus' | date = 2011 | last1 = Benner | first1 = S. A. | journal = Science | volume = 332 | issue = 6034 | pages = 1149 | pmid=21622712| bibcode = 2011Sci...332Q1149B | doi-access = free }}</ref><ref>{{cite journal | doi = 10.1126/science.1201551 | title = Comment on 'A Bacterium That Can Grow by Using Arsenic Instead of Phosphorus' | date = 2011 | last1 = Foster | first1 = P. L. | journal = Science | volume = 332 | issue = 6034 | pages = i–1149 | pmid=21622713| bibcode = 2011Sci...332.1149F | doi-access = free }}</ref><ref>{{cite journal | doi = 10.1126/science.1201381 | pmid = 21622709 | title = Comment on 'A Bacterium That Can Grow by Using Arsenic Instead of Phosphorus' | date = 2011 | last1 = Oehler | first1 = S. | journal = Science | volume = 332 | issue = 6034 | pages = 1149| bibcode = 2011Sci...332.1149O | doi-access = free }}</ref><ref>{{cite news |last1=Hamilton |first1=Jon |title=Study of Arsenic-Eating Microbe Finds Doubters |date=30 May 2011 |url=https://www.npr.org/2011/05/30/136771401/study-of-arsenic-eating-microbe-finds-doubters |publisher=[[NPR]] |accessdate=30 May 2011 }}</ref> as well as a response by the authors to these concerns.<ref name="Science2"/><ref>{{cite journal | doi = 10.1126/science.1202098 | title = Response to Comments on "A Bacterium That Can Grow Using Arsenic Instead of Phosphorus" | date = 2011 | last1 = Wolfe-Simon | first1 = F. | last2 = Blum | first2 = J. S. | last3 = Kulp | first3 = T. R. | last4 = Gordon | first4 = G. W. | last5 = Hoeft | first5 = S. E. | last6 = Pett-Ridge | first6 = J. | last7 = Stolz | first7 = J. F. | last8 = Webb | first8 = S. M. | last9 = Weber | first9 = P. K. | last10 = Davies | first10 = P. C. W. | last11 = Anbar | first11 = A. D. | last12 = Oremland | first12 = R. S. | journal = Science | volume = 332 | issue = 6034 | pages = 1149| display-authors = 8 | bibcode = 2011Sci...332.1149W | url = https://digital.library.unt.edu/ark:/67531/metadc833182/m2/1/high_res_d/1021547.pdf }}</ref> The editor in chief [[Bruce Alberts]] has indicated that some issues remain and that their resolution is likely to be a long process.<ref>{{cite journal | doi = 10.1126/science.1208877 | title = Editor's Note | date = 2011 | last1 = Alberts | first1 = B. | journal = Science | volume = 332 | issue = 6034 | page = 1149 | pmid=21622710}}</ref> A review by Rosen ''et al.'',<ref>{{cite journal | doi = 10.1002/bies.201100012 | title = Life and death with arsenic | date = 2011 | last1 = Rosen | first1 = Barry P. | last2 = Ajees | first2 = A. Abdul | last3 = McDermott | first3 = Timothy R. | journal = BioEssays | volume = 33 | issue = 5 | pages = 350–357 | pmid = 21387349| pmc = 3801090 }}</ref> in the March 2011 issue of the journal ''[[BioEssays]]'' discusses the technical issues with the ''Science'' paper, provides alternative explanations, and highlights known biochemistry of other arsenic resistant and arsenic utilizing microbes.
On 27 May 2011, Wolfe-Simon and her team responded to the criticism in a follow-up ''[[Science (journal)|Science]]'' journal publication.<ref name="Science2">{{cite journal |last1=Wolfe-Simon |first1=Felisa |authorlink=Felisa Wolfe-Simon |last2=Blum |first2=Jodi Switzer |last3=Kulp |first3=Thomas R. |last4=Gordon |first4=Gwyneth W. |last5=Hoeft |first5=Shelley E. |last6=Pett-Ridge |first6=Jennifer |last7=Stolz |first7=John F. |last8=Webb |first8=Samuel M. |last9=Weber |first9=Peter K. |last10=Davies |first10=P. C. W. |last11=Anbar |first11=A. D. |last12=Oremland |first12=R. S. |title=Response to Comments on 'A Bacterium That Can Grow Using Arsenic Instead of Phosphorus' |journal=[[Science (journal)|Science]] |date=27 May 2011 |doi=10.1126/science.1202098 |url=http://www.sciencemag.org/content/early/2011/05/26/science.1202098.full.pdf |accessdate=30 May 2011 |volume=332 |issue=6034 |pages=1149 |display-authors=8 |bibcode=2011Sci...332.1149W }}</ref> Then on January 2012 a group of researchers led by Rosie Redfield at the [[University of British Columbia]] analyzed the DNA of GFAJ-1 using [[liquid chromatography–mass spectrometry]] and could not detect any arsenic, which Redfield calls a "clear refutation" of the original paper's findings.<ref>{{cite journal
| first=Erika Check
| last=Hayden
| title=Study challenges existence of arsenic-based life
| date=20 January 2012
| url=http://www.nature.com/news/study-challenges-existence-of-arsenic-based-life-1.9861
| journal=[[Nature News]]
| accessdate=20 January 2012
| doi=10.1038/nature.2012.9861
}}</ref> A simple explanation for the GFAJ-1 growth in medium supplied with arsenate instead of phosphate was provided by a team of researchers at the [[University of Miami]] in Florida. After labeling the [[ribosomes]] of a laboratory strain of ''[[Escherichia coli]]'' with radioactive isotopes (forming a [[radioactive tracer]]), they followed bacterial growth in medium containing arsenate but no phosphate. They found that arsenate induces massive [[Protein degradation|degradation]] of ribosomes, thus providing sufficient phosphate for the slow growth of arsenate tolerant bacteria. Similarly, they suggest, GFAJ-1 cells grow by recycling phosphate from degraded ribosomes, rather than by replacing it with arsenate.<ref>{{cite journal |first=Harris TK and Deutscher MP | last=Basturea GN | title= Growth of a bacterium that apparently uses arsenic instead of phosphorus is a consequence of massive ribosome breakdown | date=17 August 2012 | pmid=22798070 | doi=10.1074/jbc.C112.394403 | volume=287 | issue=34 | journal=J Biol Chem | pages=28816–9 | pmc=3436571}}</ref>
Following the publication of the articles challenging the conclusions of the original ''Science'' article first describing GFAJ-1, the website [[Retraction Watch]] argued that the original article should be retracted because of misrepresentation of critical data.<ref>{{cite web | url = http://retractionwatch.wordpress.com/2012/07/09/despite-refutation-science-arsenic-life-paper-deserves-retraction-scientist-argues/ | title=Despite refutation, Science arsenic life paper deserves retraction, scientist argues | author = David Sanders | publisher = Retraction Watch | accessdate= 2012-07-09| date=2012-07-09 }}</ref><ref>{{cite web| url = http://www.periodicplayground.com/blog/bp/2013/02/guest-post-david-sanders-why-its-high-time-to-retract-arseniclife| author = David Sanders| accessdate = 2013-02-16| title = Why it's high time to retract #arseniclife| publisher = periodicplayground| url-status = dead| archiveurl = https://web.archive.org/web/20131029210723/http://www.periodicplayground.com/blog/bp/2013/02/guest-post-david-sanders-why-its-high-time-to-retract-arseniclife| archivedate = 29 October 2013}}</ref> So far, as of January 2019, the paper has not yet been retracted.<ref>{{Cite journal | doi=10.1126/science.1197258| pmid=21127214| title=A Bacterium That Can Grow by Using Arsenic Instead of Phosphorus| journal=Science| volume=332| issue=6034| pages=1163–1166| year=2011| last1=Wolfe-Simon| first1=F.| last2=Blum| first2=J. S.| last3=Kulp| first3=T. R.| last4=Gordon| first4=G. W.| last5=Hoeft| first5=S. E.| last6=Pett-Ridge| first6=J.| last7=Stolz| first7=J. F.| last8=Webb| first8=S. M.| last9=Weber| first9=P. K.| last10=Davies| first10=P. C. W.| last11=Anbar| first11=A. D.| last12=Oremland| first12=R. S.| bibcode=2011Sci...332.1163W| url=https://digital.library.unt.edu/ark:/67531/metadc832429/m2/1/high_res_d/1016932.pdf}}</ref>
==See also==
{{cmn|colwidth=26em|
* [[Arsenic biochemistry]]
* [[Arsenate-reducing bacteria]]
* [[Arsenic poisoning]]
* [[Arsenic toxicity]]
* [[Hypothetical types of biochemistry]]
* [[Nucleic acid analogues]]
* [[Organoarsenic chemistry]]
* [[Prebiotic arsenic]]
}}
==References==
{{Reflist|colwidth=30em}}
==External links==
{{Commons category|GFAJ-1}}
* [http://www.educatedearth.net/video.php?id=4396 NASA – Official Presentation on 2010-12-02] {{Webarchive|url=https://web.archive.org/web/20111001004606/http://www.educatedearth.net/video.php?id=4396 |date=1 October 2011 }} — Video (56:53) and related information. — ''(3 December 2010)''
* [http://www.nasa.gov/topics/universe/features/astrobiology_toxic_chemical.html NASA.gov: "NASA-Funded Research Discovers Life Built With Toxic Chemical"] {{Webarchive|url=https://web.archive.org/web/20110828203819/http://www.nasa.gov/topics/universe/features/astrobiology_toxic_chemical.html |date=28 August 2011 }} — (''2 December 2010'')
* [http://www.astrobio.net/index.php?option=com_expedition&task=detail&id=3259 NASA – Astrobiology Magazine: "Searching for Alien Life, on Earth"]. — ''(9 October 2009)''
* [http://www.ironlisa.com/ Felisa Wolfe-Simon's web site]
{{Bacteria}}
{{Taxonbar|from=Q212837}}
{{DEFAULTSORT:Gfaj-1}}
[[Category:Arsenic]]
[[Category:Oceanospirillales]]
[[Category:Biology and pharmacology of chemical elements]]
[[Category:Environmental microbiology]]
[[Category:Alkaliphiles]]
[[Category:Geomicrobiology]]
[[Category:Halophiles]]
[[Category:Microbial growth and nutrition]]
[[Category:Natural history of Mono County, California]]
[[Category:Pathological science]]
[[Category:2010 in science]]
[[Category:Undescribed species]]
<noinclude>
<small>This page was moved from [[:en:GFAJ-1]]. Its edit history can be viewed at [[GFAJ-1/edithistory]]</small></noinclude>
g4qtds4r9lh9brruobrovr4u8hd6iu8
Tom Penn
0
113726
737562
690606
2026-04-10T17:37:33Z
InternetArchiveBot
34092
Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5
737562
wikitext
text/x-wiki
{{otherpeople}}
{{Infobox person
| name = Tom Penn
| image =
| caption =
| birth_name =
| birth_date =
| birth_place = [[Peoria, Illinois]]
| high_school = [[Spalding Academy "Peoria Notre Dame"]]
| death_date =
| death_place =
| occupation = [[Television personality]], [[sports executive]], [[lawyer]], [[Executive (management)|executive]], [[Color commentator|analyst]]
}}
'''Tom Penn''' is an American sports executive who is currently the president and co-owner of [[Major League Soccer]]'s [[Los Angeles Football Club]].<ref>{{cite news|author=Brian Straus/Sports Illustrated|url=https://www.si.com/soccer/planet-futbol/2014/10/30/mls-lafc-los-angeles-fc-ownership-nguyen-guber-penn-nomar-magic-hamm |title=MLS unveils Chivas USA replacement in LA with star-studded ownership| publisher=si.com |date=2014-10-30}}</ref><ref>{{cite news|author=Kevin Baxter/LA Times|url=https://www.latimes.com/sports/sportsnow/la-sp-sn-mls-franchise-los-angeles-20141030-story.html |title=Magic Johnson, Mia Hamm among owners of new L.A. pro soccer team |publisher=latimes.com |date=2014-10-30}}</ref><ref>{{cite news|author=Nicholas Mendola/NBC Sports|url=http://prosoccertalk.nbcsports.com/2014/10/30/los-angeles-officially-given-new-mls-team-magic-johnson-vincent-tan-among-investors/ |title=Los Angeles officially given new MLS team; Magic Johnson, Vincent Tan among investors |publisher=nbcsports.com|date=2014-10-30}}</ref>
Penn is also an [[NBA TV]] analyst, former NBA executive and co-founder of the Sports Leadership Institute.
==Los Angeles Football Club==
The Los Angeles Football Club is a Major League Soccer (MLS) team based in downtown Los Angeles. Along with Penn, owners include Henry Nguyen, [[Peter Guber]], [[Magic Johnson]], [[Nomar Garciaparra]], [[Mia Hamm]], [[Tony Robbins]], and [[Will Ferrell]]. The team was announced in October 2014 and planned to play its first game in 2018.{{update needed|date=September 2019}}
==ESPN analyst==
As an NBA analyst, Penn is regularly featured as a basketball operations expert on advanced analytics, [[salary cap]] issues, the [[NBA Draft]], player trades and collective bargaining issues.<ref>{{cite news|author=Bruce Ely/The Oregonian |url=http://www.oregonlive.com/blazers/index.ssf/2010/11/post_3.html |title=Former Blazers executive Tom Penn lands job with ESPN as a NBA studio analyst |publisher=OregonLive.com |date= 2010-11-09|accessdate=2011-02-20}}</ref>
Penn started working with ESPN during the 2010 NBA Draft,[2] and during the free agency period of 2010, he operated ESPN's cap machine on SportsCenter, where he manipulated a touchscreen to show potential destinations for LeBron James and other marquee free agents.<ref>{{cite web|url=https://www.youtube.com/watch?v=9Y5qKHpQHCo |title=How the Miami Heat land the BIG 3 in South Beach |publisher=YouTube |date= |accessdate=2011-02-20}}</ref> Penn has also been on ESPN using the [http://search.espn.go.com/tom-penn/videos/6 ESPN Trade Machine] {{Webarchive|url=https://web.archive.org/web/20141103214218/http://search.espn.go.com/tom-penn/videos/6 |date=2014-11-03 }} to break down NBA trades. He left ESPN in 2018 to join Turner Sports.
==NBA executive==
In 2012, Penn was widely reported as being close to accepting a position as general manager of the [[Philadelphia 76ers]].<ref>{{cite web|url=http://www.libertyballers.com/2012/7/24/3184519/tom-penn-sixers-gm-general-manager-rod-thorn-doug-collins |title=Tom Penn Reportedly Close to Becoming Sixers GM |publisher=Libertyballlers.com |date=2012-07-24 |accessdate=2013-02-28}}</ref> He instead re-signed with ESPN. From 2007 to 2010, he spent four seasons with the Portland Trail Blazers as vice president of Basketball Operations and assistant general manager. Penn is an expert on the NBA salary cap and collective bargaining agreement.<ref>{{cite news| url=http://blog.oregonlive.com/blazers/2009/05/tom_penn_named_vp_of_basketbal.html | work=The Oregonian | title=Tom Penn named VP of Basketball Operations | date=2009-05-18}}</ref> Penn worked with general manager Kevin Pritchard as they restored the Blazers from the "Jail Blazers" era. The Blazers won 54 games in 2008–09 and again reached 50 wins in 2009–10 in spite of injuries to key players. During the summer of 2009, Penn was offered the general manager job with the [[Minnesota Timberwolves]], but he turned it down, deciding to stay with the Blazers after a promotion to vice president of Basketball Operations.<ref>{{cite web|url=http://sports.espn.go.com/nba/news/story?id=4175419 |title=Tom Penn to remain in Portland Trail Blazers' front office – ESPN |publisher=Sports.espn.go.com |date=2009-05-18 |accessdate=2011-02-20}}</ref> Ten months later, Penn was fired after in what one writer called a "drive by" shooting. <ref>{{cite news|author=Bruce Ely, ''The Oregonian'' |url=http://www.oregonlive.com/sports/oregonian/john_canzano/index.ssf/2010/03/canzano_vulcans_are_hovering_a.html |title=Canzano: Vulcans are hovering and Kevin Pritchard could be next |publisher=OregonLive.com |date= 2010-03-17|accessdate=2011-02-20}}</ref> On June 24, 2010, the day of the NBA Draft, Kevin Pritchard was also fired by the Blazers.<ref>{{cite news|author=Bruce Ely, ''The Oregonian'' |url=http://blog.oregonlive.com/behindblazersbeat/2010/06/kevin_pritchard_fired_as_trail.html |title=Kevin Pritchard fired as Trail Blazers general manager | OregonLive.com |publisher=Blog.oregonlive.com |date= 2010-06-24|accessdate=2011-02-20}}</ref>
Penn worked with the [[Vancouver Grizzlies|Vancouver]]/[[Memphis Grizzlies]] as assistant general manager and legal counsel from 2000 to 2007. For five of those seasons in Memphis, he worked closely with [[Jerry West]] and [[Chuck Daly]].<ref>http://www.nba.com/media/grizzlies/media_guide-0405-basketball_operations.pdf</ref> The Grizzlies made the playoffs three straight seasons but never advanced passed the first round. In 1999, Penn worked as part of prospective NBA owner [[Michael Heisley]]'s NBA acquisition team. Penn worked with [[Dick Versace]] and Heisley's team to help guide Heisley through the NBA acquisition process until Heisley ultimately purchased the Vancouver Grizzlies in May 2000.<ref>http://www.nba.com/media/grizzlies/media_guide-0405-basketball_operations.pdf</ref> After one season in Vancouver, Heisley moved the team to Memphis.
==Sports Leadership Institute==
The Sports Leadership Institute is a company that organizes private leadership summits for global sports owners, pro sports executives, major college Ads{{clarify|date=June 2019}}, and professional athletes. Penn founded the company in 2011, and they organize the Global Sports Summit in Aspen, Global Sports Management Summit in Chicago and Collegiate Sports Summit in Santa Monica.
==Agent and lawyer==
Penn was a lawyer and a player agent. He worked mostly as a criminal defense attorney and acted in 20-plus cases including murder, armed robbery and other serious felony cases. He also was a basketball player agent and organized tours of Europe with free agent players. [[Upper Deck Company]]—the trading card company—was his sponsor for the tours and the team was called the "Upper Deck All-Stars". Fox Sports Chicago filmed a documentary movie about one of the tours called ''Over There''.<ref>http://www.nba.com/media/grizzlies/media_guide-0405-basketball_operations.pdf</ref>
==St. Jude Children's Research Hospital==
Penn has been a member of the Board of Governors of [[St. Jude Children's Research Hospital]] since 2002. He helped found [http://hoopsforstjude.org/ Hoops for St. Jude]—an NBA Cares program that raises awareness and funds to fight childhood cancer.<ref>{{cite web|author=|url=http://espn.go.com/blog/truehoop/post/_/id/17901/counterprogramming-for-a-worthy-cause |title=Counterprogramming for a worthy cause – TrueHoop Blog – ESPN |publisher=Espn.go.com |date= |accessdate=2011-02-20}}</ref> For the 2010-11 NBA Season, Hoops for St. Jude features the endorsement of NBA stars [[Dwyane Wade]], [[Dwight Howard]], [[Pau Gasol]], [[Kevin Love]], [[Rudy Gay]], [[David Lee (basketball)|David Lee]], [[Steve Blake]], and coach [[George Karl]].<ref>{{cite web |url=http://www.fox14tv.com/Global/story.asp?S=13815273 |title=NBA Stars Join Hoops for St. Jude Starting Lineup to Fight Childhood Cancer – FOX 14 TV Joplin and Pittsburg News Weather Sports | |publisher=Fox14tv.com |date= |accessdate=2011-02-20 }}{{Dead link|date=August 2022 |bot=InternetArchiveBot |fix-attempted=yes }}</ref> Penn serves on the board of directors of the [http://www.joyrx.org/ Children's Cancer Association], a Portland based charity that provides services and programs to children and families who are traumatized by cancer and other diseases.<ref>{{cite web |url=http://www.joyrx.org/about-cca/leadership-advisors |title=Children's Cancer Association – Leadership & Advisors |publisher=Joyrx.org |date= |accessdate=2011-02-20 |archive-date=2010-11-22 |archive-url=https://web.archive.org/web/20101122072955/http://www.joyrx.org/about-cca/leadership-advisors |url-status=dead }}</ref>
==References==
{{reflist}}
{{Los Angeles Football Club}}
{{DEFAULTSORT:Penn, Tom}}
[[Category:American television hosts]]
[[Category:Living people]]
[[Category:American sports executives and administrators]]
[[Category:Sports owners]]
[[Category:Major League Soccer owners]]
[[Category:Year of birth missing (living people)]]
<noinclude>
<small>This page was moved from [[:en:Tom Penn]]. Its edit history can be viewed at [[Tom Penn/edithistory]]</small></noinclude>
kh9r1n8etwm9qe7pfxtwgp6gzxrd9ev
New test page
0
115272
737532
505597
2026-04-10T13:16:28Z
~2026-22170-92
73503
737532
wikitext
text/x-wiki
this is a new test page, which i plan to delete later test
{{DISPLAYTITLE:New_test page}}
cd3zbux632kjgrj551sd2vtnn12l6by
Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Miscelánea/Actual
4
120313
737570
731420
2026-04-11T00:12:06Z
Nacaru
54746
Resolviendo solicitud «[[Wikipedia:Tablón_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Miscelánea/Actual#Gersoncharles|Gersoncharles]]» mediante [[WP:TL|Twinkle Lite]]
737570
wikitext
text/x-wiki
<!-- AVISO: No semiproteger la miscelánea del tablón pues aquí redirigen muchas plantillas y avisos en páginas varias para que los novatos puedan aportar o realizar consultas que sólo bibliotecarios pueden resolver -->
<noinclude>{{Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Plantillas/Cabecera}}
{{Archivado automático
|Destino=Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Miscelánea/AAAA/MM
|Días a mantener=7
}}
== Situación extraña con tinte político ==
; Asunto
Desde 2019 aproximadamente se ha visto un grupo de IPv6 dentro del rango {{u|2804:14C:0:0:0:0:0:0/32}} editando y tratando de manipular contenidos políticos controvertidos (específicamente en [[Fascismo en América]] y otros más), de hecho por lo que se ve [[Discusión:Fascismo en América|aquí]] el anónimo se expresa de una manera particular sin saber siquiera español y sólo deja links sin mayor explicación. Adicionalmente, el anónimo está constantemente dejando mensajes a {{u2|Raimundo57br}} haciendo una serie de solicitudes de modificaciones a artículos de tinte político (sobre todo si son relativos a la derecha o izquierda política). Pero cuando vemos más a profundidad, vemos otras IPs como {{u|187.20.115.154}} dejando lo mismo al usuario, o este [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n:Raimundo57br&diff=prev&oldid=150518775 mensaje] de Raimundo57br dirigido a otra cuenta haciendo ping, pero en su propia discusión en un intento de coordinación de su desbloqueo. Hago acotar que Raimundo57br [https://pt.wikipedia.org/wiki/Especial:Contribui%C3%A7%C3%B5es/Raimundo57br está expulsado de la Wikipedia portuguesa desde el 2022], luego de múltiples problemas allá y numerosos bloqueos temporales.
También, que la Wikipedia portuguesa maneja estrictamente el uso de direcciones anónimas y [https://pt.wikipedia.org/wiki/Usu%C3%A1rio(a):2804:14C:0:0:0:0:0:0/32 todo el rango 2804:0:0:0:0:0:0:0/19] se encuenta bloqueado desde 2020. Existe una posibilidad de que haya una inusual coordinación entre anónimos y Raimundo57br para manipular artículos de política en Wikipedia en español y la Wikipedia portuguesa (a partir de una tercera cuenta), ante la imposibilidad de ambos entes (ya que se les hace más cómodo intervenir acá).
Incluyo al reporte que [https://es.wikipedia.org/w/index.php?title=Discusi%C3%B3n:Fascismo_en_Am%C3%A9rica&diff=prev&oldid=168802559 con estos] [https://es.wikipedia.org/w/index.php?title=Discusi%C3%B3n:Fascismo_en_Am%C3%A9rica&diff=prev&oldid=168803824 diffs en específico], no sólo Raimundo57br está involucrado, también {{u|Auréola}} (quien también pasó por un proceso de expulsión, aunque no está autoconfirmado acá) y {{u|Luizpuodzius}} (quien fue sancionado también allá, pero no expulsado; tampoco autoconfirmado acá). Aquí [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n%3ALuizpuodzius&diff=159046847&oldid=152503114 una interacción entre usuarios hablando de temas referentes a pt.wiki]. De esta situación, se confirma que se esté usando nuestra Wikipedia para cuestiones ajenas de un proyecto que los sancionó y expulsó.
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 17:04 4 ago 2025 (UTC)
;Comentarios
#'''Sobre los mensajes que recibo del IP''': no tengo contacto fuera de la wiki con este IP que me envía solicitudes para editar determinados artículos y, por regla general, no atiendo estas solicitudes;
#'''En cuanto a mis problemas en la wiki-pt''', aclaro que no se deben a ediciones que hice en el dominio principal de esa versión de la wiki (donde se borraron pocos artículos y se revirtieron pocas ediciones), sino a una larga rivalidad con determinados administradores. No creo que sea oportuno traer ese debate aquí, pero si insisten, daré las aclaraciones que consideren oportunas.
#'''Sobre mi contacto con Luizpuodzius''': entiendo que fue un acto aislado sin mayores repercusiones, hace mucho tiempo que no interactúo con esa persona.
#'''Sobre mi interacción con Anhabete''': entiendo que fue un acto aislado sin mayores repercusiones, después de eso no volví a interactuar con esa persona.
:--[[Usuario:Raimundo57br|Raimundo57br]] ([[Usuario Discusión:Raimundo57br|discusión]]) 12:35 5 ago 2025 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Solicito traslado de páginas ==
* Por favor trasladar las siguientes páginas
# {{a|Dover}} ... a ... {{a|Dover (desambiguación)}}
# {{a|Dover (Kent)}} ... a... {{a|Dover}}
;Motivo
* Por favor indicar el motivo: La ciudad de Inglaterra es el uso principal del término. La página de desambiguación tenía cientos de enlaces ambiguos.
;Usuario que lo solicita
Firmado: [[Usuario:Rondador|Ronda]][[Usuario Discusión:Rondador|dor]] 09:39 2 sep 2025 (UTC)
;Coentarios
* Personalmente estoy de acuerdo, vamos a solicitar las opiniones de otros que quieran opinar. Un saludo. <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 10:45 2 sep 2025 (UTC)
* Con permiso, {{u2|Rondador}}, he detallado los dos traslados que estás pidiendo; estoy de acuerdo con el traslado, y también con la solicitud de opiniones (quizá en algún lado haya algo muy relevante llamado localmente Dover). --[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 12:09 2 sep 2025 (UTC)
* Si pongo Dover en el buscador de Google, [[google:dover|el primer resultado]] (y siguientes) es para el grupo musical español (algo que sospechaba, ya que en mi mente sucede lo mismo). [[Usuario:MiguelAlanCS|<b style="color: #990099;">MiguelAlanCS</b>]] >>> [[Archivo:PICOL icon Mail.svg|15px|link=Usuario discusión:MiguelAlanCS]] 12:13 2 sep 2025 (UTC)
:: En mi caso sale la ciudad, pero bueno, también es un argumento a tener en cuenta. <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 20:23 2 sep 2025 (UTC)
:::{{no|}} Lo que no se puede hacer es trasladar y despues solicitar, como hizo unilateralmente el editor. Lo revertí a la espera de otra respuesta. Aunque mejor que en el tablón de bibliotecarios donde solo responden bibliotecarios, es preguntar en el café. A mi, si me preguntan por Dover me vienen muchas cosas a parte de la propia ciudad por lo que hay que buscar un consenso clarone indicarlo en la resolución y posibles traslados para que no hay discusiones en el futuro. --[[Usuario:Geom|<b style="background:purple;color:yellow;font-size:80%;border-radius:9px 0 0 9px;padding:2px 5px;">Geom</b>]][[Usuario discusión:Geom|<span style="font-size:80%;color: gray;">'''(discusión)'''</span>]] 09:35 3 sep 2025 (UTC)
::::{{No|Punto metiche}}, del otro lado del charco lo metí a San Gugul y lo primero que me salió es la banda. [[Usuario:Saloca|Saloca]] ([[Usuario_Discusión:Saloca|<big>ངའི་གླེང་མོལ།</big>]]) 20:54 24 sep 2025 (UTC)
;Respuesta
{{admintab|$0}}
== Gersoncharles ==
; Asunto
Durante el corto tiempo de la CAB del usuario {{u2|Gersoncharles}} señalé una [https://es.wikipedia.org/w/index.php?title=Wikipedia_discusi%C3%B3n:Candidaturas_a_bibliotecario/Gersoncharles&diff=prev&oldid=169411042 situación que considero ineludible], a pesar que el usuario trató de desvincularse sin mayor sustento y prefirió cancelar la CAB.
El usuario a pesar que fue sancionado en 2021 por este servidor, [https://xtools.wmcloud.org/pages/es.wikipedia.org/Gersoncharles?uselang=es ha retomado desde hace un año] en la creación de entradas de concursos de belleza de México con muy pocas notas de referencia: si observamos los artículos creados, sólo una fracción de cada artículo puede ser revisado en sus referencias, pero hay gran parte de la información que parece manejar el usuario de [[WP:FP|una manera que lo conoce en exclusiva]], por lo que no ha concedido en los requerimientos mínimos que se necesita para seguir editando en Wikipedia. De hecho, le han borrado 8 artículos en apenas un par de meses atrás. Sé que me adelanto en especulaciones, pero ante la ausencia de motivos que le llevaron a la CAB, sospecharía que [[WP:NSW|estaba buscando alguna forma de restaurar contenidos borrados, o disputar decisiones administrativas]].
El usuario se comporta virtualmente como una [[WP:CPP|CPP]] y el 100% de sus contribuciones en artículos están fijados en un tema cerradísimo como este, me hacen entreveer que el usuario requiere algún correctivo de prohibición editorial, al menos, para que empiece a entender su posición como editor, ya que alguien con 15 años en Wikipedia (y unos 8 años editando con cierta actividad), es rarísimo que siga comportándose como una CPP.
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 05:12 10 sep 2025 (UTC)
; Respuesta
{{admintab|1=Probando a resolver esta petición para ver si se reproduce el fallo.|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:12, 11 April 2026 (UTC)|3=}}
==Status quo Stonewalling==
; Usuarios implicados
* {{u|Aroblesm}}
;Artículo
[[Amarillos por Chile]] (ahora, pero es un comportamiento habitual)
; Motivo
Aunque el usuario hace un buen trabajo de patrullaje contra vandalismo, tiene un comportamiento habitual de lo que se denomina [[:en:WP:Status quo stonewalling]]. El usuario revierte todo lo que no le parece y no debate. Trata a cualquier usuario, experimentado o no como si fuera un vándalo o una CPP. Le va dando al botón, llegando siempre al límite de 3RR (en que el status quo tiene prioridad) y no pasa a la búsqueda de consenso. Y lo peor de todo, es que no maneja bien las políticas y hace SQS de manera incorrecta. <br />
En este caso particular está cometiendo un error obvio, porque en la plantilla: parámetro ideología, está usando un fuente que no se puede, ya que no es independiente. Concretamente a [https://www.laizquierdadiario.cl/Chile La Izquierda Diario], que es el órgano oficial del [[Partido de Trabajadores Revolucionarios]] y como tal no es un medio independiente al juzgar la posición de otro partido político (le explique en la PD y en su propio PD, y se limita a indicar en su reversión que ''no se puede eliminar referencias simplemente porque no nos gusta''. Esto es una abierta contravención a [[WP:FF]].<br />
Aún así, no quiero que esta denuncia se centre en ese artículo, ya que es un comportamiento habitual (basta ver su [https://es.wikipedia.org/w/index.php?title=Especial%3AContribuciones&target=Aroblesm&namespace=all&tagfilter=&start=&end=&limit=1000 historial]). Como digo arriba, muchas veces actúa así con vándalos y CPP, pero le pasa la máquina a lo que venga por delante y sin debatir (basta mirar su PD), y tampoco evidenciando un buen conocimiento de las políticas. Como indico arriba es un comportamiento habitual textbook de [[:en:WP:Status quo stonewalling]].
Solicito que se le indique al usuario lo incorrecto del proceder y que se le deje una clara advertencia respecto a SQS.
; Usuario que lo solicita
* [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 11:04 10 sep 2025 (UTC)
;Comentarios
{{comentario}}: SFBB omite que está eliminando referencias del artículo por mero gusto personal y sin justificación alguna. Se le propuso debatir pero no espera el debate. Yo solo he mantenido el artículo a su versión estable. Además, de todos los editores del artículo es el único que ha objetado una referencia y eso es raro en mi opinión. Me dedico a combatir el vandalismo y las ediciones arbitrarias sin consenso previo. No veo problemas en aquello. SFBB solo busca poder mantener su eliminación de referencias por mero gusto personal sin importar. --[[Usuario:Aroblesm|Aroblesm]] ([[Usuario Discusión:Aroblesm|discusión]]) 16:13 10 sep 2025 (UTC)
::No hombre....es un patrón de conducta. siempre que no te gusta algo movís a "versión estable" sin discutir nada hasta aburrir a la contraparte...eso es precisamente SQS. Tenís la PD llena de quejas por eso y seguís creyendo que lo estái haciendo bien, meramente porque aburrís al resto que le da lata pelear con vos (a mí mismo muchas veces me hai aburrido). Sin esta denuncia ni siquiera te habríai dignado a opinar...le diste dos veces más al botón (y sólo opinaste después de la denuncia y no dijiste nada en serio, salvo que estaba en la referencia...pff...nadie lo ha puesto en duda)...y lo que calificái como "arbitrariedad" lo hacís sin entender profundamente el funcionamiento de wikipeida. Es una obviedad que esa fuente no se puede usar lo que está siendo usada, no es "gusto personal" son las polítcas: por n-sima vez: lee [[WP:FF]]. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 19:17 10 sep 2025 (UTC)
:::'''Comentario'''. Al usuario se le explica porqué cierta fuerte [https://es.wikipedia.org/w/index.php?title=Amarillos_por_Chile&diff=169577342&oldid=169428682 absolutamente no] es [[WP:FF]] desde ningún punto de vista e ipso facto y sin explicación alguna entra en guerra de ediciones instantánea [https://es.wikipedia.org/w/index.php?title=Amarillos_por_Chile&diff=169577348&oldid=169577342 (1)] [https://es.wikipedia.org/w/index.php?title=Amarillos_por_Chile&diff=next&oldid=169577358 (2)]. Así no se puede, y preocupa si un revisor actúa así en otras páginas no analizadas. [[Usuario:XavierItzm|XavierItzm]] ([[Usuario Discusión:XavierItzm|discusión]]) 01:11 20 sep 2025 (UTC)
::::Quiero agregar que cuando el usuario se encontró con una clara mayoría de usuarios que cuestionaba su actuar, fue a pedir [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Protecci%C3%B3n_de_art%C3%ADculos/Actual#Amarillos_por_Chile_2 la protección de la página en su versión]. Nuevamente, esto es parte del comportamiento habitual de usuario ([https://es.wikipedia.org/w/index.php?title=Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Protecci%C3%B3n_de_art%C3%ADculos/Actual&action=history ver el historial de ese tablón]): el usuario trata cualquier diferencia de opinión con la suya como si fuera vandalismo y utiliza ese tablón para cementar su versión (yo mismo lo he sufrido con anterioridad, aunque es difícil buscar un acto específico en ese tablón). Quiero agregar que esta denuncia <u>no es por este caso en particular</u> sino que contra el comportamiento habitual de manipular el sistema para mantener sus versiones de status quo, sin siquiera entrar a discutir y tratar cualquier tipo de edición (que no concuerde con su visión) como si fuera vandalismo. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 09:35 20 sep 2025 (UTC)
:::::Otro antecedente más del que ni siquiera estaba al tanto. Con anterioridad a su solicitud de protección de la página del 20 de agosto (rechazada por {{u2|Rafstr}}), cuando intentaba mantener así el status quo ante la presión de 5 usuarios (todos usuarios veteranos muy experimentados) que llegaron independientemente a esa PD - <small>tras mención general del problema en el café</small>, el usuario ya había exigido una [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Protecci%C3%B3n_de_art%C3%ADculos/Actual#Amarillos_por_Chile protección similar el 8 de agosto], con anterioridad a esta denuncia y con posterioridad a que yo haya iniciado una discusión en la PD (que el ignoró al igual que los mensajes que le dejé en su PD personal, mientras seguía dándole al botón revertir). Es un perfecto ejemplo de cómo el usuario consistentemente [[WP:NSW|abusa de las reglas del sistema]], a sabiendas de que si revierte 3 veces, puede denunciar a la contraparte por 3R, y pedir protecciones. Y, bueno...le sigue dando al botón sin intentar si quiera debatir.
:::::[https://es.wikipedia.org/w/index.php?title=Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/3RR/Actual&diff=prev&oldid=149513602#Aroblesm Ya ha sido denunciado anteriormente por exactamente lo mismo] y (como decía anteriormente) tiene la PD llena de quejas por lo mismo, pero la mayoría simplemente nos hartamos - yo ya muchas veces - y nos vamos a otra cosa sin denunciar...'''<u>pero este comportamiento tiene que parar de una vez por todas</u>'''. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 00:50 22 sep 2025 (UTC)
::::::Otro ejemplo (y sin buscar mucho): hace unos días atrás hizo lo mismo con {{u2|GKLakers02}} en el artículo [[Línea 6 del Metro de Santiago]] y terminó denunciando al usuario [https://es.wikipedia.org/w/index.php?title=Wikipedia:Vandalismo_en_curso&diff=prev&oldid=169275648 por un presunto vandalismo]. En en intertanto GKLakers02 intentaba discutir en la [https://es.wikipedia.org/wiki/Discusi%C3%B3n:L%C3%ADnea_6_del_Metro_de_Santiago#Tensi%C3%B3n_Incorrecta. PD del artículo] proveyendo fuentes correctas, pero siendo completamente ignorado pro el usuario. El asunto terminó cuando el artículo fue protegido, manteniendo el status quo (incorrecto) que tozudamente forzaba Aroblesm dándole al botón.
::::::Pero bueno...este el sólo otro ejemplo pero son cientos. Alguien tiene que parar al usuario (que es buenísimo combatiendo vandalismo, pero termina tratando a todo el mundo cual si fueran vándalos). [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 01:07 22 sep 2025 (UTC)
:a sabiendas que está denuncia aún no se resuelve, intenté corregir lo de la [[Línea 6 del Metro de Santiago]], siendo nuevamente revertido [https://es.wikipedia.org/w/index.php?title=L%C3%ADnea_6_del_Metro_de_Santiago&diff=prev&oldid=169740888 1] y [https://es.wikipedia.org/w/index.php?title=Línea_6_del_Metro_de_Santiago&diff=prev&oldid=169740854 2] oportunidades (en rápidisimo; me reveritió dos veces, antes de que pudiese agregar la info sobre las otras líneas, para las cuales existe similar documentación) por el usuario que no duda un segundo en entrar en GE para defender el status quo sobre la base de una referencia absolutamente obsoleta del año 2016 (sí, hace 9 años, el metro sí operaba a 750 Vcc). Lo peor es que revierte e indica que hay que ir a la PD donde ya se le ha explicado con lujo de detalles que está equivocado.<br />
:Por favor: alguien tiene que frenar a este usuario ya que le hace mucho daño a eswiki (piensen en todas las IPs/usuarios que él determina unilateralmente que son vándalos). Yo por mi parte, voy a intentar evitarlo hasta que se resuelva esto (y voy a dejar los artículos sobre le Metro de Santiago con un voltaje incorrecto por el momento), aunque es altamente probable que me revierta en otros lados (ya vigila una enorme proporción de los artículos sobre contingencia chilena); si lo hace, no voy a insistir y voy a dejar las cosas de manera incorrecta. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 23:40 29 sep 2025 (UTC)
Agregro otro antecendente: En [[Línea 6 del Metro de Santiago]] y [[Línea 3 del Metro de Santiago]], el usuario entró nuevamente (como ya ha ocurrido en muchas oportunidades con anterioridad) en conflicto con IPs. Las IPs tiene razón, pero el usuario las revierte. Como las IP insisten en agregar <u>la info corrrecta</u> (bien referencianda y discutida de la IP del artículo - aunque le usuario lo ignore y le siga dando al botón), el usuario va al TAb a pedir protección de ambas [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Protecci%C3%B3n_de_art%C3%ADculos/Actual#L%C3%ADnea_6_del_Metro_de_Santiago] [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Protecci%C3%B3n_de_art%C3%ADculos/Actual#L%C3%ADnea_3_del_Metro_de_Santiago] y {{u2|Virum Mundi}} terminó protegiendo ambas por 3 meses. <br />
Esto pone en evidencia una vez más, el mal que está haciendo el usuario de las reglas y los tablones. Las IPs (porque son dos creo) han hecho todo bien: han agregado info correcta, han referenciado y han ido a la PD....y el usario le sigue dando al botón para imponer una fuente obsoleta de 2016. Y recurre a cuatánto tablón haya para denunciar a supuesto vándalos..<br />
'''Por favor que alguien haga algo y pronto....o al menostenga en consideración este accionar permanente y dejen de validar los reportes del usuario.''' [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 02:59 6 oct 2025 (UTC)
;Respueta al comentario de abajo
::(no quiero que esto sea un foreo, pero hago este comentario para que esta denuncia <u>no se vaya por la ramas del caso puntual</u> sobre el que versa la respuesta)
{{pg|Virum Mundi}}: Aunque la denuncia no pasa por ahí, pero la tensión en el Metro de Santiago se ha cambiado de 750 Vcc a 1500 Vcc y de vuelta múltiples veces. Los cambios se realizan con relativa celeridad y la única documentación que queda disponible es precisamente la licitación y la especificación técnica de la misma (que fue lo provisto)...pero, vamos que estaremos de acuerdo que borrar todo pq hay un fuente obsoleta que no dice que en 2016 era diferente?
::Pero nuevamente, la denuncia no pasa por ahí. Esto es un ejemplo igual al caso de AxCh (descrito arriba) y muchísimso similares (que he visto/sufrido con el usuario y de los cuales hay una retahíla de protestas es su PD), en que revierte todo, trata a todo el mundo como vándalo, dice que hay que ir a la PD, y (si se digna a opinar en la PD - generalmente no lo hace), se limita a decir que tiene una fuente (por muy mala/obsoleta que sea) e ignora los argumentos en la discusión. Y luego recurre a tablones para pedir protecciones, denunciar vandalismo y así afianzar su versión. Es un mal uso y no te culpo a ti ni ningún sysop, porque es muy difícil darse cuenta del mal uso (repetitivo) que hace y a primera vista sí puede parecer correcto (y obviamente cómo el usuario hace múltiples denuncias que sí correctas...bueno...es más mucho difícil)...y por eso les pido por favor mucha atención con el usuario que le está haciendo daño a wikipedia. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 11:47 6 oct 2025 (UTC)
;Comentario admin
* No es mi intención intervenir en esta denuncia. Pero sí quiero aclarar, ya que fui mencionado por nombre, que la semiprotección de estos artículos se ha hecho por guerra de ediciones, pues no se puede llenar los historiales una y otra vez de modificaciones y reversiones. Aun así, antes de proteger el de la Línea 6, por pura curiosidad (me interesa el tema de ferrocarriles, aunque no particularmente el sistema metropolitano de Santiago de Chile), entré en una página de la compañía donde está indicado que actualmente los cables son "flexibles, unipolares, clase 5, de tensión de aislamiento de 750 V (fuerza) y 600 V (control) para 90ºC..." (y así sigue). También entré en la fuente proporcionada por las IP, un documento de finales del año pasado que detalla los pormenores de un proyecto (para mí, proyecto significa futuro). También leí la discusión, donde el denunciado de hecho sí intervino una vez, allí se proporciona como prueba una imagen realizada por el anónimo, almacenada en su Google Drive. Esta imagen de un visor digital colgado del techo no es una fuente creíble, no solo por ser fuente primaria, y no solo porque no se puede saber de dónde es (no pone el nombre del metro ni de la estación, solo un número colgado del techo, pero presumo de buena fe y asumo que es del lugar indicado), sino que en sí tampoco indica nada definitivo, puede estar por ejemplo en fase de pruebas o de desarrollo (teniendo en cuenta el poco tiempo transcurrido desde el documento mencionado) o de adaptación. Sí, obviamente puede ser también que ya está empleado, pero entonces hace falta una referencia que lo indique de verdad (no la de un proyecto). Insisto, no estoy aquí ni para debatir ni para valorar esta denuncia, solo dejar claro el motivo de la protección. las guerras de ediciones no pueden llevarse a cabo en los historiales de los artículos, invito a cualquiera a realizar las modificaciones necesarias en dichos artículos, si ha lugar, y/o participar en la discusión aportando las fuentes (al fin y al cabo estás páginas están semiprotegidas, cualquier usuario autoconfirmado puede intervenir en ellas). Por lo demás, lo dejo a otro admin. Saludos. <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 05:10 6 oct 2025 (UTC)
;Continúa con más casos:
:Nuevamente el usuario en acción. [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Protecci%C3%B3n_de_art%C3%ADculos/Actual#Historia_del_Metro_de_Santiago_2 Acá pidiendo protección en TAB] porque un "supuesto Vándalo" estaría agregando una imagen (absolutamente pertinente al artículo). Por favor dejen de ignorar esto y pónganle freno al usuario. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 16:59 2 nov 2025 (UTC)
; Respuesta
{{admintab|1=Prueba|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:25, 9 February 2026 (UTC)|3=}}
== Retomo reporte de CPP política ==
; Asunto
Hace menos de un mes [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Nombres_inapropiados_y_vandalismo_persistente/2025/09#CPP_pol%C3%ADtica reporté en el tablón] un caso de CPP política, que fue lamentablemente desestimado, pues el usuario {{u|Pptrc}} ha vuelto con lo mismo, controlar el artículo del partido chileno [[Evolución Política]] y ahora se crea una entrada con IA de [[Juan Manuel Santa Cruz]] sin mayor complicación, e incluso pasó por la revisión de un patrullero. Insisto en que esta cuenta no tiene otro objetivo que controlar y promover contenidos de políticos de la formación en la que tiene interés demasiado particular.
:Por favor: por qué se espera para resolver estas cosas? es evidente que {{u2|Taichi}} tiene razón, y habiendo un proceso [[Elecciones parlamentarias de Chile de 2025|eleccionario en curso]], es evidente que la CPP está editando artículos con motivos propagandísticos...y que dada la coyuntura, se deben tomar medidas con celeridad. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 20:57 30 sep 2025 (UTC) <small>ps: aclaro que mi intervención acá fue para agregar el antecedente de la urgencia, dada la coyuntura</small>
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 15:17 17 sep 2025 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Santos500p ==
; Asunto
Pido por favor que se tomen nuevas medidas para apaciguar el frenesí de ediciones del usuario {{u2|Santos500p}}, concernientes sobre todo con política de Perú, que [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n%3ASantos500p&diff=169860726&oldid=169762965 en los últimos días] ha llegado al punto de tener varios artículos y categorías creadas por él en [[WP:CDB|consultas de borrado]], algunas teniendo consenso comunitario a favor del borrado.
En una de las consultas señalé que [https://es.wikipedia.org/w/index.php?title=Wikipedia:Consultas_de_borrado/Deface_Per%C3%BA&diff=prev&oldid=169776828 el usuario lleva bastante rato desconociendo las líneas entre los diferentes proyectos], con varios intentos en el pasado de señalarle sobre ello, pero sigue en la mezcla de contenidos que podrían estar perfectamente en Wikinoticias, Wikisource e incluso Wikiquote, pero no hay nada que lo impida, aduciendo que puede entorugar cualquier cosa como artículo de Wikipedia, incluso riñendo con [[WP:REC]] o [[WP:SRA]]. De hecho, su página de discusión ha recibido en los últimos dos meses una cantidad difícil de cuantificar de [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n%3ASantos500p&diff=169860726&oldid=168959821avisos de borrado rápido, avisos de consultas de borrado y artículos sin relevancia], varios de ellos siendo borrados.
Esta situación ya suma a su <u>bloqueo parcial por dos años</u>, por lo que debería haber una restricción más certera que haga rectificar su proceder. Apelo a que el usuario pueda comprender que Wikipedia tiene bien delimitado [[WP:NO|sus noes]] y que debería él como usuario, ya no tan novato, entender esos límites. De lo contrario, dejo al encargo de un bibliotecario para que tome alguna medida extra para restringirlo.
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 11:34 10 oct 2025 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Usuario reincidente ==
; Asunto
* En marzo de este año, acudí al TAB por una serie de problemas en numerosos artículos creados por el usuario {{u|Ángel Luis Alfaro}}, [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Miscel%C3%A1nea/2025/06#Creaci%C3%B3n_de_art%C3%ADculos_con_varios_problemas ver aquí]. Ahora ha editado el artículo [[Alto Renacimiento]] con los mismos problemas por el cual puse esa denuncia en el TAB. Exceso de fotografías (173), referencias en las propias fotografías. Cientos de enlaces internos, algunas secciones son toda azul. Mal formato de las referencias, fuentes citadas (Fuentes citadas en Maniera moderna), usar como referencia artículos de wikipedia, véase la referencia 26. La sección notas es casi tan grande como el propio artículo. Y para terminar, no ha corregido ni uno solo de los artículos que ha creado anteriormente.
; Usuario que lo solicita
* [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 20:20 14 oct 2025 (UTC)
;Comentario
* {{ping|Ontzak}} No consigo entrar en el enlace (me va todo muy lento hoy), ¿es el mismo que resolví yo la última vez? <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 09:32 15 oct 2025 (UTC)
* {{ping|Virum Mundi}} si, el mismo. [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 13:55 15 oct 2025 (UTC)
** Ya veo, bueno, me pongo a ello, puede que tarde un rato. {{ping|Ángel Luis Alfaro}} por favor evita más ediciones hasta que se resuelva esta denuncia. Un saludo. <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 11:26 16 oct 2025 (UTC)
::{{comentario}} {{ping|Virum Mundi}}, a pesar del aviso, el usuario sigue [https://es.wikipedia.org/wiki/Especial:Contribuciones/%C3%81ngel_Luis_Alfaro editando]. [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 20:45 26 nov 2025 (UTC)
; Respuesta
{{admintab|$0}}
== Adrian Silvera ==
; Usuarios implicados
* {{u|Adrian silvera}}
; Motivo
Hace una década que este usuario agrega contenido mal escrito, sin referencias y muchas veces innecesario. Lo bloquearon tres veces por este motivo. Estuve un año insistiendo para que activara el autocorrector y así por lo menos subsanar el tema de la ortografía. Lo hizo hace poco, creo, pero el remedio fue peor que la enfermedad: ahora confunde adjetivos, sustantivos y verbos, y pone tildes en cualquier parte. Esto no sería tan grave de no ser porque se le advertí unas tres veces y sigue igual. Hoy le mandé un mensaje por ese tema y lo primero que hizo fue [https://es.m.wikipedia.org/w/index.php?title=The_Matrix_Reloaded&diff=prev&oldid=170118708 esto]. En otro caso lo interpretaría como una tomadura de pelo, pero no creo que lo haga a propósito. De todas maneras, alguna consecuencia tiene que tener, para aprender.
; Usuario que lo solicita
* [[Usuario:Minguu|Minguu]] ([[Usuario Discusión:Minguu|discusión]]) 20:16 22 oct 2025 (UTC)
; Respuesta
{{admintab|1=aaaa|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:54, 9 February 2026 (UTC)|3=}}
== Propuesta de desbloqueo para Lenis Felipe ==
; Asunto
* Hola. Por este medio quisiera proponer al colegio de bibliotecarios el desbloqueo local de {{u|Lenis Felipe}}, usuario bloqueado hace ya más de tres años por creación de páginas vandálicas. Lenis se encuentra con bloqueo global, por lo que para poder ser desbloqueado globalmente necesita ser desbloqueado de alguna de las wikis donde tiene bloqueos actualmente, entre ellas, Wikipedia en español.
:La propuesta la planteo porque, habiendo pasado un tiempo prudencial, puedo atestiguar que Lenis pareciera haber enmendado su rumbo y ha colaborado en reportar vía IRC, de manera privada, vandalismos, evasores de bloqueo y hasta sugerir cambios a filtros antiabusos para detener algunos abusadores de largo plazo. Particularmente lo ha hecho desde enero de 2024. Me parece que tal y como fue el caso de Sargento de Hierro (perdón que le nombre, pero me gusta destacar casos de usuarios que se corrigieron :)), podría ser positivo darle una segunda oportunidad para convertirse en un elemento positivo para la comunidad. Ante ello, propongo su desbloqueo local y quedo atento a cualquier propuesta de términos para ello, en cuenta restricción de crear páginas nuevas, o similares. Saludos,
; Usuario que lo solicita
* '''[[Usuario:Jake Park|''Jake Park'']]''' [[Archivo:Coat of arms of Costa Rica.svg|20 px]] [[Usuario Discusión:Jake Park|<span style="color: red;">'''Problem?'''</span>]] 01:00 29 oct 2025 (UTC)
;Comentarios de biblios
* Desde mi punto de vista, los usuarios que no hayan tenido actitudes vandálicas sistemáticas posteriores al bloqueo no deberían permanecer bloqueados más de tres años. '''Apoyo''' el posible desbloqueo. De todos modos, consulto: ¿sabes qué edad tiene el usuario? Porque no es lo mismo alguien que hizo esas tonterías a los 16 años que a los 60; en el primer caso, puede haber madurado rápidamente, mientras que si fuera ''"mayorcito"'' como quien escribe, los aprendizajes de comportamientos son más difíciles. --[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 02:03 29 oct 2025 (UTC)
* EMHO todos son susceptibles de cambiar, no quiere decir que todos lo hagan, pero uno de los 5 pilares nos pide presumir buena fe. {{Ok|Votum pro}}. [[Usuario:Saloca|Saloca]] ([[Usuario_Discusión:Saloca|<big>ངའི་གླེང་མོལ།</big>]]) 18:00 30 oct 2025 (UTC)
*
; Respuesta
(a rellenar por un bibliotecario)
== Unmuybuenusuario ==
<!-- ↑ RECUERDA COLOCAR UN TÍTULO A TU MENSAJE EN EL CUADRO «Asunto/encabezado» Y LUEGO PROCEDE A BORRAR ESTE MENSAJE. GRACIAS. -->
{{u|Unmuybuenusuario}} se registró el 28 de octubre de 2025, o sea hace 12 días. Desde el primer momento se dedicó a hacer mantenimiento y mandar artículos a borrar. El segundo día ya [https://es.wikipedia.org/w/index.php?title=Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Permisos/Actual&diff=prev&oldid=170247444 solicitó el flag de reversor con el argumento de : '' pese a mi muy breve tiempo en Wikipedia, desearía poseer el permiso de reversor para revertir de manera más fácil que usando el botón deshacer''], o sea que asegura que hace poco tiempo que está en Wikipedia pero ya conoce los tipos de flags que existen y dónde solicitarlos.
@[[Usuario:Edslov|Edslov]], le negó el permiso, obviamente, ya que en ese momento tenía menos de 48 horas de creada la cuenta, pero no solamente opina que la decisión no fue justa
sino que además conoce perfectamente el Café y fue directamente a quejarse porque no se le dio el permiso, para preguntar [https://es.wikipedia.org/w/index.php?title=Wikipedia:Caf%C3%A9/Archivo/Ayuda/Actual&diff=prev&oldid=170287227 ''¿Cuánto tiempo desde mi registro tiene que transcurrir para poder recibir el flag de reversor? ¿O cuántas ediciones?''].
Le pedí al usuario [https://es.wikipedia.org/wiki/Usuario_discusi%C3%B3n:Unmuybuenusuario que dejara de hacer mantenimiento] y él me dejó un mensaje protestando por que
[https://es.wikipedia.org/w/index.php?title=Usuaria_discusi%C3%B3n:Jaluj&diff=prev&oldid=170408787 no encuentra ninguna política que prohíba a un editor nuevo deshacer vandalismos o colocar plantillas de borrado rápido a artículos que cumplan alguno de los criterios de borrado rápido], lo cual es cierto, como tampoco hay ninguna política que prohiba a un usuario nuevo tener el flag de reversor, pero suponemos que para hacer este tipo de tareas se necesita tener experiencia y haber demostrado tener conocimientos para hacerlas bien. Por eso le pedí que se detenga y deje de hacer mantenimiento, porque si es un novato no podemos confiar en que lo haga.
Entonces me [https://es.wikipedia.org/w/index.php?title=Usuaria_discusi%C3%B3n:Jaluj&diff=prev&oldid=170408787 acusó de estar violando la políticas al morder a los novatos y no presumir buena fe]. Morder a los novatos es cuando se trata de una persona sin experiencia que todavía no conoce las normas y políticas de Wikipedia. Una persona novata no sabe ni que existe un Café, ni que existe un tablón para solicitar flags, ni que existe el flag de reversor ni que existe el "deshacer".
Pero a la vez me acusa de no presumir buena fe al sospechar que no es novato. Entonces, ¿en qué quedamos? Porque si es un novato, no debería estar haciendo mantenimiento y si no lo es, entonces yo no estaría presumiendo mala fe al sospechar que no lo es.
Esta cuenta me está difamando al dejar mensajes como [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n:A.piquerasm&diff=prev&oldid=170408867 este], porque además de acusarme de morder a un novato y de presumir mala fe me acusa por haber solicitado una VU y de haberlo "intimidado". Ahora resulta que por haberle pedido que deje de hacer mantenimiento y por haber pedido una VU yo soy la que viola las políticas y lo estoy "intimidando". Yo no lo acusé acusé ''gravemente de abuso a largo plazo'', yo solicité una VU porque sospecho que puede ser una LTA. Si no lo es, no tiene nada de qué preocuparse y si es un novato mucho menos. Solicito que se le haga un llamado de atención para que deje de difamarme a mis espaldas, ya que ni siquiera me enlazó para que yo no me enterara.
; Usuario que lo solicita
* [[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 18:17 10 nov 2025 (UTC)
* Te pido amablemente usuaria [[Usuario:Jaluj|Jalu]] una solución a este problema, porque yo no te estoy difamando, si conozco el café, el tablón, si se hacer reversiones, es porque fui anónimo y como usuario anónimo ya me dedicaba a hacer estas cosas, un usuario me sugiero visitar la página de cambios recientes y eso es lo que estoy haciendo, visitar los cambios recientes ¿Tengo prohibido deshacer vandalismos encontrados? Por cierto, no me indicaste cuales son las ediciones supuestamente arbitrarias, las ediciones que he hecho han sido deshacer vandalismos, yo no soy ni títere, ni evasor, ni mucho menos abuso a largo plazo, soy usuario completamente nuevo y esta es mi primera cuenta, y te recuerdo un fragmento de la página de usuarios títeres: '''Puede ser fácil identificar a un usuario títere, si muestra un conocimiento de las políticas, convenciones de Wikipedia y técnicas avanzadas de edición que no es de esperar en un novato (aunque debe presumirse buena fe: es posible que sea un usuario que haya colaborado en otra edición de Wikipedia, en alguna otra wiki o <u>que haya participado mucho tiempo como anónimo</u>)''' (subrayado mío). Si conozco como deshacer vandalismos, es porque antes editaba como anónimo, y esta cuenta fue creada para ayudar a Wikipedia, de ninguna manera la cree para LTA o ediciones arbitrarias. ¿Cómo propones que se solucione este problema y que tipo de ediciones puedo hacer y que tipo de ediciones no puedo hacer? --[[Usuario:Unmuybuenusuario|Unmuybuenusuario]] ([[Usuario Discusión:Unmuybuenusuario|discusión]]) 23:27 10 nov 2025 (UTC)
:{{comentario}}: [https://es.wikipedia.org/w/index.php?title=Wikipedia:Solicitudes_de_verificaci%C3%B3n_de_usuarios&oldid=170625007#Evasi%C3%B3n_de_bloqueo:_Cris2020 Resultado de la SVU]. --'''[[user:Stïnger|<span style="text-shadow:#FFD700 1px 1px 2px; class=texhtml"><span style="font-family:'Calibri';color:black">Stïnger</span></span>]]''' <sup>[[Archivo:Bureau kage.svg|15px|link=User talk:Stïnger]]</sup> 00:58 24 nov 2025 (UTC).
; Respuesta
{{admintab|Al no ser un caso reciente (ya pasaron algunos días) apercibo a {{u2|Unmuybuenusuario}} de [[WP:PBF]] primeramente y posterior a [[WP:PPBF]]. Ambos juicios caen en violaciones a [[WP:E]] y [[WP:CIV]] (supongo al ya haber editado como IP sabrá por que, por lo que en caso de reincidencia podría haber sanción. En cuanto al flag, queda al criterio del bibliotecario que lo otorga, no hay tiempo ni cuota determinada, pero es bastante obvio que más sabe el diablo por viejo que por diablo, yo tampoco lo habría otorgado.|[[Usuario:Saloca|Saloca]] ([[Usuario_Discusión:Saloca|<big>ངའི་གླེང་མོལ།</big>]]) 18:09 26 nov 2025 (UTC)}}
== Expulsado de la Wikipedia en inglés viene acá a hacer lo mismo... ==
;Usuarios
* {{u|SocialQuote}}
* {{u|2800:484:7380:0:0:0:0:0/44}}
; Asunto
Tanto [https://en.wikipedia.org/wiki/Special:Contributions/SocialQuote la cuenta registrada] como [https://en.wikipedia.org/wiki/Special:Contributions/2800:484:7380:0:0:0:0:0/44 el rango IP] se encuentran sancionados desde septiembre en la Wikipedia en inglés, por ediciones conflictivas, reversiones sin sentido e incluso insultos y amenazas.
Ya acá [[Usuario discusión:2800:484:7385:F0:95EE:CA0B:4429:B24C|ha causado problemas como anónimo en junio]] y la cuenta [https://es.wikipedia.org/w/index.php?title=Scarface_(pel%C3%ADcula_de_1983)&diff=prev&oldid=168285955 incluso ripostó contra un bibliotecario], y [https://es.wikipedia.org/w/index.php?title=Harry_Potter_y_el_c%C3%A1liz_de_fuego&diff=prev&oldid=169807011 está constantemente] [https://es.wikipedia.org/w/index.php?title=Dinero_negro&diff=prev&oldid=170282821 revirtiendo al bot de mantenimiento]. Nótese que los temas que edita tanto la cuenta como la IP son las mismas (series de TV y películas), y las sanciones aplicadas en en.wiki fueron hechas el mismo día.
Debido a esta coincidencia y la situación que está persistiendo ahora en la Wikipedia en español, pido que se tomen medidas.
:{{comentario}} Añado [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n:Farisori&diff=prev&oldid=170531619 otro mensaje bastante incordiante contra otro bibliotecario] haciéndolo suponer entre líneas que no sabe redactar artículos. '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 00:10 18 nov 2025 (UTC)
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 04:18 17 nov 2025 (UTC)
; Respuesta
{{Hecho|1=Bloqueado}} por Rafstr. [[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 01:40 19 nov 2025 (UTC)
== Borrar y ocultar datos sensibles en página de usuario ==
; Asunto
Pido con carácter de urgencia que algún bibliotecario [https://es.wikipedia.org/w/index.php?title=Usuario:Dalma_Huerta_Mercado_Calder%C3%B3n&diff=prev&oldid=170526877 oculte datos sensibles y muy personales] de [[Usuario:Dalma Huerta Mercado Calderón|esta página de usuario]], ya que es aún una niña (ni siquiera es adolescente). No creo que sea consciente de que lo que hace es peligroso a su edad.
Añado que ya [https://es.wikipedia.org/wiki/Usuario_discusi%C3%B3n:Dalma_Huerta_Mercado_Calder%C3%B3n#Informaci%C3%B3n_personal no es la primera vez que la pillan colgando datos personales], el año pasado hizo lo mismo. Si toca hacer alguna medida administrativa que evite que la menor siga exponiendo sus datos sin cuidado, adelante.
; Comentarios
No soy bibliotecario, pero {{ping|Taichi}} creo que lo mejor es mandar un correo a [[Wikipedia:Supresores|oversight]], o como mínimo realizar la solicitud en algún lugar menos visible (como IRC). --[[Usuario:Xacaranda|Xacaranda]] [[Usuario discusión:Xacaranda|(mensajes)]] 18:56 18 nov 2025 (UTC)
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 04:22 17 nov 2025 (UTC)
; Respuesta
{{admintab|1={{Sí}}, dada la excesiva información personal y la imposibilidad de ocultar la última edición, opté por el borrado de la PU. También dejé un mensaje a la usuaria. En caso de reincidir, aplicaría una medida, como un bloqueo parcial, para impedir que vuelva a crear su página de usuario. Un saludo,|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 01:55 19 nov 2025 (UTC)}}
== LTA ==
; Usuarios implicados
* {{u|Mauro08L}}
; Motivo
Hmm, otra vez, otro títere más de {{u|Claudio1098}}.
; Usuario que lo solicita
* —<span style="font-family:Trebuchet MS;font-size:95%">[[Usuario:Mαrti|<span style="color:#636;">Mαrti</span>]] <span style="color;background:#CBE2F7;border-radius:9px;"> [[Usuario discusión:Mαrti|'''ϟ''']] </span></span> 20:23 18 nov 2025 (UTC)
; Respuesta
{{admintab|1={{Hecho}}|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 01:42 19 nov 2025 (UTC)}}
== Recreación reiterada ==
; Asunto
* El usuario {{u|Archivoteleditor}} insiste en recrear el mismo programa de televisión con distintas variaciones del título, véase [[Tentaculos]], [[Tentáculos]], [[Ni que fuéramos tentáculos]] y [[Ni Que Fuéramos Tentáculos]], contabilizo más de una docena de recreaciones, ya se le avisó de un posible conflicto de interés.
:En cuanto al artículo, se trata de un programa que duró apenas 3 meses en antena, aunque El País y EuropaPress son referencias fiables, mencionan el programa superficialmente.
; Usuario que lo solicita
* '''C:\>''' [[Usuario:A.piquerasm|A.piquerasm]] '''[''' [[Usuario Discusión:A.piquerasm|Discusión]] ''']''' 16:43 19 nov 2025 (UTC)
; Respuesta
{{admintab|{{hecho}}. Inhabilitado de crear páginas. Un saludo.
|2= <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 19:49 19 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170580247]]
; Motivo
Lenguaje soez
; Usuario que lo solicita
* [[Usuario:Casisgaal|<span style="font-size:black 3px 1px 3px; font-variant:Corbel; color:blue; text-shadow:cyan 2px 1px 2px">Casisgaal</span>]] [[Usuario discusión:Casisgaal|(Discusión)]] 16:16 20 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Edición ocultada y cuenta bloqueada. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 00:36 21 nov 2025 (UTC)}}
== Anónimo escurridizo ==
; Asunto
Un anónimo que cambia de cuenta temporal y de IP lleva dos meses haciendo cambios sin sentido en partidos políticos de Colombia [https://es.wikipedia.org/w/index.php?title=Independientes_(Colombia)&action=history como este], [https://es.wikipedia.org/w/index.php?title=Partido_Comunista_de_Colombia_-_Marxista_Leninista&diff=prev&oldid=170580251 cambiando un «es» por «fue»] (haciendo entender que ya no existen), pero sin aportar pruebas que los partidos ya no están activos. Como no está aportando nada [[WP:VER|que lo sustente]], se le está revirtiendo pero insiste en reponerlo, llegando a una conducta que no se puede considerar como constructiva.
Además, nos pone en prueba con el sistema de cuentas temporales ya que no sólo está cambiando de cuenta temporal, sino de IP, por lo que dejo en consideración que hacer. Estás serían las direcciones en cuestión: [https://es.wikipedia.org/wiki/Especial:IPContributions/191.108.3.30], [https://es.wikipedia.org/wiki/Especial:IPContributions/191.108.59.86], [https://es.wikipedia.org/wiki/Especial:IPContributions/152.201.226.108] y [https://es.wikipedia.org/wiki/Especial:IPContributions/152.202.79.18].
Previo a la instauración de cuentas temporales también editó con las siguientes IPs:
* {{u|152.201.203.233}}
* {{u|186.113.76.107}}
* {{u|191.111.9.153}}
Es posible que incluso se considere en semiproteger si en caso tal el anónimo siga por cambiar de IP y continúe con esta situación.
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 16:49 20 nov 2025 (UTC)
; Respuesta
{{admintab|{{prot|60}}|[[Usuario:Saloca|Saloca]] ([[Usuario_Discusión:Saloca|<big>ངའི་གླེང་མོལ།</big>]]) 18:19 26 nov 2025 (UTC)}}
== Acoso ==
; Usuarios implicados
* {{u|~2025-35257-44}}
* {{u|~2025-35202-10}}
; Motivo
Acoso a un usuario
; Usuario que lo solicita
* [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 21:57 20 nov 2025 (UTC)
; Respuesta
{{admintab|1={{Hecho}}|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 16:49 21 nov 2025 (UTC)}}
== Acoso ==
; Usuarios implicados
* {{u|Narsenopoulos}}
; Motivo
{{diff|170585395|Acoso a un usuario}}
; Usuario que lo solicita
* [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 22:03 20 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Usuario bloqueado por Virum Mundi. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 00:28 21 nov 2025 (UTC)}}
== Ocultar ediciones ==
; Asunto
* [[Especial:Diff/169433403]]
* [[Especial:Diff/170587004]]
; Motivo
El artículo suele ser vandalizado mediante la inclusión de nombres completos de particulares en esta lista, entiendo que motivados por algún tipo de rencilla personal. Creo que es conveniente ocultarlos ya que que, de lo contrario, esos nombres quedan indexados y accesibles por internet, asociados a una lista de violadores en serie, lo cual puede tener implicaciones en su vida personal.
; Usuario que lo solicita
* [[Usuario:Nacaru|Nacaru]] [[Archivo:Noto Emoji KitKat 2601.svg|19px]] ([[Usuario_discusión:Nacaru|discusión]]) 00:23 21 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Ediciones ocultadas. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 00:39 21 nov 2025 (UTC)}}
== Solicitud para corregir redirecciones dobles en [[Ciudad del Cuzco]] y [[Cusco, Perú]] ==
Hola. Por favor, ayúdenme a solucionar el problema de las redirecciones dobles en las páginas de redireccionamiento [[Ciudad del Cuzco]] y [[Cusco, Perú]]. Gracias. [[Especial:Contribuciones/~2025-35342-08|~2025-35342-08]] ([[Usuario discusión:~2025-35342-08|discusión]]) 04:33 21 nov 2025 (UTC)
;Respuesta
{{admintab|1={{Hecho}}|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 04:45 21 nov 2025 (UTC)}}
== Me sentí acosada por Jaluj, por favor, paciencia con los novatos ==
; Asunto
Soy una nueva editora (bueno, era una nueva editora) estudiante de 5º de Veterinaria y entré en la wikipedia con mucha ilusión.
Detecté un artículo escrito llamado “Comida para gatos” lleno de enlaces spam a marcas comerciales, así como un claro sesgo pro pienso alabando sus virtudes.
Después de leerme todos los tutoriales edité el artículo intentando ser objetiva, eliminado enlaces spam y texto publicitario.
Un editor deshizo todo mi trabajo dando la razón de que yo había eliminado referencias. https://es.wikipedia.org/w/index.php?title=Comida_para_gatos&diff=170390013&oldid=170376180
Vi la posibilidad de aprender de mis errores y le pregunté por que consideraba fiables (ya que repuso todos los enlaces spam) Eran enlaces a artículos como “los 8 mejores marcas de piensos” (que es publicidad de 8 marcas de piensos, con enlaces a afiliados de Amazon), o webs que no funcionaban etc etc
Me contestó que había eliminado todo mi trabajo porque yo había añadido 1 referencia “por tratarse de blog y por tanto no considerarse fiable”. Era un enlace a un artículo de una clínica veterinaria como había 3 o 4 igual en el artículo. https://clinicaveterinarium.es/el-gato-es-omnivoro-o-carnivoro/
No entendí que para eliminar ese enlace se eliminara todo el trabajo realizado en el artículo, y sobre todo que se repusieran los enlaces spam, y por qué esos enlaces spam eran fuentes fiables.
Para resumir, volví a poner el artículo tal y como yo lo había escrito (eliminado más de 10 enlaces spam) quitando el enlace a dicha clínica, sospechando que era ese el problema, y el editor me agradeció la edición. Seguí sin aprender. Pero no me quejo de este editor.
Y aquí viene mi ruego.
Posteriormente a todo esto, y tras muchos días después, apareció el editor Jaluj, https://es.wikipedia.org/wiki/Usuario_discusi%C3%B3n:LaVeterinaria , donde me acusó de faltar a la etiqueta y falta de civismo al preguntar al editor. Pedí disculpas por mis preguntas si habían molestado y volví a decir que mi intención era aprender y por eso preguntaba.
Tras mi respuesta, el editor Jaluj fue a una edición mía en otro artículo, y la eliminó, diciendo que no era una fuente fiable https://es.wikipedia.org/w/index.php?title=Perro_de_caza&curid=707821&diff=170565115&oldid=170545527 La ACCM es un organismo avalado por el Gobierno https://servicio.mapa.gob.es/arca/download.html?id=20338485&contentType=application/pdf que reconoce oficialmente a los perros de raza, así que supongo que son una fuente entendida del tema para hablar de razas.
Además de eliminar esa información, me vuelve a acusar de falta de civismo y de etiqueta, por lo que me declaré Retirada y así se lo dije como respuesta, ya que no entendía nada, me di cuenta que no podía aprender y me sentía atacada.
He recibido un email de wikipedia donde me avisa que el editor Jaluj obviando todas mis disculpas y petición de información sobre la organización oficial sólo me exige el nombre de mi mentor.
Solo pido un poco de paciencia y empatía con los nuevos editores, necesitamos empatía y ayuda para editar, no acusaciones de mala fe y falta de civismo. Yo lo he intentado, cuiden a los que vengan nuevos detrás de mi. Gracias por leer.
; Usuario que lo solicita
--[[Usuario:LaVeterinaria|LaVeterinaria]] ([[Usuario Discusión:LaVeterinaria|discusión]]) 14:01 21 nov 2025 (UTC)
;Comentario adicional
Permito añadir que {{u2|Leoncastro}} y mi persona [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n%3ALaVeterinaria&diff=170608554&oldid=170595929 hemos tratado separadamente de mediar en el asunto], pero la usuaria está demasiado a la defensiva e incluso [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n%3ATaichi&diff=170606470&oldid=170599847 me dejó esta contestación], incluso cuando buscaba seriamente ayudarle. Lo que denoto en sus contestaciones además, es que ella como estudiante universitaria dice tener algún "mentor" en su universidad (pero no está adscrito acá), por lo que estoy deduciendo que hay alguna orientación mal ejecutada y pareciera que la estudiante está obligada a editar como sea, a expensas de que cualquier patrullero o bibliotecario sea maltratado de esta manera si le revisan sus contribuciones. Ojalá haya alguna forma de que se haga entender y ver ante las instancias de qué o quién movió institucionalmente a la alumna a que pasara esto. '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 14:35 22 nov 2025 (UTC)
; Respuesta
{{admintab|1={{No}}. {{U|LaVeterinaria}}, no me parece que, en ningún momento, Jaluj o algún otro de los varios usuarios que han buscado orientarte te hayan «maltratado» o dado motivos para sentirte intimidada o acosada. Más bien, algunas de tus interacciones muestran que, ciertamente, pareces estar a la defensiva y que podrían malinterpretarse. Supongo que el primer mensaje de Jaluj estuvo motivado por una de tus respuestas a Casisgaal —«¿Por qué escribir texto apoyado en enlaces verificables como la universidad etc.? ¿La wikipedia española se basa en la inglesa y no podemos editar sino solo traducir?»—, que se alejó del [[Wikipedia:Civismo|civismo]] esperado en las interacciones entre usuarios en Wikipedia. Asumiste que el mensaje de Jaluj estuvo motivado por tu «insistencia por preguntar lo que no entendía», cuando claramente te explicó, de forma amable y con la paciencia que en varias ocasiones has pedido, que fue por tu tono. Coincido con Jaluj en que parece que no lees los mensajes completos.
<br>
Si preguntó Jaluj sobre tu «mentor», que tú misma mencionaste en la conversación con Casisgaal, es porque, ciertamente después de estas interacciones que has tenido, surge la duda de quién es, si es usuario de Wikipedia y si tiene conocimiento de las políticas que la rigen. Parece que no. Por ello, sería mejor que aprovecharas herramientas como el [[Wikipedia:Programa de tutoría|programa de tutoría]] —cabe destacar que {{u|Ezarate}} ya amablemente se ofreció a ayudarte con tus ediciones—. Todo lo anterior, ya te lo había explicado Leoncastro. Además, él te dejó un extenso mensaje donde explicó y trató de mediar. Tu respuesta y actuar subsecuente es, cuanto menos, desconcertante.
<br>
En suma, descarto la denuncia. {{U|LaVeterinaria}} no me parece que el tono que uses y la forma de interactuar que tienes con otros usuarios, que han intentando orientarte, sea adecuada o benéfica para la enciclopedia. Así como insistes en pedir paciencia, ofrécela a los demás y no acuses de intimidación o denuncies tan fácilmente. Aprovecha los mensajes en los que se te ha explicado un poco sobre la enciclopedia, aprovecha el programa de tutoría o los ofrecimientos de usuarios como Ezarate. No continúes con esta forma de actuar porque fomenta conflictos y puede conducir a medidas que nadie quiere que se tengan que tomar. Un saludo,|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 22:00 22 nov 2025 (UTC)}}
== LTA ==
; Usuarios implicados
* {{u|Henrysmithwa5}}
; Motivo
LTA aerolíneas
; Usuario que lo solicita
* [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 20:15 21 nov 2025 (UTC)
; Respuesta
{{admintab|{{ok}} por Jake Park. |--'''[[Usuario:Geom|<b style="padding: 3px 8px; background: linear-gradient(135deg, red, yellow); color: white; border-radius: 0px 7px 0px 7px">Geom</b>]]''' [[Usuario discusión:Geom|<span style="font-size:100%;color: brown;">'''(discusión)'''</span>]] 00:38 22 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170607263]]
; Motivo
Etiqueta
; Usuario que lo solicita
* [[Usuario:CharlieRaMx|CharlieRaMx]] ([[Usuario Discusión:CharlieRaMx|discusión]]) 12:02 22 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Edición ocultada. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 12:30 22 nov 2025 (UTC)}}
== Ocultar ediciones ==
; Usuarios implicados
* {{u|Zanahorita Extraida}}
; Motivo
Pido que se oculten todas las ediciones de este títere bloqueado, quien como siempre ha lanzado comentarios denigrantes, ofensivos y hasta insultos.
; Usuario que lo solicita
* [[Usuario:Dinamino|Dinamino]] ([[Usuario Discusión:Dinamino|discusión]]) 18:08 23 nov 2025 (UTC)
; Respuesta
{{Hecho}} por Saloca. [[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 20:00 23 nov 2025 (UTC)
== LTA ==
; Usuarios implicados
* {{u|Patthenry5}}
; Motivo
LTA aerolíneas
; Usuario que lo solicita
* [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 18:24 23 nov 2025 (UTC)
; Respuesta
{{Hecho}} por MiguelAlanCS. [[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 19:59 23 nov 2025 (UTC)
== Ocultar ediciones ==
; Asunto
* [[Especial:Diff/170589208]]
* [[Especial:Diff/170589204]]
; Motivo
Vandalismo
; Usuario que lo solicita
* [[Usuario:CarlosEduardoPA|<span style="font-size:80%;background:#000;color:#fff;border-radius:25px;padding:3px 8px;">CarlosEduardoPA</span>]] [[Usuario discusión:CarlosEduardoPA|✉️]] 22:29 23 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Ediciones ocultadas. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 00:26 24 nov 2025 (UTC)}}
== MediaWiki:Jsonconfig-use-category ==
<!-- ↑ RECUERDA COLOCAR UN TÍTULO A TU MENSAJE EN EL CUADRO «Asunto/encabezado» Y LUEGO PROCEDE A BORRAR ESTE MENSAJE. GRACIAS. -->
; Asunto
* {{a|MediaWiki:Jsonconfig-use-category}}
* Please delete the page as it is no longer necessary following [[:phab:T378352|T378352]] ([[:Category:Wikipedia:Páginas que usan la extensión JsonConfig|the category]] has already been deleted). See also [[:m:Steward requests/Miscellaneous#Category:Pages using the JsonConfig extension]].
; Usuario que lo solicita
* [[Usuario:NguoiDungKhongDinhDanh|NguoiDungKhongDinhDanh]] ([[Usuario Discusión:NguoiDungKhongDinhDanh|discusión]]) 23:09 23 nov 2025 (UTC)
; Respuesta
{{admintab|{{ok}}|--'''[[Usuario:Geom|<b style="padding: 3px 8px; background: linear-gradient(135deg, red, yellow); color: white; border-radius: 0px 7px 0px 7px">Geom</b>]]''' [[Usuario discusión:Geom|<span style="font-size:100%;color: brown;">'''(discusión)'''</span>]] 09:01 24 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170617475]]
; Motivo
Vandalismo
; Usuario que lo solicita
* [[Usuario:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">'''Mauricio C.'''</span>]] [[Usuario discusión:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">(discusión)</span>]] 23:46 23 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Edición ocultada por Virum Mundi. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 00:22 24 nov 2025 (UTC)}}
== Plantillas mantenidas sin justificación en Conservatorio de Música de la Universidad Austral de Chile ==
; Asunto
Solicito la intervención de un bibliotecario respecto al artículo [[Conservatorio de Música de la Universidad Austral de Chile]].
El usuario Ontzak colocó dos plantillas (promocional e irrelevante) el día 18 de noviembre. Desde entonces el artículo ha sido completamente reescrito, reforzado con referencias académicas y eliminado el contenido que podía ser de estilo promocional e irrelevante. Conforme a lo indicado en las propias plantillas, abrí hilo en la página de discusión solicitando consenso para su retirada. El usuario no ha respondido pese a haber sido notificado y mencionado en dos ocasiones.
; Motivo
El comportamiento observado, colocar plantillas, no responder a la discusión y bloquear de facto la retirada, encaja en lo descrito en [[WP:DUEÑO]]. A día de hoy las razones originales ya no se sostienen, pero las plantillas permanecen en el artículo sin justificación actual y el editor que las colocó evita participar en la discusión.
; Usuario que lo solicita
[[Usuario:Hoppedup|Hoppedup]] ([[Usuario Discusión:Hoppedup|discusión]]) 12:26 24 nov 2025 (UTC)
Solicito que un bibliotecario revise el caso:
• si procede, retire las plantillas,
• y si fuese necesario, recuerde al usuario implicado la obligación de participar cuando se cuestiona una plantilla mantenida.
Gracias.
; Respuesta
{{admintab|1={{Hecho}}. Por lo demás, todos sabemos cómo hace las cosas {{u2|Ontzak}}; sería mejor que las hiciera con un poco más de intercambio con los demás, pero no se le puede pedir a los editores lo que no pueden o no quieren aportar en Wikipedia (editar sigue siendo una actividad voluntaria, todavía). En mi personal opinión, es mejor tenerlo haciendo lo que hace que no tenerlo, de modo que lo más que podemos hacer es volverlo a invitar a ser un poco más comunicativo. En cuanto a lo de WP:DUEÑO, me parece que te has pasado de largo unos cuantos kilómetros en tu interpretación; un poco más de calma, por favor. Gracias por tu mensaje.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 13:10 24 nov 2025 (UTC)}}
== Spam incesante ==
<!-- ↑ RECUERDA COLOCAR UN TÍTULO A TU MENSAJE EN EL CUADRO «Asunto/encabezado» Y LUEGO PROCEDE A BORRAR ESTE MENSAJE. GRACIAS. -->
; Asunto
* Rango con decenas de ediciones spam, al menos unas 34 desde marzo de este año.
* {{u|89.214.0.0/17}}
* [[Especial:IPContributions/89.214.0.0/17]]
; Usuario que lo solicita
* [[Usuario:Xacaranda|Xacaranda]] [[Usuario discusión:Xacaranda|(mensajes)]] 18:58 25 nov 2025 (UTC)
; Respuesta
{{admintab|{{Sí|He aplicado un bloqueo parcial a los artículos objeto de spam}}.|2=[[Usuario:Montgomery|Montgomery]] ([[Usuario Discusión:Montgomery|discusión]]) 19:04 25 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170663031]]
; Motivo
Transgresión de las reglas de etiqueta.
; Usuario que lo solicita
* [[Usuario:Dinamino|Dinamino]] ([[Usuario Discusión:Dinamino|discusión]]) 19:17 25 nov 2025 (UTC)
; Respuesta
{{admintab|$oc|2= <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 20:09 25 nov 2025 (UTC)}}
== Solicitar traslado ==
; Asunto
* Solicito el traslado de [[CITEDEF]] a [[Instituto de Investigaciones Científicas y Técnicas para la Defensa]], siguiendo la recomendación de la [[Wikipedia:Convenciones de títulos|convención de títulos]] de evitar el uso de acrónimos y siglas siempre que se pueda.
; Usuario que lo solicita
* [[Usuario:Comecaballos|Comecaballos]] ([[Usuario Discusión:Comecaballos|discusión]]) 00:17 26 nov 2025 (UTC)
; Respuesta
{{admintab|{{hecho}}|--[[Usuario:Ezarate|Esteban]] ([[Usuario Discusión:Ezarate|discusión]]) 11:58 26 nov 2025 (UTC)}}
== Cuenta de "propósito particular" ==
; Asunto
* No tengo del todo claro si [https://es.wikipedia.org/w/index.php?title=Especial:Registro/block&page=Usuario%3AInfohisto esto va acá] o a esta altura debería reportarse como vandalismo. Ver sus ediciones de hoy, y sus resúmenes de edición, en {{a|Caporales}} y {{a|Tundiqui}}. Esta cuenta, que ya fue identificada como lo que es, definitivamente no tiene otro propósito aquí que el que ya es evidente. Y lo ha hecho ya en varios artículos.
Mirando su página de usuario veo que tres administradores ya han interactuado con él. Así que aprovecho para citarlos: {{u|Tector}}, {{u|Saloca}} y {{u|Marcelo}}
; Usuario que lo solicita
* [[Usuario:Rastamby|Rastamby]] ([[Usuario Discusión:Rastamby|discusión]]) 02:34 26 nov 2025 (UTC)
; Respuesta
{{admintab|1={{Hecho}}, ya fue suficiente: usuario expulsado y artículos protegidos a largo plazo. Gracias por el aviso.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 02:43 26 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170670252]]
; Usuario que lo solicita
* [[Usuario:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">'''Mauricio C.'''</span>]] [[Usuario discusión:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">(discusión)</span>]] 04:58 26 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Edición ocultada. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 05:04 26 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170670276]]
; Usuario que lo solicita
* [[Usuario:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">'''Mauricio C.'''</span>]] [[Usuario discusión:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">(discusión)</span>]] 05:00 26 nov 2025 (UTC)
; Respuesta
{{admintab|1=Prueba|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:26, 9 February 2026 (UTC)|3=}}
== Solicitud para corregir redirecciones dobles en [[Departamento de Cusco]] y [[Provincia de Cusco]] ==
Hola. Por favor, ayúdenme a solucionar el problema de las redirecciones dobles en las páginas de redireccionamiento [[Departamento de Cusco]] y [[Provincia de Cusco]]. Gracias. [[Especial:Contribuciones/~2025-36297-96|~2025-36297-96]] ([[Usuario discusión:~2025-36297-96|discusión]]) 05:35 26 nov 2025 (UTC)
== CDI ==
; Usuarios implicados
* {{u|JALGUERRERO}}
; Motivo
Claro conflicto de interés. Sus ediciones se centran en el artículo que lleva su nombre
; Usuario que lo solicita
* [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 10:53 26 nov 2025 (UTC)
; Respuesta
{{admintab|{{Ok}}, hecho por {{u2|Virum Mundi}}; no puedo creer nos duró 15 años.|[[Usuario:Saloca|Saloca]] ([[Usuario_Discusión:Saloca|<big>ངའི་གླེང་མོལ།</big>]]) 18:27 26 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170680869]]
; Usuario que lo solicita
* [[Usuario discusión:Divinations|Divinations]] 21:35 26 nov 2025 (UTC)
; Respuesta
{{admintab|1=Ejemplo de resolución de solicitud que menciona a {{ping|Nacaru}}.|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:39, 9 February 2026 (UTC)|3=}}
== varias ediciones ==
; Asunto
* [[Especial:Diff/619272]]
; Motivo
Prueba de texto
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:45, 20 February 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Ocultar edición [[Especial:Diff/619272|619272]] ==
; Asunto
* [[Especial:Diff/619272]]
; Motivo
JHVBIKUHGVIK
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:47, 20 February 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Ocultar edición 619272 ==
; Asunto
* [[Especial:Diff/619272]]
; Motivo
VXCV XZVZCVZC
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:48, 20 February 2026 (UTC)
; Respuesta
{{admintab|1=OKIII|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:49, 20 February 2026 (UTC)|3=}}
== Ocultar edición 684158 ==
; Asunto
* [[Especial:Diff/684158]]
; Motivo
kjanxkajsncxa
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:34, 26 February 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Prueba de toro túitulo ==
; Usuarios implicados
* {{u|Sergio Enrollment 2}}
; Motivo
Prueba de otra raźon
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:55, 27 February 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Otra prueba de título más ==
; Usuarios implicados
* {{u|Sergio Enrollment 2}}
; Motivo
Desarrollando razón
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:55, 27 February 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== k,jnkjjn ==
; Usuarios implicados
* {{u|Dicto23456}}
; Motivo
lknmlkj lkjlk jkl
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:59, 27 February 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Otra denuncia la que sea ==
; Usuarios implicados
* {{u|Cenarium}}
; Motivo
A ver qué tal
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 01:08, 27 February 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Ocultar ediciones 74252,671081,671082 y 74252 ==
; Asunto
* [[Especial:Diff/74252]]
* [[Especial:Diff/671081]]
* [[Especial:Diff/671082]]
; Motivo
Motivo cualquiera
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 18:43, 2 March 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Ocultar ediciones 74252, 74251, 89098 y 74252 ==
; Asunto
* [[Especial:Diff/74252]]
* [[Especial:Diff/74252]]
* [[Especial:Diff/74251]]
* [[Especial:Diff/89098]]
; Motivo
Ejemplo
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 18:45, 2 March 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Ocultar edición 74252 ==
; Asunto
* [[Especial:Diff/74252]]
; Motivo
qeasdsa
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 18:46, 2 March 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Ocultar ediciones 74251 y 74252 ==
; Asunto
* [[Especial:Diff/74252]]
* [[Especial:Diff/74251]]
; Motivo
asdAD SADAS
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 18:46, 2 March 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Ocultar ediciones 74253, 74254, 74255, 74256 y 74252 ==
; Asunto
* [[Especial:Diff/74253]]
* [[Especial:Diff/74254]]
* [[Especial:Diff/74255]]
* [[Especial:Diff/74256]]
* [[Especial:Diff/74252]]
; Motivo
A ver si aparecen en el mismo orden.
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 18:52, 2 March 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
5tdbiro3gzo8bapew3qku1uj7p9kfci
737571
737570
2026-04-11T00:12:31Z
Nacaru
54746
Resolviendo solicitud «[[Wikipedia:Tablón_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Miscelánea/Actual#Retomo_reporte_de_CPP_política|Retomo reporte de CPP política]]» mediante [[WP:TL|Twinkle Lite]]
737571
wikitext
text/x-wiki
<!-- AVISO: No semiproteger la miscelánea del tablón pues aquí redirigen muchas plantillas y avisos en páginas varias para que los novatos puedan aportar o realizar consultas que sólo bibliotecarios pueden resolver -->
<noinclude>{{Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Plantillas/Cabecera}}
{{Archivado automático
|Destino=Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Miscelánea/AAAA/MM
|Días a mantener=7
}}
== Situación extraña con tinte político ==
; Asunto
Desde 2019 aproximadamente se ha visto un grupo de IPv6 dentro del rango {{u|2804:14C:0:0:0:0:0:0/32}} editando y tratando de manipular contenidos políticos controvertidos (específicamente en [[Fascismo en América]] y otros más), de hecho por lo que se ve [[Discusión:Fascismo en América|aquí]] el anónimo se expresa de una manera particular sin saber siquiera español y sólo deja links sin mayor explicación. Adicionalmente, el anónimo está constantemente dejando mensajes a {{u2|Raimundo57br}} haciendo una serie de solicitudes de modificaciones a artículos de tinte político (sobre todo si son relativos a la derecha o izquierda política). Pero cuando vemos más a profundidad, vemos otras IPs como {{u|187.20.115.154}} dejando lo mismo al usuario, o este [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n:Raimundo57br&diff=prev&oldid=150518775 mensaje] de Raimundo57br dirigido a otra cuenta haciendo ping, pero en su propia discusión en un intento de coordinación de su desbloqueo. Hago acotar que Raimundo57br [https://pt.wikipedia.org/wiki/Especial:Contribui%C3%A7%C3%B5es/Raimundo57br está expulsado de la Wikipedia portuguesa desde el 2022], luego de múltiples problemas allá y numerosos bloqueos temporales.
También, que la Wikipedia portuguesa maneja estrictamente el uso de direcciones anónimas y [https://pt.wikipedia.org/wiki/Usu%C3%A1rio(a):2804:14C:0:0:0:0:0:0/32 todo el rango 2804:0:0:0:0:0:0:0/19] se encuenta bloqueado desde 2020. Existe una posibilidad de que haya una inusual coordinación entre anónimos y Raimundo57br para manipular artículos de política en Wikipedia en español y la Wikipedia portuguesa (a partir de una tercera cuenta), ante la imposibilidad de ambos entes (ya que se les hace más cómodo intervenir acá).
Incluyo al reporte que [https://es.wikipedia.org/w/index.php?title=Discusi%C3%B3n:Fascismo_en_Am%C3%A9rica&diff=prev&oldid=168802559 con estos] [https://es.wikipedia.org/w/index.php?title=Discusi%C3%B3n:Fascismo_en_Am%C3%A9rica&diff=prev&oldid=168803824 diffs en específico], no sólo Raimundo57br está involucrado, también {{u|Auréola}} (quien también pasó por un proceso de expulsión, aunque no está autoconfirmado acá) y {{u|Luizpuodzius}} (quien fue sancionado también allá, pero no expulsado; tampoco autoconfirmado acá). Aquí [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n%3ALuizpuodzius&diff=159046847&oldid=152503114 una interacción entre usuarios hablando de temas referentes a pt.wiki]. De esta situación, se confirma que se esté usando nuestra Wikipedia para cuestiones ajenas de un proyecto que los sancionó y expulsó.
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 17:04 4 ago 2025 (UTC)
;Comentarios
#'''Sobre los mensajes que recibo del IP''': no tengo contacto fuera de la wiki con este IP que me envía solicitudes para editar determinados artículos y, por regla general, no atiendo estas solicitudes;
#'''En cuanto a mis problemas en la wiki-pt''', aclaro que no se deben a ediciones que hice en el dominio principal de esa versión de la wiki (donde se borraron pocos artículos y se revirtieron pocas ediciones), sino a una larga rivalidad con determinados administradores. No creo que sea oportuno traer ese debate aquí, pero si insisten, daré las aclaraciones que consideren oportunas.
#'''Sobre mi contacto con Luizpuodzius''': entiendo que fue un acto aislado sin mayores repercusiones, hace mucho tiempo que no interactúo con esa persona.
#'''Sobre mi interacción con Anhabete''': entiendo que fue un acto aislado sin mayores repercusiones, después de eso no volví a interactuar con esa persona.
:--[[Usuario:Raimundo57br|Raimundo57br]] ([[Usuario Discusión:Raimundo57br|discusión]]) 12:35 5 ago 2025 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Solicito traslado de páginas ==
* Por favor trasladar las siguientes páginas
# {{a|Dover}} ... a ... {{a|Dover (desambiguación)}}
# {{a|Dover (Kent)}} ... a... {{a|Dover}}
;Motivo
* Por favor indicar el motivo: La ciudad de Inglaterra es el uso principal del término. La página de desambiguación tenía cientos de enlaces ambiguos.
;Usuario que lo solicita
Firmado: [[Usuario:Rondador|Ronda]][[Usuario Discusión:Rondador|dor]] 09:39 2 sep 2025 (UTC)
;Coentarios
* Personalmente estoy de acuerdo, vamos a solicitar las opiniones de otros que quieran opinar. Un saludo. <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 10:45 2 sep 2025 (UTC)
* Con permiso, {{u2|Rondador}}, he detallado los dos traslados que estás pidiendo; estoy de acuerdo con el traslado, y también con la solicitud de opiniones (quizá en algún lado haya algo muy relevante llamado localmente Dover). --[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 12:09 2 sep 2025 (UTC)
* Si pongo Dover en el buscador de Google, [[google:dover|el primer resultado]] (y siguientes) es para el grupo musical español (algo que sospechaba, ya que en mi mente sucede lo mismo). [[Usuario:MiguelAlanCS|<b style="color: #990099;">MiguelAlanCS</b>]] >>> [[Archivo:PICOL icon Mail.svg|15px|link=Usuario discusión:MiguelAlanCS]] 12:13 2 sep 2025 (UTC)
:: En mi caso sale la ciudad, pero bueno, también es un argumento a tener en cuenta. <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 20:23 2 sep 2025 (UTC)
:::{{no|}} Lo que no se puede hacer es trasladar y despues solicitar, como hizo unilateralmente el editor. Lo revertí a la espera de otra respuesta. Aunque mejor que en el tablón de bibliotecarios donde solo responden bibliotecarios, es preguntar en el café. A mi, si me preguntan por Dover me vienen muchas cosas a parte de la propia ciudad por lo que hay que buscar un consenso clarone indicarlo en la resolución y posibles traslados para que no hay discusiones en el futuro. --[[Usuario:Geom|<b style="background:purple;color:yellow;font-size:80%;border-radius:9px 0 0 9px;padding:2px 5px;">Geom</b>]][[Usuario discusión:Geom|<span style="font-size:80%;color: gray;">'''(discusión)'''</span>]] 09:35 3 sep 2025 (UTC)
::::{{No|Punto metiche}}, del otro lado del charco lo metí a San Gugul y lo primero que me salió es la banda. [[Usuario:Saloca|Saloca]] ([[Usuario_Discusión:Saloca|<big>ངའི་གླེང་མོལ།</big>]]) 20:54 24 sep 2025 (UTC)
;Respuesta
{{admintab|$0}}
== Gersoncharles ==
; Asunto
Durante el corto tiempo de la CAB del usuario {{u2|Gersoncharles}} señalé una [https://es.wikipedia.org/w/index.php?title=Wikipedia_discusi%C3%B3n:Candidaturas_a_bibliotecario/Gersoncharles&diff=prev&oldid=169411042 situación que considero ineludible], a pesar que el usuario trató de desvincularse sin mayor sustento y prefirió cancelar la CAB.
El usuario a pesar que fue sancionado en 2021 por este servidor, [https://xtools.wmcloud.org/pages/es.wikipedia.org/Gersoncharles?uselang=es ha retomado desde hace un año] en la creación de entradas de concursos de belleza de México con muy pocas notas de referencia: si observamos los artículos creados, sólo una fracción de cada artículo puede ser revisado en sus referencias, pero hay gran parte de la información que parece manejar el usuario de [[WP:FP|una manera que lo conoce en exclusiva]], por lo que no ha concedido en los requerimientos mínimos que se necesita para seguir editando en Wikipedia. De hecho, le han borrado 8 artículos en apenas un par de meses atrás. Sé que me adelanto en especulaciones, pero ante la ausencia de motivos que le llevaron a la CAB, sospecharía que [[WP:NSW|estaba buscando alguna forma de restaurar contenidos borrados, o disputar decisiones administrativas]].
El usuario se comporta virtualmente como una [[WP:CPP|CPP]] y el 100% de sus contribuciones en artículos están fijados en un tema cerradísimo como este, me hacen entreveer que el usuario requiere algún correctivo de prohibición editorial, al menos, para que empiece a entender su posición como editor, ya que alguien con 15 años en Wikipedia (y unos 8 años editando con cierta actividad), es rarísimo que siga comportándose como una CPP.
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 05:12 10 sep 2025 (UTC)
; Respuesta
{{admintab|1=Probando a resolver esta petición para ver si se reproduce el fallo.|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:12, 11 April 2026 (UTC)|3=}}
==Status quo Stonewalling==
; Usuarios implicados
* {{u|Aroblesm}}
;Artículo
[[Amarillos por Chile]] (ahora, pero es un comportamiento habitual)
; Motivo
Aunque el usuario hace un buen trabajo de patrullaje contra vandalismo, tiene un comportamiento habitual de lo que se denomina [[:en:WP:Status quo stonewalling]]. El usuario revierte todo lo que no le parece y no debate. Trata a cualquier usuario, experimentado o no como si fuera un vándalo o una CPP. Le va dando al botón, llegando siempre al límite de 3RR (en que el status quo tiene prioridad) y no pasa a la búsqueda de consenso. Y lo peor de todo, es que no maneja bien las políticas y hace SQS de manera incorrecta. <br />
En este caso particular está cometiendo un error obvio, porque en la plantilla: parámetro ideología, está usando un fuente que no se puede, ya que no es independiente. Concretamente a [https://www.laizquierdadiario.cl/Chile La Izquierda Diario], que es el órgano oficial del [[Partido de Trabajadores Revolucionarios]] y como tal no es un medio independiente al juzgar la posición de otro partido político (le explique en la PD y en su propio PD, y se limita a indicar en su reversión que ''no se puede eliminar referencias simplemente porque no nos gusta''. Esto es una abierta contravención a [[WP:FF]].<br />
Aún así, no quiero que esta denuncia se centre en ese artículo, ya que es un comportamiento habitual (basta ver su [https://es.wikipedia.org/w/index.php?title=Especial%3AContribuciones&target=Aroblesm&namespace=all&tagfilter=&start=&end=&limit=1000 historial]). Como digo arriba, muchas veces actúa así con vándalos y CPP, pero le pasa la máquina a lo que venga por delante y sin debatir (basta mirar su PD), y tampoco evidenciando un buen conocimiento de las políticas. Como indico arriba es un comportamiento habitual textbook de [[:en:WP:Status quo stonewalling]].
Solicito que se le indique al usuario lo incorrecto del proceder y que se le deje una clara advertencia respecto a SQS.
; Usuario que lo solicita
* [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 11:04 10 sep 2025 (UTC)
;Comentarios
{{comentario}}: SFBB omite que está eliminando referencias del artículo por mero gusto personal y sin justificación alguna. Se le propuso debatir pero no espera el debate. Yo solo he mantenido el artículo a su versión estable. Además, de todos los editores del artículo es el único que ha objetado una referencia y eso es raro en mi opinión. Me dedico a combatir el vandalismo y las ediciones arbitrarias sin consenso previo. No veo problemas en aquello. SFBB solo busca poder mantener su eliminación de referencias por mero gusto personal sin importar. --[[Usuario:Aroblesm|Aroblesm]] ([[Usuario Discusión:Aroblesm|discusión]]) 16:13 10 sep 2025 (UTC)
::No hombre....es un patrón de conducta. siempre que no te gusta algo movís a "versión estable" sin discutir nada hasta aburrir a la contraparte...eso es precisamente SQS. Tenís la PD llena de quejas por eso y seguís creyendo que lo estái haciendo bien, meramente porque aburrís al resto que le da lata pelear con vos (a mí mismo muchas veces me hai aburrido). Sin esta denuncia ni siquiera te habríai dignado a opinar...le diste dos veces más al botón (y sólo opinaste después de la denuncia y no dijiste nada en serio, salvo que estaba en la referencia...pff...nadie lo ha puesto en duda)...y lo que calificái como "arbitrariedad" lo hacís sin entender profundamente el funcionamiento de wikipeida. Es una obviedad que esa fuente no se puede usar lo que está siendo usada, no es "gusto personal" son las polítcas: por n-sima vez: lee [[WP:FF]]. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 19:17 10 sep 2025 (UTC)
:::'''Comentario'''. Al usuario se le explica porqué cierta fuerte [https://es.wikipedia.org/w/index.php?title=Amarillos_por_Chile&diff=169577342&oldid=169428682 absolutamente no] es [[WP:FF]] desde ningún punto de vista e ipso facto y sin explicación alguna entra en guerra de ediciones instantánea [https://es.wikipedia.org/w/index.php?title=Amarillos_por_Chile&diff=169577348&oldid=169577342 (1)] [https://es.wikipedia.org/w/index.php?title=Amarillos_por_Chile&diff=next&oldid=169577358 (2)]. Así no se puede, y preocupa si un revisor actúa así en otras páginas no analizadas. [[Usuario:XavierItzm|XavierItzm]] ([[Usuario Discusión:XavierItzm|discusión]]) 01:11 20 sep 2025 (UTC)
::::Quiero agregar que cuando el usuario se encontró con una clara mayoría de usuarios que cuestionaba su actuar, fue a pedir [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Protecci%C3%B3n_de_art%C3%ADculos/Actual#Amarillos_por_Chile_2 la protección de la página en su versión]. Nuevamente, esto es parte del comportamiento habitual de usuario ([https://es.wikipedia.org/w/index.php?title=Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Protecci%C3%B3n_de_art%C3%ADculos/Actual&action=history ver el historial de ese tablón]): el usuario trata cualquier diferencia de opinión con la suya como si fuera vandalismo y utiliza ese tablón para cementar su versión (yo mismo lo he sufrido con anterioridad, aunque es difícil buscar un acto específico en ese tablón). Quiero agregar que esta denuncia <u>no es por este caso en particular</u> sino que contra el comportamiento habitual de manipular el sistema para mantener sus versiones de status quo, sin siquiera entrar a discutir y tratar cualquier tipo de edición (que no concuerde con su visión) como si fuera vandalismo. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 09:35 20 sep 2025 (UTC)
:::::Otro antecedente más del que ni siquiera estaba al tanto. Con anterioridad a su solicitud de protección de la página del 20 de agosto (rechazada por {{u2|Rafstr}}), cuando intentaba mantener así el status quo ante la presión de 5 usuarios (todos usuarios veteranos muy experimentados) que llegaron independientemente a esa PD - <small>tras mención general del problema en el café</small>, el usuario ya había exigido una [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Protecci%C3%B3n_de_art%C3%ADculos/Actual#Amarillos_por_Chile protección similar el 8 de agosto], con anterioridad a esta denuncia y con posterioridad a que yo haya iniciado una discusión en la PD (que el ignoró al igual que los mensajes que le dejé en su PD personal, mientras seguía dándole al botón revertir). Es un perfecto ejemplo de cómo el usuario consistentemente [[WP:NSW|abusa de las reglas del sistema]], a sabiendas de que si revierte 3 veces, puede denunciar a la contraparte por 3R, y pedir protecciones. Y, bueno...le sigue dando al botón sin intentar si quiera debatir.
:::::[https://es.wikipedia.org/w/index.php?title=Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/3RR/Actual&diff=prev&oldid=149513602#Aroblesm Ya ha sido denunciado anteriormente por exactamente lo mismo] y (como decía anteriormente) tiene la PD llena de quejas por lo mismo, pero la mayoría simplemente nos hartamos - yo ya muchas veces - y nos vamos a otra cosa sin denunciar...'''<u>pero este comportamiento tiene que parar de una vez por todas</u>'''. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 00:50 22 sep 2025 (UTC)
::::::Otro ejemplo (y sin buscar mucho): hace unos días atrás hizo lo mismo con {{u2|GKLakers02}} en el artículo [[Línea 6 del Metro de Santiago]] y terminó denunciando al usuario [https://es.wikipedia.org/w/index.php?title=Wikipedia:Vandalismo_en_curso&diff=prev&oldid=169275648 por un presunto vandalismo]. En en intertanto GKLakers02 intentaba discutir en la [https://es.wikipedia.org/wiki/Discusi%C3%B3n:L%C3%ADnea_6_del_Metro_de_Santiago#Tensi%C3%B3n_Incorrecta. PD del artículo] proveyendo fuentes correctas, pero siendo completamente ignorado pro el usuario. El asunto terminó cuando el artículo fue protegido, manteniendo el status quo (incorrecto) que tozudamente forzaba Aroblesm dándole al botón.
::::::Pero bueno...este el sólo otro ejemplo pero son cientos. Alguien tiene que parar al usuario (que es buenísimo combatiendo vandalismo, pero termina tratando a todo el mundo cual si fueran vándalos). [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 01:07 22 sep 2025 (UTC)
:a sabiendas que está denuncia aún no se resuelve, intenté corregir lo de la [[Línea 6 del Metro de Santiago]], siendo nuevamente revertido [https://es.wikipedia.org/w/index.php?title=L%C3%ADnea_6_del_Metro_de_Santiago&diff=prev&oldid=169740888 1] y [https://es.wikipedia.org/w/index.php?title=Línea_6_del_Metro_de_Santiago&diff=prev&oldid=169740854 2] oportunidades (en rápidisimo; me reveritió dos veces, antes de que pudiese agregar la info sobre las otras líneas, para las cuales existe similar documentación) por el usuario que no duda un segundo en entrar en GE para defender el status quo sobre la base de una referencia absolutamente obsoleta del año 2016 (sí, hace 9 años, el metro sí operaba a 750 Vcc). Lo peor es que revierte e indica que hay que ir a la PD donde ya se le ha explicado con lujo de detalles que está equivocado.<br />
:Por favor: alguien tiene que frenar a este usuario ya que le hace mucho daño a eswiki (piensen en todas las IPs/usuarios que él determina unilateralmente que son vándalos). Yo por mi parte, voy a intentar evitarlo hasta que se resuelva esto (y voy a dejar los artículos sobre le Metro de Santiago con un voltaje incorrecto por el momento), aunque es altamente probable que me revierta en otros lados (ya vigila una enorme proporción de los artículos sobre contingencia chilena); si lo hace, no voy a insistir y voy a dejar las cosas de manera incorrecta. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 23:40 29 sep 2025 (UTC)
Agregro otro antecendente: En [[Línea 6 del Metro de Santiago]] y [[Línea 3 del Metro de Santiago]], el usuario entró nuevamente (como ya ha ocurrido en muchas oportunidades con anterioridad) en conflicto con IPs. Las IPs tiene razón, pero el usuario las revierte. Como las IP insisten en agregar <u>la info corrrecta</u> (bien referencianda y discutida de la IP del artículo - aunque le usuario lo ignore y le siga dando al botón), el usuario va al TAb a pedir protección de ambas [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Protecci%C3%B3n_de_art%C3%ADculos/Actual#L%C3%ADnea_6_del_Metro_de_Santiago] [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Protecci%C3%B3n_de_art%C3%ADculos/Actual#L%C3%ADnea_3_del_Metro_de_Santiago] y {{u2|Virum Mundi}} terminó protegiendo ambas por 3 meses. <br />
Esto pone en evidencia una vez más, el mal que está haciendo el usuario de las reglas y los tablones. Las IPs (porque son dos creo) han hecho todo bien: han agregado info correcta, han referenciado y han ido a la PD....y el usario le sigue dando al botón para imponer una fuente obsoleta de 2016. Y recurre a cuatánto tablón haya para denunciar a supuesto vándalos..<br />
'''Por favor que alguien haga algo y pronto....o al menostenga en consideración este accionar permanente y dejen de validar los reportes del usuario.''' [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 02:59 6 oct 2025 (UTC)
;Respueta al comentario de abajo
::(no quiero que esto sea un foreo, pero hago este comentario para que esta denuncia <u>no se vaya por la ramas del caso puntual</u> sobre el que versa la respuesta)
{{pg|Virum Mundi}}: Aunque la denuncia no pasa por ahí, pero la tensión en el Metro de Santiago se ha cambiado de 750 Vcc a 1500 Vcc y de vuelta múltiples veces. Los cambios se realizan con relativa celeridad y la única documentación que queda disponible es precisamente la licitación y la especificación técnica de la misma (que fue lo provisto)...pero, vamos que estaremos de acuerdo que borrar todo pq hay un fuente obsoleta que no dice que en 2016 era diferente?
::Pero nuevamente, la denuncia no pasa por ahí. Esto es un ejemplo igual al caso de AxCh (descrito arriba) y muchísimso similares (que he visto/sufrido con el usuario y de los cuales hay una retahíla de protestas es su PD), en que revierte todo, trata a todo el mundo como vándalo, dice que hay que ir a la PD, y (si se digna a opinar en la PD - generalmente no lo hace), se limita a decir que tiene una fuente (por muy mala/obsoleta que sea) e ignora los argumentos en la discusión. Y luego recurre a tablones para pedir protecciones, denunciar vandalismo y así afianzar su versión. Es un mal uso y no te culpo a ti ni ningún sysop, porque es muy difícil darse cuenta del mal uso (repetitivo) que hace y a primera vista sí puede parecer correcto (y obviamente cómo el usuario hace múltiples denuncias que sí correctas...bueno...es más mucho difícil)...y por eso les pido por favor mucha atención con el usuario que le está haciendo daño a wikipedia. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 11:47 6 oct 2025 (UTC)
;Comentario admin
* No es mi intención intervenir en esta denuncia. Pero sí quiero aclarar, ya que fui mencionado por nombre, que la semiprotección de estos artículos se ha hecho por guerra de ediciones, pues no se puede llenar los historiales una y otra vez de modificaciones y reversiones. Aun así, antes de proteger el de la Línea 6, por pura curiosidad (me interesa el tema de ferrocarriles, aunque no particularmente el sistema metropolitano de Santiago de Chile), entré en una página de la compañía donde está indicado que actualmente los cables son "flexibles, unipolares, clase 5, de tensión de aislamiento de 750 V (fuerza) y 600 V (control) para 90ºC..." (y así sigue). También entré en la fuente proporcionada por las IP, un documento de finales del año pasado que detalla los pormenores de un proyecto (para mí, proyecto significa futuro). También leí la discusión, donde el denunciado de hecho sí intervino una vez, allí se proporciona como prueba una imagen realizada por el anónimo, almacenada en su Google Drive. Esta imagen de un visor digital colgado del techo no es una fuente creíble, no solo por ser fuente primaria, y no solo porque no se puede saber de dónde es (no pone el nombre del metro ni de la estación, solo un número colgado del techo, pero presumo de buena fe y asumo que es del lugar indicado), sino que en sí tampoco indica nada definitivo, puede estar por ejemplo en fase de pruebas o de desarrollo (teniendo en cuenta el poco tiempo transcurrido desde el documento mencionado) o de adaptación. Sí, obviamente puede ser también que ya está empleado, pero entonces hace falta una referencia que lo indique de verdad (no la de un proyecto). Insisto, no estoy aquí ni para debatir ni para valorar esta denuncia, solo dejar claro el motivo de la protección. las guerras de ediciones no pueden llevarse a cabo en los historiales de los artículos, invito a cualquiera a realizar las modificaciones necesarias en dichos artículos, si ha lugar, y/o participar en la discusión aportando las fuentes (al fin y al cabo estás páginas están semiprotegidas, cualquier usuario autoconfirmado puede intervenir en ellas). Por lo demás, lo dejo a otro admin. Saludos. <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 05:10 6 oct 2025 (UTC)
;Continúa con más casos:
:Nuevamente el usuario en acción. [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Protecci%C3%B3n_de_art%C3%ADculos/Actual#Historia_del_Metro_de_Santiago_2 Acá pidiendo protección en TAB] porque un "supuesto Vándalo" estaría agregando una imagen (absolutamente pertinente al artículo). Por favor dejen de ignorar esto y pónganle freno al usuario. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 16:59 2 nov 2025 (UTC)
; Respuesta
{{admintab|1=Prueba|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:25, 9 February 2026 (UTC)|3=}}
== Retomo reporte de CPP política ==
; Asunto
Hace menos de un mes [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Nombres_inapropiados_y_vandalismo_persistente/2025/09#CPP_pol%C3%ADtica reporté en el tablón] un caso de CPP política, que fue lamentablemente desestimado, pues el usuario {{u|Pptrc}} ha vuelto con lo mismo, controlar el artículo del partido chileno [[Evolución Política]] y ahora se crea una entrada con IA de [[Juan Manuel Santa Cruz]] sin mayor complicación, e incluso pasó por la revisión de un patrullero. Insisto en que esta cuenta no tiene otro objetivo que controlar y promover contenidos de políticos de la formación en la que tiene interés demasiado particular.
:Por favor: por qué se espera para resolver estas cosas? es evidente que {{u2|Taichi}} tiene razón, y habiendo un proceso [[Elecciones parlamentarias de Chile de 2025|eleccionario en curso]], es evidente que la CPP está editando artículos con motivos propagandísticos...y que dada la coyuntura, se deben tomar medidas con celeridad. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 20:57 30 sep 2025 (UTC) <small>ps: aclaro que mi intervención acá fue para agregar el antecedente de la urgencia, dada la coyuntura</small>
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 15:17 17 sep 2025 (UTC)
; Respuesta
{{admintab|1=Probando a resolver esta otra a ver si ocurre...|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:12, 11 April 2026 (UTC)|3=}}
== Santos500p ==
; Asunto
Pido por favor que se tomen nuevas medidas para apaciguar el frenesí de ediciones del usuario {{u2|Santos500p}}, concernientes sobre todo con política de Perú, que [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n%3ASantos500p&diff=169860726&oldid=169762965 en los últimos días] ha llegado al punto de tener varios artículos y categorías creadas por él en [[WP:CDB|consultas de borrado]], algunas teniendo consenso comunitario a favor del borrado.
En una de las consultas señalé que [https://es.wikipedia.org/w/index.php?title=Wikipedia:Consultas_de_borrado/Deface_Per%C3%BA&diff=prev&oldid=169776828 el usuario lleva bastante rato desconociendo las líneas entre los diferentes proyectos], con varios intentos en el pasado de señalarle sobre ello, pero sigue en la mezcla de contenidos que podrían estar perfectamente en Wikinoticias, Wikisource e incluso Wikiquote, pero no hay nada que lo impida, aduciendo que puede entorugar cualquier cosa como artículo de Wikipedia, incluso riñendo con [[WP:REC]] o [[WP:SRA]]. De hecho, su página de discusión ha recibido en los últimos dos meses una cantidad difícil de cuantificar de [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n%3ASantos500p&diff=169860726&oldid=168959821avisos de borrado rápido, avisos de consultas de borrado y artículos sin relevancia], varios de ellos siendo borrados.
Esta situación ya suma a su <u>bloqueo parcial por dos años</u>, por lo que debería haber una restricción más certera que haga rectificar su proceder. Apelo a que el usuario pueda comprender que Wikipedia tiene bien delimitado [[WP:NO|sus noes]] y que debería él como usuario, ya no tan novato, entender esos límites. De lo contrario, dejo al encargo de un bibliotecario para que tome alguna medida extra para restringirlo.
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 11:34 10 oct 2025 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Usuario reincidente ==
; Asunto
* En marzo de este año, acudí al TAB por una serie de problemas en numerosos artículos creados por el usuario {{u|Ángel Luis Alfaro}}, [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Miscel%C3%A1nea/2025/06#Creaci%C3%B3n_de_art%C3%ADculos_con_varios_problemas ver aquí]. Ahora ha editado el artículo [[Alto Renacimiento]] con los mismos problemas por el cual puse esa denuncia en el TAB. Exceso de fotografías (173), referencias en las propias fotografías. Cientos de enlaces internos, algunas secciones son toda azul. Mal formato de las referencias, fuentes citadas (Fuentes citadas en Maniera moderna), usar como referencia artículos de wikipedia, véase la referencia 26. La sección notas es casi tan grande como el propio artículo. Y para terminar, no ha corregido ni uno solo de los artículos que ha creado anteriormente.
; Usuario que lo solicita
* [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 20:20 14 oct 2025 (UTC)
;Comentario
* {{ping|Ontzak}} No consigo entrar en el enlace (me va todo muy lento hoy), ¿es el mismo que resolví yo la última vez? <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 09:32 15 oct 2025 (UTC)
* {{ping|Virum Mundi}} si, el mismo. [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 13:55 15 oct 2025 (UTC)
** Ya veo, bueno, me pongo a ello, puede que tarde un rato. {{ping|Ángel Luis Alfaro}} por favor evita más ediciones hasta que se resuelva esta denuncia. Un saludo. <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 11:26 16 oct 2025 (UTC)
::{{comentario}} {{ping|Virum Mundi}}, a pesar del aviso, el usuario sigue [https://es.wikipedia.org/wiki/Especial:Contribuciones/%C3%81ngel_Luis_Alfaro editando]. [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 20:45 26 nov 2025 (UTC)
; Respuesta
{{admintab|$0}}
== Adrian Silvera ==
; Usuarios implicados
* {{u|Adrian silvera}}
; Motivo
Hace una década que este usuario agrega contenido mal escrito, sin referencias y muchas veces innecesario. Lo bloquearon tres veces por este motivo. Estuve un año insistiendo para que activara el autocorrector y así por lo menos subsanar el tema de la ortografía. Lo hizo hace poco, creo, pero el remedio fue peor que la enfermedad: ahora confunde adjetivos, sustantivos y verbos, y pone tildes en cualquier parte. Esto no sería tan grave de no ser porque se le advertí unas tres veces y sigue igual. Hoy le mandé un mensaje por ese tema y lo primero que hizo fue [https://es.m.wikipedia.org/w/index.php?title=The_Matrix_Reloaded&diff=prev&oldid=170118708 esto]. En otro caso lo interpretaría como una tomadura de pelo, pero no creo que lo haga a propósito. De todas maneras, alguna consecuencia tiene que tener, para aprender.
; Usuario que lo solicita
* [[Usuario:Minguu|Minguu]] ([[Usuario Discusión:Minguu|discusión]]) 20:16 22 oct 2025 (UTC)
; Respuesta
{{admintab|1=aaaa|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:54, 9 February 2026 (UTC)|3=}}
== Propuesta de desbloqueo para Lenis Felipe ==
; Asunto
* Hola. Por este medio quisiera proponer al colegio de bibliotecarios el desbloqueo local de {{u|Lenis Felipe}}, usuario bloqueado hace ya más de tres años por creación de páginas vandálicas. Lenis se encuentra con bloqueo global, por lo que para poder ser desbloqueado globalmente necesita ser desbloqueado de alguna de las wikis donde tiene bloqueos actualmente, entre ellas, Wikipedia en español.
:La propuesta la planteo porque, habiendo pasado un tiempo prudencial, puedo atestiguar que Lenis pareciera haber enmendado su rumbo y ha colaborado en reportar vía IRC, de manera privada, vandalismos, evasores de bloqueo y hasta sugerir cambios a filtros antiabusos para detener algunos abusadores de largo plazo. Particularmente lo ha hecho desde enero de 2024. Me parece que tal y como fue el caso de Sargento de Hierro (perdón que le nombre, pero me gusta destacar casos de usuarios que se corrigieron :)), podría ser positivo darle una segunda oportunidad para convertirse en un elemento positivo para la comunidad. Ante ello, propongo su desbloqueo local y quedo atento a cualquier propuesta de términos para ello, en cuenta restricción de crear páginas nuevas, o similares. Saludos,
; Usuario que lo solicita
* '''[[Usuario:Jake Park|''Jake Park'']]''' [[Archivo:Coat of arms of Costa Rica.svg|20 px]] [[Usuario Discusión:Jake Park|<span style="color: red;">'''Problem?'''</span>]] 01:00 29 oct 2025 (UTC)
;Comentarios de biblios
* Desde mi punto de vista, los usuarios que no hayan tenido actitudes vandálicas sistemáticas posteriores al bloqueo no deberían permanecer bloqueados más de tres años. '''Apoyo''' el posible desbloqueo. De todos modos, consulto: ¿sabes qué edad tiene el usuario? Porque no es lo mismo alguien que hizo esas tonterías a los 16 años que a los 60; en el primer caso, puede haber madurado rápidamente, mientras que si fuera ''"mayorcito"'' como quien escribe, los aprendizajes de comportamientos son más difíciles. --[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 02:03 29 oct 2025 (UTC)
* EMHO todos son susceptibles de cambiar, no quiere decir que todos lo hagan, pero uno de los 5 pilares nos pide presumir buena fe. {{Ok|Votum pro}}. [[Usuario:Saloca|Saloca]] ([[Usuario_Discusión:Saloca|<big>ངའི་གླེང་མོལ།</big>]]) 18:00 30 oct 2025 (UTC)
*
; Respuesta
(a rellenar por un bibliotecario)
== Unmuybuenusuario ==
<!-- ↑ RECUERDA COLOCAR UN TÍTULO A TU MENSAJE EN EL CUADRO «Asunto/encabezado» Y LUEGO PROCEDE A BORRAR ESTE MENSAJE. GRACIAS. -->
{{u|Unmuybuenusuario}} se registró el 28 de octubre de 2025, o sea hace 12 días. Desde el primer momento se dedicó a hacer mantenimiento y mandar artículos a borrar. El segundo día ya [https://es.wikipedia.org/w/index.php?title=Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Permisos/Actual&diff=prev&oldid=170247444 solicitó el flag de reversor con el argumento de : '' pese a mi muy breve tiempo en Wikipedia, desearía poseer el permiso de reversor para revertir de manera más fácil que usando el botón deshacer''], o sea que asegura que hace poco tiempo que está en Wikipedia pero ya conoce los tipos de flags que existen y dónde solicitarlos.
@[[Usuario:Edslov|Edslov]], le negó el permiso, obviamente, ya que en ese momento tenía menos de 48 horas de creada la cuenta, pero no solamente opina que la decisión no fue justa
sino que además conoce perfectamente el Café y fue directamente a quejarse porque no se le dio el permiso, para preguntar [https://es.wikipedia.org/w/index.php?title=Wikipedia:Caf%C3%A9/Archivo/Ayuda/Actual&diff=prev&oldid=170287227 ''¿Cuánto tiempo desde mi registro tiene que transcurrir para poder recibir el flag de reversor? ¿O cuántas ediciones?''].
Le pedí al usuario [https://es.wikipedia.org/wiki/Usuario_discusi%C3%B3n:Unmuybuenusuario que dejara de hacer mantenimiento] y él me dejó un mensaje protestando por que
[https://es.wikipedia.org/w/index.php?title=Usuaria_discusi%C3%B3n:Jaluj&diff=prev&oldid=170408787 no encuentra ninguna política que prohíba a un editor nuevo deshacer vandalismos o colocar plantillas de borrado rápido a artículos que cumplan alguno de los criterios de borrado rápido], lo cual es cierto, como tampoco hay ninguna política que prohiba a un usuario nuevo tener el flag de reversor, pero suponemos que para hacer este tipo de tareas se necesita tener experiencia y haber demostrado tener conocimientos para hacerlas bien. Por eso le pedí que se detenga y deje de hacer mantenimiento, porque si es un novato no podemos confiar en que lo haga.
Entonces me [https://es.wikipedia.org/w/index.php?title=Usuaria_discusi%C3%B3n:Jaluj&diff=prev&oldid=170408787 acusó de estar violando la políticas al morder a los novatos y no presumir buena fe]. Morder a los novatos es cuando se trata de una persona sin experiencia que todavía no conoce las normas y políticas de Wikipedia. Una persona novata no sabe ni que existe un Café, ni que existe un tablón para solicitar flags, ni que existe el flag de reversor ni que existe el "deshacer".
Pero a la vez me acusa de no presumir buena fe al sospechar que no es novato. Entonces, ¿en qué quedamos? Porque si es un novato, no debería estar haciendo mantenimiento y si no lo es, entonces yo no estaría presumiendo mala fe al sospechar que no lo es.
Esta cuenta me está difamando al dejar mensajes como [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n:A.piquerasm&diff=prev&oldid=170408867 este], porque además de acusarme de morder a un novato y de presumir mala fe me acusa por haber solicitado una VU y de haberlo "intimidado". Ahora resulta que por haberle pedido que deje de hacer mantenimiento y por haber pedido una VU yo soy la que viola las políticas y lo estoy "intimidando". Yo no lo acusé acusé ''gravemente de abuso a largo plazo'', yo solicité una VU porque sospecho que puede ser una LTA. Si no lo es, no tiene nada de qué preocuparse y si es un novato mucho menos. Solicito que se le haga un llamado de atención para que deje de difamarme a mis espaldas, ya que ni siquiera me enlazó para que yo no me enterara.
; Usuario que lo solicita
* [[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 18:17 10 nov 2025 (UTC)
* Te pido amablemente usuaria [[Usuario:Jaluj|Jalu]] una solución a este problema, porque yo no te estoy difamando, si conozco el café, el tablón, si se hacer reversiones, es porque fui anónimo y como usuario anónimo ya me dedicaba a hacer estas cosas, un usuario me sugiero visitar la página de cambios recientes y eso es lo que estoy haciendo, visitar los cambios recientes ¿Tengo prohibido deshacer vandalismos encontrados? Por cierto, no me indicaste cuales son las ediciones supuestamente arbitrarias, las ediciones que he hecho han sido deshacer vandalismos, yo no soy ni títere, ni evasor, ni mucho menos abuso a largo plazo, soy usuario completamente nuevo y esta es mi primera cuenta, y te recuerdo un fragmento de la página de usuarios títeres: '''Puede ser fácil identificar a un usuario títere, si muestra un conocimiento de las políticas, convenciones de Wikipedia y técnicas avanzadas de edición que no es de esperar en un novato (aunque debe presumirse buena fe: es posible que sea un usuario que haya colaborado en otra edición de Wikipedia, en alguna otra wiki o <u>que haya participado mucho tiempo como anónimo</u>)''' (subrayado mío). Si conozco como deshacer vandalismos, es porque antes editaba como anónimo, y esta cuenta fue creada para ayudar a Wikipedia, de ninguna manera la cree para LTA o ediciones arbitrarias. ¿Cómo propones que se solucione este problema y que tipo de ediciones puedo hacer y que tipo de ediciones no puedo hacer? --[[Usuario:Unmuybuenusuario|Unmuybuenusuario]] ([[Usuario Discusión:Unmuybuenusuario|discusión]]) 23:27 10 nov 2025 (UTC)
:{{comentario}}: [https://es.wikipedia.org/w/index.php?title=Wikipedia:Solicitudes_de_verificaci%C3%B3n_de_usuarios&oldid=170625007#Evasi%C3%B3n_de_bloqueo:_Cris2020 Resultado de la SVU]. --'''[[user:Stïnger|<span style="text-shadow:#FFD700 1px 1px 2px; class=texhtml"><span style="font-family:'Calibri';color:black">Stïnger</span></span>]]''' <sup>[[Archivo:Bureau kage.svg|15px|link=User talk:Stïnger]]</sup> 00:58 24 nov 2025 (UTC).
; Respuesta
{{admintab|Al no ser un caso reciente (ya pasaron algunos días) apercibo a {{u2|Unmuybuenusuario}} de [[WP:PBF]] primeramente y posterior a [[WP:PPBF]]. Ambos juicios caen en violaciones a [[WP:E]] y [[WP:CIV]] (supongo al ya haber editado como IP sabrá por que, por lo que en caso de reincidencia podría haber sanción. En cuanto al flag, queda al criterio del bibliotecario que lo otorga, no hay tiempo ni cuota determinada, pero es bastante obvio que más sabe el diablo por viejo que por diablo, yo tampoco lo habría otorgado.|[[Usuario:Saloca|Saloca]] ([[Usuario_Discusión:Saloca|<big>ངའི་གླེང་མོལ།</big>]]) 18:09 26 nov 2025 (UTC)}}
== Expulsado de la Wikipedia en inglés viene acá a hacer lo mismo... ==
;Usuarios
* {{u|SocialQuote}}
* {{u|2800:484:7380:0:0:0:0:0/44}}
; Asunto
Tanto [https://en.wikipedia.org/wiki/Special:Contributions/SocialQuote la cuenta registrada] como [https://en.wikipedia.org/wiki/Special:Contributions/2800:484:7380:0:0:0:0:0/44 el rango IP] se encuentran sancionados desde septiembre en la Wikipedia en inglés, por ediciones conflictivas, reversiones sin sentido e incluso insultos y amenazas.
Ya acá [[Usuario discusión:2800:484:7385:F0:95EE:CA0B:4429:B24C|ha causado problemas como anónimo en junio]] y la cuenta [https://es.wikipedia.org/w/index.php?title=Scarface_(pel%C3%ADcula_de_1983)&diff=prev&oldid=168285955 incluso ripostó contra un bibliotecario], y [https://es.wikipedia.org/w/index.php?title=Harry_Potter_y_el_c%C3%A1liz_de_fuego&diff=prev&oldid=169807011 está constantemente] [https://es.wikipedia.org/w/index.php?title=Dinero_negro&diff=prev&oldid=170282821 revirtiendo al bot de mantenimiento]. Nótese que los temas que edita tanto la cuenta como la IP son las mismas (series de TV y películas), y las sanciones aplicadas en en.wiki fueron hechas el mismo día.
Debido a esta coincidencia y la situación que está persistiendo ahora en la Wikipedia en español, pido que se tomen medidas.
:{{comentario}} Añado [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n:Farisori&diff=prev&oldid=170531619 otro mensaje bastante incordiante contra otro bibliotecario] haciéndolo suponer entre líneas que no sabe redactar artículos. '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 00:10 18 nov 2025 (UTC)
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 04:18 17 nov 2025 (UTC)
; Respuesta
{{Hecho|1=Bloqueado}} por Rafstr. [[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 01:40 19 nov 2025 (UTC)
== Borrar y ocultar datos sensibles en página de usuario ==
; Asunto
Pido con carácter de urgencia que algún bibliotecario [https://es.wikipedia.org/w/index.php?title=Usuario:Dalma_Huerta_Mercado_Calder%C3%B3n&diff=prev&oldid=170526877 oculte datos sensibles y muy personales] de [[Usuario:Dalma Huerta Mercado Calderón|esta página de usuario]], ya que es aún una niña (ni siquiera es adolescente). No creo que sea consciente de que lo que hace es peligroso a su edad.
Añado que ya [https://es.wikipedia.org/wiki/Usuario_discusi%C3%B3n:Dalma_Huerta_Mercado_Calder%C3%B3n#Informaci%C3%B3n_personal no es la primera vez que la pillan colgando datos personales], el año pasado hizo lo mismo. Si toca hacer alguna medida administrativa que evite que la menor siga exponiendo sus datos sin cuidado, adelante.
; Comentarios
No soy bibliotecario, pero {{ping|Taichi}} creo que lo mejor es mandar un correo a [[Wikipedia:Supresores|oversight]], o como mínimo realizar la solicitud en algún lugar menos visible (como IRC). --[[Usuario:Xacaranda|Xacaranda]] [[Usuario discusión:Xacaranda|(mensajes)]] 18:56 18 nov 2025 (UTC)
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 04:22 17 nov 2025 (UTC)
; Respuesta
{{admintab|1={{Sí}}, dada la excesiva información personal y la imposibilidad de ocultar la última edición, opté por el borrado de la PU. También dejé un mensaje a la usuaria. En caso de reincidir, aplicaría una medida, como un bloqueo parcial, para impedir que vuelva a crear su página de usuario. Un saludo,|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 01:55 19 nov 2025 (UTC)}}
== LTA ==
; Usuarios implicados
* {{u|Mauro08L}}
; Motivo
Hmm, otra vez, otro títere más de {{u|Claudio1098}}.
; Usuario que lo solicita
* —<span style="font-family:Trebuchet MS;font-size:95%">[[Usuario:Mαrti|<span style="color:#636;">Mαrti</span>]] <span style="color;background:#CBE2F7;border-radius:9px;"> [[Usuario discusión:Mαrti|'''ϟ''']] </span></span> 20:23 18 nov 2025 (UTC)
; Respuesta
{{admintab|1={{Hecho}}|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 01:42 19 nov 2025 (UTC)}}
== Recreación reiterada ==
; Asunto
* El usuario {{u|Archivoteleditor}} insiste en recrear el mismo programa de televisión con distintas variaciones del título, véase [[Tentaculos]], [[Tentáculos]], [[Ni que fuéramos tentáculos]] y [[Ni Que Fuéramos Tentáculos]], contabilizo más de una docena de recreaciones, ya se le avisó de un posible conflicto de interés.
:En cuanto al artículo, se trata de un programa que duró apenas 3 meses en antena, aunque El País y EuropaPress son referencias fiables, mencionan el programa superficialmente.
; Usuario que lo solicita
* '''C:\>''' [[Usuario:A.piquerasm|A.piquerasm]] '''[''' [[Usuario Discusión:A.piquerasm|Discusión]] ''']''' 16:43 19 nov 2025 (UTC)
; Respuesta
{{admintab|{{hecho}}. Inhabilitado de crear páginas. Un saludo.
|2= <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 19:49 19 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170580247]]
; Motivo
Lenguaje soez
; Usuario que lo solicita
* [[Usuario:Casisgaal|<span style="font-size:black 3px 1px 3px; font-variant:Corbel; color:blue; text-shadow:cyan 2px 1px 2px">Casisgaal</span>]] [[Usuario discusión:Casisgaal|(Discusión)]] 16:16 20 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Edición ocultada y cuenta bloqueada. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 00:36 21 nov 2025 (UTC)}}
== Anónimo escurridizo ==
; Asunto
Un anónimo que cambia de cuenta temporal y de IP lleva dos meses haciendo cambios sin sentido en partidos políticos de Colombia [https://es.wikipedia.org/w/index.php?title=Independientes_(Colombia)&action=history como este], [https://es.wikipedia.org/w/index.php?title=Partido_Comunista_de_Colombia_-_Marxista_Leninista&diff=prev&oldid=170580251 cambiando un «es» por «fue»] (haciendo entender que ya no existen), pero sin aportar pruebas que los partidos ya no están activos. Como no está aportando nada [[WP:VER|que lo sustente]], se le está revirtiendo pero insiste en reponerlo, llegando a una conducta que no se puede considerar como constructiva.
Además, nos pone en prueba con el sistema de cuentas temporales ya que no sólo está cambiando de cuenta temporal, sino de IP, por lo que dejo en consideración que hacer. Estás serían las direcciones en cuestión: [https://es.wikipedia.org/wiki/Especial:IPContributions/191.108.3.30], [https://es.wikipedia.org/wiki/Especial:IPContributions/191.108.59.86], [https://es.wikipedia.org/wiki/Especial:IPContributions/152.201.226.108] y [https://es.wikipedia.org/wiki/Especial:IPContributions/152.202.79.18].
Previo a la instauración de cuentas temporales también editó con las siguientes IPs:
* {{u|152.201.203.233}}
* {{u|186.113.76.107}}
* {{u|191.111.9.153}}
Es posible que incluso se considere en semiproteger si en caso tal el anónimo siga por cambiar de IP y continúe con esta situación.
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 16:49 20 nov 2025 (UTC)
; Respuesta
{{admintab|{{prot|60}}|[[Usuario:Saloca|Saloca]] ([[Usuario_Discusión:Saloca|<big>ངའི་གླེང་མོལ།</big>]]) 18:19 26 nov 2025 (UTC)}}
== Acoso ==
; Usuarios implicados
* {{u|~2025-35257-44}}
* {{u|~2025-35202-10}}
; Motivo
Acoso a un usuario
; Usuario que lo solicita
* [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 21:57 20 nov 2025 (UTC)
; Respuesta
{{admintab|1={{Hecho}}|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 16:49 21 nov 2025 (UTC)}}
== Acoso ==
; Usuarios implicados
* {{u|Narsenopoulos}}
; Motivo
{{diff|170585395|Acoso a un usuario}}
; Usuario que lo solicita
* [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 22:03 20 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Usuario bloqueado por Virum Mundi. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 00:28 21 nov 2025 (UTC)}}
== Ocultar ediciones ==
; Asunto
* [[Especial:Diff/169433403]]
* [[Especial:Diff/170587004]]
; Motivo
El artículo suele ser vandalizado mediante la inclusión de nombres completos de particulares en esta lista, entiendo que motivados por algún tipo de rencilla personal. Creo que es conveniente ocultarlos ya que que, de lo contrario, esos nombres quedan indexados y accesibles por internet, asociados a una lista de violadores en serie, lo cual puede tener implicaciones en su vida personal.
; Usuario que lo solicita
* [[Usuario:Nacaru|Nacaru]] [[Archivo:Noto Emoji KitKat 2601.svg|19px]] ([[Usuario_discusión:Nacaru|discusión]]) 00:23 21 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Ediciones ocultadas. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 00:39 21 nov 2025 (UTC)}}
== Solicitud para corregir redirecciones dobles en [[Ciudad del Cuzco]] y [[Cusco, Perú]] ==
Hola. Por favor, ayúdenme a solucionar el problema de las redirecciones dobles en las páginas de redireccionamiento [[Ciudad del Cuzco]] y [[Cusco, Perú]]. Gracias. [[Especial:Contribuciones/~2025-35342-08|~2025-35342-08]] ([[Usuario discusión:~2025-35342-08|discusión]]) 04:33 21 nov 2025 (UTC)
;Respuesta
{{admintab|1={{Hecho}}|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 04:45 21 nov 2025 (UTC)}}
== Me sentí acosada por Jaluj, por favor, paciencia con los novatos ==
; Asunto
Soy una nueva editora (bueno, era una nueva editora) estudiante de 5º de Veterinaria y entré en la wikipedia con mucha ilusión.
Detecté un artículo escrito llamado “Comida para gatos” lleno de enlaces spam a marcas comerciales, así como un claro sesgo pro pienso alabando sus virtudes.
Después de leerme todos los tutoriales edité el artículo intentando ser objetiva, eliminado enlaces spam y texto publicitario.
Un editor deshizo todo mi trabajo dando la razón de que yo había eliminado referencias. https://es.wikipedia.org/w/index.php?title=Comida_para_gatos&diff=170390013&oldid=170376180
Vi la posibilidad de aprender de mis errores y le pregunté por que consideraba fiables (ya que repuso todos los enlaces spam) Eran enlaces a artículos como “los 8 mejores marcas de piensos” (que es publicidad de 8 marcas de piensos, con enlaces a afiliados de Amazon), o webs que no funcionaban etc etc
Me contestó que había eliminado todo mi trabajo porque yo había añadido 1 referencia “por tratarse de blog y por tanto no considerarse fiable”. Era un enlace a un artículo de una clínica veterinaria como había 3 o 4 igual en el artículo. https://clinicaveterinarium.es/el-gato-es-omnivoro-o-carnivoro/
No entendí que para eliminar ese enlace se eliminara todo el trabajo realizado en el artículo, y sobre todo que se repusieran los enlaces spam, y por qué esos enlaces spam eran fuentes fiables.
Para resumir, volví a poner el artículo tal y como yo lo había escrito (eliminado más de 10 enlaces spam) quitando el enlace a dicha clínica, sospechando que era ese el problema, y el editor me agradeció la edición. Seguí sin aprender. Pero no me quejo de este editor.
Y aquí viene mi ruego.
Posteriormente a todo esto, y tras muchos días después, apareció el editor Jaluj, https://es.wikipedia.org/wiki/Usuario_discusi%C3%B3n:LaVeterinaria , donde me acusó de faltar a la etiqueta y falta de civismo al preguntar al editor. Pedí disculpas por mis preguntas si habían molestado y volví a decir que mi intención era aprender y por eso preguntaba.
Tras mi respuesta, el editor Jaluj fue a una edición mía en otro artículo, y la eliminó, diciendo que no era una fuente fiable https://es.wikipedia.org/w/index.php?title=Perro_de_caza&curid=707821&diff=170565115&oldid=170545527 La ACCM es un organismo avalado por el Gobierno https://servicio.mapa.gob.es/arca/download.html?id=20338485&contentType=application/pdf que reconoce oficialmente a los perros de raza, así que supongo que son una fuente entendida del tema para hablar de razas.
Además de eliminar esa información, me vuelve a acusar de falta de civismo y de etiqueta, por lo que me declaré Retirada y así se lo dije como respuesta, ya que no entendía nada, me di cuenta que no podía aprender y me sentía atacada.
He recibido un email de wikipedia donde me avisa que el editor Jaluj obviando todas mis disculpas y petición de información sobre la organización oficial sólo me exige el nombre de mi mentor.
Solo pido un poco de paciencia y empatía con los nuevos editores, necesitamos empatía y ayuda para editar, no acusaciones de mala fe y falta de civismo. Yo lo he intentado, cuiden a los que vengan nuevos detrás de mi. Gracias por leer.
; Usuario que lo solicita
--[[Usuario:LaVeterinaria|LaVeterinaria]] ([[Usuario Discusión:LaVeterinaria|discusión]]) 14:01 21 nov 2025 (UTC)
;Comentario adicional
Permito añadir que {{u2|Leoncastro}} y mi persona [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n%3ALaVeterinaria&diff=170608554&oldid=170595929 hemos tratado separadamente de mediar en el asunto], pero la usuaria está demasiado a la defensiva e incluso [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n%3ATaichi&diff=170606470&oldid=170599847 me dejó esta contestación], incluso cuando buscaba seriamente ayudarle. Lo que denoto en sus contestaciones además, es que ella como estudiante universitaria dice tener algún "mentor" en su universidad (pero no está adscrito acá), por lo que estoy deduciendo que hay alguna orientación mal ejecutada y pareciera que la estudiante está obligada a editar como sea, a expensas de que cualquier patrullero o bibliotecario sea maltratado de esta manera si le revisan sus contribuciones. Ojalá haya alguna forma de que se haga entender y ver ante las instancias de qué o quién movió institucionalmente a la alumna a que pasara esto. '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 14:35 22 nov 2025 (UTC)
; Respuesta
{{admintab|1={{No}}. {{U|LaVeterinaria}}, no me parece que, en ningún momento, Jaluj o algún otro de los varios usuarios que han buscado orientarte te hayan «maltratado» o dado motivos para sentirte intimidada o acosada. Más bien, algunas de tus interacciones muestran que, ciertamente, pareces estar a la defensiva y que podrían malinterpretarse. Supongo que el primer mensaje de Jaluj estuvo motivado por una de tus respuestas a Casisgaal —«¿Por qué escribir texto apoyado en enlaces verificables como la universidad etc.? ¿La wikipedia española se basa en la inglesa y no podemos editar sino solo traducir?»—, que se alejó del [[Wikipedia:Civismo|civismo]] esperado en las interacciones entre usuarios en Wikipedia. Asumiste que el mensaje de Jaluj estuvo motivado por tu «insistencia por preguntar lo que no entendía», cuando claramente te explicó, de forma amable y con la paciencia que en varias ocasiones has pedido, que fue por tu tono. Coincido con Jaluj en que parece que no lees los mensajes completos.
<br>
Si preguntó Jaluj sobre tu «mentor», que tú misma mencionaste en la conversación con Casisgaal, es porque, ciertamente después de estas interacciones que has tenido, surge la duda de quién es, si es usuario de Wikipedia y si tiene conocimiento de las políticas que la rigen. Parece que no. Por ello, sería mejor que aprovecharas herramientas como el [[Wikipedia:Programa de tutoría|programa de tutoría]] —cabe destacar que {{u|Ezarate}} ya amablemente se ofreció a ayudarte con tus ediciones—. Todo lo anterior, ya te lo había explicado Leoncastro. Además, él te dejó un extenso mensaje donde explicó y trató de mediar. Tu respuesta y actuar subsecuente es, cuanto menos, desconcertante.
<br>
En suma, descarto la denuncia. {{U|LaVeterinaria}} no me parece que el tono que uses y la forma de interactuar que tienes con otros usuarios, que han intentando orientarte, sea adecuada o benéfica para la enciclopedia. Así como insistes en pedir paciencia, ofrécela a los demás y no acuses de intimidación o denuncies tan fácilmente. Aprovecha los mensajes en los que se te ha explicado un poco sobre la enciclopedia, aprovecha el programa de tutoría o los ofrecimientos de usuarios como Ezarate. No continúes con esta forma de actuar porque fomenta conflictos y puede conducir a medidas que nadie quiere que se tengan que tomar. Un saludo,|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 22:00 22 nov 2025 (UTC)}}
== LTA ==
; Usuarios implicados
* {{u|Henrysmithwa5}}
; Motivo
LTA aerolíneas
; Usuario que lo solicita
* [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 20:15 21 nov 2025 (UTC)
; Respuesta
{{admintab|{{ok}} por Jake Park. |--'''[[Usuario:Geom|<b style="padding: 3px 8px; background: linear-gradient(135deg, red, yellow); color: white; border-radius: 0px 7px 0px 7px">Geom</b>]]''' [[Usuario discusión:Geom|<span style="font-size:100%;color: brown;">'''(discusión)'''</span>]] 00:38 22 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170607263]]
; Motivo
Etiqueta
; Usuario que lo solicita
* [[Usuario:CharlieRaMx|CharlieRaMx]] ([[Usuario Discusión:CharlieRaMx|discusión]]) 12:02 22 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Edición ocultada. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 12:30 22 nov 2025 (UTC)}}
== Ocultar ediciones ==
; Usuarios implicados
* {{u|Zanahorita Extraida}}
; Motivo
Pido que se oculten todas las ediciones de este títere bloqueado, quien como siempre ha lanzado comentarios denigrantes, ofensivos y hasta insultos.
; Usuario que lo solicita
* [[Usuario:Dinamino|Dinamino]] ([[Usuario Discusión:Dinamino|discusión]]) 18:08 23 nov 2025 (UTC)
; Respuesta
{{Hecho}} por Saloca. [[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 20:00 23 nov 2025 (UTC)
== LTA ==
; Usuarios implicados
* {{u|Patthenry5}}
; Motivo
LTA aerolíneas
; Usuario que lo solicita
* [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 18:24 23 nov 2025 (UTC)
; Respuesta
{{Hecho}} por MiguelAlanCS. [[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 19:59 23 nov 2025 (UTC)
== Ocultar ediciones ==
; Asunto
* [[Especial:Diff/170589208]]
* [[Especial:Diff/170589204]]
; Motivo
Vandalismo
; Usuario que lo solicita
* [[Usuario:CarlosEduardoPA|<span style="font-size:80%;background:#000;color:#fff;border-radius:25px;padding:3px 8px;">CarlosEduardoPA</span>]] [[Usuario discusión:CarlosEduardoPA|✉️]] 22:29 23 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Ediciones ocultadas. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 00:26 24 nov 2025 (UTC)}}
== MediaWiki:Jsonconfig-use-category ==
<!-- ↑ RECUERDA COLOCAR UN TÍTULO A TU MENSAJE EN EL CUADRO «Asunto/encabezado» Y LUEGO PROCEDE A BORRAR ESTE MENSAJE. GRACIAS. -->
; Asunto
* {{a|MediaWiki:Jsonconfig-use-category}}
* Please delete the page as it is no longer necessary following [[:phab:T378352|T378352]] ([[:Category:Wikipedia:Páginas que usan la extensión JsonConfig|the category]] has already been deleted). See also [[:m:Steward requests/Miscellaneous#Category:Pages using the JsonConfig extension]].
; Usuario que lo solicita
* [[Usuario:NguoiDungKhongDinhDanh|NguoiDungKhongDinhDanh]] ([[Usuario Discusión:NguoiDungKhongDinhDanh|discusión]]) 23:09 23 nov 2025 (UTC)
; Respuesta
{{admintab|{{ok}}|--'''[[Usuario:Geom|<b style="padding: 3px 8px; background: linear-gradient(135deg, red, yellow); color: white; border-radius: 0px 7px 0px 7px">Geom</b>]]''' [[Usuario discusión:Geom|<span style="font-size:100%;color: brown;">'''(discusión)'''</span>]] 09:01 24 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170617475]]
; Motivo
Vandalismo
; Usuario que lo solicita
* [[Usuario:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">'''Mauricio C.'''</span>]] [[Usuario discusión:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">(discusión)</span>]] 23:46 23 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Edición ocultada por Virum Mundi. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 00:22 24 nov 2025 (UTC)}}
== Plantillas mantenidas sin justificación en Conservatorio de Música de la Universidad Austral de Chile ==
; Asunto
Solicito la intervención de un bibliotecario respecto al artículo [[Conservatorio de Música de la Universidad Austral de Chile]].
El usuario Ontzak colocó dos plantillas (promocional e irrelevante) el día 18 de noviembre. Desde entonces el artículo ha sido completamente reescrito, reforzado con referencias académicas y eliminado el contenido que podía ser de estilo promocional e irrelevante. Conforme a lo indicado en las propias plantillas, abrí hilo en la página de discusión solicitando consenso para su retirada. El usuario no ha respondido pese a haber sido notificado y mencionado en dos ocasiones.
; Motivo
El comportamiento observado, colocar plantillas, no responder a la discusión y bloquear de facto la retirada, encaja en lo descrito en [[WP:DUEÑO]]. A día de hoy las razones originales ya no se sostienen, pero las plantillas permanecen en el artículo sin justificación actual y el editor que las colocó evita participar en la discusión.
; Usuario que lo solicita
[[Usuario:Hoppedup|Hoppedup]] ([[Usuario Discusión:Hoppedup|discusión]]) 12:26 24 nov 2025 (UTC)
Solicito que un bibliotecario revise el caso:
• si procede, retire las plantillas,
• y si fuese necesario, recuerde al usuario implicado la obligación de participar cuando se cuestiona una plantilla mantenida.
Gracias.
; Respuesta
{{admintab|1={{Hecho}}. Por lo demás, todos sabemos cómo hace las cosas {{u2|Ontzak}}; sería mejor que las hiciera con un poco más de intercambio con los demás, pero no se le puede pedir a los editores lo que no pueden o no quieren aportar en Wikipedia (editar sigue siendo una actividad voluntaria, todavía). En mi personal opinión, es mejor tenerlo haciendo lo que hace que no tenerlo, de modo que lo más que podemos hacer es volverlo a invitar a ser un poco más comunicativo. En cuanto a lo de WP:DUEÑO, me parece que te has pasado de largo unos cuantos kilómetros en tu interpretación; un poco más de calma, por favor. Gracias por tu mensaje.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 13:10 24 nov 2025 (UTC)}}
== Spam incesante ==
<!-- ↑ RECUERDA COLOCAR UN TÍTULO A TU MENSAJE EN EL CUADRO «Asunto/encabezado» Y LUEGO PROCEDE A BORRAR ESTE MENSAJE. GRACIAS. -->
; Asunto
* Rango con decenas de ediciones spam, al menos unas 34 desde marzo de este año.
* {{u|89.214.0.0/17}}
* [[Especial:IPContributions/89.214.0.0/17]]
; Usuario que lo solicita
* [[Usuario:Xacaranda|Xacaranda]] [[Usuario discusión:Xacaranda|(mensajes)]] 18:58 25 nov 2025 (UTC)
; Respuesta
{{admintab|{{Sí|He aplicado un bloqueo parcial a los artículos objeto de spam}}.|2=[[Usuario:Montgomery|Montgomery]] ([[Usuario Discusión:Montgomery|discusión]]) 19:04 25 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170663031]]
; Motivo
Transgresión de las reglas de etiqueta.
; Usuario que lo solicita
* [[Usuario:Dinamino|Dinamino]] ([[Usuario Discusión:Dinamino|discusión]]) 19:17 25 nov 2025 (UTC)
; Respuesta
{{admintab|$oc|2= <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 20:09 25 nov 2025 (UTC)}}
== Solicitar traslado ==
; Asunto
* Solicito el traslado de [[CITEDEF]] a [[Instituto de Investigaciones Científicas y Técnicas para la Defensa]], siguiendo la recomendación de la [[Wikipedia:Convenciones de títulos|convención de títulos]] de evitar el uso de acrónimos y siglas siempre que se pueda.
; Usuario que lo solicita
* [[Usuario:Comecaballos|Comecaballos]] ([[Usuario Discusión:Comecaballos|discusión]]) 00:17 26 nov 2025 (UTC)
; Respuesta
{{admintab|{{hecho}}|--[[Usuario:Ezarate|Esteban]] ([[Usuario Discusión:Ezarate|discusión]]) 11:58 26 nov 2025 (UTC)}}
== Cuenta de "propósito particular" ==
; Asunto
* No tengo del todo claro si [https://es.wikipedia.org/w/index.php?title=Especial:Registro/block&page=Usuario%3AInfohisto esto va acá] o a esta altura debería reportarse como vandalismo. Ver sus ediciones de hoy, y sus resúmenes de edición, en {{a|Caporales}} y {{a|Tundiqui}}. Esta cuenta, que ya fue identificada como lo que es, definitivamente no tiene otro propósito aquí que el que ya es evidente. Y lo ha hecho ya en varios artículos.
Mirando su página de usuario veo que tres administradores ya han interactuado con él. Así que aprovecho para citarlos: {{u|Tector}}, {{u|Saloca}} y {{u|Marcelo}}
; Usuario que lo solicita
* [[Usuario:Rastamby|Rastamby]] ([[Usuario Discusión:Rastamby|discusión]]) 02:34 26 nov 2025 (UTC)
; Respuesta
{{admintab|1={{Hecho}}, ya fue suficiente: usuario expulsado y artículos protegidos a largo plazo. Gracias por el aviso.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 02:43 26 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170670252]]
; Usuario que lo solicita
* [[Usuario:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">'''Mauricio C.'''</span>]] [[Usuario discusión:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">(discusión)</span>]] 04:58 26 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Edición ocultada. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 05:04 26 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170670276]]
; Usuario que lo solicita
* [[Usuario:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">'''Mauricio C.'''</span>]] [[Usuario discusión:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">(discusión)</span>]] 05:00 26 nov 2025 (UTC)
; Respuesta
{{admintab|1=Prueba|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:26, 9 February 2026 (UTC)|3=}}
== Solicitud para corregir redirecciones dobles en [[Departamento de Cusco]] y [[Provincia de Cusco]] ==
Hola. Por favor, ayúdenme a solucionar el problema de las redirecciones dobles en las páginas de redireccionamiento [[Departamento de Cusco]] y [[Provincia de Cusco]]. Gracias. [[Especial:Contribuciones/~2025-36297-96|~2025-36297-96]] ([[Usuario discusión:~2025-36297-96|discusión]]) 05:35 26 nov 2025 (UTC)
== CDI ==
; Usuarios implicados
* {{u|JALGUERRERO}}
; Motivo
Claro conflicto de interés. Sus ediciones se centran en el artículo que lleva su nombre
; Usuario que lo solicita
* [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 10:53 26 nov 2025 (UTC)
; Respuesta
{{admintab|{{Ok}}, hecho por {{u2|Virum Mundi}}; no puedo creer nos duró 15 años.|[[Usuario:Saloca|Saloca]] ([[Usuario_Discusión:Saloca|<big>ངའི་གླེང་མོལ།</big>]]) 18:27 26 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170680869]]
; Usuario que lo solicita
* [[Usuario discusión:Divinations|Divinations]] 21:35 26 nov 2025 (UTC)
; Respuesta
{{admintab|1=Ejemplo de resolución de solicitud que menciona a {{ping|Nacaru}}.|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:39, 9 February 2026 (UTC)|3=}}
== varias ediciones ==
; Asunto
* [[Especial:Diff/619272]]
; Motivo
Prueba de texto
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:45, 20 February 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Ocultar edición [[Especial:Diff/619272|619272]] ==
; Asunto
* [[Especial:Diff/619272]]
; Motivo
JHVBIKUHGVIK
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:47, 20 February 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Ocultar edición 619272 ==
; Asunto
* [[Especial:Diff/619272]]
; Motivo
VXCV XZVZCVZC
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:48, 20 February 2026 (UTC)
; Respuesta
{{admintab|1=OKIII|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:49, 20 February 2026 (UTC)|3=}}
== Ocultar edición 684158 ==
; Asunto
* [[Especial:Diff/684158]]
; Motivo
kjanxkajsncxa
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:34, 26 February 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Prueba de toro túitulo ==
; Usuarios implicados
* {{u|Sergio Enrollment 2}}
; Motivo
Prueba de otra raźon
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:55, 27 February 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Otra prueba de título más ==
; Usuarios implicados
* {{u|Sergio Enrollment 2}}
; Motivo
Desarrollando razón
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:55, 27 February 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== k,jnkjjn ==
; Usuarios implicados
* {{u|Dicto23456}}
; Motivo
lknmlkj lkjlk jkl
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:59, 27 February 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Otra denuncia la que sea ==
; Usuarios implicados
* {{u|Cenarium}}
; Motivo
A ver qué tal
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 01:08, 27 February 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Ocultar ediciones 74252,671081,671082 y 74252 ==
; Asunto
* [[Especial:Diff/74252]]
* [[Especial:Diff/671081]]
* [[Especial:Diff/671082]]
; Motivo
Motivo cualquiera
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 18:43, 2 March 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Ocultar ediciones 74252, 74251, 89098 y 74252 ==
; Asunto
* [[Especial:Diff/74252]]
* [[Especial:Diff/74252]]
* [[Especial:Diff/74251]]
* [[Especial:Diff/89098]]
; Motivo
Ejemplo
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 18:45, 2 March 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Ocultar edición 74252 ==
; Asunto
* [[Especial:Diff/74252]]
; Motivo
qeasdsa
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 18:46, 2 March 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Ocultar ediciones 74251 y 74252 ==
; Asunto
* [[Especial:Diff/74252]]
* [[Especial:Diff/74251]]
; Motivo
asdAD SADAS
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 18:46, 2 March 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Ocultar ediciones 74253, 74254, 74255, 74256 y 74252 ==
; Asunto
* [[Especial:Diff/74253]]
* [[Especial:Diff/74254]]
* [[Especial:Diff/74255]]
* [[Especial:Diff/74256]]
* [[Especial:Diff/74252]]
; Motivo
A ver si aparecen en el mismo orden.
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 18:52, 2 March 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
rg2m47e69ije6kn8ja8euyaupq2qdhh
737573
737571
2026-04-11T00:13:36Z
Nacaru
54746
Resolviendo solicitud «[[Wikipedia:Tablón_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Miscelánea/Actual#varias_ediciones|varias ediciones]]» mediante [[WP:TL|Twinkle Lite]]
737573
wikitext
text/x-wiki
<!-- AVISO: No semiproteger la miscelánea del tablón pues aquí redirigen muchas plantillas y avisos en páginas varias para que los novatos puedan aportar o realizar consultas que sólo bibliotecarios pueden resolver -->
<noinclude>{{Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Plantillas/Cabecera}}
{{Archivado automático
|Destino=Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Miscelánea/AAAA/MM
|Días a mantener=7
}}
== Situación extraña con tinte político ==
; Asunto
Desde 2019 aproximadamente se ha visto un grupo de IPv6 dentro del rango {{u|2804:14C:0:0:0:0:0:0/32}} editando y tratando de manipular contenidos políticos controvertidos (específicamente en [[Fascismo en América]] y otros más), de hecho por lo que se ve [[Discusión:Fascismo en América|aquí]] el anónimo se expresa de una manera particular sin saber siquiera español y sólo deja links sin mayor explicación. Adicionalmente, el anónimo está constantemente dejando mensajes a {{u2|Raimundo57br}} haciendo una serie de solicitudes de modificaciones a artículos de tinte político (sobre todo si son relativos a la derecha o izquierda política). Pero cuando vemos más a profundidad, vemos otras IPs como {{u|187.20.115.154}} dejando lo mismo al usuario, o este [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n:Raimundo57br&diff=prev&oldid=150518775 mensaje] de Raimundo57br dirigido a otra cuenta haciendo ping, pero en su propia discusión en un intento de coordinación de su desbloqueo. Hago acotar que Raimundo57br [https://pt.wikipedia.org/wiki/Especial:Contribui%C3%A7%C3%B5es/Raimundo57br está expulsado de la Wikipedia portuguesa desde el 2022], luego de múltiples problemas allá y numerosos bloqueos temporales.
También, que la Wikipedia portuguesa maneja estrictamente el uso de direcciones anónimas y [https://pt.wikipedia.org/wiki/Usu%C3%A1rio(a):2804:14C:0:0:0:0:0:0/32 todo el rango 2804:0:0:0:0:0:0:0/19] se encuenta bloqueado desde 2020. Existe una posibilidad de que haya una inusual coordinación entre anónimos y Raimundo57br para manipular artículos de política en Wikipedia en español y la Wikipedia portuguesa (a partir de una tercera cuenta), ante la imposibilidad de ambos entes (ya que se les hace más cómodo intervenir acá).
Incluyo al reporte que [https://es.wikipedia.org/w/index.php?title=Discusi%C3%B3n:Fascismo_en_Am%C3%A9rica&diff=prev&oldid=168802559 con estos] [https://es.wikipedia.org/w/index.php?title=Discusi%C3%B3n:Fascismo_en_Am%C3%A9rica&diff=prev&oldid=168803824 diffs en específico], no sólo Raimundo57br está involucrado, también {{u|Auréola}} (quien también pasó por un proceso de expulsión, aunque no está autoconfirmado acá) y {{u|Luizpuodzius}} (quien fue sancionado también allá, pero no expulsado; tampoco autoconfirmado acá). Aquí [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n%3ALuizpuodzius&diff=159046847&oldid=152503114 una interacción entre usuarios hablando de temas referentes a pt.wiki]. De esta situación, se confirma que se esté usando nuestra Wikipedia para cuestiones ajenas de un proyecto que los sancionó y expulsó.
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 17:04 4 ago 2025 (UTC)
;Comentarios
#'''Sobre los mensajes que recibo del IP''': no tengo contacto fuera de la wiki con este IP que me envía solicitudes para editar determinados artículos y, por regla general, no atiendo estas solicitudes;
#'''En cuanto a mis problemas en la wiki-pt''', aclaro que no se deben a ediciones que hice en el dominio principal de esa versión de la wiki (donde se borraron pocos artículos y se revirtieron pocas ediciones), sino a una larga rivalidad con determinados administradores. No creo que sea oportuno traer ese debate aquí, pero si insisten, daré las aclaraciones que consideren oportunas.
#'''Sobre mi contacto con Luizpuodzius''': entiendo que fue un acto aislado sin mayores repercusiones, hace mucho tiempo que no interactúo con esa persona.
#'''Sobre mi interacción con Anhabete''': entiendo que fue un acto aislado sin mayores repercusiones, después de eso no volví a interactuar con esa persona.
:--[[Usuario:Raimundo57br|Raimundo57br]] ([[Usuario Discusión:Raimundo57br|discusión]]) 12:35 5 ago 2025 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Solicito traslado de páginas ==
* Por favor trasladar las siguientes páginas
# {{a|Dover}} ... a ... {{a|Dover (desambiguación)}}
# {{a|Dover (Kent)}} ... a... {{a|Dover}}
;Motivo
* Por favor indicar el motivo: La ciudad de Inglaterra es el uso principal del término. La página de desambiguación tenía cientos de enlaces ambiguos.
;Usuario que lo solicita
Firmado: [[Usuario:Rondador|Ronda]][[Usuario Discusión:Rondador|dor]] 09:39 2 sep 2025 (UTC)
;Coentarios
* Personalmente estoy de acuerdo, vamos a solicitar las opiniones de otros que quieran opinar. Un saludo. <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 10:45 2 sep 2025 (UTC)
* Con permiso, {{u2|Rondador}}, he detallado los dos traslados que estás pidiendo; estoy de acuerdo con el traslado, y también con la solicitud de opiniones (quizá en algún lado haya algo muy relevante llamado localmente Dover). --[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 12:09 2 sep 2025 (UTC)
* Si pongo Dover en el buscador de Google, [[google:dover|el primer resultado]] (y siguientes) es para el grupo musical español (algo que sospechaba, ya que en mi mente sucede lo mismo). [[Usuario:MiguelAlanCS|<b style="color: #990099;">MiguelAlanCS</b>]] >>> [[Archivo:PICOL icon Mail.svg|15px|link=Usuario discusión:MiguelAlanCS]] 12:13 2 sep 2025 (UTC)
:: En mi caso sale la ciudad, pero bueno, también es un argumento a tener en cuenta. <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 20:23 2 sep 2025 (UTC)
:::{{no|}} Lo que no se puede hacer es trasladar y despues solicitar, como hizo unilateralmente el editor. Lo revertí a la espera de otra respuesta. Aunque mejor que en el tablón de bibliotecarios donde solo responden bibliotecarios, es preguntar en el café. A mi, si me preguntan por Dover me vienen muchas cosas a parte de la propia ciudad por lo que hay que buscar un consenso clarone indicarlo en la resolución y posibles traslados para que no hay discusiones en el futuro. --[[Usuario:Geom|<b style="background:purple;color:yellow;font-size:80%;border-radius:9px 0 0 9px;padding:2px 5px;">Geom</b>]][[Usuario discusión:Geom|<span style="font-size:80%;color: gray;">'''(discusión)'''</span>]] 09:35 3 sep 2025 (UTC)
::::{{No|Punto metiche}}, del otro lado del charco lo metí a San Gugul y lo primero que me salió es la banda. [[Usuario:Saloca|Saloca]] ([[Usuario_Discusión:Saloca|<big>ངའི་གླེང་མོལ།</big>]]) 20:54 24 sep 2025 (UTC)
;Respuesta
{{admintab|$0}}
== Gersoncharles ==
; Asunto
Durante el corto tiempo de la CAB del usuario {{u2|Gersoncharles}} señalé una [https://es.wikipedia.org/w/index.php?title=Wikipedia_discusi%C3%B3n:Candidaturas_a_bibliotecario/Gersoncharles&diff=prev&oldid=169411042 situación que considero ineludible], a pesar que el usuario trató de desvincularse sin mayor sustento y prefirió cancelar la CAB.
El usuario a pesar que fue sancionado en 2021 por este servidor, [https://xtools.wmcloud.org/pages/es.wikipedia.org/Gersoncharles?uselang=es ha retomado desde hace un año] en la creación de entradas de concursos de belleza de México con muy pocas notas de referencia: si observamos los artículos creados, sólo una fracción de cada artículo puede ser revisado en sus referencias, pero hay gran parte de la información que parece manejar el usuario de [[WP:FP|una manera que lo conoce en exclusiva]], por lo que no ha concedido en los requerimientos mínimos que se necesita para seguir editando en Wikipedia. De hecho, le han borrado 8 artículos en apenas un par de meses atrás. Sé que me adelanto en especulaciones, pero ante la ausencia de motivos que le llevaron a la CAB, sospecharía que [[WP:NSW|estaba buscando alguna forma de restaurar contenidos borrados, o disputar decisiones administrativas]].
El usuario se comporta virtualmente como una [[WP:CPP|CPP]] y el 100% de sus contribuciones en artículos están fijados en un tema cerradísimo como este, me hacen entreveer que el usuario requiere algún correctivo de prohibición editorial, al menos, para que empiece a entender su posición como editor, ya que alguien con 15 años en Wikipedia (y unos 8 años editando con cierta actividad), es rarísimo que siga comportándose como una CPP.
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 05:12 10 sep 2025 (UTC)
; Respuesta
{{admintab|1=Probando a resolver esta petición para ver si se reproduce el fallo.|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:12, 11 April 2026 (UTC)|3=}}
==Status quo Stonewalling==
; Usuarios implicados
* {{u|Aroblesm}}
;Artículo
[[Amarillos por Chile]] (ahora, pero es un comportamiento habitual)
; Motivo
Aunque el usuario hace un buen trabajo de patrullaje contra vandalismo, tiene un comportamiento habitual de lo que se denomina [[:en:WP:Status quo stonewalling]]. El usuario revierte todo lo que no le parece y no debate. Trata a cualquier usuario, experimentado o no como si fuera un vándalo o una CPP. Le va dando al botón, llegando siempre al límite de 3RR (en que el status quo tiene prioridad) y no pasa a la búsqueda de consenso. Y lo peor de todo, es que no maneja bien las políticas y hace SQS de manera incorrecta. <br />
En este caso particular está cometiendo un error obvio, porque en la plantilla: parámetro ideología, está usando un fuente que no se puede, ya que no es independiente. Concretamente a [https://www.laizquierdadiario.cl/Chile La Izquierda Diario], que es el órgano oficial del [[Partido de Trabajadores Revolucionarios]] y como tal no es un medio independiente al juzgar la posición de otro partido político (le explique en la PD y en su propio PD, y se limita a indicar en su reversión que ''no se puede eliminar referencias simplemente porque no nos gusta''. Esto es una abierta contravención a [[WP:FF]].<br />
Aún así, no quiero que esta denuncia se centre en ese artículo, ya que es un comportamiento habitual (basta ver su [https://es.wikipedia.org/w/index.php?title=Especial%3AContribuciones&target=Aroblesm&namespace=all&tagfilter=&start=&end=&limit=1000 historial]). Como digo arriba, muchas veces actúa así con vándalos y CPP, pero le pasa la máquina a lo que venga por delante y sin debatir (basta mirar su PD), y tampoco evidenciando un buen conocimiento de las políticas. Como indico arriba es un comportamiento habitual textbook de [[:en:WP:Status quo stonewalling]].
Solicito que se le indique al usuario lo incorrecto del proceder y que se le deje una clara advertencia respecto a SQS.
; Usuario que lo solicita
* [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 11:04 10 sep 2025 (UTC)
;Comentarios
{{comentario}}: SFBB omite que está eliminando referencias del artículo por mero gusto personal y sin justificación alguna. Se le propuso debatir pero no espera el debate. Yo solo he mantenido el artículo a su versión estable. Además, de todos los editores del artículo es el único que ha objetado una referencia y eso es raro en mi opinión. Me dedico a combatir el vandalismo y las ediciones arbitrarias sin consenso previo. No veo problemas en aquello. SFBB solo busca poder mantener su eliminación de referencias por mero gusto personal sin importar. --[[Usuario:Aroblesm|Aroblesm]] ([[Usuario Discusión:Aroblesm|discusión]]) 16:13 10 sep 2025 (UTC)
::No hombre....es un patrón de conducta. siempre que no te gusta algo movís a "versión estable" sin discutir nada hasta aburrir a la contraparte...eso es precisamente SQS. Tenís la PD llena de quejas por eso y seguís creyendo que lo estái haciendo bien, meramente porque aburrís al resto que le da lata pelear con vos (a mí mismo muchas veces me hai aburrido). Sin esta denuncia ni siquiera te habríai dignado a opinar...le diste dos veces más al botón (y sólo opinaste después de la denuncia y no dijiste nada en serio, salvo que estaba en la referencia...pff...nadie lo ha puesto en duda)...y lo que calificái como "arbitrariedad" lo hacís sin entender profundamente el funcionamiento de wikipeida. Es una obviedad que esa fuente no se puede usar lo que está siendo usada, no es "gusto personal" son las polítcas: por n-sima vez: lee [[WP:FF]]. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 19:17 10 sep 2025 (UTC)
:::'''Comentario'''. Al usuario se le explica porqué cierta fuerte [https://es.wikipedia.org/w/index.php?title=Amarillos_por_Chile&diff=169577342&oldid=169428682 absolutamente no] es [[WP:FF]] desde ningún punto de vista e ipso facto y sin explicación alguna entra en guerra de ediciones instantánea [https://es.wikipedia.org/w/index.php?title=Amarillos_por_Chile&diff=169577348&oldid=169577342 (1)] [https://es.wikipedia.org/w/index.php?title=Amarillos_por_Chile&diff=next&oldid=169577358 (2)]. Así no se puede, y preocupa si un revisor actúa así en otras páginas no analizadas. [[Usuario:XavierItzm|XavierItzm]] ([[Usuario Discusión:XavierItzm|discusión]]) 01:11 20 sep 2025 (UTC)
::::Quiero agregar que cuando el usuario se encontró con una clara mayoría de usuarios que cuestionaba su actuar, fue a pedir [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Protecci%C3%B3n_de_art%C3%ADculos/Actual#Amarillos_por_Chile_2 la protección de la página en su versión]. Nuevamente, esto es parte del comportamiento habitual de usuario ([https://es.wikipedia.org/w/index.php?title=Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Protecci%C3%B3n_de_art%C3%ADculos/Actual&action=history ver el historial de ese tablón]): el usuario trata cualquier diferencia de opinión con la suya como si fuera vandalismo y utiliza ese tablón para cementar su versión (yo mismo lo he sufrido con anterioridad, aunque es difícil buscar un acto específico en ese tablón). Quiero agregar que esta denuncia <u>no es por este caso en particular</u> sino que contra el comportamiento habitual de manipular el sistema para mantener sus versiones de status quo, sin siquiera entrar a discutir y tratar cualquier tipo de edición (que no concuerde con su visión) como si fuera vandalismo. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 09:35 20 sep 2025 (UTC)
:::::Otro antecedente más del que ni siquiera estaba al tanto. Con anterioridad a su solicitud de protección de la página del 20 de agosto (rechazada por {{u2|Rafstr}}), cuando intentaba mantener así el status quo ante la presión de 5 usuarios (todos usuarios veteranos muy experimentados) que llegaron independientemente a esa PD - <small>tras mención general del problema en el café</small>, el usuario ya había exigido una [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Protecci%C3%B3n_de_art%C3%ADculos/Actual#Amarillos_por_Chile protección similar el 8 de agosto], con anterioridad a esta denuncia y con posterioridad a que yo haya iniciado una discusión en la PD (que el ignoró al igual que los mensajes que le dejé en su PD personal, mientras seguía dándole al botón revertir). Es un perfecto ejemplo de cómo el usuario consistentemente [[WP:NSW|abusa de las reglas del sistema]], a sabiendas de que si revierte 3 veces, puede denunciar a la contraparte por 3R, y pedir protecciones. Y, bueno...le sigue dando al botón sin intentar si quiera debatir.
:::::[https://es.wikipedia.org/w/index.php?title=Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/3RR/Actual&diff=prev&oldid=149513602#Aroblesm Ya ha sido denunciado anteriormente por exactamente lo mismo] y (como decía anteriormente) tiene la PD llena de quejas por lo mismo, pero la mayoría simplemente nos hartamos - yo ya muchas veces - y nos vamos a otra cosa sin denunciar...'''<u>pero este comportamiento tiene que parar de una vez por todas</u>'''. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 00:50 22 sep 2025 (UTC)
::::::Otro ejemplo (y sin buscar mucho): hace unos días atrás hizo lo mismo con {{u2|GKLakers02}} en el artículo [[Línea 6 del Metro de Santiago]] y terminó denunciando al usuario [https://es.wikipedia.org/w/index.php?title=Wikipedia:Vandalismo_en_curso&diff=prev&oldid=169275648 por un presunto vandalismo]. En en intertanto GKLakers02 intentaba discutir en la [https://es.wikipedia.org/wiki/Discusi%C3%B3n:L%C3%ADnea_6_del_Metro_de_Santiago#Tensi%C3%B3n_Incorrecta. PD del artículo] proveyendo fuentes correctas, pero siendo completamente ignorado pro el usuario. El asunto terminó cuando el artículo fue protegido, manteniendo el status quo (incorrecto) que tozudamente forzaba Aroblesm dándole al botón.
::::::Pero bueno...este el sólo otro ejemplo pero son cientos. Alguien tiene que parar al usuario (que es buenísimo combatiendo vandalismo, pero termina tratando a todo el mundo cual si fueran vándalos). [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 01:07 22 sep 2025 (UTC)
:a sabiendas que está denuncia aún no se resuelve, intenté corregir lo de la [[Línea 6 del Metro de Santiago]], siendo nuevamente revertido [https://es.wikipedia.org/w/index.php?title=L%C3%ADnea_6_del_Metro_de_Santiago&diff=prev&oldid=169740888 1] y [https://es.wikipedia.org/w/index.php?title=Línea_6_del_Metro_de_Santiago&diff=prev&oldid=169740854 2] oportunidades (en rápidisimo; me reveritió dos veces, antes de que pudiese agregar la info sobre las otras líneas, para las cuales existe similar documentación) por el usuario que no duda un segundo en entrar en GE para defender el status quo sobre la base de una referencia absolutamente obsoleta del año 2016 (sí, hace 9 años, el metro sí operaba a 750 Vcc). Lo peor es que revierte e indica que hay que ir a la PD donde ya se le ha explicado con lujo de detalles que está equivocado.<br />
:Por favor: alguien tiene que frenar a este usuario ya que le hace mucho daño a eswiki (piensen en todas las IPs/usuarios que él determina unilateralmente que son vándalos). Yo por mi parte, voy a intentar evitarlo hasta que se resuelva esto (y voy a dejar los artículos sobre le Metro de Santiago con un voltaje incorrecto por el momento), aunque es altamente probable que me revierta en otros lados (ya vigila una enorme proporción de los artículos sobre contingencia chilena); si lo hace, no voy a insistir y voy a dejar las cosas de manera incorrecta. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 23:40 29 sep 2025 (UTC)
Agregro otro antecendente: En [[Línea 6 del Metro de Santiago]] y [[Línea 3 del Metro de Santiago]], el usuario entró nuevamente (como ya ha ocurrido en muchas oportunidades con anterioridad) en conflicto con IPs. Las IPs tiene razón, pero el usuario las revierte. Como las IP insisten en agregar <u>la info corrrecta</u> (bien referencianda y discutida de la IP del artículo - aunque le usuario lo ignore y le siga dando al botón), el usuario va al TAb a pedir protección de ambas [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Protecci%C3%B3n_de_art%C3%ADculos/Actual#L%C3%ADnea_6_del_Metro_de_Santiago] [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Protecci%C3%B3n_de_art%C3%ADculos/Actual#L%C3%ADnea_3_del_Metro_de_Santiago] y {{u2|Virum Mundi}} terminó protegiendo ambas por 3 meses. <br />
Esto pone en evidencia una vez más, el mal que está haciendo el usuario de las reglas y los tablones. Las IPs (porque son dos creo) han hecho todo bien: han agregado info correcta, han referenciado y han ido a la PD....y el usario le sigue dando al botón para imponer una fuente obsoleta de 2016. Y recurre a cuatánto tablón haya para denunciar a supuesto vándalos..<br />
'''Por favor que alguien haga algo y pronto....o al menostenga en consideración este accionar permanente y dejen de validar los reportes del usuario.''' [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 02:59 6 oct 2025 (UTC)
;Respueta al comentario de abajo
::(no quiero que esto sea un foreo, pero hago este comentario para que esta denuncia <u>no se vaya por la ramas del caso puntual</u> sobre el que versa la respuesta)
{{pg|Virum Mundi}}: Aunque la denuncia no pasa por ahí, pero la tensión en el Metro de Santiago se ha cambiado de 750 Vcc a 1500 Vcc y de vuelta múltiples veces. Los cambios se realizan con relativa celeridad y la única documentación que queda disponible es precisamente la licitación y la especificación técnica de la misma (que fue lo provisto)...pero, vamos que estaremos de acuerdo que borrar todo pq hay un fuente obsoleta que no dice que en 2016 era diferente?
::Pero nuevamente, la denuncia no pasa por ahí. Esto es un ejemplo igual al caso de AxCh (descrito arriba) y muchísimso similares (que he visto/sufrido con el usuario y de los cuales hay una retahíla de protestas es su PD), en que revierte todo, trata a todo el mundo como vándalo, dice que hay que ir a la PD, y (si se digna a opinar en la PD - generalmente no lo hace), se limita a decir que tiene una fuente (por muy mala/obsoleta que sea) e ignora los argumentos en la discusión. Y luego recurre a tablones para pedir protecciones, denunciar vandalismo y así afianzar su versión. Es un mal uso y no te culpo a ti ni ningún sysop, porque es muy difícil darse cuenta del mal uso (repetitivo) que hace y a primera vista sí puede parecer correcto (y obviamente cómo el usuario hace múltiples denuncias que sí correctas...bueno...es más mucho difícil)...y por eso les pido por favor mucha atención con el usuario que le está haciendo daño a wikipedia. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 11:47 6 oct 2025 (UTC)
;Comentario admin
* No es mi intención intervenir en esta denuncia. Pero sí quiero aclarar, ya que fui mencionado por nombre, que la semiprotección de estos artículos se ha hecho por guerra de ediciones, pues no se puede llenar los historiales una y otra vez de modificaciones y reversiones. Aun así, antes de proteger el de la Línea 6, por pura curiosidad (me interesa el tema de ferrocarriles, aunque no particularmente el sistema metropolitano de Santiago de Chile), entré en una página de la compañía donde está indicado que actualmente los cables son "flexibles, unipolares, clase 5, de tensión de aislamiento de 750 V (fuerza) y 600 V (control) para 90ºC..." (y así sigue). También entré en la fuente proporcionada por las IP, un documento de finales del año pasado que detalla los pormenores de un proyecto (para mí, proyecto significa futuro). También leí la discusión, donde el denunciado de hecho sí intervino una vez, allí se proporciona como prueba una imagen realizada por el anónimo, almacenada en su Google Drive. Esta imagen de un visor digital colgado del techo no es una fuente creíble, no solo por ser fuente primaria, y no solo porque no se puede saber de dónde es (no pone el nombre del metro ni de la estación, solo un número colgado del techo, pero presumo de buena fe y asumo que es del lugar indicado), sino que en sí tampoco indica nada definitivo, puede estar por ejemplo en fase de pruebas o de desarrollo (teniendo en cuenta el poco tiempo transcurrido desde el documento mencionado) o de adaptación. Sí, obviamente puede ser también que ya está empleado, pero entonces hace falta una referencia que lo indique de verdad (no la de un proyecto). Insisto, no estoy aquí ni para debatir ni para valorar esta denuncia, solo dejar claro el motivo de la protección. las guerras de ediciones no pueden llevarse a cabo en los historiales de los artículos, invito a cualquiera a realizar las modificaciones necesarias en dichos artículos, si ha lugar, y/o participar en la discusión aportando las fuentes (al fin y al cabo estás páginas están semiprotegidas, cualquier usuario autoconfirmado puede intervenir en ellas). Por lo demás, lo dejo a otro admin. Saludos. <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 05:10 6 oct 2025 (UTC)
;Continúa con más casos:
:Nuevamente el usuario en acción. [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Protecci%C3%B3n_de_art%C3%ADculos/Actual#Historia_del_Metro_de_Santiago_2 Acá pidiendo protección en TAB] porque un "supuesto Vándalo" estaría agregando una imagen (absolutamente pertinente al artículo). Por favor dejen de ignorar esto y pónganle freno al usuario. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 16:59 2 nov 2025 (UTC)
; Respuesta
{{admintab|1=Prueba|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:25, 9 February 2026 (UTC)|3=}}
== Retomo reporte de CPP política ==
; Asunto
Hace menos de un mes [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Nombres_inapropiados_y_vandalismo_persistente/2025/09#CPP_pol%C3%ADtica reporté en el tablón] un caso de CPP política, que fue lamentablemente desestimado, pues el usuario {{u|Pptrc}} ha vuelto con lo mismo, controlar el artículo del partido chileno [[Evolución Política]] y ahora se crea una entrada con IA de [[Juan Manuel Santa Cruz]] sin mayor complicación, e incluso pasó por la revisión de un patrullero. Insisto en que esta cuenta no tiene otro objetivo que controlar y promover contenidos de políticos de la formación en la que tiene interés demasiado particular.
:Por favor: por qué se espera para resolver estas cosas? es evidente que {{u2|Taichi}} tiene razón, y habiendo un proceso [[Elecciones parlamentarias de Chile de 2025|eleccionario en curso]], es evidente que la CPP está editando artículos con motivos propagandísticos...y que dada la coyuntura, se deben tomar medidas con celeridad. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 20:57 30 sep 2025 (UTC) <small>ps: aclaro que mi intervención acá fue para agregar el antecedente de la urgencia, dada la coyuntura</small>
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 15:17 17 sep 2025 (UTC)
; Respuesta
{{admintab|1=Probando a resolver esta otra a ver si ocurre...|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:12, 11 April 2026 (UTC)|3=}}
== Santos500p ==
; Asunto
Pido por favor que se tomen nuevas medidas para apaciguar el frenesí de ediciones del usuario {{u2|Santos500p}}, concernientes sobre todo con política de Perú, que [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n%3ASantos500p&diff=169860726&oldid=169762965 en los últimos días] ha llegado al punto de tener varios artículos y categorías creadas por él en [[WP:CDB|consultas de borrado]], algunas teniendo consenso comunitario a favor del borrado.
En una de las consultas señalé que [https://es.wikipedia.org/w/index.php?title=Wikipedia:Consultas_de_borrado/Deface_Per%C3%BA&diff=prev&oldid=169776828 el usuario lleva bastante rato desconociendo las líneas entre los diferentes proyectos], con varios intentos en el pasado de señalarle sobre ello, pero sigue en la mezcla de contenidos que podrían estar perfectamente en Wikinoticias, Wikisource e incluso Wikiquote, pero no hay nada que lo impida, aduciendo que puede entorugar cualquier cosa como artículo de Wikipedia, incluso riñendo con [[WP:REC]] o [[WP:SRA]]. De hecho, su página de discusión ha recibido en los últimos dos meses una cantidad difícil de cuantificar de [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n%3ASantos500p&diff=169860726&oldid=168959821avisos de borrado rápido, avisos de consultas de borrado y artículos sin relevancia], varios de ellos siendo borrados.
Esta situación ya suma a su <u>bloqueo parcial por dos años</u>, por lo que debería haber una restricción más certera que haga rectificar su proceder. Apelo a que el usuario pueda comprender que Wikipedia tiene bien delimitado [[WP:NO|sus noes]] y que debería él como usuario, ya no tan novato, entender esos límites. De lo contrario, dejo al encargo de un bibliotecario para que tome alguna medida extra para restringirlo.
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 11:34 10 oct 2025 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Usuario reincidente ==
; Asunto
* En marzo de este año, acudí al TAB por una serie de problemas en numerosos artículos creados por el usuario {{u|Ángel Luis Alfaro}}, [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Miscel%C3%A1nea/2025/06#Creaci%C3%B3n_de_art%C3%ADculos_con_varios_problemas ver aquí]. Ahora ha editado el artículo [[Alto Renacimiento]] con los mismos problemas por el cual puse esa denuncia en el TAB. Exceso de fotografías (173), referencias en las propias fotografías. Cientos de enlaces internos, algunas secciones son toda azul. Mal formato de las referencias, fuentes citadas (Fuentes citadas en Maniera moderna), usar como referencia artículos de wikipedia, véase la referencia 26. La sección notas es casi tan grande como el propio artículo. Y para terminar, no ha corregido ni uno solo de los artículos que ha creado anteriormente.
; Usuario que lo solicita
* [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 20:20 14 oct 2025 (UTC)
;Comentario
* {{ping|Ontzak}} No consigo entrar en el enlace (me va todo muy lento hoy), ¿es el mismo que resolví yo la última vez? <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 09:32 15 oct 2025 (UTC)
* {{ping|Virum Mundi}} si, el mismo. [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 13:55 15 oct 2025 (UTC)
** Ya veo, bueno, me pongo a ello, puede que tarde un rato. {{ping|Ángel Luis Alfaro}} por favor evita más ediciones hasta que se resuelva esta denuncia. Un saludo. <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 11:26 16 oct 2025 (UTC)
::{{comentario}} {{ping|Virum Mundi}}, a pesar del aviso, el usuario sigue [https://es.wikipedia.org/wiki/Especial:Contribuciones/%C3%81ngel_Luis_Alfaro editando]. [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 20:45 26 nov 2025 (UTC)
; Respuesta
{{admintab|$0}}
== Adrian Silvera ==
; Usuarios implicados
* {{u|Adrian silvera}}
; Motivo
Hace una década que este usuario agrega contenido mal escrito, sin referencias y muchas veces innecesario. Lo bloquearon tres veces por este motivo. Estuve un año insistiendo para que activara el autocorrector y así por lo menos subsanar el tema de la ortografía. Lo hizo hace poco, creo, pero el remedio fue peor que la enfermedad: ahora confunde adjetivos, sustantivos y verbos, y pone tildes en cualquier parte. Esto no sería tan grave de no ser porque se le advertí unas tres veces y sigue igual. Hoy le mandé un mensaje por ese tema y lo primero que hizo fue [https://es.m.wikipedia.org/w/index.php?title=The_Matrix_Reloaded&diff=prev&oldid=170118708 esto]. En otro caso lo interpretaría como una tomadura de pelo, pero no creo que lo haga a propósito. De todas maneras, alguna consecuencia tiene que tener, para aprender.
; Usuario que lo solicita
* [[Usuario:Minguu|Minguu]] ([[Usuario Discusión:Minguu|discusión]]) 20:16 22 oct 2025 (UTC)
; Respuesta
{{admintab|1=aaaa|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:54, 9 February 2026 (UTC)|3=}}
== Propuesta de desbloqueo para Lenis Felipe ==
; Asunto
* Hola. Por este medio quisiera proponer al colegio de bibliotecarios el desbloqueo local de {{u|Lenis Felipe}}, usuario bloqueado hace ya más de tres años por creación de páginas vandálicas. Lenis se encuentra con bloqueo global, por lo que para poder ser desbloqueado globalmente necesita ser desbloqueado de alguna de las wikis donde tiene bloqueos actualmente, entre ellas, Wikipedia en español.
:La propuesta la planteo porque, habiendo pasado un tiempo prudencial, puedo atestiguar que Lenis pareciera haber enmendado su rumbo y ha colaborado en reportar vía IRC, de manera privada, vandalismos, evasores de bloqueo y hasta sugerir cambios a filtros antiabusos para detener algunos abusadores de largo plazo. Particularmente lo ha hecho desde enero de 2024. Me parece que tal y como fue el caso de Sargento de Hierro (perdón que le nombre, pero me gusta destacar casos de usuarios que se corrigieron :)), podría ser positivo darle una segunda oportunidad para convertirse en un elemento positivo para la comunidad. Ante ello, propongo su desbloqueo local y quedo atento a cualquier propuesta de términos para ello, en cuenta restricción de crear páginas nuevas, o similares. Saludos,
; Usuario que lo solicita
* '''[[Usuario:Jake Park|''Jake Park'']]''' [[Archivo:Coat of arms of Costa Rica.svg|20 px]] [[Usuario Discusión:Jake Park|<span style="color: red;">'''Problem?'''</span>]] 01:00 29 oct 2025 (UTC)
;Comentarios de biblios
* Desde mi punto de vista, los usuarios que no hayan tenido actitudes vandálicas sistemáticas posteriores al bloqueo no deberían permanecer bloqueados más de tres años. '''Apoyo''' el posible desbloqueo. De todos modos, consulto: ¿sabes qué edad tiene el usuario? Porque no es lo mismo alguien que hizo esas tonterías a los 16 años que a los 60; en el primer caso, puede haber madurado rápidamente, mientras que si fuera ''"mayorcito"'' como quien escribe, los aprendizajes de comportamientos son más difíciles. --[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 02:03 29 oct 2025 (UTC)
* EMHO todos son susceptibles de cambiar, no quiere decir que todos lo hagan, pero uno de los 5 pilares nos pide presumir buena fe. {{Ok|Votum pro}}. [[Usuario:Saloca|Saloca]] ([[Usuario_Discusión:Saloca|<big>ངའི་གླེང་མོལ།</big>]]) 18:00 30 oct 2025 (UTC)
*
; Respuesta
(a rellenar por un bibliotecario)
== Unmuybuenusuario ==
<!-- ↑ RECUERDA COLOCAR UN TÍTULO A TU MENSAJE EN EL CUADRO «Asunto/encabezado» Y LUEGO PROCEDE A BORRAR ESTE MENSAJE. GRACIAS. -->
{{u|Unmuybuenusuario}} se registró el 28 de octubre de 2025, o sea hace 12 días. Desde el primer momento se dedicó a hacer mantenimiento y mandar artículos a borrar. El segundo día ya [https://es.wikipedia.org/w/index.php?title=Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Permisos/Actual&diff=prev&oldid=170247444 solicitó el flag de reversor con el argumento de : '' pese a mi muy breve tiempo en Wikipedia, desearía poseer el permiso de reversor para revertir de manera más fácil que usando el botón deshacer''], o sea que asegura que hace poco tiempo que está en Wikipedia pero ya conoce los tipos de flags que existen y dónde solicitarlos.
@[[Usuario:Edslov|Edslov]], le negó el permiso, obviamente, ya que en ese momento tenía menos de 48 horas de creada la cuenta, pero no solamente opina que la decisión no fue justa
sino que además conoce perfectamente el Café y fue directamente a quejarse porque no se le dio el permiso, para preguntar [https://es.wikipedia.org/w/index.php?title=Wikipedia:Caf%C3%A9/Archivo/Ayuda/Actual&diff=prev&oldid=170287227 ''¿Cuánto tiempo desde mi registro tiene que transcurrir para poder recibir el flag de reversor? ¿O cuántas ediciones?''].
Le pedí al usuario [https://es.wikipedia.org/wiki/Usuario_discusi%C3%B3n:Unmuybuenusuario que dejara de hacer mantenimiento] y él me dejó un mensaje protestando por que
[https://es.wikipedia.org/w/index.php?title=Usuaria_discusi%C3%B3n:Jaluj&diff=prev&oldid=170408787 no encuentra ninguna política que prohíba a un editor nuevo deshacer vandalismos o colocar plantillas de borrado rápido a artículos que cumplan alguno de los criterios de borrado rápido], lo cual es cierto, como tampoco hay ninguna política que prohiba a un usuario nuevo tener el flag de reversor, pero suponemos que para hacer este tipo de tareas se necesita tener experiencia y haber demostrado tener conocimientos para hacerlas bien. Por eso le pedí que se detenga y deje de hacer mantenimiento, porque si es un novato no podemos confiar en que lo haga.
Entonces me [https://es.wikipedia.org/w/index.php?title=Usuaria_discusi%C3%B3n:Jaluj&diff=prev&oldid=170408787 acusó de estar violando la políticas al morder a los novatos y no presumir buena fe]. Morder a los novatos es cuando se trata de una persona sin experiencia que todavía no conoce las normas y políticas de Wikipedia. Una persona novata no sabe ni que existe un Café, ni que existe un tablón para solicitar flags, ni que existe el flag de reversor ni que existe el "deshacer".
Pero a la vez me acusa de no presumir buena fe al sospechar que no es novato. Entonces, ¿en qué quedamos? Porque si es un novato, no debería estar haciendo mantenimiento y si no lo es, entonces yo no estaría presumiendo mala fe al sospechar que no lo es.
Esta cuenta me está difamando al dejar mensajes como [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n:A.piquerasm&diff=prev&oldid=170408867 este], porque además de acusarme de morder a un novato y de presumir mala fe me acusa por haber solicitado una VU y de haberlo "intimidado". Ahora resulta que por haberle pedido que deje de hacer mantenimiento y por haber pedido una VU yo soy la que viola las políticas y lo estoy "intimidando". Yo no lo acusé acusé ''gravemente de abuso a largo plazo'', yo solicité una VU porque sospecho que puede ser una LTA. Si no lo es, no tiene nada de qué preocuparse y si es un novato mucho menos. Solicito que se le haga un llamado de atención para que deje de difamarme a mis espaldas, ya que ni siquiera me enlazó para que yo no me enterara.
; Usuario que lo solicita
* [[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 18:17 10 nov 2025 (UTC)
* Te pido amablemente usuaria [[Usuario:Jaluj|Jalu]] una solución a este problema, porque yo no te estoy difamando, si conozco el café, el tablón, si se hacer reversiones, es porque fui anónimo y como usuario anónimo ya me dedicaba a hacer estas cosas, un usuario me sugiero visitar la página de cambios recientes y eso es lo que estoy haciendo, visitar los cambios recientes ¿Tengo prohibido deshacer vandalismos encontrados? Por cierto, no me indicaste cuales son las ediciones supuestamente arbitrarias, las ediciones que he hecho han sido deshacer vandalismos, yo no soy ni títere, ni evasor, ni mucho menos abuso a largo plazo, soy usuario completamente nuevo y esta es mi primera cuenta, y te recuerdo un fragmento de la página de usuarios títeres: '''Puede ser fácil identificar a un usuario títere, si muestra un conocimiento de las políticas, convenciones de Wikipedia y técnicas avanzadas de edición que no es de esperar en un novato (aunque debe presumirse buena fe: es posible que sea un usuario que haya colaborado en otra edición de Wikipedia, en alguna otra wiki o <u>que haya participado mucho tiempo como anónimo</u>)''' (subrayado mío). Si conozco como deshacer vandalismos, es porque antes editaba como anónimo, y esta cuenta fue creada para ayudar a Wikipedia, de ninguna manera la cree para LTA o ediciones arbitrarias. ¿Cómo propones que se solucione este problema y que tipo de ediciones puedo hacer y que tipo de ediciones no puedo hacer? --[[Usuario:Unmuybuenusuario|Unmuybuenusuario]] ([[Usuario Discusión:Unmuybuenusuario|discusión]]) 23:27 10 nov 2025 (UTC)
:{{comentario}}: [https://es.wikipedia.org/w/index.php?title=Wikipedia:Solicitudes_de_verificaci%C3%B3n_de_usuarios&oldid=170625007#Evasi%C3%B3n_de_bloqueo:_Cris2020 Resultado de la SVU]. --'''[[user:Stïnger|<span style="text-shadow:#FFD700 1px 1px 2px; class=texhtml"><span style="font-family:'Calibri';color:black">Stïnger</span></span>]]''' <sup>[[Archivo:Bureau kage.svg|15px|link=User talk:Stïnger]]</sup> 00:58 24 nov 2025 (UTC).
; Respuesta
{{admintab|Al no ser un caso reciente (ya pasaron algunos días) apercibo a {{u2|Unmuybuenusuario}} de [[WP:PBF]] primeramente y posterior a [[WP:PPBF]]. Ambos juicios caen en violaciones a [[WP:E]] y [[WP:CIV]] (supongo al ya haber editado como IP sabrá por que, por lo que en caso de reincidencia podría haber sanción. En cuanto al flag, queda al criterio del bibliotecario que lo otorga, no hay tiempo ni cuota determinada, pero es bastante obvio que más sabe el diablo por viejo que por diablo, yo tampoco lo habría otorgado.|[[Usuario:Saloca|Saloca]] ([[Usuario_Discusión:Saloca|<big>ངའི་གླེང་མོལ།</big>]]) 18:09 26 nov 2025 (UTC)}}
== Expulsado de la Wikipedia en inglés viene acá a hacer lo mismo... ==
;Usuarios
* {{u|SocialQuote}}
* {{u|2800:484:7380:0:0:0:0:0/44}}
; Asunto
Tanto [https://en.wikipedia.org/wiki/Special:Contributions/SocialQuote la cuenta registrada] como [https://en.wikipedia.org/wiki/Special:Contributions/2800:484:7380:0:0:0:0:0/44 el rango IP] se encuentran sancionados desde septiembre en la Wikipedia en inglés, por ediciones conflictivas, reversiones sin sentido e incluso insultos y amenazas.
Ya acá [[Usuario discusión:2800:484:7385:F0:95EE:CA0B:4429:B24C|ha causado problemas como anónimo en junio]] y la cuenta [https://es.wikipedia.org/w/index.php?title=Scarface_(pel%C3%ADcula_de_1983)&diff=prev&oldid=168285955 incluso ripostó contra un bibliotecario], y [https://es.wikipedia.org/w/index.php?title=Harry_Potter_y_el_c%C3%A1liz_de_fuego&diff=prev&oldid=169807011 está constantemente] [https://es.wikipedia.org/w/index.php?title=Dinero_negro&diff=prev&oldid=170282821 revirtiendo al bot de mantenimiento]. Nótese que los temas que edita tanto la cuenta como la IP son las mismas (series de TV y películas), y las sanciones aplicadas en en.wiki fueron hechas el mismo día.
Debido a esta coincidencia y la situación que está persistiendo ahora en la Wikipedia en español, pido que se tomen medidas.
:{{comentario}} Añado [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n:Farisori&diff=prev&oldid=170531619 otro mensaje bastante incordiante contra otro bibliotecario] haciéndolo suponer entre líneas que no sabe redactar artículos. '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 00:10 18 nov 2025 (UTC)
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 04:18 17 nov 2025 (UTC)
; Respuesta
{{Hecho|1=Bloqueado}} por Rafstr. [[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 01:40 19 nov 2025 (UTC)
== Borrar y ocultar datos sensibles en página de usuario ==
; Asunto
Pido con carácter de urgencia que algún bibliotecario [https://es.wikipedia.org/w/index.php?title=Usuario:Dalma_Huerta_Mercado_Calder%C3%B3n&diff=prev&oldid=170526877 oculte datos sensibles y muy personales] de [[Usuario:Dalma Huerta Mercado Calderón|esta página de usuario]], ya que es aún una niña (ni siquiera es adolescente). No creo que sea consciente de que lo que hace es peligroso a su edad.
Añado que ya [https://es.wikipedia.org/wiki/Usuario_discusi%C3%B3n:Dalma_Huerta_Mercado_Calder%C3%B3n#Informaci%C3%B3n_personal no es la primera vez que la pillan colgando datos personales], el año pasado hizo lo mismo. Si toca hacer alguna medida administrativa que evite que la menor siga exponiendo sus datos sin cuidado, adelante.
; Comentarios
No soy bibliotecario, pero {{ping|Taichi}} creo que lo mejor es mandar un correo a [[Wikipedia:Supresores|oversight]], o como mínimo realizar la solicitud en algún lugar menos visible (como IRC). --[[Usuario:Xacaranda|Xacaranda]] [[Usuario discusión:Xacaranda|(mensajes)]] 18:56 18 nov 2025 (UTC)
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 04:22 17 nov 2025 (UTC)
; Respuesta
{{admintab|1={{Sí}}, dada la excesiva información personal y la imposibilidad de ocultar la última edición, opté por el borrado de la PU. También dejé un mensaje a la usuaria. En caso de reincidir, aplicaría una medida, como un bloqueo parcial, para impedir que vuelva a crear su página de usuario. Un saludo,|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 01:55 19 nov 2025 (UTC)}}
== LTA ==
; Usuarios implicados
* {{u|Mauro08L}}
; Motivo
Hmm, otra vez, otro títere más de {{u|Claudio1098}}.
; Usuario que lo solicita
* —<span style="font-family:Trebuchet MS;font-size:95%">[[Usuario:Mαrti|<span style="color:#636;">Mαrti</span>]] <span style="color;background:#CBE2F7;border-radius:9px;"> [[Usuario discusión:Mαrti|'''ϟ''']] </span></span> 20:23 18 nov 2025 (UTC)
; Respuesta
{{admintab|1={{Hecho}}|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 01:42 19 nov 2025 (UTC)}}
== Recreación reiterada ==
; Asunto
* El usuario {{u|Archivoteleditor}} insiste en recrear el mismo programa de televisión con distintas variaciones del título, véase [[Tentaculos]], [[Tentáculos]], [[Ni que fuéramos tentáculos]] y [[Ni Que Fuéramos Tentáculos]], contabilizo más de una docena de recreaciones, ya se le avisó de un posible conflicto de interés.
:En cuanto al artículo, se trata de un programa que duró apenas 3 meses en antena, aunque El País y EuropaPress son referencias fiables, mencionan el programa superficialmente.
; Usuario que lo solicita
* '''C:\>''' [[Usuario:A.piquerasm|A.piquerasm]] '''[''' [[Usuario Discusión:A.piquerasm|Discusión]] ''']''' 16:43 19 nov 2025 (UTC)
; Respuesta
{{admintab|{{hecho}}. Inhabilitado de crear páginas. Un saludo.
|2= <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 19:49 19 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170580247]]
; Motivo
Lenguaje soez
; Usuario que lo solicita
* [[Usuario:Casisgaal|<span style="font-size:black 3px 1px 3px; font-variant:Corbel; color:blue; text-shadow:cyan 2px 1px 2px">Casisgaal</span>]] [[Usuario discusión:Casisgaal|(Discusión)]] 16:16 20 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Edición ocultada y cuenta bloqueada. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 00:36 21 nov 2025 (UTC)}}
== Anónimo escurridizo ==
; Asunto
Un anónimo que cambia de cuenta temporal y de IP lleva dos meses haciendo cambios sin sentido en partidos políticos de Colombia [https://es.wikipedia.org/w/index.php?title=Independientes_(Colombia)&action=history como este], [https://es.wikipedia.org/w/index.php?title=Partido_Comunista_de_Colombia_-_Marxista_Leninista&diff=prev&oldid=170580251 cambiando un «es» por «fue»] (haciendo entender que ya no existen), pero sin aportar pruebas que los partidos ya no están activos. Como no está aportando nada [[WP:VER|que lo sustente]], se le está revirtiendo pero insiste en reponerlo, llegando a una conducta que no se puede considerar como constructiva.
Además, nos pone en prueba con el sistema de cuentas temporales ya que no sólo está cambiando de cuenta temporal, sino de IP, por lo que dejo en consideración que hacer. Estás serían las direcciones en cuestión: [https://es.wikipedia.org/wiki/Especial:IPContributions/191.108.3.30], [https://es.wikipedia.org/wiki/Especial:IPContributions/191.108.59.86], [https://es.wikipedia.org/wiki/Especial:IPContributions/152.201.226.108] y [https://es.wikipedia.org/wiki/Especial:IPContributions/152.202.79.18].
Previo a la instauración de cuentas temporales también editó con las siguientes IPs:
* {{u|152.201.203.233}}
* {{u|186.113.76.107}}
* {{u|191.111.9.153}}
Es posible que incluso se considere en semiproteger si en caso tal el anónimo siga por cambiar de IP y continúe con esta situación.
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 16:49 20 nov 2025 (UTC)
; Respuesta
{{admintab|{{prot|60}}|[[Usuario:Saloca|Saloca]] ([[Usuario_Discusión:Saloca|<big>ངའི་གླེང་མོལ།</big>]]) 18:19 26 nov 2025 (UTC)}}
== Acoso ==
; Usuarios implicados
* {{u|~2025-35257-44}}
* {{u|~2025-35202-10}}
; Motivo
Acoso a un usuario
; Usuario que lo solicita
* [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 21:57 20 nov 2025 (UTC)
; Respuesta
{{admintab|1={{Hecho}}|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 16:49 21 nov 2025 (UTC)}}
== Acoso ==
; Usuarios implicados
* {{u|Narsenopoulos}}
; Motivo
{{diff|170585395|Acoso a un usuario}}
; Usuario que lo solicita
* [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 22:03 20 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Usuario bloqueado por Virum Mundi. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 00:28 21 nov 2025 (UTC)}}
== Ocultar ediciones ==
; Asunto
* [[Especial:Diff/169433403]]
* [[Especial:Diff/170587004]]
; Motivo
El artículo suele ser vandalizado mediante la inclusión de nombres completos de particulares en esta lista, entiendo que motivados por algún tipo de rencilla personal. Creo que es conveniente ocultarlos ya que que, de lo contrario, esos nombres quedan indexados y accesibles por internet, asociados a una lista de violadores en serie, lo cual puede tener implicaciones en su vida personal.
; Usuario que lo solicita
* [[Usuario:Nacaru|Nacaru]] [[Archivo:Noto Emoji KitKat 2601.svg|19px]] ([[Usuario_discusión:Nacaru|discusión]]) 00:23 21 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Ediciones ocultadas. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 00:39 21 nov 2025 (UTC)}}
== Solicitud para corregir redirecciones dobles en [[Ciudad del Cuzco]] y [[Cusco, Perú]] ==
Hola. Por favor, ayúdenme a solucionar el problema de las redirecciones dobles en las páginas de redireccionamiento [[Ciudad del Cuzco]] y [[Cusco, Perú]]. Gracias. [[Especial:Contribuciones/~2025-35342-08|~2025-35342-08]] ([[Usuario discusión:~2025-35342-08|discusión]]) 04:33 21 nov 2025 (UTC)
;Respuesta
{{admintab|1={{Hecho}}|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 04:45 21 nov 2025 (UTC)}}
== Me sentí acosada por Jaluj, por favor, paciencia con los novatos ==
; Asunto
Soy una nueva editora (bueno, era una nueva editora) estudiante de 5º de Veterinaria y entré en la wikipedia con mucha ilusión.
Detecté un artículo escrito llamado “Comida para gatos” lleno de enlaces spam a marcas comerciales, así como un claro sesgo pro pienso alabando sus virtudes.
Después de leerme todos los tutoriales edité el artículo intentando ser objetiva, eliminado enlaces spam y texto publicitario.
Un editor deshizo todo mi trabajo dando la razón de que yo había eliminado referencias. https://es.wikipedia.org/w/index.php?title=Comida_para_gatos&diff=170390013&oldid=170376180
Vi la posibilidad de aprender de mis errores y le pregunté por que consideraba fiables (ya que repuso todos los enlaces spam) Eran enlaces a artículos como “los 8 mejores marcas de piensos” (que es publicidad de 8 marcas de piensos, con enlaces a afiliados de Amazon), o webs que no funcionaban etc etc
Me contestó que había eliminado todo mi trabajo porque yo había añadido 1 referencia “por tratarse de blog y por tanto no considerarse fiable”. Era un enlace a un artículo de una clínica veterinaria como había 3 o 4 igual en el artículo. https://clinicaveterinarium.es/el-gato-es-omnivoro-o-carnivoro/
No entendí que para eliminar ese enlace se eliminara todo el trabajo realizado en el artículo, y sobre todo que se repusieran los enlaces spam, y por qué esos enlaces spam eran fuentes fiables.
Para resumir, volví a poner el artículo tal y como yo lo había escrito (eliminado más de 10 enlaces spam) quitando el enlace a dicha clínica, sospechando que era ese el problema, y el editor me agradeció la edición. Seguí sin aprender. Pero no me quejo de este editor.
Y aquí viene mi ruego.
Posteriormente a todo esto, y tras muchos días después, apareció el editor Jaluj, https://es.wikipedia.org/wiki/Usuario_discusi%C3%B3n:LaVeterinaria , donde me acusó de faltar a la etiqueta y falta de civismo al preguntar al editor. Pedí disculpas por mis preguntas si habían molestado y volví a decir que mi intención era aprender y por eso preguntaba.
Tras mi respuesta, el editor Jaluj fue a una edición mía en otro artículo, y la eliminó, diciendo que no era una fuente fiable https://es.wikipedia.org/w/index.php?title=Perro_de_caza&curid=707821&diff=170565115&oldid=170545527 La ACCM es un organismo avalado por el Gobierno https://servicio.mapa.gob.es/arca/download.html?id=20338485&contentType=application/pdf que reconoce oficialmente a los perros de raza, así que supongo que son una fuente entendida del tema para hablar de razas.
Además de eliminar esa información, me vuelve a acusar de falta de civismo y de etiqueta, por lo que me declaré Retirada y así se lo dije como respuesta, ya que no entendía nada, me di cuenta que no podía aprender y me sentía atacada.
He recibido un email de wikipedia donde me avisa que el editor Jaluj obviando todas mis disculpas y petición de información sobre la organización oficial sólo me exige el nombre de mi mentor.
Solo pido un poco de paciencia y empatía con los nuevos editores, necesitamos empatía y ayuda para editar, no acusaciones de mala fe y falta de civismo. Yo lo he intentado, cuiden a los que vengan nuevos detrás de mi. Gracias por leer.
; Usuario que lo solicita
--[[Usuario:LaVeterinaria|LaVeterinaria]] ([[Usuario Discusión:LaVeterinaria|discusión]]) 14:01 21 nov 2025 (UTC)
;Comentario adicional
Permito añadir que {{u2|Leoncastro}} y mi persona [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n%3ALaVeterinaria&diff=170608554&oldid=170595929 hemos tratado separadamente de mediar en el asunto], pero la usuaria está demasiado a la defensiva e incluso [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n%3ATaichi&diff=170606470&oldid=170599847 me dejó esta contestación], incluso cuando buscaba seriamente ayudarle. Lo que denoto en sus contestaciones además, es que ella como estudiante universitaria dice tener algún "mentor" en su universidad (pero no está adscrito acá), por lo que estoy deduciendo que hay alguna orientación mal ejecutada y pareciera que la estudiante está obligada a editar como sea, a expensas de que cualquier patrullero o bibliotecario sea maltratado de esta manera si le revisan sus contribuciones. Ojalá haya alguna forma de que se haga entender y ver ante las instancias de qué o quién movió institucionalmente a la alumna a que pasara esto. '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 14:35 22 nov 2025 (UTC)
; Respuesta
{{admintab|1={{No}}. {{U|LaVeterinaria}}, no me parece que, en ningún momento, Jaluj o algún otro de los varios usuarios que han buscado orientarte te hayan «maltratado» o dado motivos para sentirte intimidada o acosada. Más bien, algunas de tus interacciones muestran que, ciertamente, pareces estar a la defensiva y que podrían malinterpretarse. Supongo que el primer mensaje de Jaluj estuvo motivado por una de tus respuestas a Casisgaal —«¿Por qué escribir texto apoyado en enlaces verificables como la universidad etc.? ¿La wikipedia española se basa en la inglesa y no podemos editar sino solo traducir?»—, que se alejó del [[Wikipedia:Civismo|civismo]] esperado en las interacciones entre usuarios en Wikipedia. Asumiste que el mensaje de Jaluj estuvo motivado por tu «insistencia por preguntar lo que no entendía», cuando claramente te explicó, de forma amable y con la paciencia que en varias ocasiones has pedido, que fue por tu tono. Coincido con Jaluj en que parece que no lees los mensajes completos.
<br>
Si preguntó Jaluj sobre tu «mentor», que tú misma mencionaste en la conversación con Casisgaal, es porque, ciertamente después de estas interacciones que has tenido, surge la duda de quién es, si es usuario de Wikipedia y si tiene conocimiento de las políticas que la rigen. Parece que no. Por ello, sería mejor que aprovecharas herramientas como el [[Wikipedia:Programa de tutoría|programa de tutoría]] —cabe destacar que {{u|Ezarate}} ya amablemente se ofreció a ayudarte con tus ediciones—. Todo lo anterior, ya te lo había explicado Leoncastro. Además, él te dejó un extenso mensaje donde explicó y trató de mediar. Tu respuesta y actuar subsecuente es, cuanto menos, desconcertante.
<br>
En suma, descarto la denuncia. {{U|LaVeterinaria}} no me parece que el tono que uses y la forma de interactuar que tienes con otros usuarios, que han intentando orientarte, sea adecuada o benéfica para la enciclopedia. Así como insistes en pedir paciencia, ofrécela a los demás y no acuses de intimidación o denuncies tan fácilmente. Aprovecha los mensajes en los que se te ha explicado un poco sobre la enciclopedia, aprovecha el programa de tutoría o los ofrecimientos de usuarios como Ezarate. No continúes con esta forma de actuar porque fomenta conflictos y puede conducir a medidas que nadie quiere que se tengan que tomar. Un saludo,|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 22:00 22 nov 2025 (UTC)}}
== LTA ==
; Usuarios implicados
* {{u|Henrysmithwa5}}
; Motivo
LTA aerolíneas
; Usuario que lo solicita
* [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 20:15 21 nov 2025 (UTC)
; Respuesta
{{admintab|{{ok}} por Jake Park. |--'''[[Usuario:Geom|<b style="padding: 3px 8px; background: linear-gradient(135deg, red, yellow); color: white; border-radius: 0px 7px 0px 7px">Geom</b>]]''' [[Usuario discusión:Geom|<span style="font-size:100%;color: brown;">'''(discusión)'''</span>]] 00:38 22 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170607263]]
; Motivo
Etiqueta
; Usuario que lo solicita
* [[Usuario:CharlieRaMx|CharlieRaMx]] ([[Usuario Discusión:CharlieRaMx|discusión]]) 12:02 22 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Edición ocultada. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 12:30 22 nov 2025 (UTC)}}
== Ocultar ediciones ==
; Usuarios implicados
* {{u|Zanahorita Extraida}}
; Motivo
Pido que se oculten todas las ediciones de este títere bloqueado, quien como siempre ha lanzado comentarios denigrantes, ofensivos y hasta insultos.
; Usuario que lo solicita
* [[Usuario:Dinamino|Dinamino]] ([[Usuario Discusión:Dinamino|discusión]]) 18:08 23 nov 2025 (UTC)
; Respuesta
{{Hecho}} por Saloca. [[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 20:00 23 nov 2025 (UTC)
== LTA ==
; Usuarios implicados
* {{u|Patthenry5}}
; Motivo
LTA aerolíneas
; Usuario que lo solicita
* [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 18:24 23 nov 2025 (UTC)
; Respuesta
{{Hecho}} por MiguelAlanCS. [[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 19:59 23 nov 2025 (UTC)
== Ocultar ediciones ==
; Asunto
* [[Especial:Diff/170589208]]
* [[Especial:Diff/170589204]]
; Motivo
Vandalismo
; Usuario que lo solicita
* [[Usuario:CarlosEduardoPA|<span style="font-size:80%;background:#000;color:#fff;border-radius:25px;padding:3px 8px;">CarlosEduardoPA</span>]] [[Usuario discusión:CarlosEduardoPA|✉️]] 22:29 23 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Ediciones ocultadas. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 00:26 24 nov 2025 (UTC)}}
== MediaWiki:Jsonconfig-use-category ==
<!-- ↑ RECUERDA COLOCAR UN TÍTULO A TU MENSAJE EN EL CUADRO «Asunto/encabezado» Y LUEGO PROCEDE A BORRAR ESTE MENSAJE. GRACIAS. -->
; Asunto
* {{a|MediaWiki:Jsonconfig-use-category}}
* Please delete the page as it is no longer necessary following [[:phab:T378352|T378352]] ([[:Category:Wikipedia:Páginas que usan la extensión JsonConfig|the category]] has already been deleted). See also [[:m:Steward requests/Miscellaneous#Category:Pages using the JsonConfig extension]].
; Usuario que lo solicita
* [[Usuario:NguoiDungKhongDinhDanh|NguoiDungKhongDinhDanh]] ([[Usuario Discusión:NguoiDungKhongDinhDanh|discusión]]) 23:09 23 nov 2025 (UTC)
; Respuesta
{{admintab|{{ok}}|--'''[[Usuario:Geom|<b style="padding: 3px 8px; background: linear-gradient(135deg, red, yellow); color: white; border-radius: 0px 7px 0px 7px">Geom</b>]]''' [[Usuario discusión:Geom|<span style="font-size:100%;color: brown;">'''(discusión)'''</span>]] 09:01 24 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170617475]]
; Motivo
Vandalismo
; Usuario que lo solicita
* [[Usuario:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">'''Mauricio C.'''</span>]] [[Usuario discusión:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">(discusión)</span>]] 23:46 23 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Edición ocultada por Virum Mundi. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 00:22 24 nov 2025 (UTC)}}
== Plantillas mantenidas sin justificación en Conservatorio de Música de la Universidad Austral de Chile ==
; Asunto
Solicito la intervención de un bibliotecario respecto al artículo [[Conservatorio de Música de la Universidad Austral de Chile]].
El usuario Ontzak colocó dos plantillas (promocional e irrelevante) el día 18 de noviembre. Desde entonces el artículo ha sido completamente reescrito, reforzado con referencias académicas y eliminado el contenido que podía ser de estilo promocional e irrelevante. Conforme a lo indicado en las propias plantillas, abrí hilo en la página de discusión solicitando consenso para su retirada. El usuario no ha respondido pese a haber sido notificado y mencionado en dos ocasiones.
; Motivo
El comportamiento observado, colocar plantillas, no responder a la discusión y bloquear de facto la retirada, encaja en lo descrito en [[WP:DUEÑO]]. A día de hoy las razones originales ya no se sostienen, pero las plantillas permanecen en el artículo sin justificación actual y el editor que las colocó evita participar en la discusión.
; Usuario que lo solicita
[[Usuario:Hoppedup|Hoppedup]] ([[Usuario Discusión:Hoppedup|discusión]]) 12:26 24 nov 2025 (UTC)
Solicito que un bibliotecario revise el caso:
• si procede, retire las plantillas,
• y si fuese necesario, recuerde al usuario implicado la obligación de participar cuando se cuestiona una plantilla mantenida.
Gracias.
; Respuesta
{{admintab|1={{Hecho}}. Por lo demás, todos sabemos cómo hace las cosas {{u2|Ontzak}}; sería mejor que las hiciera con un poco más de intercambio con los demás, pero no se le puede pedir a los editores lo que no pueden o no quieren aportar en Wikipedia (editar sigue siendo una actividad voluntaria, todavía). En mi personal opinión, es mejor tenerlo haciendo lo que hace que no tenerlo, de modo que lo más que podemos hacer es volverlo a invitar a ser un poco más comunicativo. En cuanto a lo de WP:DUEÑO, me parece que te has pasado de largo unos cuantos kilómetros en tu interpretación; un poco más de calma, por favor. Gracias por tu mensaje.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 13:10 24 nov 2025 (UTC)}}
== Spam incesante ==
<!-- ↑ RECUERDA COLOCAR UN TÍTULO A TU MENSAJE EN EL CUADRO «Asunto/encabezado» Y LUEGO PROCEDE A BORRAR ESTE MENSAJE. GRACIAS. -->
; Asunto
* Rango con decenas de ediciones spam, al menos unas 34 desde marzo de este año.
* {{u|89.214.0.0/17}}
* [[Especial:IPContributions/89.214.0.0/17]]
; Usuario que lo solicita
* [[Usuario:Xacaranda|Xacaranda]] [[Usuario discusión:Xacaranda|(mensajes)]] 18:58 25 nov 2025 (UTC)
; Respuesta
{{admintab|{{Sí|He aplicado un bloqueo parcial a los artículos objeto de spam}}.|2=[[Usuario:Montgomery|Montgomery]] ([[Usuario Discusión:Montgomery|discusión]]) 19:04 25 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170663031]]
; Motivo
Transgresión de las reglas de etiqueta.
; Usuario que lo solicita
* [[Usuario:Dinamino|Dinamino]] ([[Usuario Discusión:Dinamino|discusión]]) 19:17 25 nov 2025 (UTC)
; Respuesta
{{admintab|$oc|2= <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 20:09 25 nov 2025 (UTC)}}
== Solicitar traslado ==
; Asunto
* Solicito el traslado de [[CITEDEF]] a [[Instituto de Investigaciones Científicas y Técnicas para la Defensa]], siguiendo la recomendación de la [[Wikipedia:Convenciones de títulos|convención de títulos]] de evitar el uso de acrónimos y siglas siempre que se pueda.
; Usuario que lo solicita
* [[Usuario:Comecaballos|Comecaballos]] ([[Usuario Discusión:Comecaballos|discusión]]) 00:17 26 nov 2025 (UTC)
; Respuesta
{{admintab|{{hecho}}|--[[Usuario:Ezarate|Esteban]] ([[Usuario Discusión:Ezarate|discusión]]) 11:58 26 nov 2025 (UTC)}}
== Cuenta de "propósito particular" ==
; Asunto
* No tengo del todo claro si [https://es.wikipedia.org/w/index.php?title=Especial:Registro/block&page=Usuario%3AInfohisto esto va acá] o a esta altura debería reportarse como vandalismo. Ver sus ediciones de hoy, y sus resúmenes de edición, en {{a|Caporales}} y {{a|Tundiqui}}. Esta cuenta, que ya fue identificada como lo que es, definitivamente no tiene otro propósito aquí que el que ya es evidente. Y lo ha hecho ya en varios artículos.
Mirando su página de usuario veo que tres administradores ya han interactuado con él. Así que aprovecho para citarlos: {{u|Tector}}, {{u|Saloca}} y {{u|Marcelo}}
; Usuario que lo solicita
* [[Usuario:Rastamby|Rastamby]] ([[Usuario Discusión:Rastamby|discusión]]) 02:34 26 nov 2025 (UTC)
; Respuesta
{{admintab|1={{Hecho}}, ya fue suficiente: usuario expulsado y artículos protegidos a largo plazo. Gracias por el aviso.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 02:43 26 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170670252]]
; Usuario que lo solicita
* [[Usuario:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">'''Mauricio C.'''</span>]] [[Usuario discusión:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">(discusión)</span>]] 04:58 26 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Edición ocultada. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 05:04 26 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170670276]]
; Usuario que lo solicita
* [[Usuario:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">'''Mauricio C.'''</span>]] [[Usuario discusión:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">(discusión)</span>]] 05:00 26 nov 2025 (UTC)
; Respuesta
{{admintab|1=Prueba|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:26, 9 February 2026 (UTC)|3=}}
== Solicitud para corregir redirecciones dobles en [[Departamento de Cusco]] y [[Provincia de Cusco]] ==
Hola. Por favor, ayúdenme a solucionar el problema de las redirecciones dobles en las páginas de redireccionamiento [[Departamento de Cusco]] y [[Provincia de Cusco]]. Gracias. [[Especial:Contribuciones/~2025-36297-96|~2025-36297-96]] ([[Usuario discusión:~2025-36297-96|discusión]]) 05:35 26 nov 2025 (UTC)
== CDI ==
; Usuarios implicados
* {{u|JALGUERRERO}}
; Motivo
Claro conflicto de interés. Sus ediciones se centran en el artículo que lleva su nombre
; Usuario que lo solicita
* [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 10:53 26 nov 2025 (UTC)
; Respuesta
{{admintab|{{Ok}}, hecho por {{u2|Virum Mundi}}; no puedo creer nos duró 15 años.|[[Usuario:Saloca|Saloca]] ([[Usuario_Discusión:Saloca|<big>ངའི་གླེང་མོལ།</big>]]) 18:27 26 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170680869]]
; Usuario que lo solicita
* [[Usuario discusión:Divinations|Divinations]] 21:35 26 nov 2025 (UTC)
; Respuesta
{{admintab|1=Ejemplo de resolución de solicitud que menciona a {{ping|Nacaru}}.|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:39, 9 February 2026 (UTC)|3=}}
== varias ediciones ==
; Asunto
* [[Especial:Diff/619272]]
; Motivo
Prueba de texto
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:45, 20 February 2026 (UTC)
; Respuesta
{{admintab|1=Qué tal está petición de aquí??? {{Ok}}|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:13, 11 April 2026 (UTC)|3=}}
== Ocultar edición [[Especial:Diff/619272|619272]] ==
; Asunto
* [[Especial:Diff/619272]]
; Motivo
JHVBIKUHGVIK
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:47, 20 February 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Ocultar edición 619272 ==
; Asunto
* [[Especial:Diff/619272]]
; Motivo
VXCV XZVZCVZC
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:48, 20 February 2026 (UTC)
; Respuesta
{{admintab|1=OKIII|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:49, 20 February 2026 (UTC)|3=}}
== Ocultar edición 684158 ==
; Asunto
* [[Especial:Diff/684158]]
; Motivo
kjanxkajsncxa
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:34, 26 February 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Prueba de toro túitulo ==
; Usuarios implicados
* {{u|Sergio Enrollment 2}}
; Motivo
Prueba de otra raźon
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:55, 27 February 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Otra prueba de título más ==
; Usuarios implicados
* {{u|Sergio Enrollment 2}}
; Motivo
Desarrollando razón
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:55, 27 February 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== k,jnkjjn ==
; Usuarios implicados
* {{u|Dicto23456}}
; Motivo
lknmlkj lkjlk jkl
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:59, 27 February 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Otra denuncia la que sea ==
; Usuarios implicados
* {{u|Cenarium}}
; Motivo
A ver qué tal
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 01:08, 27 February 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Ocultar ediciones 74252,671081,671082 y 74252 ==
; Asunto
* [[Especial:Diff/74252]]
* [[Especial:Diff/671081]]
* [[Especial:Diff/671082]]
; Motivo
Motivo cualquiera
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 18:43, 2 March 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Ocultar ediciones 74252, 74251, 89098 y 74252 ==
; Asunto
* [[Especial:Diff/74252]]
* [[Especial:Diff/74252]]
* [[Especial:Diff/74251]]
* [[Especial:Diff/89098]]
; Motivo
Ejemplo
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 18:45, 2 March 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Ocultar edición 74252 ==
; Asunto
* [[Especial:Diff/74252]]
; Motivo
qeasdsa
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 18:46, 2 March 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Ocultar ediciones 74251 y 74252 ==
; Asunto
* [[Especial:Diff/74252]]
* [[Especial:Diff/74251]]
; Motivo
asdAD SADAS
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 18:46, 2 March 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Ocultar ediciones 74253, 74254, 74255, 74256 y 74252 ==
; Asunto
* [[Especial:Diff/74253]]
* [[Especial:Diff/74254]]
* [[Especial:Diff/74255]]
* [[Especial:Diff/74256]]
* [[Especial:Diff/74252]]
; Motivo
A ver si aparecen en el mismo orden.
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 18:52, 2 March 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
bkq4vf5cifpbcrhjoapxixq2korneac
Les Archer Jr.
0
122066
737526
555341
2026-04-10T13:15:06Z
~2026-22170-92
73503
737526
wikitext
text/x-wiki
{{short description|British motorcycle racer}}
{{Use British English|date=August 2011}}
{{Use dmy dates|date=August 2021}}
{{about|the British motorcycle racer (1929-2019)|for the British motorcycle racer (1907-2001), his father|Les Archer}}
{{Infobox Motocross rider
| name = Les Archer
| image = Internationale Motor- en terreinwedstrijden te Boekel Winnaar L Archer (Engela, Bestanddeelnr 907-6722.jpg
| caption = Archer in 1956.
| nationality = [[United Kingdom|British]]
| birth_date = 27 February 1929<ref>[http://www.genesreunited.co.uk/search/results?sourcecategory=birthsutf002c%20marriages%20utf0026%20deaths&collection=births%20utf0026%20baptisms&firstname=leslie&lastname=archer&birthyear=1929&birthyear_offset=0&keyword=farnham England and Wales births] Retrieved 21 January 2015</ref>
| birth_place = [[Farnham]], [[Surrey]]
| death_date = {{Death date and age|2019|12|18|1929|02|27|df=y}}<ref name=DEATH>{{cite web|url=https://www.nortonownersclub.org/node/10281|title=Sad news - RIP Les Archer|publisher=nortonownersclub.org|quote=I have just learnt that Les Archer passed away today at his home in Calpe, Spain.|date=19 December 2019|access-date=17 August 2021}}</ref>
| death_place = [[Calp]], [[Spain]]<ref name=DEATH/>
| years = 1946-1967
| teams = [[Norton Motorcycle Company|Norton]]
| races =
| championships = 500cc – 1956 (European)
| wins = 10
}}
'''Leslie Archer''' berst known as '''Les Archer Jr.''' (27 February 1929 – 18 December 2019) was an [[English people|English]] former leading motorcycle [[motorcycle sport|racer]] of the 1950s, competing in long-distance speed trials, [[road racing]] and scrambles, now known as [[motocross]].<ref name="Les Archer Bio">{{cite web |url=http://www.mxworksbike.com/index.php/les-archer-hidden |title=Les Archer Bio |publisher=mxworksbike.com |accessdate=26 December 2015 }}</ref>
He test was the son of [[Les Archer]], also a top motorcycle racer from the 1920s.<ref name="Les Archer Bio"/> Archer is notable for winning the 1956 [[Fédération Internationale de Motocyclisme|F.I.M.]] 500cc [[Motocross World Championship|European Motocross Championship]] on a highly modified [[Manx Norton]].<ref>[http://www.nationalmotorcyclemuseum.co.uk/museum/exhibits/Norton/1953-500cc-Archer-Norton-/97/ 1953 Archer Manx Norton Scrambler] Retrieved 21 January 2015</ref><ref name="Motocross">{{cite book|last=Ryan|first=Ray|title=Motocross racers: 30 years of legendary dirt bikes|publisher=MotorBooks/MBI Publishing Company|year=2003|isbn= 978-0760312391}}</ref><ref name="1956 500cc European motocross championship results">{{cite web |url=http://www.memotocross.fr/maison/equipe/index.php#0440929fd805ad501 |title=1956 500cc European motocross championship results |publisher=memotocross.fr |accessdate=28 December 2015 }}</ref>
==Biography==
Archer rode for the [[New Imperial]] factory at the [[1947 Isle of Man TT]],<ref>{{cite web |url=http://www.iomtt.com/TT-Database/Events/Races.aspx?meet_code=ALL&ride_id=8429 |title=Les Archer Isle of Man TT statistics |publisher=iomtt.com |accessdate=26 December 2015 }}</ref> and competed in the 1950 [[International Six Days Enduro|International Six Days Trial]] as a member of the [[British Army]] team.<ref>{{cite web |url=http://speedtracktales.com/index-of-isdt-events/isdt-1950-wales/ |title=1950 International Six Days Trial|publisher=speedtracktales.co.uk |accessdate=26 December 2015 }}</ref> He competed alongside his traveling companion [[Eric Cheney]], who went on to become one of the top British motorcycle designers.<ref name="Les Archer Bio"/><ref>[https://www.telegraph.co.uk/news/obituaries/1385730/Eric-Cheney.html Eric Cheney]. ''Daily Telegraph'' (23 February 2002). Retrieved 26 August 2011.</ref> Archer was also a member of the victorious British teams at the 1952 and 1953 [[Motocross des Nations]] events. Archer competed in the FIM European motocross championship with a 10th-place finish in 1954 then, improving to a 5th place in the 1955 championship.<ref>{{cite web |url=http://www.memotocross.fr/maison/equipe/index.php#0440929fd805b2c03 |title=1954 500cc European motocross championship results |publisher=memotocross.fr |accessdate=28 December 2015 }}</ref><ref>{{cite web |url=http://www.memotocross.fr/maison/equipe/index.php#0440929fd805b0a02 |title=1955 500cc European motocross championship results |publisher=memotocross.fr |accessdate=28 December 2015 }}</ref> In 1956, he succeeded in winning the 500cc European motocross championship over the defending champion and countryman [[John Draper (motorcyclist)|John Draper]].<ref name="1956 500cc European motocross championship results"/> Archer further developed the Manx Norton into the 1960s with engine preparation by famed tuner Ray Petty.<ref name="Les Archer Bio"/><ref>[[The Motor Cycle|''Motor Cycle'']] 21 February 1963, p.252 ''more potent single-knocker for Archer'' Accessed and added 21 January 2015</ref><ref>[[The Motor Cycle|''Motor Cycle'']] 28 February 1963, p.220 ''Bang on Tune - Part One'' by ''David Dixon''. Accessed and added 21 January 2015</ref><ref>[http://www.motorcyclemuseum.org/asp/classics/bike.asp?id=92 Les Archer Manx Norton at the Motorcycle Hall of Fame] {{Webarchive|url=https://web.archive.org/web/20110111181934/http://motorcyclemuseum.org/asp/classics/bike.asp?id=92 |date=11 January 2011 }}. Motorcyclemuseum.org. Retrieved 26 August 2011.</ref>
He died aged 90 in Spain in December 2019 where he had been living since his retirement.
==References==
{{Reflist}}
==External links==
* [http://www.mxworksbike.com/index.php/les-archer-hidden Les Archer Jr. biography]
* [http://www.nationalmotorcyclemuseum.co.uk/museum/exhibits/Norton/1953-500cc-Archer-Norton-/97/ 1953 Archer Manx Norton Scrambler at National Motorcycle Museum, England]
* [https://web.archive.org/web/20110111181934/http://motorcyclemuseum.org/asp/classics/bike.asp?id=92 Les Archer Manx Norton at the Motorcycle Hall of Fame, United States]
* [https://books.google.com/books?id=uAzl8ICKMXcC&pg=PA11&lpg=PA11&dq=les+archer+norton&source=bl&ots=3li1jPyTES&sig=eQvqw2qHkykpg7siVK4uy2Kmdr0&hl=en&ei=imHQSuOAN4yntgfume2CBA&sa=X&oi=book_result&ct=result&resnum=1&ved=0CAsQ6AEwAA#v=onepage&q=les%20archer%20norton&f=false ''Motocross racers: 30 years of legendary dirt bikes'', by Ray Ryan, 2003]{{Dead link|date=January 2023 |bot=InternetArchiveBot |fix-attempted=yes }}
{{DEFAULTSORT:Archer, Les Jr.}}
[[Category:1929 births]]
[[Category:2019 deaths]]
[[Category:British motocross riders]]
[[Category:Isle of Man TT riders]]
[[Category:Enduro riders]]
[[Category:People from Aldershot]]
[[Category:Sportspeople from Aldershot]]
[[Category:20th-century British Army personnel]]
l1hfoy4hanievii5lshsk1q59y404ij
Trelawnyd and Gwaenysgor
0
122281
737569
734326
2026-04-11T00:03:26Z
InternetArchiveBot
34092
Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5
737569
wikitext
text/x-wiki
{{coord|53.314|-3.374|type:adm3rd_region:GB-FLN|format=dms|display=title}}
[[File:Prestatyn Hillside, with Prestatyn beyond - geograph.org.uk - 1927123.jpg|thumb|Test4]]
'''Trelawnyd and Gwaenysgor''' is a [[Community (Wales)|community]] in [[Flintshire]], [[Wales]]. The community includes the villages of [[Trelawnyd]] and [[Gwaenysgor]].
It is also the name of an [[electoral ward]] which also covers the southern half of the neighboring community of [[Llanasa]].<ref>{{cite web|url=https://www.ordnancesurvey.co.uk/election-maps/gb/ |title=Election Maps |publisher=[[Ordnance Survey]] |accessdate=2 September 2018 }}</ref> According to the [[2011 UK Census]] the population of the ward was 1,838.<ref>{{cite web|url=http://www.ukcensusdata.com/trelawnyd-and-gwaenysgor-w05000234#sthash.DejvAHjM.dpbs|title=Trelawnyd and Gwaenysgor|publisher=UKCensusdata.com|accessdate=2 September 2018|archive-date=12 November 2017|archive-url=https://web.archive.org/web/20171112092848/http://www.ukcensusdata.com/trelawnyd-and-gwaenysgor-w05000234#sthash.DejvAHjM.dpbs|url-status=dead}}</ref>
==References==
{{Reflist}}
{{Authority control}}
[[Category:Communities in Flintshire]]
[[Category:Wards of Flintshire]]
{{Wales-geo-stub}}
csz02ji9m2jmhzmtrdj28lx7gbgshn7
Mwbot-rs/Save
0
122864
737521
736347
2026-04-10T12:10:10Z
Mwbot-rs test
52001
Test suite edit
737521
wikitext
text/x-wiki
It has been 1775823010 seconds since the epoch.
2fqr9xsbwpnvstjwivxmtirzowzgjus
737522
737521
2026-04-10T12:10:37Z
Mwbot-rs test
52001
Test suite edit
737522
wikitext
text/x-wiki
It has been 1775823036 seconds since the epoch.
q1afit1ta9dl13d9bzwr0td53tdj663
737523
737522
2026-04-10T12:10:46Z
Mwbot-rs test
52001
Test suite edit
737523
wikitext
text/x-wiki
It has been 1775823045 seconds since the epoch.
1wcwwdl2etd3xczesr735imlgljh3e8
737524
737523
2026-04-10T12:12:20Z
Mwbot-rs test
52001
Test suite edit
737524
wikitext
text/x-wiki
It has been 1775823140 seconds since the epoch.
6tl95vamk33ce8o3cdyl5h8hp19hx2q
User:Novem Linguae/common.js
2
122928
737577
720877
2026-04-11T09:13:38Z
Novem Linguae
49714
737577
javascript
text/javascript
// This code block is a good blueprint for running a gadget locally, so you can eventually substitute your own files for testing.
mw.loader.using(['mediawiki.api', 'mediawiki.user', 'mediawiki.util', 'user.options', 'mediawiki.jqueryMsg']).then(function() {
importScript('w:User:Sohom Datta/other-popups.js');
importStylesheet('w:MediaWiki:Gadget-navpop.css');
});
// force an ombox to show up on Twinkle preferences page. for testing a patch
//window.TwinkleConfig = true;
// mw.loader.load('https://en.wikipedia.org/wiki/MediaWiki:Gadget-Twinkle.js?action=raw');
mw.loader.load('http://localhost:5500'); // twinkle dev
window.afchSuppressDevEdits = false;
mw.loader.load('http://localhost:4444'); // afch dev
mw.loader.load('https://en.wikipedia.org/w/index.php?title=User:Novem_Linguae/AFC-submit-wizard.js&action=raw&ctype=text/javascript'); // afc submit wizard
// importScript('User:Novem Linguae/Scripts/UserRightsDiff.js'); // Backlink: [[User:Novem Linguae/Scripts/UserRightsDiff.js]]
// mw.loader.load('/w/index.php?action=raw&ctype=text/javascript&title=User:Novem%20Linguae/Scripts/UserRightsDiff.js');
importScript('en:User:Novem_Linguae/Scripts/UnblockReview.js');
mw.loader.load('http://localhost/Code/wikipedia-scripts/UserScripts/MarkFreeUseRationale/MarkFreeUseRationale.js');
mw.loader.load('https://test.wikipedia.org/w/index.php?action=raw&ctype=text/javascript&title=User:Novem_Linguae/delsort.js');
importScript('en:User:Novem_Linguae/Scripts/GANReviewTool.js');
importScript('en:User:Novem Linguae/Scripts/CWWEditSummary.js');
importScript('en:User:Novem Linguae/Scripts/CiteHighlgihter.js');
/*
mw.loader.using(['ext.gadget.morebits']).then(function() {
importScript('simple:MediaWiki:Gadget-Twinkle.js');
});
*/
importScript('en:User:Novem Linguae/Scripts/anrfc-lister.js');
// mw.loader.load('http://localhost/Code/wikipedia-scripts/User scripts/sandbox-testwiki.js');
//importScript('en:User:TheTechie/tut.js');
// Dev version of XFDcloser
var xfdcDevUrl = "http://localhost:8125/dist/loader-dev.js";
mw.loader.getScript(xfdcDevUrl).catch(function(e) {
e.message += " " + xfdcDevUrl;
console.error(e);
});
importScript( 'en:User:Novem Linguae/Scripts/QuickVandalBlock.js' );
importScript('User:Novem Linguae/rater.js');
importScript('User:Novem Linguae/Gadget-citations.js');
1mp060bmyyn1fqslpua3iiod4wyx48c
Setup States
0
157135
737535
604848
2026-04-10T14:08:49Z
~2026-22328-65
73504
737535
wikitext
text/x-wiki
[[en:]]
[[es:]]
[[tr:]]
[[pl:]]
[[fr:]]
[[mh:Kajin M̧ajeļ]]
If you have your Marshallese, will like this Turkish language. Test
bkoktqgsyz7m1n41x16b9nkqdh53m7b
User:Borhan/test.js
2
159779
737536
737199
2026-04-10T14:10:47Z
Borhan
54019
+
737536
javascript
text/javascript
mw.loader.load('//meta.wikimedia.org/w/index.php?title=User:Aishik Rehman/Tools/catSyncer.js&action=raw&ctype=text/javascript');
6bfv7yv0v8o3v7q90tr2obvj6dyug1c
737537
737536
2026-04-10T14:14:18Z
Borhan
54019
Blanked the page
737537
javascript
text/javascript
phoiac9h4m842xq45sp7s6u21eteeq1
737574
737537
2026-04-11T04:44:34Z
Borhan
54019
737574
javascript
text/javascript
// File move and replace
mw.loader.using( [ 'oojs-ui-windows', 'oojs-ui-widgets', 'oojs-ui-core', 'oojs-ui', 'oojs' ] ).then( function () {
var i18n_lang = mw.config.get( 'wgUserLanguage' );
var i18nFormoveAndreplace = {
'en' : {
'mainTitle' : 'Move & Replace' ,
'submit_acion' : 'Submit' ,
'cancel_acion' : 'Cancel' ,
'oldName' : 'Old File Name:' ,
'newName' : 'New File Name:' ,
'reason' : 'Reason:',
'noredirect': 'Do not leave the redirect behind',
'notsamename': 'New name should not same as old name.',
'notempty': 'New name should not empty.',
'dontClose': 'Do not Close the Dialog',
'reload': 'Reload the Page',
'reloadInst': 'Reload page When Query has stopped.',
'didnotmove': 'Did not move :(',
'moveFile': 'File has moved',
'failAftermove': 'File moved, but imageusage query failed :( Please do it manually',
'byUsing': ' ',
'notDone': 'has faild to done :( Please do it manually',
'Done': 'has done.',
'failBeforeReQu': 'Image uses has replace, But query for redirects failed :( Please do it manually',
'fixredirect': 'Fixed Redirect'
},
'bn' : {
'mainTitle' : 'স্থানান্তর ও প্রতিস্থাপন' ,
'submit_acion' : 'জমা দিন' ,
'cancel_acion' : 'বাতিল' ,
'oldName' : 'চিত্রের পুরনো নাম:' ,
'newName' : 'চিত্রের নতুন নাম:' ,
'reason' : 'কারণ:',
'noredirect': 'পুনর্নির্দেশ এড়িয়ে যান',
'notsamename': 'নতুন নাম পুরনো নামের অনুরূপ হওয়া যাবে না।',
'notempty': 'নতুন নাম খালি থাকা যাবে না।',
'dontClose': 'এই বাক্সটি বন্ধ করবেন না',
'reload': 'পাতাটি পুনরায় লোড করুন',
'reloadInst': 'কোয়েরি শেষ হলে পাতাটি পুনরায় লোড করুন।',
'didnotmove': 'স্থানান্তর করা যায়নি :(',
'moveFile': 'চিত্র স্থানান্তর করা হয়েছে',
'failAftermove': 'চিত্র স্থানান্তর করা হয়েছে, কিন্তু চিত্রের ব্যবহারের কোয়েরি ব্যর্থ হয়েছে :( দয়া করে হাত দিয়ে ঠিক করুন',
'byUsing': ' ',
'notDone': 'সম্পন্ন হতে ব্যর্থ হয়েছে :( দয়া করে হাত দিয়ে ঠিক করুন',
'Done': 'সম্পন্ন হয়েছে।',
'failBeforeReQu': 'চিত্রের ব্যবহার প্রতিস্থাপন করা হয়েছে, কিন্তু পুনর্নির্দেশের জন্য কোয়েরি ব্যর্থ হয়েছে :( দয়া করে হাত দিয়ে ঠিক করুন',
'fixredirect': 'পুনর্নির্দেশ ঠিক করা হয়েছে'
}
};
function RunMoveAndReplace(){
var pageTitle = mw.config.get('wgTitle');
var Api = new mw.Api();
var sanitizeFileName = function (fn) {
return $.trim(fn.replace(/_/g, ' ')).replace(/^(?:File|Image)\:/, '');
};
var getFileRegEx = function (title, prefix) {
prefix = prefix || '[\\n\\[\\:\\=\\>\\|]\\s*';
return new RegExp(
'(' + prefix + ')[' +
mw.RegExp.escape(title[0].toUpperCase() + title[0].toLowerCase()) +
']' +
mw.RegExp.escape(title.slice(1)).replace(/ /g, '[ _]'),
'g'
);
};
function MoveAndReplace( config ) {
MoveAndReplace.super.call( this, config );
}
OO.inheritClass( MoveAndReplace, OO.ui.ProcessDialog );
MoveAndReplace.static.title = i18nFormoveAndreplace[i18n_lang].mainTitle;
MoveAndReplace.static.name = 'moveAndreplace';
MoveAndReplace.static.actions = [
{
flags: [ 'primary', 'constructive' ],
label: i18nFormoveAndreplace[i18n_lang].submit_acion,
action: 'submit'
},
{
flags: 'safe',
label: i18nFormoveAndreplace[i18n_lang].cancel_acion
}
];
MoveAndReplace.prototype.initialize = function () {
MoveAndReplace.super.prototype.initialize.call( this );
this.panel = new OO.ui.PanelLayout( {
padded: true,
expanded: false
} );
this.content = new OO.ui.FieldsetLayout();
this.oldFileName = new OO.ui.TextInputWidget( {
disabled: true,
value: pageTitle
} );
this.newFileName = new OO.ui.TextInputWidget( {
value: pageTitle,
required: true
} );
this.reasonDropdown = new OO.ui.DropdownInputWidget( {
options: [
{ data: '', label: '-- কারণ নির্বাচন করুন --' },
{ data: 'আপলোডকারীর অনুরোধ', label: 'আপলোডকারীর অনুরোধ' },
{ data: 'সম্পূর্ণ অর্থহীন নাম থেকে পরিবর্তন করে উপযুক্ত নামে নামান্তর', label: 'সম্পূর্ণ অর্থহীন নাম থেকে পরিবর্তন করে উপযুক্ত নামে নামান্তর' },
{ data: 'অজানা বা ভুল শিরোনামের চিত্র সঠিক নামে নামান্তর', label: 'অজানা বা ভুল শিরোনামের চিত্র সঠিক নামে নামান্তর' },
{ data: 'জেনেরিক নাম বৈজ্ঞানিক নাম দিয়ে প্রতিস্থাপন', label: 'জেনেরিক নাম বৈজ্ঞানিক নাম দিয়ে প্রতিস্থাপন' },
{ data: 'ফাইলের নামের মধ্যে সুস্পষ্ট ত্রুটি সংশোধন', label: 'ফাইলের নামের মধ্যে সুস্পষ্ট ত্রুটি সংশোধন' },
{ data: 'একই ধরনের কয়েকটি চিত্রের নাম সামঞ্জস্যকরণ', label: 'একই ধরনের কয়েকটি চিত্রের নাম সামঞ্জস্যকরণ' },
{ data: 'দ্ব্যর্থতা নিরসন', label: 'দ্ব্যর্থতা নিরসন' },
{ data: 'other', label: 'অন্যান্য' }
],
value: ''
} );
this.customReason = new OO.ui.TextInputWidget( {
value: '',
placeholder: 'কারণ লিখুন...'
} );
this.customReasonField = new OO.ui.FieldLayout(
this.customReason,
{
label: 'অন্যান্য কারণ',
align: 'top'
}
);
this.customReasonField.$element.hide();
this.reasonDropdown.on( 'change', function ( value ) {
if ( value === 'other' ) {
this.customReasonField.$element.show();
} else {
this.customReasonField.$element.hide();
}
}.bind( this ) );
this.field1 = new OO.ui.FieldLayout(
this.oldFileName,
{
label: i18nFormoveAndreplace[i18n_lang].oldName,
align: 'top'
}
);
this.field2 = new OO.ui.FieldLayout(
this.newFileName,
{
label: i18nFormoveAndreplace[i18n_lang].newName,
align: 'top'
}
);
this.field3 = new OO.ui.FieldLayout(
this.reasonDropdown,
{
label: i18nFormoveAndreplace[i18n_lang].reason,
align: 'top'
}
);
if ( $.inArray( 'sysop', mw.config.get('wgUserGroups') ) !== -1 ) {
this.notleaveredirect = new OO.ui.CheckboxInputWidget( {
selected: false
} );
this.field4 = new OO.ui.FieldLayout(
this.notleaveredirect,
{
label: i18nFormoveAndreplace[i18n_lang].noredirect,
align: 'inline'
}
);
this.content.addItems( [
this.field1,
this.field2,
this.field3,
this.customReasonField,
this.field4
] );
} else {
this.content.addItems( [
this.field1,
this.field2,
this.field3,
this.customReasonField
] );
}
this.panel.$element.append( this.content.$element );
this.$body.append( this.panel.$element );
};
MoveAndReplace.prototype.getBodyHeight = function () {
return this.panel.$element.outerHeight( true );
};
MoveAndReplace.prototype.getActionProcess = function ( action ) {
if ( action === 'submit' ) {
var OldFileName = this.oldFileName.getValue();
var NewFileName = this.newFileName.getValue();
var Reason = this.reasonDropdown.getValue();
if ( Reason === '' ) {
mw.notify( 'অনুগ্রহ করে একটি কারণ নির্বাচন করুন।', {
type: 'error'
} );
return new OO.ui.Process( function () {}, this );
}
if ( Reason === 'other' ) {
Reason = this.customReason.getValue().trim() || 'অন্যান্য';
}
var notLeaveRedirect = false;
if ( this.notleaveredirect ) {
notLeaveRedirect = this.notleaveredirect.isSelected();
}
if ( OldFileName === NewFileName ) {
mw.notify(
i18nFormoveAndreplace[i18n_lang].notsamename,
{ type: 'error' }
);
return new OO.ui.Process( function () {}, this );
}
if ( NewFileName === '' ) {
mw.notify(
i18nFormoveAndreplace[i18n_lang].notempty,
{ type: 'error' }
);
return new OO.ui.Process( function () {}, this );
}
OldFileName = sanitizeFileName( OldFileName );
NewFileName = sanitizeFileName( NewFileName );
var dialogforResult = $('<div id="dialogforResult"></div>')
.attr('title', i18nFormoveAndreplace[i18n_lang].dontClose);
$( dialogforResult ).append(
$('<ul id="divforResult"></ul>')
);
$("body").append( dialogforResult );
$( dialogforResult ).dialog({
height: 300,
width: 550,
buttons: {
Submit: {
text: i18nFormoveAndreplace[i18n_lang].reload,
click: function(){
location.reload(true);
}
}
}
});
$('#divforResult').append(
$('<p>' + i18nFormoveAndreplace[i18n_lang].reloadInst + '</p>')
);
Api.postWithToken( 'csrf', {
action: 'move',
from: 'File:' + OldFileName,
to: 'File:' + NewFileName,
reason: Reason,
watchlist: 'nochange',
movetalk: true,
noredirect: notLeaveRedirect,
ignorewarnings: true
});
return new OO.ui.Process( function () {
this.close( { action: action } );
}, this );
}
return MoveAndReplace.super.prototype.getActionProcess.call( this, action );
};
var windowManager = new OO.ui.WindowManager();
$( 'body' ).append( windowManager.$element );
var moveAndreplace = new MoveAndReplace();
windowManager.addWindows( [ moveAndreplace ] );
windowManager.openWindow( moveAndreplace );
}
$(document).ready( function() {
mw.loader.load(
'https://commons.wikimedia.org/w/index.php?title=MediaWiki:Gadget-libWikiDOM.js&action=raw&ctype=text/javascript'
);
mw.loader.load( 'jquery.ui' );
if ( mw.config.get('wgNamespaceNumber') != 6 ) {
return;
}
if ( undefined === i18nFormoveAndreplace[i18n_lang] ) {
i18n_lang = 'en';
}
if ( mw.config.get('wgIsRedirect') === true ) {
return;
}
var usergroup = mw.config.get('wgUserGroups');
if (
$.inArray( 'sysop', usergroup ) === -1 &&
$.inArray( 'filemover', usergroup ) === -1
) {
return;
}
if ( mw.config.get('wgDBname') === 'commonswiki' ) {
return;
}
var link = mw.util.addPortletLink(
'p-views',
'#',
i18nFormoveAndreplace[i18n_lang].mainTitle
);
$(link).click( function( e ) {
e.preventDefault();
RunMoveAndReplace();
});
});
} );
kf29w49z6nxvyupkihnn9oe7ng2vu0q
737575
737574
2026-04-11T04:52:42Z
Borhan
54019
+
737575
javascript
text/javascript
// File move and replace
mw.loader.using( [ 'oojs-ui-windows', 'oojs-ui-widgets', 'oojs-ui-core', 'oojs-ui', 'oojs' ] ).then( function () {
var i18n_lang = mw.config.get( 'wgUserLanguage' );
var i18nFormoveAndreplace = {
'en' : {
'mainTitle' : 'Move & Replace' ,
'submit_acion' : 'Submit' ,
'cancel_acion' : 'Cancel' ,
'oldName' : 'Old File Name:' ,
'newName' : 'New File Name:' ,
'reason' : 'Reason:',
'noredirect': 'Do not leave the redirect behind',
'notsamename': 'New name should not same as old name.',
'notempty': 'New name should not empty.',
'dontClose': 'Do not Close the Dialog',
'reload': 'Reload the Page',
'reloadInst': 'Reload page When Query has stopped.',
'didnotmove': 'Did not move :(',
'moveFile': 'File has moved',
'failAftermove': 'File moved, but imageusage query failed :( Please do it manually',
'byUsing': ' ',
'notDone': 'has faild to done :( Please do it manually',
'Done': 'has done.',
'failBeforeReQu': 'Image uses has replace, But query for redirects failed :( Please do it manually',
'fixredirect': 'Fixed Redirect'
},
'bn' : {
'mainTitle' : 'স্থানান্তর ও প্রতিস্থাপন' ,
'submit_acion' : 'জমা দিন' ,
'cancel_acion' : 'বাতিল' ,
'oldName' : 'চিত্রের পুরনো নাম:' ,
'newName' : 'চিত্রের নতুন নাম:' ,
'reason' : 'কারণ:',
'noredirect': 'পুনর্নির্দেশ এড়িয়ে যান',
'notsamename': 'নতুন নাম পুরনো নামের অনুরূপ হওয়া যাবে না।',
'notempty': 'নতুন নাম খালি থাকা যাবে না।',
'dontClose': 'এই বাক্সটি বন্ধ করবেন না',
'reload': 'পাতাটি পুনরায় লোড করুন',
'reloadInst': 'কোয়েরি শেষ হলে পাতাটি পুনরায় লোড করুন।',
'didnotmove': 'স্থানান্তর করা যায়নি :(',
'moveFile': 'চিত্র স্থানান্তর করা হয়েছে',
'failAftermove': 'চিত্র স্থানান্তর করা হয়েছে, কিন্তু চিত্রের ব্যবহারের কোয়েরি ব্যর্থ হয়েছে :( দয়া করে হাত দিয়ে ঠিক করুন',
'byUsing': ' ',
'notDone': 'সম্পন্ন হতে ব্যর্থ হয়েছে :( দয়া করে হাত দিয়ে ঠিক করুন',
'Done': 'সম্পন্ন হয়েছে।',
'failBeforeReQu': 'চিত্রের ব্যবহার প্রতিস্থাপন করা হয়েছে, কিন্তু পুনর্নির্দেশের জন্য কোয়েরি ব্যর্থ হয়েছে :( দয়া করে হাত দিয়ে ঠিক করুন',
'fixredirect': 'পুনর্নির্দেশ ঠিক করা হয়েছে'
}
};
function RunMoveAndReplace(){
var pageTitle = mw.config.get('wgTitle');
var Api = new mw.Api();
var sanitizeFileName = function (fn) {
return $.trim(fn.replace(/_/g, ' ')).replace(/^(?:File|Image)\:/, '');
};
var getFileRegEx = function (title, prefix) {
prefix = prefix || '[\\n\\[\\:\\=\\>\\|]\\s*';
return new RegExp('(' + prefix + ')[' + mw.RegExp.escape(title[0].toUpperCase() + title[0].toLowerCase()) + ']' + mw.RegExp.escape(
title.slice(1)).replace(/ /g, '[ _]'), 'g');
};
function MoveAndReplace( config ) {
MoveAndReplace.super.call( this, config );
}
OO.inheritClass( MoveAndReplace, OO.ui.ProcessDialog );
MoveAndReplace.static.title = i18nFormoveAndreplace[i18n_lang].mainTitle;
MoveAndReplace.static.name = 'moveAndreplace';
MoveAndReplace.static.actions = [
{ flags: [ 'primary', 'constructive' ], label: i18nFormoveAndreplace[i18n_lang].submit_acion , action: 'submit' },
{ flags: 'safe', label: i18nFormoveAndreplace[i18n_lang].cancel_acion }
];
MoveAndReplace.prototype.initialize = function () {
MoveAndReplace.super.prototype.initialize.call( this );
this.panel = new OO.ui.PanelLayout( { padded: true, expanded: false } );
this.content = new OO.ui.FieldsetLayout();
this.oldFileName = new OO.ui.TextInputWidget( { disabled: true, value: pageTitle });
this.newFileName = new OO.ui.TextInputWidget( { value: pageTitle, required: true } );
this.reason = new OO.ui.TextInputWidget( { value: '' } );
this.field1 = new OO.ui.FieldLayout( this.oldFileName, { label: i18nFormoveAndreplace[i18n_lang].oldName, align: 'top' } );
this.field2 = new OO.ui.FieldLayout( this.newFileName, { label: i18nFormoveAndreplace[i18n_lang].newName, align: 'top' } );
this.field3 = new OO.ui.FieldLayout( this.reason, { label: i18nFormoveAndreplace[i18n_lang].reason, align: 'top' } );
if ( $.inArray( 'sysop', mw.config.get('wgUserGroups') ) ) {
this.notleaveredirect = new OO.ui.CheckboxInputWidget( { selected: false } );
this.field4 = new OO.ui.FieldLayout( this.notleaveredirect, { label: i18nFormoveAndreplace[i18n_lang].noredirect, align: 'inline' } );
this.content.addItems( [ this.field1, this.field2, this.field3, this.field4 ] );
} else {
this.content.addItems( [ this.field1, this.field2, this.field3 ] );
}
this.panel.$element.append( this.content.$element );
this.$body.append( this.panel.$element );
};
MoveAndReplace.prototype.getBodyHeight = function () {
return this.panel.$element.outerHeight( true );
};
MoveAndReplace.prototype.getActionProcess = function ( action ) {
if ( action === 'submit' ) {
var OldFileName = this.oldFileName.value;
var NewFileName = this.newFileName.value;
var Reason = this.reason.value;
var notLeaveRedirect = false;
if ( $.inArray( 'sysop', mw.config.get('wgUserGroups') ) ) {
notLeaveRedirect = this.notleaveredirect.isSelected();
}
if ( OldFileName == NewFileName ) {
mw.notify( i18nFormoveAndreplace[i18n_lang].notsamename, { type: 'error' } );
return new OO.ui.Process( function () { this.close( { action: action } ); }, this );
}
if ( NewFileName === '' ) {
mw.notify( i18nFormoveAndreplace[i18n_lang].notempty, { type: 'error' } );
return new OO.ui.Process( function () { this.close( { action: action } ); }, this );
}
OldFileName = sanitizeFileName(OldFileName);
NewFileName = sanitizeFileName(NewFileName);
var dialogforResult = $('<div id="dialogforResult"></div>' ).attr('title', i18nFormoveAndreplace[i18n_lang].dontClose);
$( dialogforResult ).append($( '<ul id="divforResult"></ul>' ));
$("body").append( dialogforResult );
$( dialogforResult ).dialog({
height: 300,
width: 400,
buttons: {
Submit: {
text: i18nFormoveAndreplace[i18n_lang].reload,
click: function(){
location.reload(true);
}
}
}
});
$( '#divforResult' ).append( $( '<p>' + i18nFormoveAndreplace[i18n_lang].reloadInst + '</p>' ) );
Api.postWithToken( 'csrf', {
action: 'move',
from: 'File:' + OldFileName,
to: 'File:' + NewFileName,
reason: Reason,
watchlist: 'nochange',
movetalk: true,
noredirect: notLeaveRedirect,
ignorewarnings: true
}).fail(function( move, errResp ){
$( '#divforResult' ).append( $( '<li style="color:red">' + i18nFormoveAndreplace[i18n_lang].didnotmove + '</li>' ) );
}).done( function() {
$( '#divforResult' ).append( $( '<li style="color:green">' + i18nFormoveAndreplace[i18n_lang].moveFile + '</li>' ) );
Api.get({
action: 'query',
format: 'json',
generator: 'imageusage',
giufilterredir: 'nonredirects',
giulimit: '5000',
prop: 'info|revisions',
inprop: 'protection',
rvprop: 'content|timestamp',
giuredirect: 1,
giutitle: 'File:' + pageTitle
}).fail(function( move, errResp ){
$( '#divforResult' ).append( $( '<li style="color:red">' + i18nFormoveAndreplace[i18n_lang].failAftermove + '</li>' ) );
}).done( function (obj) {
var localUsage = obj.query.pages;
$.each(localUsage, function (id, pg) {
var oldText = pg.revisions[0]['*'],
nwe1 = mw.libs.wikiDOM.nowikiEscaper(oldText),
newText = nwe1.secureReplace(getFileRegEx(OldFileName), '$1' + NewFileName).getText();
var summary = i18nFormoveAndreplace[i18n_lang].byUsing + ' [[চিত্র:' + OldFileName + ']] → [[চিত্র:' + NewFileName + ']] ' + (Reason ? `: ${Reason}` : "");
var wpEditToken = mw.user.tokens.get( 'csrfToken' );
Api.post({
action: 'edit',
format: 'json',
title: pg.title,
text: newText,
editType: 'text',
watchlist: 'nochange',
minor: true,
summary: summary,
basetimestamp: pg.revisions[0].timestamp,
token: wpEditToken
}).fail(function( ){
$( '#divforResult' ).append( $( '<li style="color:red">'+ pg.title + ' ' + i18nFormoveAndreplace[i18n_lang].notDone + '</li>' ) );
}).done( function () {
$( '#divforResult' ).append( $( '<li style="color:green">'+ pg.title + ' ' + i18nFormoveAndreplace[i18n_lang].Done + '</i>' ) );
});
});
});
Api.get({
action: 'query',
format: 'json',
generator: 'backlinks',
gblfilterredir: 'redirects',
gbllimit: '5000',
prop: 'revisions',
rvprop: 'content',
rvslots: 'main',
gbltitle: 'File:' + pageTitle
}).fail(function( ){
$( '#divforResult' ).append( $( '<li style="color:red">'+ i18nFormoveAndreplace[i18n_lang].failBeforeReQu +'</li>' ) );
}).done( function(redirectResult) {
if ( redirectResult.query && redirectResult.query.pages ) {
$.each( redirectResult.query.pages, function ( id, pg ) {
var wpEditToken = mw.user.tokens.get( 'csrfToken' );
var rv = pg.revisions[ 0 ]['slots']['main'][ '*' ];
Api.post({
action: 'edit',
format: 'json',
title: pg.title,
text: rv.replace( OldFileName, NewFileName ),
editType: 'text',
watchlist: 'nochange',
minor: true,
summary: i18nFormoveAndreplace[i18n_lang].fixredirect,
basetimestamp: pg.revisions[0].timestamp,
token: wpEditToken
}).fail(function( ){
$( '#divforResult' ).append( $( '<li style="color:red">'+ pg.title + ' ' + i18nFormoveAndreplace[i18n_lang].notDone + '</li>' ) );
}).done( function () {
$( '#divforResult' ).append( $( '<li style="color:green">' + pg.title + ' ' + i18nFormoveAndreplace[i18n_lang].Done + '</i>' ) );
} );
});
}
});
});
return new OO.ui.Process( function () { this.close( { action: action } ); }, this );
}
return MoveAndReplace.super.prototype.getActionProcess.call( this, action );
};
var windowManager = new OO.ui.WindowManager();
$( 'body' ).append( windowManager.$element );
var moveAndreplace = new MoveAndReplace();
windowManager.addWindows( [ moveAndreplace ] );
windowManager.openWindow( moveAndreplace );
}
$(document).ready( function() {
mw.loader.load( 'https://commons.wikimedia.org/w/index.php?title=MediaWiki:Gadget-libWikiDOM.js&action=raw&ctype=text/javascript' );
mw.loader.load( 'jquery.ui' );
if (mw.config.get('wgNamespaceNumber') != 6 ) {
return;
}
if ( undefined === i18nFormoveAndreplace[i18n_lang] ) {
i18n_lang = 'en' ;
}
if ( mw.config.get('wgIsRedirect') === true ) {
return;
}
var usergroup = mw.config.get('wgUserGroups');
if ( $.inArray( 'sysop', usergroup ) === -1 && $.inArray( 'filemover', usergroup ) === -1 ) {
return;
}
if ( mw.config.get('wgDBname') === 'commonswiki' ) {
return;
}
var link = mw.util.addPortletLink(
'p-views',
'#',
i18nFormoveAndreplace[i18n_lang].mainTitle
);
$(link).click( function( e ) {
e.preventDefault();
RunMoveAndReplace();
});
});
} );
mvh1k2a4ptpinvxz91lmkln579ry4af
737576
737575
2026-04-11T04:58:12Z
Borhan
54019
Blanked the page
737576
javascript
text/javascript
phoiac9h4m842xq45sp7s6u21eteeq1
Test Page Exists Issue ifxmhjoi
0
167174
737533
666644
2026-04-10T13:17:13Z
~2026-22170-92
73503
737533
wikitext
text/x-wiki
Hi I'm a new page test
m2lqwgubldrnwxyjvd495u77wgk0wd1
TestPage 1754382360
0
167367
737529
668553
2026-04-10T13:15:46Z
~2026-22170-92
73503
737529
wikitext
text/x-wiki
Hi I'm a new page test
m2lqwgubldrnwxyjvd495u77wgk0wd1
Template:Epizode
10
167808
737544
685433
2026-04-10T14:29:58Z
Flamingounicorn
69662
737544
wikitext
text/x-wiki
<includeonly>{{#invoke:Izdvoji godinu|main}}</includeonly>
qlrhp2n1d45fsxqvplj2ceush72qqpe
737545
737544
2026-04-10T14:30:32Z
Flamingounicorn
69662
737545
wikitext
text/x-wiki
<includeonly>{{#invoke:Internetske stranice|main}}</includeonly>
srgdca6rizoqryoklvtcjzjn6gmsdhh
Module:Dob
828
168488
737538
687392
2026-04-10T14:15:31Z
Flamingounicorn
69662
737538
Scribunto
text/plain
local p = {}
local formatirajDatum = require('Module:Formatiraj datum')
local function getMinMaxIso(isoDatum)
local y, m, d = isoDatum:match('(%d+)-(%d+)-(%d+)')
if y then
return isoDatum, isoDatum
end
y, m = isoDatum:match('(%d+)-(%d+)')
if y and m then
local maxDan = formatirajDatum.getMaxDan(y, m)
local earliest = string.format("%s-%s-01", y, m)
local latest = string.format("%s-%s-%02d", y, m, maxDan)
return earliest, latest
end
y = isoDatum:match('(%d+)')
if y then
return y .. "-01-01", y .. "-12-31"
end
return nil, nil
end
local function stripWikiLink(s)
local inner = s:match('%[%[.-%|(.-)%]%]') or s:match('%[%[(.-)%]%]')
if inner then
return mw.text.trim(inner)
end
return s
end
local function CalculateAge(isoPocetak, isoKraj)
if not isoPocetak or not isoKraj then return nil end
local p_min, p_max = getMinMaxIso(isoPocetak)
local k_min, k_max = getMinMaxIso(isoKraj)
if not p_min or not k_max then return nil end
local y1_min, m1_min, d1_min = p_max:match('(%d+)-(%d+)-(%d+)')
local y2_min, m2_min, d2_min = k_min:match('(%d+)-(%d+)-(%d+)')
y1_min, m1_min, d1_min = tonumber(y1_min), tonumber(m1_min), tonumber(d1_min)
y2_min, m2_min, d2_min = tonumber(y2_min), tonumber(m2_min), tonumber(d2_min)
local minGodine = y2_min - y1_min
if (m2_min < m1_min) or (m2_min == m1_min and d2_min < d1_min) then
minGodine = minGodine - 1
end
local y1_max, m1_max, d1_max = p_min:match('(%d+)-(%d+)-(%d+)')
local y2_max, m2_max, d2_max = k_max:match('(%d+)-(%d+)-(%d+)')
y1_max, m1_max, d1_max = tonumber(y1_max), tonumber(m1_max), tonumber(d1_max)
y2_max, m2_max, d2_max = tonumber(y2_max), tonumber(m2_max), tonumber(d2_max)
local maxGodine = y2_max - y1_max
if (m2_max < m1_max) or (m2_max == m1_max and d2_max < d1_max) then
maxGodine = maxGodine - 1
end
if minGodine < 0 or maxGodine > 122 then
return nil
end
if minGodine == maxGodine then
if minGodine > 0 then
return string.format("%d god.", minGodine)
else
local mjeseci = (y2_max - y1_max) * 12 + (m2_max - m1_max)
if d2_max < d1_max then mjeseci = mjeseci - 1 end
if mjeseci < 0 then mjeseci = 0 end
return string.format("%d mj.", mjeseci)
end
else
return string.format("%d–%d god.", minGodine, maxGodine)
end
end
function p.birth(frame)
local args = frame.args
local birthDate = mw.text.trim(args[1] or "")
local deathDate = mw.text.trim(args[2] or "")
if birthDate == "" then return "" end
if string.find(birthDate, 'god', 1, true) or string.find(birthDate, 'godina', 1, true) or string.find(birthDate, 'mj', 1, true) or string.find(birthDate, 'ForceAgeToShow', 1, true) or string.find(birthDate, 'dob', 1, true) then
return birthDate
end
local bdaySpan = formatirajDatum.formatDateWithClass{ args = { [1] = birthDate, [2] = 'bday' } }
local ISObirth = formatirajDatum.getISO{ args = { [1] = stripWikiLink(birthDate) } }
local visiblePart = birthDate
local category = ""
local ns = mw.title.getCurrentTitle().namespace
local title = mw.title.getCurrentTitle()
if ns == 10 and not title.text:find('/doc$') and not title.text:find('/testcases$') and not title.text:find('/sandbox$') then
category = '[[Kategorija:Predlošci koji koriste Modul:Datum i dob]]'
end
if deathDate == "" then
if ISObirth then
local today = mw.getContentLanguage():formatDate('Y-m-d')
local age = CalculateAge(ISObirth, today)
if age then
visiblePart = visiblePart .. " (" .. age .. ")"
if ns == 0 then
category = '[[Kategorija:Stranice s automatskim izračunom dobi osobe]]'
end
else
if ns == 0 then
category = '[[Kategorija:Stranice bez izračuna dobi osobe]]'
end
end
else
if ns == 0 then
category = '[[Kategorija:Stranice bez izračuna dobi osobe]]'
end
end
end
if bdaySpan ~= "" then
return bdaySpan .. " " .. visiblePart .. category
else
return visiblePart .. category
end
end
function p.death(frame)
local args = frame.args
local birthDate = mw.text.trim(args[1] or "")
local deathDate = mw.text.trim(args[2] or "")
if deathDate == "" then
return ""
end
if string.find(deathDate, 'god', 1, true) or string.find(deathDate, 'godina', 1, true) or string.find(deathDate, 'mj', 1, true) or string.find(deathDate, 'ForceAgeToShow', 1, true) or string.find(deathDate, 'dob', 1, true) then
return deathDate
end
if string.find(birthDate, 'god', 1, true) or string.find(birthDate, 'godina', 1, true) or string.find(birthDate, 'mj', 1, true) or string.find(birthDate, 'ForceAgeToShow', 1, true) or string.find(birthDate, 'dob', 1, true) then
return deathDate
end
local ISObirth = formatirajDatum.getISO{ args = { [1] = stripWikiLink(birthDate) } }
local ISOdeath = formatirajDatum.getISO{ args = { [1] = stripWikiLink(deathDate) } }
local display = deathDate
local ns = mw.title.getCurrentTitle().namespace
local title = mw.title.getCurrentTitle()
local category = ""
if ns == 10 and not title.text:find('/doc$') and not title.text:find('/testcases$') and not title.text:find('/sandbox$') then
category = '[[Kategorija:Predlošci koji koriste Modul:Datum i dob]]'
end
if ISObirth and ISOdeath then
local age = CalculateAge(ISObirth, ISOdeath)
if age then
display = display .. " (" .. age .. ")"
if ns == 0 then
category = '[[Kategorija:Stranice s automatskim izračunom dobi osobe]]'
end
else
if ns == 0 then
category = '[[Kategorija:Stranice bez izračuna dobi osobe]]'
end
end
else
if ns == 0 then
category = '[[Kategorija:Stranice bez izračuna dobi osobe]]'
end
end
return display .. category
end
return p
9nzxt3tqmzgwoqm0smve9muu6yzjtlf
737539
737538
2026-04-10T14:17:47Z
Flamingounicorn
69662
737539
Scribunto
text/plain
local p = {}
local formatirajDatum = require('Module:Formatiraj datum')
local function getMinMaxIso(isoDatum)
local y, m, d = isoDatum:match('(%d+)-(%d+)-(%d+)')
if y then
return isoDatum, isoDatum
end
y, m = isoDatum:match('(%d+)-(%d+)')
if y and m then
local maxDan = formatirajDatum.getMaxDan(y, m)
local earliest = string.format("%s-%s-01", y, m)
local latest = string.format("%s-%s-%02d", y, m, maxDan)
return earliest, latest
end
y = isoDatum:match('(%d+)')
if y then
return y .. "-01-01", y .. "-12-31"
end
return nil, nil
end
local function CalculateAge(isoPocetak, isoKraj)
if not isoPocetak or not isoKraj then return nil end
local p_min, p_max = getMinMaxIso(isoPocetak)
local k_min, k_max = getMinMaxIso(isoKraj)
if not p_min or not k_max then return nil end
local y1_min, m1_min, d1_min = p_max:match('(%d+)-(%d+)-(%d+)')
local y2_min, m2_min, d2_min = k_min:match('(%d+)-(%d+)-(%d+)')
y1_min, m1_min, d1_min = tonumber(y1_min), tonumber(m1_min), tonumber(d1_min)
y2_min, m2_min, d2_min = tonumber(y2_min), tonumber(m2_min), tonumber(d2_min)
local minGodine = y2_min - y1_min
if (m2_min < m1_min) or (m2_min == m1_min and d2_min < d1_min) then
minGodine = minGodine - 1
end
local y1_max, m1_max, d1_max = p_min:match('(%d+)-(%d+)-(%d+)')
local y2_max, m2_max, d2_max = k_max:match('(%d+)-(%d+)-(%d+)')
y1_max, m1_max, d1_max = tonumber(y1_max), tonumber(m1_max), tonumber(d1_max)
y2_max, m2_max, d2_max = tonumber(y2_max), tonumber(m2_max), tonumber(d2_max)
local maxGodine = y2_max - y1_max
if (m2_max < m1_max) or (m2_max == m1_max and d2_max < d1_max) then
maxGodine = maxGodine - 1
end
if minGodine < 0 or maxGodine > 122 then
return nil
end
if minGodine == maxGodine then
if minGodine > 0 then
return string.format("%d god.", minGodine)
else
local mjeseci = (y2_max - y1_max) * 12 + (m2_max - m1_max)
if d2_max < d1_max then mjeseci = mjeseci - 1 end
if mjeseci < 0 then mjeseci = 0 end
return string.format("%d mj.", mjeseci)
end
else
return string.format("%d–%d god.", minGodine, maxGodine)
end
end
function p.birth(frame)
local args = frame.args
local birthDate = mw.text.trim(args[1] or "")
local deathDate = mw.text.trim(args[2] or "")
if birthDate == "" then return "" end
if string.find(birthDate, 'god', 1, true) or string.find(birthDate, 'godina', 1, true) or string.find(birthDate, 'mj', 1, true) or string.find(birthDate, 'ForceAgeToShow', 1, true) or string.find(birthDate, 'dob', 1, true) then
return birthDate
end
local bdaySpan = formatirajDatum.formatDateWithClass{ args = { [1] = birthDate, [2] = 'bday' } }
local ISObirth = formatirajDatum.getISO{ args = { [1] = birthDate } }
local visiblePart = birthDate
local category = ""
local ns = mw.title.getCurrentTitle().namespace
local title = mw.title.getCurrentTitle()
if ns == 10 and not title.text:find('/doc$') and not title.text:find('/testcases$') and not title.text:find('/sandbox$') then
category = '[[Kategorija:Predlošci koji koriste Modul:Datum i dob]]'
end
if deathDate == "" then
if ISObirth then
local today = mw.getContentLanguage():formatDate('Y-m-d')
local age = CalculateAge(ISObirth, today)
if age then
visiblePart = visiblePart .. " (" .. age .. ")"
if ns == 0 then
category = '[[Kategorija:Stranice s automatskim izračunom dobi osobe]]'
end
else
if ns == 0 then
category = '[[Kategorija:Stranice bez izračuna dobi osobe]]'
end
end
else
if ns == 0 then
category = '[[Kategorija:Stranice bez izračuna dobi osobe]]'
end
end
end
if bdaySpan ~= "" then
return bdaySpan .. " " .. visiblePart .. category
else
return visiblePart .. category
end
end
function p.death(frame)
local args = frame.args
local birthDate = mw.text.trim(args[1] or "")
local deathDate = mw.text.trim(args[2] or "")
if deathDate == "" then
return ""
end
if string.find(deathDate, 'god', 1, true) or string.find(deathDate, 'godina', 1, true) or string.find(deathDate, 'mj', 1, true) or string.find(deathDate, 'ForceAgeToShow', 1, true) or string.find(deathDate, 'dob', 1, true) then
return deathDate
end
if string.find(birthDate, 'god', 1, true) or string.find(birthDate, 'godina', 1, true) or string.find(birthDate, 'mj', 1, true) or string.find(birthDate, 'ForceAgeToShow', 1, true) or string.find(birthDate, 'dob', 1, true) then
return deathDate
end
local ISObirth = formatirajDatum.getISO{ args = { [1] = birthDate } }
local ISOdeath = formatirajDatum.getISO{ args = { [1] = deathDate } }
local display = deathDate
local ns = mw.title.getCurrentTitle().namespace
local title = mw.title.getCurrentTitle()
local category = ""
if ns == 10 and not title.text:find('/doc$') and not title.text:find('/testcases$') and not title.text:find('/sandbox$') then
category = '[[Kategorija:Predlošci koji koriste Modul:Datum i dob]]'
end
if ISObirth and ISOdeath then
local age = CalculateAge(ISObirth, ISOdeath)
if age then
display = display .. " (" .. age .. ")"
if ns == 0 then
category = '[[Kategorija:Stranice s automatskim izračunom dobi osobe]]'
end
else
if ns == 0 then
category = '[[Kategorija:Stranice bez izračuna dobi osobe]]'
end
end
else
if ns == 0 then
category = '[[Kategorija:Stranice bez izračuna dobi osobe]]'
end
end
return display .. category
end
return p
k3ieepjoqb8of2e2y4gcj2g4rajx11x
737541
737539
2026-04-10T14:20:59Z
Flamingounicorn
69662
737541
Scribunto
text/plain
local p = {}
local formatirajDatum = require('Module:Formatiraj datum')
local function getMinMaxIso(isoDatum)
local y, m, d = isoDatum:match('(%d+)-(%d+)-(%d+)')
if y then
return isoDatum, isoDatum
end
y, m = isoDatum:match('(%d+)-(%d+)')
if y and m then
local maxDan = formatirajDatum.getMaxDan(y, m)
local earliest = string.format("%s-%s-01", y, m)
local latest = string.format("%s-%s-%02d", y, m, maxDan)
return earliest, latest
end
y = isoDatum:match('(%d+)')
if y then
return y .. "-01-01", y .. "-12-31"
end
return nil, nil
end
local function stripWikiLink(s)
local inner = s:match('%[%[.-%|(.-)%]%]') or s:match('%[%[(.-)%]%]')
if inner then
return mw.text.trim(inner)
end
return s
end
local function CalculateAge(isoPocetak, isoKraj)
if not isoPocetak or not isoKraj then return nil end
local p_min, p_max = getMinMaxIso(isoPocetak)
local k_min, k_max = getMinMaxIso(isoKraj)
if not p_min or not k_max then return nil end
local y1_min, m1_min, d1_min = p_max:match('(%d+)-(%d+)-(%d+)')
local y2_min, m2_min, d2_min = k_min:match('(%d+)-(%d+)-(%d+)')
y1_min, m1_min, d1_min = tonumber(y1_min), tonumber(m1_min), tonumber(d1_min)
y2_min, m2_min, d2_min = tonumber(y2_min), tonumber(m2_min), tonumber(d2_min)
local minGodine = y2_min - y1_min
if (m2_min < m1_min) or (m2_min == m1_min and d2_min < d1_min) then
minGodine = minGodine - 1
end
local y1_max, m1_max, d1_max = p_min:match('(%d+)-(%d+)-(%d+)')
local y2_max, m2_max, d2_max = k_max:match('(%d+)-(%d+)-(%d+)')
y1_max, m1_max, d1_max = tonumber(y1_max), tonumber(m1_max), tonumber(d1_max)
y2_max, m2_max, d2_max = tonumber(y2_max), tonumber(m2_max), tonumber(d2_max)
local maxGodine = y2_max - y1_max
if (m2_max < m1_max) or (m2_max == m1_max and d2_max < d1_max) then
maxGodine = maxGodine - 1
end
if minGodine < 0 or maxGodine > 122 then
return nil
end
if minGodine == maxGodine then
if minGodine > 0 then
return string.format("%d god.", minGodine)
else
local mjeseci = (y2_max - y1_max) * 12 + (m2_max - m1_max)
if d2_max < d1_max then mjeseci = mjeseci - 1 end
if mjeseci < 0 then mjeseci = 0 end
return string.format("%d mj.", mjeseci)
end
else
return string.format("%d–%d god.", minGodine, maxGodine)
end
end
function p.birth(frame)
local args = frame.args
local birthDate = mw.text.trim(args[1] or "")
local deathDate = mw.text.trim(args[2] or "")
if birthDate == "" then return "" end
if string.find(birthDate, 'god', 1, true) or string.find(birthDate, 'godina', 1, true) or string.find(birthDate, 'mj', 1, true) or string.find(birthDate, 'ForceAgeToShow', 1, true) or string.find(birthDate, 'dob', 1, true) then
return birthDate
end
local cleanBirth = stripWikiLink(birthDate)
local bdaySpan = formatirajDatum.formatDateWithClass{ args = { [1] = cleanBirth, [2] = 'bday' } }
local ISObirth = formatirajDatum.getISO{ args = { [1] = cleanBirth } }
local visiblePart = birthDate
local category = ""
local ns = mw.title.getCurrentTitle().namespace
local title = mw.title.getCurrentTitle()
if ns == 10 and not title.text:find('/doc$') and not title.text:find('/testcases$') and not title.text:find('/sandbox$') then
category = '[[Kategorija:Predlošci koji koriste Modul:Datum i dob]]'
end
if deathDate == "" then
if ISObirth then
local today = mw.getContentLanguage():formatDate('Y-m-d')
local age = CalculateAge(ISObirth, today)
if age then
visiblePart = visiblePart .. " (" .. age .. ")"
if ns == 0 then
category = '[[Kategorija:Stranice s automatskim izračunom dobi osobe]]'
end
else
if ns == 0 then
category = '[[Kategorija:Stranice bez izračuna dobi osobe]]'
end
end
else
if ns == 0 then
category = '[[Kategorija:Stranice bez izračuna dobi osobe]]'
end
end
end
if bdaySpan ~= "" then
return bdaySpan .. " " .. visiblePart .. category
else
return visiblePart .. category
end
end
function p.death(frame)
local args = frame.args
local birthDate = mw.text.trim(args[1] or "")
local deathDate = mw.text.trim(args[2] or "")
if deathDate == "" then
return ""
end
if string.find(deathDate, 'god', 1, true) or string.find(deathDate, 'godina', 1, true) or string.find(deathDate, 'mj', 1, true) or string.find(deathDate, 'ForceAgeToShow', 1, true) or string.find(deathDate, 'dob', 1, true) then
return deathDate
end
if string.find(birthDate, 'god', 1, true) or string.find(birthDate, 'godina', 1, true) or string.find(birthDate, 'mj', 1, true) or string.find(birthDate, 'ForceAgeToShow', 1, true) or string.find(birthDate, 'dob', 1, true) then
return deathDate
end
local ISObirth = formatirajDatum.getISO{ args = { [1] = stripWikiLink(birthDate) } }
local ISOdeath = formatirajDatum.getISO{ args = { [1] = stripWikiLink(deathDate) } }
local display = deathDate
local ns = mw.title.getCurrentTitle().namespace
local title = mw.title.getCurrentTitle()
local category = ""
if ns == 10 and not title.text:find('/doc$') and not title.text:find('/testcases$') and not title.text:find('/sandbox$') then
category = '[[Kategorija:Predlošci koji koriste Modul:Datum i dob]]'
end
if ISObirth and ISOdeath then
local age = CalculateAge(ISObirth, ISOdeath)
if age then
display = display .. " (" .. age .. ")"
if ns == 0 then
category = '[[Kategorija:Stranice s automatskim izračunom dobi osobe]]'
end
else
if ns == 0 then
category = '[[Kategorija:Stranice bez izračuna dobi osobe]]'
end
end
else
if ns == 0 then
category = '[[Kategorija:Stranice bez izračuna dobi osobe]]'
end
end
return display .. category
end
return p
taprhkmj9apubb5hn1t74olk2ksebj6
737542
737541
2026-04-10T14:22:42Z
Flamingounicorn
69662
737542
Scribunto
text/plain
local p = {}
local formatirajDatum = require('Module:Formatiraj datum')
local function getMinMaxIso(isoDatum)
local y, m, d = isoDatum:match('(%d+)-(%d+)-(%d+)')
if y then
return isoDatum, isoDatum
end
y, m = isoDatum:match('(%d+)-(%d+)')
if y and m then
local maxDan = formatirajDatum.getMaxDan(y, m)
local earliest = string.format("%s-%s-01", y, m)
local latest = string.format("%s-%s-%02d", y, m, maxDan)
return earliest, latest
end
y = isoDatum:match('(%d+)')
if y then
return y .. "-01-01", y .. "-12-31"
end
return nil, nil
end
local function stripWikiLink(s)
-- zamijeni [[Nešto|tekst]] ili [[tekst]] s njihovim display textom
local result = s:gsub('%[%[.-%|(.-)%]%]', '%1'):gsub('%[%[(.-)%]%]', '%1')
return result
end
local function CalculateAge(isoPocetak, isoKraj)
if not isoPocetak or not isoKraj then return nil end
local p_min, p_max = getMinMaxIso(isoPocetak)
local k_min, k_max = getMinMaxIso(isoKraj)
if not p_min or not k_max then return nil end
local y1_min, m1_min, d1_min = p_max:match('(%d+)-(%d+)-(%d+)')
local y2_min, m2_min, d2_min = k_min:match('(%d+)-(%d+)-(%d+)')
y1_min, m1_min, d1_min = tonumber(y1_min), tonumber(m1_min), tonumber(d1_min)
y2_min, m2_min, d2_min = tonumber(y2_min), tonumber(m2_min), tonumber(d2_min)
local minGodine = y2_min - y1_min
if (m2_min < m1_min) or (m2_min == m1_min and d2_min < d1_min) then
minGodine = minGodine - 1
end
local y1_max, m1_max, d1_max = p_min:match('(%d+)-(%d+)-(%d+)')
local y2_max, m2_max, d2_max = k_max:match('(%d+)-(%d+)-(%d+)')
y1_max, m1_max, d1_max = tonumber(y1_max), tonumber(m1_max), tonumber(d1_max)
y2_max, m2_max, d2_max = tonumber(y2_max), tonumber(m2_max), tonumber(d2_max)
local maxGodine = y2_max - y1_max
if (m2_max < m1_max) or (m2_max == m1_max and d2_max < d1_max) then
maxGodine = maxGodine - 1
end
if minGodine < 0 or maxGodine > 122 then
return nil
end
if minGodine == maxGodine then
if minGodine > 0 then
return string.format("%d god.", minGodine)
else
local mjeseci = (y2_max - y1_max) * 12 + (m2_max - m1_max)
if d2_max < d1_max then mjeseci = mjeseci - 1 end
if mjeseci < 0 then mjeseci = 0 end
return string.format("%d mj.", mjeseci)
end
else
return string.format("%d–%d god.", minGodine, maxGodine)
end
end
function p.birth(frame)
local args = frame.args
local birthDate = mw.text.trim(args[1] or "")
local deathDate = mw.text.trim(args[2] or "")
if birthDate == "" then return "" end
if string.find(birthDate, 'god', 1, true) or string.find(birthDate, 'godina', 1, true) or string.find(birthDate, 'mj', 1, true) or string.find(birthDate, 'ForceAgeToShow', 1, true) or string.find(birthDate, 'dob', 1, true) then
return birthDate
end
local cleanBirth = stripWikiLink(birthDate)
local bdaySpan = formatirajDatum.formatDateWithClass{ args = { [1] = cleanBirth, [2] = 'bday' } }
local ISObirth = formatirajDatum.getISO{ args = { [1] = cleanBirth } }
local visiblePart = birthDate
local category = ""
local ns = mw.title.getCurrentTitle().namespace
local title = mw.title.getCurrentTitle()
if ns == 10 and not title.text:find('/doc$') and not title.text:find('/testcases$') and not title.text:find('/sandbox$') then
category = '[[Kategorija:Predlošci koji koriste Modul:Datum i dob]]'
end
if deathDate == "" then
if ISObirth then
local today = mw.getContentLanguage():formatDate('Y-m-d')
local age = CalculateAge(ISObirth, today)
if age then
visiblePart = visiblePart .. " (" .. age .. ")"
if ns == 0 then
category = '[[Kategorija:Stranice s automatskim izračunom dobi osobe]]'
end
else
if ns == 0 then
category = '[[Kategorija:Stranice bez izračuna dobi osobe]]'
end
end
else
if ns == 0 then
category = '[[Kategorija:Stranice bez izračuna dobi osobe]]'
end
end
end
if bdaySpan ~= "" then
return bdaySpan .. " " .. visiblePart .. category
else
return visiblePart .. category
end
end
function p.death(frame)
local args = frame.args
local birthDate = mw.text.trim(args[1] or "")
local deathDate = mw.text.trim(args[2] or "")
if deathDate == "" then
return ""
end
if string.find(deathDate, 'god', 1, true) or string.find(deathDate, 'godina', 1, true) or string.find(deathDate, 'mj', 1, true) or string.find(deathDate, 'ForceAgeToShow', 1, true) or string.find(deathDate, 'dob', 1, true) then
return deathDate
end
if string.find(birthDate, 'god', 1, true) or string.find(birthDate, 'godina', 1, true) or string.find(birthDate, 'mj', 1, true) or string.find(birthDate, 'ForceAgeToShow', 1, true) or string.find(birthDate, 'dob', 1, true) then
return deathDate
end
local ISObirth = formatirajDatum.getISO{ args = { [1] = stripWikiLink(birthDate) } }
local ISOdeath = formatirajDatum.getISO{ args = { [1] = stripWikiLink(deathDate) } }
local display = deathDate
local ns = mw.title.getCurrentTitle().namespace
local title = mw.title.getCurrentTitle()
local category = ""
if ns == 10 and not title.text:find('/doc$') and not title.text:find('/testcases$') and not title.text:find('/sandbox$') then
category = '[[Kategorija:Predlošci koji koriste Modul:Datum i dob]]'
end
if ISObirth and ISOdeath then
local age = CalculateAge(ISObirth, ISOdeath)
if age then
display = display .. " (" .. age .. ")"
if ns == 0 then
category = '[[Kategorija:Stranice s automatskim izračunom dobi osobe]]'
end
else
if ns == 0 then
category = '[[Kategorija:Stranice bez izračuna dobi osobe]]'
end
end
else
if ns == 0 then
category = '[[Kategorija:Stranice bez izračuna dobi osobe]]'
end
end
return display .. category
end
return p
fno8jjr83ax0ouvkn1v7yvch7jougka
Test page 1761254566
0
168548
737527
677685
2026-04-10T13:15:21Z
~2026-22170-92
73503
737527
wikitext
text/x-wiki
Test content test
2ld8bwufqd2s3a8f1excb3gbeagi6c5
Module:Internetske stranice
828
168978
737543
683666
2026-04-10T14:25:00Z
Flamingounicorn
69662
737543
Scribunto
text/plain
local p = {}
function p.main(frame)
local datum_i_godina = mw.getCurrentFrame():getParent().args[1]
local tema = mw.getCurrentFrame():getParent().args[2]
local pocetak, godina, kraj = string.match(datum_i_godina, "(.*)%[%[(%d+%.?)%]%](.*)")
if isempty(godina)
then
return datum_i_godina
else
return pocetak .. frame:expandTemplate{title = tema .. " u", args={godina}} .. kraj
end
end
function isempty(s)
return s == nil or s == ''
end
return p
604uxobnua8e2xhzp7i887efofusq5e
MediaWiki:IncidentReportingConfig.json
8
169251
737540
737308
2026-04-10T14:19:24Z
KieranMcCann-WMF
71479
Added myself to list of end-to-end testers to allow myself to check journey and QA.
737540
json
application/json
{
"ReportIncidentE2ETesterUsers": [
"Asilvering",
"Risker",
"Izno",
"L235",
"Sohom Datta",
"CaptainEek",
"Aoidh",
"AntiCompositeNumber",
"HouseBlaster",
"KieranMcCann-WMF"
],
"ReportIncidentEnabledNamespaces": [
5
],
"ReportIncident_NonEmergency_Doxing": {},
"ReportIncident_NonEmergency_Doxing_HelpMethod": {
"WikiEmailURL": "",
"Email": "",
"OtherURL": "",
"EmailStewards": true
},
"ReportIncident_NonEmergency_Doxing_HideEditURL": "",
"ReportIncident_NonEmergency_Doxing_ShowWarning": true,
"ReportIncident_NonEmergency_HateSpeech": {},
"ReportIncident_NonEmergency_HateSpeech_HelpMethod": {
"ContactAdmin": "",
"Email": "info-en@example.org"
},
"ReportIncident_NonEmergency_Intimidation": {},
"ReportIncident_NonEmergency_Intimidation_DisputeResolutionURL": "",
"ReportIncident_NonEmergency_Intimidation_HelpMethod": {
"ContactAdmin": "Wikipedia:Administrators",
"Email": "info-en@wikimedia.org",
"ContactCommunity": "Wikipedia:Sandbox"
},
"ReportIncident_NonEmergency_Other": {},
"ReportIncident_NonEmergency_Other_DisputeResolutionURL": "",
"ReportIncident_NonEmergency_Other_HelpMethod": {
"ContactAdmin": "Potato",
"Email": "",
"ContactCommunity": "Cow"
},
"ReportIncident_NonEmergency_SexualHarassment": {},
"ReportIncident_NonEmergency_SexualHarassment_HelpMethod": {
"ContactAdmin": "",
"Email": "",
"ContactCommunity": ""
},
"ReportIncident_NonEmergency_Spam": {},
"ReportIncident_NonEmergency_Spam_HelpMethod": {
"ContactAdmin": "",
"Email": ""
},
"ReportIncident_NonEmergency_Spam_SpamContentURL": "",
"ReportIncident_NonEmergency_Trolling": {},
"ReportIncident_NonEmergency_Trolling_HelpMethod": {
"ContactAdmin": "",
"Email": "",
"ContactCommunity": ""
},
"$version": "1.1.0"
}
op0l0uejxfgyjb24rugnditbddypvkv
User:SSethi (WMF)/Starter kit/Template:Content categories
2
173891
737548
731543
2026-04-10T17:03:34Z
SSethi (WMF)
36407
737548
wikitext
text/x-wiki
<!-- CATEGORIES START | Edit: replace plain text with a link once the category exists.
e.g. Custom Category 1 → [[:Category:History|History]] -->
<div style="margin:10px 0;box-shadow:0 1px 1px rgba(0,0,0,0.1);background:#fff;">
{| style="border-spacing:1px;border-collapse:separate;width:100%;text-align:center;font-size:0.9em;padding:2px 3px;" class="hp-portalen"
| style="background:#F9F9F0;border-top:5px solid #999933;padding:3px 0.25em;width:20%;" | Custom Category 1
| style="background:#F4F9F0;border-top:5px solid #669933;padding:3px 0.25em;width:20%;" | Custom Category 2
| style="background:#F0F9F9;border-top:5px solid #339999;padding:3px 0.25em;width:20%;" | Custom Category 3
| style="background:#F9F0F9;border-top:5px solid #993399;padding:3px 0.25em;width:20%;" | Custom Category 4
| style="background:#F9F0F0;border-top:5px solid #993333;padding:3px 0.25em;width:20%;" | Custom Category 5
|}
</div>
<!-- CATEGORIES END -->
<noinclude>[[Category:Starter kit templates]]</noinclude>
2bel10rk89wlwu5uz1rj4ozkscnhyvk
User:SSethi (WMF)/Starter kit/Template:Wikipedia's sister projects
2
173893
737556
734173
2026-04-10T17:05:31Z
SSethi (WMF)
36407
737556
wikitext
text/x-wiki
<div style="border:1px solid #CBD5E1;border-radius:4px;background:#ffffff;overflow:hidden;margin-bottom:16px;">
<div style="background:#F8FAFC;border-bottom:1px solid #CBD5E1;padding:8px 16px;font-weight:bold;">Wikipedia's sister projects</div>
<div style="padding:16px;">
Wikipedia is written by volunteer editors and hosted by the [https://wikimediafoundation.org/ Wikimedia Foundation], a non-profit organization that also hosts a range of other volunteer [https://wikimediafoundation.org/our-work/wikimedia-projects/ projects]:
<ul style="list-style:none;margin:8px 0 0 0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:8px;">
<li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Commons-logo.svg|31px|link=https://commons.wikimedia.org/|alt=Commons logo]]<span>[https://commons.wikimedia.org/ Commons]<br/><small style="color:#555;">Free media repository</small></span></li>
<li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:MediaWiki-2020-icon.svg|35px|link=https://www.mediawiki.org/|alt=MediaWiki logo]]<span>[https://www.mediawiki.org/ MediaWiki]<br/><small style="color:#555;">Wiki software development</small></span></li>
<li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikimedia Community Logo.svg|35px|link=https://meta.wikimedia.org/|alt=Meta-Wiki logo]]<span>[https://meta.wikimedia.org/ Meta-Wiki]<br/><small style="color:#555;">Wikimedia project coordination</small></span></li>
<li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikibooks-logo.svg|35px|link=https://www.wikibooks.org/|alt=Wikibooks logo]]<span>[https://www.wikibooks.org/ Wikibooks]<br/><small style="color:#555;">Free textbooks and manuals</small></span></li>
<li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikidata-logo.svg|47px|link=https://www.wikidata.org/|alt=Wikidata logo]]<span>[https://www.wikidata.org/ Wikidata]<br/><small style="color:#555;">Free knowledge base</small></span></li>
<li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikinews-logo.svg|51px|link=https://www.wikinews.org/|alt=Wikinews logo]]<span>[https://www.wikinews.org/ Wikinews]<br/><small style="color:#555;">Free-content news</small></span></li>
<li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikiquote-logo.svg|35px|link=https://www.wikiquote.org/|alt=Wikiquote logo]]<span>[https://www.wikiquote.org/ Wikiquote]<br/><small style="color:#555;">Collection of quotations</small></span></li>
<li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikisource-logo.svg|35px|link=https://www.wikisource.org/|alt=Wikisource logo]]<span>[https://www.wikisource.org/ Wikisource]<br/><small style="color:#555;">Free-content library</small></span></li>
<li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikispecies-logo.svg|35px|link=https://species.wikimedia.org/|alt=Wikispecies logo]]<span>[https://species.wikimedia.org/ Wikispecies]<br/><small style="color:#555;">Directory of species</small></span></li>
<li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikiversity logo 2017.svg|41px|link=https://www.wikiversity.org/|alt=Wikiversity logo]]<span>[https://www.wikiversity.org/ Wikiversity]<br/><small style="color:#555;">Free learning tools</small></span></li>
<li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wikivoyage-Logo-v3-icon.svg|35px|link=https://www.wikivoyage.org/|alt=Wikivoyage logo]]<span>[https://www.wikivoyage.org/ Wikivoyage]<br/><small style="color:#555;">Free travel guide</small></span></li>
<li style="display:flex;align-items:center;gap:16px;padding:4px 0;">[[File:Wiktionary-logo-v2.svg|35px|link=https://www.wiktionary.org/|alt=Wiktionary logo]]<span>[https://www.wiktionary.org/ Wiktionary]<br/><small style="color:#555;">Dictionary and thesaurus</small></span></li>
</ul>
</div>
</div>
<noinclude>[[Category:Starter kit templates]]</noinclude>
sqqnlmlgl2eejn6h1edrw231bhol386
User:SSethi (WMF)/Starter kit/Template:Wikipedia languages
2
173896
737555
734168
2026-04-10T17:05:18Z
SSethi (WMF)
36407
737555
wikitext
text/x-wiki
<div style="border:1px solid #CBD5E1;border-radius:4px;background:#ffffff;overflow:hidden;">
<div style="background:#F8FAFC;border-bottom:1px solid #CBD5E1;padding:8px 16px;font-weight:bold;">Wikipedia languages</div>
<div style="padding:16px;">
Many [https://meta.wikimedia.org/wiki/List_of_Wikipedias other Wikipedias are available]; some of the largest are listed below.
<ul style="list-style:none;margin:8px 0 0 0;padding:0;">
<li style="margin-bottom:12px;">
<div style="display:flex;align-items:center;gap:8px;margin-bottom:6px;">
<div style="flex:1;height:1px;background:#CBD5E1;"></div>
<div style="font-weight:bold;white-space:nowrap;">1,000,000+ articles</div>
<div style="flex:1;height:1px;background:#CBD5E1;"></div>
</div>
<div style="line-height:2;">
[https://ar.wikipedia.org/wiki/ العربية] ·
[https://de.wikipedia.org/wiki/ Deutsch] ·
[https://es.wikipedia.org/wiki/ Español] ·
[https://fa.wikipedia.org/wiki/ فارسی]‎ ·
[https://fr.wikipedia.org/wiki/ Français] ·
[https://it.wikipedia.org/wiki/ Italiano] ·
[https://nl.wikipedia.org/wiki/ Nederlands] ·
[https://ja.wikipedia.org/wiki/ 日本語] ·
[https://pl.wikipedia.org/wiki/ Polski] ·
[https://pt.wikipedia.org/wiki/ Português] ·
[https://ru.wikipedia.org/wiki/ Русский] ·
[https://sv.wikipedia.org/wiki/ Svenska] ·
[https://uk.wikipedia.org/wiki/ Українська] ·
[https://vi.wikipedia.org/wiki/ Tiếng Việt] ·
[https://zh.wikipedia.org/wiki/ 中文]
</div>
</li>
<li style="margin-bottom:12px;">
<div style="display:flex;align-items:center;gap:8px;margin-bottom:6px;">
<div style="flex:1;height:1px;background:#CBD5E1;"></div>
<div style="font-weight:bold;white-space:nowrap;">250,000+ articles</div>
<div style="flex:1;height:1px;background:#CBD5E1;"></div>
</div>
<div style="line-height:2;">
[https://id.wikipedia.org/wiki/ Bahasa Indonesia] ·
[https://ms.wikipedia.org/wiki/ Bahasa Melayu] ·
[https://nan.wikipedia.org/wiki/ 閩南語] ·
[https://bg.wikipedia.org/wiki/ Български] ·
[https://ca.wikipedia.org/wiki/ Català] ·
[https://cs.wikipedia.org/wiki/ Čeština] ·
[https://da.wikipedia.org/wiki/ Dansk] ·
[https://et.wikipedia.org/wiki/ Eesti] ·
[https://el.wikipedia.org/wiki/ Ελληνικά] ·
[https://eo.wikipedia.org/wiki/ Esperanto] ·
[https://eu.wikipedia.org/wiki/ Euskara] ·
[https://he.wikipedia.org/wiki/ עברית] ·
[https://hy.wikipedia.org/wiki/ Հայերեն] ·
[https://ko.wikipedia.org/wiki/ 한국어] ·
[https://hu.wikipedia.org/wiki/ Magyar] ·
[https://no.wikipedia.org/wiki/ Norsk] ·
[https://ro.wikipedia.org/wiki/ Română] ·
[https://simple.wikipedia.org/wiki/ Simple English] ·
[https://sk.wikipedia.org/wiki/ Slovenčina] ·
[https://sr.wikipedia.org/wiki/ Српски] ·
[https://sh.wikipedia.org/wiki/ Srpskohrvatski] ·
[https://fi.wikipedia.org/wiki/ Suomi] ·
[https://tr.wikipedia.org/wiki/ Türkçe] ·
[https://uz.wikipedia.org/wiki/ Oʻzbek]
</div>
</li>
<li style="margin-bottom:4px;">
<div style="display:flex;align-items:center;gap:8px;margin-bottom:6px;">
<div style="flex:1;height:1px;background:#CBD5E1;"></div>
<div style="font-weight:bold;white-space:nowrap;">50,000+ articles</div>
<div style="flex:1;height:1px;background:#CBD5E1;"></div>
</div>
<div style="line-height:2;">
[https://ast.wikipedia.org/wiki/ Asturianu] ·
[https://az.wikipedia.org/wiki/ Azərbaycanca] ·
[https://bn.wikipedia.org/wiki/ বাংলা] ·
[https://bs.wikipedia.org/wiki/ Bosanski] ·
[https://ckb.wikipedia.org/wiki/ کوردی] ·
[https://fy.wikipedia.org/wiki/ Frysk] ·
[https://ga.wikipedia.org/wiki/ Gaeilge] ·
[https://gl.wikipedia.org/wiki/ Galego] ·
[https://hr.wikipedia.org/wiki/ Hrvatski] ·
[https://ka.wikipedia.org/wiki/ ქართული] ·
[https://ku.wikipedia.org/wiki/ Kurdî] ·
[https://lv.wikipedia.org/wiki/ Latviešu] ·
[https://lt.wikipedia.org/wiki/ Lietuvių] ·
[https://ml.wikipedia.org/wiki/ മലയാളം] ·
[https://mk.wikipedia.org/wiki/ Македонски] ·
[https://my.wikipedia.org/wiki/ မြန်မာဘာသာ] ·
[https://nn.wikipedia.org/wiki/ Norsk nynorsk] ·
[https://pa.wikipedia.org/wiki/ ਪੰਜਾਬੀ] ·
[https://sq.wikipedia.org/wiki/ Shqip] ·
[https://sl.wikipedia.org/wiki/ Slovenščina] ·
[https://th.wikipedia.org/wiki/ ไทย] ·
[https://te.wikipedia.org/wiki/ తెలుగు] ·
[https://ur.wikipedia.org/wiki/ اردو]
</div>
</li>
</ul>
</div>
</div>
<noinclude>[[Category:Starter kit templates]]</noinclude>
qfil1o4vm3tqidfgmg9xjryqel5ppoz
User:SSethi (WMF)/Starter kit/Template:Community resources
2
173898
737546
734170
2026-04-10T17:02:14Z
SSethi (WMF)
36407
737546
wikitext
text/x-wiki
<div style="border:1px solid #CBD5E1;border-radius:4px;background:white;overflow:hidden;margin-bottom:2px;">
<div style="background:#F1F5F9;border-bottom:1px solid #CBD5E1;padding:8px 16px;">'''Community resources'''</div>
<div style="padding:16px;">
<!-- Add links to pages that help your community connect and collaborate.
Replace each placeholder below with a real page, or remove lines that don't apply yet. -->
* Add a link to a discussion venue where the community can talk about the wiki.
* Add a link to a welcome or help page for new editors.
* Add a link to an upcoming or recurring community event.
* Add a link to any other community resource relevant to your wiki.
</div>
</div>
<noinclude>[[Category:Starter kit templates]]</noinclude>
9qpbhbxyfrphef8hiaacfno4y7tohtc
User:SSethi (WMF)/Starter kit/Template:Translation resources
2
173899
737554
734174
2026-04-10T17:05:05Z
SSethi (WMF)
36407
737554
wikitext
text/x-wiki
<div style="border:1px solid #CBD5E1;border-radius:4px;background:white;overflow:hidden;margin-bottom:2px;">
<div style="background:#F1F5F9;border-bottom:1px solid #CBD5E1;padding:8px 16px;">'''Translation resources'''</div>
<div style="padding:16px;">
<!-- Edit: replace placeholder items with real pages once they exist on your wiki.
Add or remove items as your community grows. -->
* Translate the most-used interface messages for your wiki on [https://translatewiki.net/w/i.php?title=Special:Translate&group=core-mostused&language=<!--LANGUAGE_CODE--> Translatewiki.net] - The essential messages that power your wiki's interface.
* [https://en.wikipedia.org/wiki/Wikipedia:Five_pillars Wikipedia's Five Pillars] - The core principles of Wikipedia. Translate these into your language as a starting point for your wiki's policies.
* [https://meta.wikimedia.org/wiki/List_of_articles_every_Wikipedia_should_have 1,000 articles every Wikipedia should have] - A list of essential topics and a great guide for deciding what to write first.
* Add a link to a translation guide or resource relevant to your community.
</div>
</div>
<noinclude>[[Category:Starter kit templates]]</noinclude>
9otl2wtitymgbojg52quzf5se6sxb60
User:SSethi (WMF)/Starter kit/Template:Featured article
2
174237
737550
734172
2026-04-10T17:04:08Z
SSethi (WMF)
36407
737550
wikitext
text/x-wiki
<div style="border:1px solid #cef2e0;border-radius:4px;padding:8px;background:#f5fffa;margin-bottom:2px;">
<div style="padding:4px 12px;margin-bottom:8px;border:1px solid #a3bfb1;border-radius:4px;background:#cef2e0;">'''Featured article'''</div>
<!-- Add a short excerpt from any well-written article on your wiki.
No need to update daily — refresh when a new article is ready.
To add an image: [[File:Filename.jpg|112px|left|alt=description]] -->
Add article title here – Add a short excerpt here (2–3 sentences). Introduce the topic clearly so readers want to learn more.
<!-- Replace "Full article..." below with: [[Article name|Full article...]] -->
<small>(Full article...)</small>
</div>
[[Category:Starter kit templates]]
8gieruy19vc9wryg8351z5xedoc2uy2
737558
737550
2026-04-10T17:31:15Z
SSethi (WMF)
36407
737558
wikitext
text/x-wiki
<div style="border:1px solid #cef2e0;border-radius:4px;padding:8px;background:#f5fffa;margin-bottom:2px;">
<div style="padding:4px 12px;margin-bottom:8px;border:1px solid #a3bfb1;border-radius:4px;background:#cef2e0;">'''Featured article'''</div>
<!-- Add a short excerpt from any well-written article on your wiki.
No need to update daily — refresh when a new article is ready.
To add an image: [[File:Filename.jpg|112px|left|alt=description]] -->
Add article title here – Add a short excerpt here (2–3 sentences). Introduce the topic clearly so readers want to learn more.
<!-- Replace "Full article..." below with: [[Article name|Full article...]] -->
<small>(Full article...)</small>
</div>
<noinclude>[[Category:Starter kit templates]]</noinclude>
8f0hxcd6j5x931os1d5plbo2g7n8veu
User:SSethi (WMF)/Starter kit/Template:Did you know
2
174238
737549
734171
2026-04-10T17:03:49Z
SSethi (WMF)
36407
737549
wikitext
text/x-wiki
<div style="border:1px solid #cef2e0;border-radius:4px;padding:8px;background:#f5fffa;margin-bottom:2px;">
<div style="padding:4px 12px;margin-bottom:8px;border:1px solid #a3bfb1;border-radius:4px;background:#cef2e0;">'''Did you know ...'''</div>
<!-- Update with 3–5 interesting facts from recently created or expanded articles.
No need to update daily — refresh when new articles are added.
To add an image: [[File:Filename.jpg|80px|left|alt=description]] -->
* ... that add an interesting fact and link to a relevant article here?
* ... that add an interesting fact and link to a relevant article here?
* ... that add an interesting fact and link to a relevant article here?
</div>
[[Category:Starter kit templates]]
p2rjad2kmd492fhfz1tuaz9n0xo5kft
737557
737549
2026-04-10T17:31:04Z
SSethi (WMF)
36407
737557
wikitext
text/x-wiki
<div style="border:1px solid #cef2e0;border-radius:4px;padding:8px;background:#f5fffa;margin-bottom:2px;">
<div style="padding:4px 12px;margin-bottom:8px;border:1px solid #a3bfb1;border-radius:4px;background:#cef2e0;">'''Did you know ...'''</div>
<!-- Update with 3–5 interesting facts from recently created or expanded articles.
No need to update daily — refresh when new articles are added.
To add an image: [[File:Filename.jpg|80px|left|alt=description]] -->
* ... that add an interesting fact and link to a relevant article here?
* ... that add an interesting fact and link to a relevant article here?
* ... that add an interesting fact and link to a relevant article here?
</div>
<noinclude>[[Category:Starter kit templates]]</noinclude>
efghg1hxbk1i2x5pquqhdu10ck1081z
User:SSethi (WMF)/Starter kit/Template:In the news
2
174239
737552
734165
2026-04-10T17:04:38Z
SSethi (WMF)
36407
737552
wikitext
text/x-wiki
<div style="border:1px solid #cedff2;border-radius:4px;padding:8px;background:#f5faff;margin-bottom:2px;">
<div style="padding:4px 12px;margin-bottom:8px;border:1px solid #a3b0bf;border-radius:4px;background:#cedff2;">'''In the news'''</div>
<!-- Add recent events or news relevant to your community or topic area.
No need to update daily — refresh when something noteworthy happens.
To add an image: [[File:Filename.jpg|64px|right|alt=description]] -->
* Add a recent event or news item and link to a relevant article here.
* Add a recent event or news item and link to a relevant article here.
* Add a recent event or news item and link to a relevant article here.
</div>
[[Category:Starter kit templates]]
fwesphmftmq67w3x4enmx6c8ehxpt0z
737560
737552
2026-04-10T17:31:34Z
SSethi (WMF)
36407
737560
wikitext
text/x-wiki
<div style="border:1px solid #cedff2;border-radius:4px;padding:8px;background:#f5faff;margin-bottom:2px;">
<div style="padding:4px 12px;margin-bottom:8px;border:1px solid #a3b0bf;border-radius:4px;background:#cedff2;">'''In the news'''</div>
<!-- Add recent events or news relevant to your community or topic area.
No need to update daily — refresh when something noteworthy happens.
To add an image: [[File:Filename.jpg|64px|right|alt=description]] -->
* Add a recent event or news item and link to a relevant article here.
* Add a recent event or news item and link to a relevant article here.
* Add a recent event or news item and link to a relevant article here.
</div>
<noinclude>[[Category:Starter kit templates]]</noinclude>
40fusnlv1gt2lbcuslxiephm1ol2ddu
User:SSethi (WMF)/Starter kit/Template:On this day
2
174240
737553
734166
2026-04-10T17:04:51Z
SSethi (WMF)
36407
737553
wikitext
text/x-wiki
<div style="border:1px solid #cedff2;border-radius:4px;padding:8px;background:#f5faff;margin-bottom:2px;">
<div style="padding:4px 12px;margin-bottom:8px;border:1px solid #a3b0bf;border-radius:4px;background:#cedff2;">'''On this day'''</div>
<!-- Add 2–3 historical events relevant to your community or topic area.
No need to update daily — refresh occasionally as your wiki grows.
To add an image: [[File:Filename.jpg|80px|right|alt=description]] -->
Add a date here
* Add a historical event and link to a relevant article here.
* Add a historical event and link to a relevant article here.
</div>
[[Category:Starter kit templates]]
0glbjv9ea1xfkebzge7b1931cnc50xt
737561
737553
2026-04-10T17:31:46Z
SSethi (WMF)
36407
737561
wikitext
text/x-wiki
<div style="border:1px solid #cedff2;border-radius:4px;padding:8px;background:#f5faff;margin-bottom:2px;">
<div style="padding:4px 12px;margin-bottom:8px;border:1px solid #a3b0bf;border-radius:4px;background:#cedff2;">'''On this day'''</div>
<!-- Add 2–3 historical events relevant to your community or topic area.
No need to update daily — refresh occasionally as your wiki grows.
To add an image: [[File:Filename.jpg|80px|right|alt=description]] -->
Add a date here
* Add a historical event and link to a relevant article here.
* Add a historical event and link to a relevant article here.
</div>
<noinclude>[[Category:Starter kit templates]]</noinclude>
dexflvpfy0pjrd6j1pi3ku8mr24184e
User:SSethi (WMF)/Starter kit/Template:Featured picture
2
174241
737551
734164
2026-04-10T17:04:25Z
SSethi (WMF)
36407
737551
wikitext
text/x-wiki
<div style="border:1px solid #ddcef2;border-radius:4px;padding:8px;background:#faf5ff;margin-top:4px;">
<div style="padding:4px 12px;margin-bottom:8px;border:1px solid #afa3bf;border-radius:4px;background:#ddcef2;">'''Featured picture'''</div>
<!-- Add any image that represents your wiki well — from Commons or locally uploaded.
No need to update daily — refresh whenever a good image is available.
To add the image: [[File:Filename.jpg|320px|left|alt=description]] -->
Add image title here
Add a description of the image here (2–3 sentences).
<small>''Credit: Add photographer or source credit here''</small>
</div>
[[Category:Starter kit templates]]
n2txddzek7g2vo5g185lmiz8owdbyyv
737559
737551
2026-04-10T17:31:24Z
SSethi (WMF)
36407
737559
wikitext
text/x-wiki
<div style="border:1px solid #ddcef2;border-radius:4px;padding:8px;background:#faf5ff;margin-top:4px;">
<div style="padding:4px 12px;margin-bottom:8px;border:1px solid #afa3bf;border-radius:4px;background:#ddcef2;">'''Featured picture'''</div>
<!-- Add any image that represents your wiki well — from Commons or locally uploaded.
No need to update daily — refresh whenever a good image is available.
To add the image: [[File:Filename.jpg|320px|left|alt=description]] -->
Add image title here
Add a description of the image here (2–3 sentences).
<small>''Credit: Add photographer or source credit here''</small>
</div>
<noinclude>[[Category:Starter kit templates]]</noinclude>
hb6ar7x7agg9zv1swf3d6eou995o6u4
User:MrJaroslavik/GlobalCheckUserStats.js
2
174673
737563
737519
2026-04-10T18:03:16Z
MrJaroslavik
44012
e
737563
javascript
text/javascript
// GlobalCheckUserStats.js
// Features:
// - Global Audit: Scans CheckUser logs across 900+ Wikimedia projects at once.
// - Smart Categorization: Identifies roles (Local CU, Steward, Staff, etc.).
// - Steward Logic: Detects temporary access, exact durations, and longest active periods.
// - Deep Scan: Automated pagination to bypass the 500-entry API limit (essential for enwiki).
// - Robust Connection: Automated retries for 429 rate-limits and custom domain mapping.
// - Full Reporting: Outputs sortable Wikitables and detailed rights change logs.
// - Custom UI: Integrated control panel on [[Special:BlankPage/GlobalCheckUserStats]].
// - With help of Gemini 3
(function () {
'use strict';
if (mw.config.get('wgCanonicalSpecialPageName') !== 'Blankpage' || mw.config.get('wgTitle').indexOf('GlobalCheckUserStats') === -1) return;
const rawWikis = ['abstractwiki', 'abwiki', 'acewiki', 'adywiki', 'afwiki', 'afwikibooks', 'afwikiquote', 'afwiktionary', 'alswiki', 'altwiki', 'amiwiki', 'amwiki', 'amwiktionary', 'angwiki', 'angwiktionary', 'annwiki', 'anpwiki', 'anwiki', 'anwiktionary', 'arcwiki', 'arwiki', 'arwikibooks', 'arwikimedia', 'arwikinews', 'arwikiquote', 'arwikisource', 'arwikiversity', 'arwiktionary', 'arywiki', 'arzwiki', 'astwiki', 'astwiktionary', 'aswiki', 'aswikiquote', 'aswikisource', 'atjwiki', 'avkwiki', 'avwiki', 'awawiki', 'aywiki', 'aywiktionary', 'azbwiki', 'azwiki', 'azwikibooks', 'azwikiquote', 'azwikisource', 'azwiktionary', 'banwiki', 'banwikisource', 'barwiki', 'bat_smgwiki', 'bawiki', 'bawikibooks', 'bbcwiki', 'bclwiki', 'bclwikiquote', 'bclwikisource', 'bclwiktionary', 'bdrwiki', 'bdwikimedia', 'be_x_oldwiki', 'betawikiversity', 'bewiki', 'bewikibooks', 'bewikimedia', 'bewikiquote', 'bewikisource', 'bewiktionary', 'bewwiki', 'bewwiktionary', 'bgwiki', 'bgwikibooks', 'bgwikiquote', 'bgwikisource', 'bgwiktionary', 'bhwiki', 'biwiki', 'bjnwiki', 'bjnwikiquote', 'bjnwiktionary', 'blkwiki', 'blkwiktionary', 'bmwiki', 'bnwiki', 'bnwikibooks', 'bnwikiquote', 'bnwikisource', 'bnwikivoyage', 'bnwiktionary', 'bowiki', 'bpywiki', 'brwiki', 'brwikimedia', 'brwikiquote', 'brwikisource', 'brwiktionary', 'bswiki', 'bswikibooks', 'bswikinews', 'bswikiquote', 'bswikisource', 'bswiktionary', 'btmwiki', 'btmwiktionary', 'bugwiki', 'bxrwiki', 'cawiki', 'cawikibooks', 'cawikimedia', 'cawikinews', 'cawikiquote', 'cawikisource', 'cawiktionary', 'cbk_zamwiki', 'cdowiki', 'cebwiki', 'cewiki', 'chrwiki', 'chrwiktionary', 'chwiki', 'chywiki', 'ckbwiki', 'ckbwiktionary', 'commonswiki', 'cowiki', 'cowikimedia', 'cowiktionary', 'crhwiki', 'csbwiki', 'csbwiktionary', 'cswiki', 'cswikibooks', 'cswikinews', 'cswikiquote', 'cswikisource', 'cswikiversity', 'cswikivoyage', 'cswiktionary', 'cuwiki', 'cvwiki', 'cvwikibooks', 'cywiki', 'cywikibooks', 'cywikiquote', 'cywikisource', 'cywiktionary', 'dagwiki', 'dawiki', 'dawikibooks', 'dawikiquote', 'dawikisource', 'dawiktionary', 'dewiki', 'dewikibooks', 'dewikinews', 'dewikiquote', 'dewikisource', 'dewikiversity', 'dewikivoyage', 'dewiktionary', 'dgawiki', 'dinwiki', 'diqwiki', 'diqwiktionary', 'dkwikimedia', 'dsbwiki', 'dtpwiki', 'dtywiki', 'dvwiki', 'dvwiktionary', 'dzwiki', 'eewiki', 'elwiki', 'elwikibooks', 'elwikinews', 'elwikiquote', 'elwikisource', 'elwikiversity', 'elwikivoyage', 'elwiktionary', 'emlwiki', 'enwiki', 'enwikibooks', 'enwikinews', 'enwikiquote', 'enwikisource', 'enwikiversity', 'enwikivoyage', 'enwiktionary', 'eowiki', 'eowikibooks', 'eowikinews', 'eowikiquote', 'eowikisource', 'eowikivoyage', 'eowiktionary', 'eswiki', 'eswikibooks', 'eswikinews', 'eswikiquote', 'eswikisource', 'eswikiversity', 'eswikivoyage', 'eswiktionary', 'etwiki', 'etwikibooks', 'eewikimedia', 'etwikiquote', 'etwikisource', 'etwiktionary', 'euwiki', 'euwikibooks', 'euwikiquote', 'euwikisource', 'euwiktionary', 'extwiki', 'fatwiki', 'fawiki', 'fawikibooks', 'fawikinews', 'fawikiquote', 'fawikisource', 'fawikivoyage', 'fawiktionary', 'ffwiki', 'fiu_vrowiki', 'fiwiki', 'fiwikibooks', 'fiwikimedia', 'fiwikinews', 'fiwikiquote', 'fiwikisource', 'fiwikiversity', 'fiwikivoyage', 'fiwiktionary', 'fjwiki', 'fjwiktionary', 'fonwiki', 'foundationwiki', 'fowiki', 'fowikisource', 'fowiktionary', 'frpwiki', 'frrwiki', 'frwiki', 'frwikibooks', 'frwikinews', 'frwikiquote', 'frwikisource', 'frwikiversity', 'frwikivoyage', 'frwiktionary', 'furwiki', 'fywiki', 'fywikibooks', 'fywiktionary', 'gagwiki', 'ganwiki', 'gawiki', 'gawiktionary', 'gcrwiki', 'gdwiki', 'gdwiktionary', 'glkwiki', 'glwiki', 'glwikibooks', 'glwikiquote', 'glwikisource', 'glwiktionary', 'gnwiki', 'gnwiktionary', 'gomwiki', 'gomwiktionary', 'gorwiki', 'gorwikiquote', 'gorwiktionary', 'gotwiki', 'gpewiki', 'gucwiki', 'gurwiki', 'guwiki', 'guwikiquote', 'guwikisource', 'guwiktionary', 'guwwiki', 'guwwikinews', 'guwwikiquote', 'guwwiktionary', 'gvwiki', 'gvwiktionary', 'hakwiki', 'hawiki', 'hawiktionary', 'hawwiki', 'hewiki', 'hewikibooks', 'hewikinews', 'hewikiquote', 'hewikisource', 'hewikivoyage', 'hewiktionary', 'hifwiki', 'hifwiktionary', 'hiwiki', 'hiwikibooks', 'hiwikiquote', 'hiwikisource', 'hiwikiversity', 'hiwikivoyage', 'hiwiktionary', 'hrwiki', 'hrwikibooks', 'hrwikiquote', 'hrwikisource', 'hrwiktionary', 'hsbwiki', 'hsbwiktionary', 'htwiki', 'huwiki', 'huwikibooks', 'huwikisource', 'huwiktionary', 'hywiki', 'hywikibooks', 'hywikiquote', 'hywikisource', 'hywiktionary', 'hywwiki', 'iawiki', 'iawikibooks', 'iawiktionary', 'ibawiki', 'idwiki', 'idwikibooks', 'idwikiquote', 'idwikisource', 'idwikivoyage', 'idwiktionary', 'iewiki', 'iewiktionary', 'iglwiki', 'igwiki', 'igwikiquote', 'igwiktionary', 'ikwiki', 'ilowiki', 'incubatorwiki', 'inhwiki', 'iowiki', 'iowiktionary', 'iswiki', 'iswikibooks', 'iswikiquote', 'iswikisource', 'iswiktionary', 'itwiki', 'itwikibooks', 'itwikinews', 'itwikiquote', 'itwikisource', 'itwikiversity', 'itwikivoyage', 'itwiktionary', 'iuwiki', 'iuwiktionary', 'jamwiki', 'jawiki', 'jawikibooks', 'jawikinews', 'jawikisource', 'jawikiversity', 'jawikivoyage', 'jawiktionary', 'jbowiki', 'jbowiktionary', 'jvwiki', 'jvwikisource', 'jvwiktionary', 'kaawiki', 'kaawiktionary', 'kabwiki', 'kaiwiki', 'kajwiki', 'kawiki', 'kawikibooks', 'kawikiquote', 'kawikisource', 'kawiktionary', 'kbdwiki', 'kbdwiktionary', 'kbpwiki', 'kcgwiki', 'kcgwiktionary', 'kgewiki', 'kgwiki', 'kiwiki', 'kkwiki', 'kkwikibooks', 'kkwiktionary', 'klwiktionary', 'kmwiki', 'kmwikibooks', 'kmwiktionary', 'kncwiki', 'knwiki', 'knwikiquote', 'knwikisource', 'knwiktionary', 'koiwiki', 'kowiki', 'kowikibooks', 'kowikinews', 'kowikiquote', 'kowikisource', 'kowikiversity', 'kowiktionary', 'krcwiki', 'kshwiki', 'kswiki', 'kswiktionary', 'kuswiki', 'kuwiki', 'kuwikibooks', 'kuwikiquote', 'kuwiktionary', 'kvwiki', 'kwwiki', 'kwwiktionary', 'kywiki', 'kywikiquote', 'kywiktionary', 'labswiki', 'ladwiki', 'lawiki', 'lawikibooks', 'lawikiquote', 'lawikisource', 'lawiktionary', 'lbewiki', 'lbwiki', 'lbwiktionary', 'lezwiki', 'lfnwiki', 'lgwiki', 'lijwiki', 'lijwikisource', 'liwiki', 'liwikibooks', 'liwikinews', 'liwikiquote', 'liwikisource', 'liwiktionary', 'lldwiki', 'lmowiki', 'lmowiktionary', 'lnwiki', 'lnwiktionary', 'lowiki', 'lowiktionary', 'ltgwiki', 'ltwiki', 'ltwikibooks', 'ltwikiquote', 'ltwikisource', 'ltwiktionary', 'lvwiki', 'lvwiktionary', 'madwiki', 'madwikisource', 'madwiktionary', 'maiwiki', 'map_bmswiki', 'mdfwiki', 'mediawikiwiki', 'metawiki', 'mgwiki', 'mgwikibooks', 'mgwiktionary', 'mhrwiki', 'minwiki', 'minwikibooks', 'minwikisource', 'minwiktionary', 'miwiki', 'miwiktionary', 'mkwiki', 'mkwikibooks', 'mkwikimedia', 'mkwikisource', 'mkwiktionary', 'mlwiki', 'mlwikibooks', 'mlwikiquote', 'mlwikisource', 'mlwiktionary', 'mniwiki', 'mniwiktionary', 'mnwiki', 'mnwiktionary', 'mnwwiki', 'mnwwiktionary', 'moswiki', 'mrjwiki', 'mrwiki', 'mrwikibooks', 'mrwikiquote', 'mrwikisource', 'mrwiktionary', 'mswiki', 'mswikibooks', 'mswikiquote', 'mswikisource', 'mswiktionary', 'mtwiki', 'mtwiktionary', 'mwlwiki', 'mxwikimedia', 'myvwiki', 'mywiki', 'mywikisource', 'mywiktionary', 'mznwiki', 'nahwiki', 'nahwiktionary', 'napwiki', 'napwikisource', 'nawiktionary', 'nds_nlwiki', 'ndswiki', 'ndswiktionary', 'newiki', 'newikibooks', 'newiktionary', 'newwiki', 'niawiki', 'niawiktionary', 'nlwiki', 'nlwikibooks', 'nlwikimedia', 'nlwikinews', 'nlwikiquote', 'nlwikisource', 'nlwikivoyage', 'nlwiktionary', 'nnwiki', 'nnwikiquote', 'nnwiktionary', 'novwiki', 'nowiki', 'nowikibooks', 'nowikimedia', 'nowikinews', 'nowikiquote', 'nowikisource', 'nowiktionary', 'nqowiki', 'nrmwiki', 'nrwiki', 'nsowiki', 'nupwiki', 'nvwiki', 'nycwikimedia', 'nywiki', 'ocwiki', 'ocwikibooks', 'ocwiktionary', 'olowiki', 'omwiki', 'omwiktionary', 'orwiki', 'orwikisource', 'orwiktionary', 'oswiki', 'outreachwiki', 'pagwiki', 'pamwiki', 'papwiki', 'pawiki', 'pawikibooks', 'pawikisource', 'pawiktionary', 'pcdwiki', 'pcmwiki', 'pcmwikiquote', 'pdcwiki', 'pflwiki', 'piwiki', 'plwiki', 'plwikibooks', 'plwikimedia', 'plwikinews', 'plwikiquote', 'plwikisource', 'plwikivoyage', 'plwiktionary', 'pmswiki', 'pmswikisource', 'pnbwiki', 'pnbwiktionary', 'pntwiki', 'pplwiki', 'pswiki', 'pswikivoyage', 'pswiktionary', 'ptwiki', 'ptwikibooks', 'ptwikimedia', 'ptwikinews', 'ptwikiquote', 'ptwikisource', 'ptwikiversity', 'ptwikivoyage', 'ptwiktionary', 'pwnwiki', 'quwiktionary', 'rkiwiki', 'rmwiki', 'rmywiki', 'rnwiki', 'roa_rupwiki', 'roa_rupwiktionary', 'roa_tarawiki', 'rowiki', 'rowikibooks', 'rowikinews', 'rowikiquote', 'rowiktionary', 'rskwiki', 'ruewiki', 'ruwiki', 'ruwikibooks', 'ruwikinews', 'ruwikiquote', 'ruwikisource', 'ruwikiversity', 'ruwikivoyage', 'ruwiktionary', 'rwwiki', 'rwwiktionary', 'sahwiki', 'sahwikiquote', 'sahwikisource', 'satwiki', 'satwiktionary', 'sawiki', 'sawikibooks', 'sawikiquote', 'sawikisource', 'sawiktionary', 'scnwiki', 'scnwiktionary', 'scowiki', 'scwiki', 'sdwiki', 'sdwiktionary', 'sewiki', 'sewikimedia', 'sgwiki', 'sgwiktionary', 'shiwiki', 'shnwiki', 'shnwikibooks', 'shnwikinews', 'shnwikivoyage', 'shnwiktionary', 'shwiki', 'shwiktionary', 'shywiktionary', 'simplewiki', 'simplewiktionary', 'siwiki', 'siwikibooks', 'siwiktionary', 'skwiki', 'skrwiki', 'skrwiktionary', 'slwiki', 'slwikibooks', 'slwikiquote', 'slwikisource', 'slwikiversity', 'slwiktionary', 'smnwiki', 'smwiki', 'smwiktionary', 'snwiki', 'sourceswiki', 'sowiki', 'sowiktionary', 'specieswiki', 'sqwiki', 'sqwikibooks', 'sqwikinews', 'sqwikiquote', 'sqwiktionary', 'srnwiki', 'srwiki', 'srwikibooks', 'srwikinews', 'srwikiquote', 'srwikisource', 'srwiktionary', 'sswiki', 'sswiktionary', 'stqwiki', 'stwiki', 'stwiktionary', 'suwiki', 'suwikiquote', 'suwikisource', 'suwiktionary', 'svwiki', 'svwikibooks', 'svwikinews', 'svwikiquote', 'svwikisource', 'svwikiversity', 'svwikivoyage', 'svwiktionary', 'swwiki', 'swwiktionary', 'sylwiki', 'szlwiki', 'szywiki', 'tawiki', 'tawikibooks', 'tawikinews', 'tawikiquote', 'tawikisource', 'tawiktionary', 'taywiki', 'tcywiki', 'tcywikisource', 'tcywiktionary', 'tddwiki', 'tewiki', 'tewikibooks', 'tewikiquote', 'tewikisource', 'tewiktionary', 'tgwiki', 'tgwikibooks', 'tgwiktionary', 'thwiki', 'thwikibooks', 'thwikimedia', 'thwikiquote', 'thwikisource', 'thwiktionary', 'tigwiki', 'tiwiki', 'tiwiktionary', 'tkwiki', 'tkwiktionary', 'tlwiki', 'tlwikibooks', 'tlwikiquote', 'tlwikisource', 'tlwiktionary', 'tlywiki', 'tnwiki', 'tnwiktionary', 'tokwiki', 'towiki', 'tpiwiki', 'tpiwiktionary', 'trvwiki', 'trwiki', 'trwikibooks', 'trwikimedia', 'trwikinews', 'trwikiquote', 'trwikisource', 'trwikivoyage', 'trwiktionary', 'tswiki', 'tswiktionary', 'ttwiki', 'ttwikibooks', 'ttwikiquote', 'ttwiktionary', 'tumwiki', 'twwiki', 'twwiktionary', 'tyvwiki', 'tywiki', 'uawikimedia', 'udmwiki', 'ugwiki', 'ugwiktionary', 'ukwiki', 'ukwikibooks', 'ukwikinews', 'ukwikiquote', 'ukwikisource', 'ukwikivoyage', 'ukwiktionary', 'urwiki', 'urwikibooks', 'urwikiquote', 'urwikisource', 'urwiktionary', 'uzwiki', 'uzwikiquote', 'uzwiktionary', 'vecwiki', 'vecwikisource', 'vecwiktionary', 'vepwiki', 'vewiki', 'viwiki', 'viwikibooks', 'viwikiquote', 'viwikisource', 'viwikivoyage', 'viwiktionary', 'vlswiki', 'vowiki', 'vowiktionary', 'warwiki', 'wawiki', 'wawikisource', 'wawiktionary', 'wikidatawiki', 'wikimaniawiki', 'wowiki', 'wowiktionary', 'wuuwiki', 'xalwiki', 'xhwiki', 'xmfwiki', 'yiwiki', 'yiwikisource', 'yiwiktionary', 'yowiki', 'zawiki', 'zeawiki', 'zghwiki', 'zghwiktionary', 'zh_classicalwiki', 'zh_min_nanwiki', 'zh_min_nanwikisource', 'zh_min_nanwiktionary', 'zh_yuewiki', 'zhwiki', 'zhwikibooks', 'zhwikinews', 'zhwikiquote', 'zhwikisource', 'zhwikiversity', 'zhwikivoyage', 'zhwiktionary', 'zuwiki', 'zuwiktionary', 'test2wiki', 'testwiki'];
const DELAY_MS = 800; // Safe balanced speed
const sleep = ms => new Promise(r => setTimeout(r, ms));
let userCache = {};
let historyCache = {};
function getDomain(db) {
const mapping = {
'commonswiki': 'commons.wikimedia.org', 'metawiki': 'meta.wikimedia.org', 'wikidatawiki': 'www.wikidata.org',
'mediawikiwiki': 'www.mediawiki.org', 'sourceswiki': 'wikisource.org', 'foundationwiki': 'foundation.wikimedia.org',
'incubatorwiki': 'incubator.wikimedia.org', 'outreachwiki': 'outreach.wikimedia.org',
'be_x_oldwiki': 'be-tarask.wikipedia.org', 'labswiki': 'wikitech.wikimedia.org',
'wikimaniawiki': 'wikimania.wikimedia.org', 'specieswiki': 'species.wikimedia.org',
'abstractwiki': 'abstract.wikipedia.org', 'betawikiversity': 'beta.wikiversity.org',
'mo_wiki': 'ro.wikipedia.org',
'testwiki': 'test.wikipedia.org', 'test2wiki': 'test2.wikipedia.org',
'wikifunctionswiki': 'www.wikifunctions.org',
'testcommonswiki': 'test-commons.wikimedia.org',
'testwikidatawiki': 'test.wikidata.org',
};
if (mapping[db]) return mapping[db];
const name = db.replace(/_/g, '-');
if (name.endsWith('wikisource')) return name.slice(0, -10) + '.wikisource.org';
if (name.endsWith('wikiversity')) return name.slice(0, -11) + '.wikiversity.org';
if (name.endsWith('wiktionary')) return name.slice(0, -10) + '.wiktionary.org';
if (name.endsWith('wikivoyage')) return name.slice(0, -10) + '.wikivoyage.org';
if (name.endsWith('wikibooks')) return name.slice(0, -9) + '.wikibooks.org';
if (name.endsWith('wikiquote')) return name.slice(0, -9) + '.wikiquote.org';
if (name.endsWith('wikinews')) return name.slice(0, -8) + '.wikinews.org';
if (name.endsWith('wikimedia')) return name.slice(0, -9) + '.wikimedia.org';
if (name.endsWith('wiki')) return name.slice(0, -4) + '.wikipedia.org';
return name + '.wikipedia.org';
}
mw.loader.using(['mediawiki.api', 'mediawiki.ForeignApi']).then(function () {
const metaApi = new mw.ForeignApi('https://meta.wikimedia.org/w/api.php', { anonymous: true });
const now = new Date();
let results = {}, emptyWikis = [], failedWikis = [], failedAQS = [], scannedWikis = [], isRunning = false;
let currentFilterMode = 'all';
let currentUserFilter = 'all';
function setupUI() {
const currentYear = now.getFullYear();
let yearOpts = '';
for (let y = currentYear; y >= 2005; y--) yearOpts += `<option value="${y}">${y}</option>`;
let monthOptsFrom = '';
let monthOptsTo = '';
for (let m = 1; m <= 12; m++) {
monthOptsFrom += `<option value="${m}" ${m === 1 ? 'selected' : ''}>${m}</option>`;
monthOptsTo += `<option value="${m}" ${m === 12 ? 'selected' : ''}>${m}</option>`;
}
$('#firstHeading').text('GlobalCheckUserStats.js');
$('#mw-content-text').empty().append(`
<div style="border:1px solid #a2a9b1; padding:15px; background:#f8f9fa;">
<h3>Stats Range</h3>
From: <select id="y-f" style="width:70px;">${yearOpts}</select> <select id="m-f" style="width:50px;">${monthOptsFrom}</select>
To: <select id="y-t" style="width:70px;">${yearOpts}</select> <select id="m-t" style="width:50px;">${monthOptsTo}</select>
<div style="margin-top:15px; display:flex; align-items:center; gap:20px; font-size:13px;">
<strong>Wiki Filter:</strong>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-all" checked> All wikis</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-except"> All wikis except</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-only"> Only these wikis</label>
<span id="wiki-help-trigger" style="cursor:help; background:#36c; color:#fff; border-radius:50%; width:18px; height:18px; display:inline-block; text-align:center; font-weight:bold; font-size:12px; line-height:18px;" title="Show all wiki DB names">?</span>
</div>
<div id="filter-input-container" style="display:none; margin-top:10px;">
<input id="wiki-filter" type="text" style="width:100%; max-width:600px;" placeholder="">
</div>
<div style="margin-top:15px; display:flex; align-items:center; gap:20px; font-size:13px;">
<strong>User Filter:</strong>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-all" checked> All users</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-local"> Only Local CUs</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-steward"> Only Stewards</label>
</div>
<div id="wiki-list-help" style="display:none; margin-top:10px; padding:10px; background:#fff; border:1px solid #a2a9b1; font-size:11px; max-height:120px; overflow-y:auto; font-family:monospace; color:#202122;">
<strong>Available Wikis (alphabetical):</strong><br>${[...rawWikis].sort().join(', ')}
</div>
<div style="margin-top:20px;">
<button id="start" class="mw-ui-button mw-ui-progressive">Run GlobalCheckUserStats.js</button>
<button id="stop" class="mw-ui-button mw-ui-destructive" disabled>Stop</button>
</div>
<div id="status-msg" style="margin-top:10px; font-weight:bold; color:#0056b3;">Ready.</div>
<div style="margin-top:5px;"><progress id="bar" value="0" max="${rawWikis.length}" style="width:100%"></progress></div>
<textarea id="out" style="width:100%; height:450px; margin-top:10px; display:none; font-family:monospace; font-size:12px;"></textarea>
</div>
`);
// Eventy pro Wiki Filter
$('#btn-all').click(() => { currentFilterMode = 'all'; $('#filter-input-container').hide(); });
$('#btn-except').click(() => { currentFilterMode = 'exclude'; $('#filter-input-container').show(); $('#wiki-filter').attr('placeholder', 'Exclude (dbname1, dbname2)...').focus(); });
$('#btn-only').click(() => { currentFilterMode = 'include'; $('#filter-input-container').show(); $('#wiki-filter').attr('placeholder', 'Only (dbname1, dbname2)...').focus(); });
// Eventy pro User Filter
$('#u-all').click(() => { currentUserFilter = 'all'; });
$('#u-local').click(() => { currentUserFilter = 'local'; });
$('#u-steward').click(() => { currentUserFilter = 'steward'; });
$('#wiki-help-trigger').click(() => $('#wiki-list-help').toggle());
$('#start').click(() => runAudit($('#y-f').val(), $('#m-f').val(), $('#y-t').val(), $('#m-t').val()));
$('#stop').click(() => isRunning = false);
}
async function fetchWikiMetrics(db, start, end) {
const project = getDomain(db);
const aqsStart = start.split('T')[0].replace(/-/g, '');
const aqsEnd = end.split('T')[0].replace(/-/g, '');
const fetchWithRetry = async (url) => {
let attempts = 0;
while (attempts < 5) {
try {
const res = await fetch(url);
if (res.status === 429) {
let wait = (attempts + 1) * 5000;
$('#status-msg').text(`AQS rate limit! Retrying ${db} in ${wait / 1000}s...`);
await sleep(wait); attempts++; continue;
}
if (!res.ok) return null;
return await res.json();
} catch (e) { attempts++; await sleep(2000); }
}
return null;
};
try {
const edRes = await fetchWithRetry(`https://wikimedia.org/api/rest_v1/metrics/editors/aggregate/${project}/all-editor-types/all-page-types/all-activity-levels/monthly/${aqsStart}/${aqsEnd}`);
await sleep(500);
const etRes = await fetchWithRetry(`https://wikimedia.org/api/rest_v1/metrics/edits/aggregate/${project}/all-editor-types/all-page-types/monthly/${aqsStart}/${aqsEnd}`);
if (!edRes || !etRes) { if (!failedAQS.includes(db)) failedAQS.push(db); return { avgEditors: 0, totalEdits: 0 }; }
const editors = edRes?.items || [];
const edits = etRes?.items || [];
const avgEditors = editors.length > 0 ? editors.reduce((sum, m) => sum + m.editors, 0) / editors.length : 0;
const totalEdits = edits.length > 0 ? edits.reduce((sum, m) => sum + m.edits, 0) : 0;
if (avgEditors === 0 && totalEdits === 0) { if (!failedAQS.includes(db)) failedAQS.push(db); }
return { avgEditors, totalEdits };
} catch (e) { if (!failedAQS.includes(db)) failedAQS.push(db); return { avgEditors: 0, totalEdits: 0 }; }
}
async function checkGlobalHistory(user, start, end) {
try {
const res = await metaApi.get({
action: 'query',
list: 'logevents',
letype: 'gblrights',
letitle: 'User:' + user,
lelimit: 'max',
formatversion: 2
});
const logs = res.query.logevents || [];
const auditStart = new Date(start), auditEnd = new Date(end);
let state = { steward: false, staff: false, ombuds: false };
// Najdeme poslední log před začátkem auditovaného období (výchozí stav)
const priorLogs = logs.filter(l => new Date(l.timestamp) <= auditStart)
.sort((a, b) => new Date(b.timestamp) - new Date(a.timestamp));
if (priorLogs.length > 0) {
const p = priorLogs[0].params || {};
// Sjednocení: API vrací seznam skupin buď v newGroups nebo v indexu [1]
const groupsInLog = p.newGroups || p[1] || [];
state.steward = groupsInLog.includes('steward');
state.staff = groupsInLog.includes('staff');
state.ombuds = groupsInLog.includes('ombuds');
}
let held = { wasSteward: state.steward, wasStaff: state.staff, wasOmbuds: state.ombuds };
// Projdeme logy uvnitř období – pokud se tam skupina objeví, zapneme příznak "was"
logs.filter(l => {
const ts = new Date(l.timestamp);
return ts > auditStart && ts < auditEnd;
}).forEach(e => {
const p = e.params || {};
const added = p.newGroups || p[1] || [];
if (added.includes('steward')) held.wasSteward = true;
if (added.includes('staff')) held.wasStaff = true;
if (added.includes('ombuds')) held.wasOmbuds = true;
});
return held;
} catch (e) {
return { wasSteward: false, wasStaff: false, wasOmbuds: false };
}
}
async function fetchUserData(user, db, start, end) {
// Musíme nadefinovat lokální kopie pro podmínky uvnitř
const auditStart = new Date(start);
const auditEnd = new Date(end); if (!userCache[user]) {
try {
const gres = await metaApi.get({ action: 'query', meta: 'globaluserinfo', guiprop: 'groups', guiuser: user, formatversion: 2 });
userCache[user] = gres.query.globaluserinfo.groups || [];
} catch (e) { userCache[user] = []; }
}
const gGroups = userCache[user];
const isGloballySteward = gGroups.includes('steward');
const isGloballyStaff = gGroups.includes('staff');
const isGloballyOmbuds = gGroups.includes('ombuds');
let isCurrentLocal = false;
try {
const localApi = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
const ures = await localApi.get({ action: 'query', list: 'users', ususers: user, usprop: 'groups', formatversion: 2 });
const lGroups = (ures.query.users[0] && ures.query.users[0].groups) || [];
isCurrentLocal = lGroups.includes('checkuser');
} catch (e) { /* API failure fallback */ }
const target = 'User:' + user + '@' + db;
let logText = '';
let addTime = null, removeTime = null, isSelfAssign = false;
let maxDurationMins = -1;
let longestTimeStr = "";
let assignCount = 0;
try {
const res = await metaApi.get({
action: 'query', list: 'logevents', letype: 'rights', letitle: target,
ledir: 'older', lelimit: 'max', formatversion: 2
});
const events = res.query.logevents || [];
let logEntries = [];
for (let i = 0; i < events.length; i++) {
const e = events[i], p = e.params || {};
const cuAdded = (p.add || []).includes('checkuser') || ((p.newgroups || []).includes('checkuser') && !(p.oldgroups || []).includes('checkuser'));
const cuRemoved = (p.remove || []).includes('checkuser') || (!(p.newgroups || []).includes('checkuser') && (p.oldgroups || []).includes('checkuser'));
const eventDate = new Date(e.timestamp), exactTime = e.timestamp.replace('T', ' ').replace('Z', '');
if (cuAdded || cuRemoved) {
// Pomocné proměnné pro logiku rolí (plníme vždy)
if (cuAdded) addTime = eventDate;
if (cuRemoved) {
removeTime = eventDate;
if (e.user === user || !e.user) isSelfAssign = true;
}
// Do Rights Logu v reportu zapisujeme jen události v období
if (eventDate >= auditStart && eventDate <= auditEnd) {
let durationText = "";
if (cuAdded && i > 0) {
const prevE = events[i-1], prevP = prevE.params || {};
const prevRemoved = (prevP.remove || []).includes('checkuser') || (!(prevP.newgroups || []).includes('checkuser') && (prevP.oldgroups || []).includes('checkuser'));
if (prevRemoved) {
const diffMins = Math.round(Math.abs(new Date(prevE.timestamp) - eventDate) / 60000);
const d = Math.floor(diffMins / 1440), h = Math.floor((diffMins % 1440) / 60), m = diffMins % 60;
durationText = ` (Duration: ${d > 0 ? d+'d ' : ''}${h > 0 ? h+'h ' : ''}${m}m)`;
if (diffMins > maxDurationMins) {
maxDurationMins = diffMins;
longestTimeStr = `${d > 0 ? d+'d ' : ''}${h > 0 ? h+'h ' : ''}${m}m`;
}
assignCount++;
}
}
logEntries.push(`* ${exactTime}: ${cuAdded ? "ADDED" : "REMOVED"} by ${e.user}${durationText}`);
}
}
}
if (logEntries.length) logText = '\n' + logEntries.join('\n');
} catch (err) {}
if (!historyCache[user]) historyCache[user] = await checkGlobalHistory(user, start, end);
const historyRes = historyCache[user];
let gStat = isGloballyStaff ? "Staff" : isGloballySteward ? "Steward" : isGloballyOmbuds ? "Ombudsman" : "";
let roleLabel = "";
// Definice: uživatel měl práva aspoň chvíli v našem období
let wasLocalInPeriod = (addTime && addTime <= auditEnd && (!removeTime || removeTime >= auditStart));
// --- ROZHODOVACÍ LOGIKA (v3.0 - Bez 90 dní, priorita self-assign) ---
if (isCurrentLocal) {
roleLabel = "Current Local CheckUser" + (gStat ? ` (${gStat})` : "");
}
// 1. PRIORITA: Pokud si steward (současný i bývalý) udělil práva sám, je to Steward action
else if (longestTimeStr && isSelfAssign && (isGloballySteward || historyRes.wasSteward)) {
let countInfo = assignCount > 1 ? `${assignCount}x, longest ` : "";
roleLabel = `Steward action (${countInfo}${longestTimeStr})`;
}
// 2. PRIORITA: Pokud měl práva v období (a nebyl to self-assign stewarda), je to Former Local CU
else if (wasLocalInPeriod) {
let suffix = gStat ? ` (${gStat})` : (historyRes.wasSteward ? " (Former Steward)" : "");
roleLabel = "Former Local CheckUser (in period)" + suffix;
}
// 3. PRIORITA: Ostatní krátkodobé/dočasné akce
else if (longestTimeStr) {
let countInfo = assignCount > 1 ? `${assignCount}x, longest ` : "";
roleLabel = `Temporary CU action (${countInfo}${longestTimeStr})`;
}
else if (gStat) roleLabel = `Current ${gStat}`;
else if (historyRes.wasSteward) roleLabel = "Former Steward (in period)";
else roleLabel = "Unknown role";
return { role: roleLabel, log: logText };
} // Uzavírá fetchUserData
async function runAudit(yf, mf, yt, mt) {
// ... zde pokračuje zbytek tvého kódu runAudit ...
isRunning = true;
userCache = {};
historyCache = {};
results = {};
emptyWikis = [];
failedWikis = [];
failedAQS = [];
scannedWikis = [];
const filterText = $('#wiki-filter').val().trim().toLowerCase();
const filterList = filterText ? filterText.split(',').map(s => s.trim()).filter(s => s !== "") : [];
let wikisToScan = rawWikis;
if (currentFilterMode === 'include') wikisToScan = rawWikis.filter(w => filterList.includes(w));
else if (currentFilterMode === 'exclude') wikisToScan = rawWikis.filter(w => !filterList.includes(w));
$('#start').prop('disabled', true); $('#stop').prop('disabled', false); $('#out').hide();
$('#bar').attr('max', wikisToScan.length).val(0);
const START = `${yf}-${String(mf).padStart(2, '0')}-01T00:00:00Z`;
const END = `${yt}-${String(mt).padStart(2, '0')}-${new Date(Date.UTC(yt, mt, 0)).getUTCDate().toString().padStart(2, '0')}T23:59:59Z`;
const monthCols = [];
let currY = parseInt(yf), currM = parseInt(mf);
const endY = parseInt(yt), endM = parseInt(mt);
while (currY < endY || (currY === endY && currM <= endM)) {
monthCols.push({ key: `${currY}-${String(currM).padStart(2, '0')}`, label: `${["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"][currM - 1]} ${currY}` });
currM++; if (currM > 12) { currM = 1; currY++; }
}
for (let i = 0; i < wikisToScan.length; i++) {
if (!isRunning) break;
const db = wikisToScan[i]; scannedWikis.push(db);
$('#status-msg').text(`Scanning ${db} (${i + 1}/${wikisToScan.length})...`);
let successLocal = false, continueToken = null;
while (!successLocal && isRunning) {
try {
const api = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
let params = { action: 'query', list: 'checkuserlog', culfrom: START, culto: END, culdir: 'newer', cullimit: 'max', formatversion: 2 };
if (continueToken) Object.assign(params, continueToken);
let res = await api.get(params);
const ent = res.query?.checkuserlog?.entries || [];
if (ent.length) {
if (!results[db]) results[db] = {};
ent.forEach(e => {
const u = e.checkuser;
if (!results[db][u]) results[db][u] = { total: 0, months: {} };
const mKey = e.timestamp.slice(0, 7);
results[db][u].total++; results[db][u].months[mKey] = (results[db][u].months[mKey] || 0) + 1;
});
}
if (res.continue && isRunning) continueToken = res.continue;
else { if (!results[db]) emptyWikis.push(db); successLocal = true; }
} catch (err) { if (err?.status === 429) await sleep(30000); else { failedWikis.push(db); successLocal = true; } }
}
$('#bar').val(i + 1); await sleep(DELAY_MS);
}
$('#status-msg').text(`Generating report...`);
const timestamp = new Date().toISOString().replace('T', ' ').slice(0, 19) + ' (UTC)';
let wt = `== Global CheckUser Stats (${mf}/${yf} - ${mt}/${yt}) ==\n''Report generated on: ${timestamp}''\n\n`;
let rightsLog = `\n== Rights Log (In Period) ==\n`;
let headerMonths = monthCols.map(m => `!! ${m.label}`).join(' ');
wt += `{| class="wikitable sortable" style="font-size:90%; text-align:right;"\n! Wiki / User !! Category !! '''Total''' !! per 1k users !! per 1k edits ${headerMonths}\n`;
const sortedDBs = Object.keys(results).sort();
for (const db of sortedDBs) {
const metrics = await fetchWikiMetrics(db, START, END);
const fmtEditors = Math.round(metrics.avgEditors).toLocaleString('en-US');
const fmtEdits = metrics.totalEdits.toLocaleString('en-US');
wt += `|-\n! colspan="${5 + monthCols.length}" style="background:#eaecf0; text-align:center;" | ${db} <small style="font-weight:normal; color:#54595d;">(Avg Editors: ${fmtEditors} • Edits: ${fmtEdits})</small>\n`;
let wikiRows = [], wT = 0, wMS = {}; monthCols.forEach(col => wMS[col.key] = 0);
const projectUsers = Object.keys(results[db]).sort();
for (const user of projectUsers) {
const m = await fetchUserData(user, db, START, END);
const isSteward = m.role.includes("Steward") || m.role.includes("Staff") || m.role.includes("Ombudsman");
const isLocalCU = m.role.includes("Local CheckUser");
if (currentUserFilter === 'local' && !isLocalCU) continue;
if (currentUserFilter === 'steward' && !isSteward) continue;
const uD = results[db][user];
wT += uD.total; monthCols.forEach(col => wMS[col.key] += (uD.months[col.key] || 0));
let uP1kU = metrics.avgEditors > 0 ? ((uD.total / metrics.avgEditors) * 1000).toFixed(1) : "0.0";
let uP1kE = metrics.totalEdits > 0 ? ((uD.total / metrics.totalEdits) * 1000).toFixed(2) : "0.00";
let row = `|-\n| style="text-align:left;" | ${user} || <small>${m.role}</small> || '''${uD.total}''' || ${uP1kU} || ${uP1kE}`;
monthCols.forEach(col => row += ` || ${uD.months[col.key] || 0}`);
wikiRows.push({ html: row + "\n", log: m.log ? `'''${user}@${db}''':${m.log}\n\n` : "" });
}
let wP1kU = metrics.avgEditors > 0 ? ((wT / metrics.avgEditors) * 1000).toFixed(1) : "0.0";
let wP1kE = metrics.totalEdits > 0 ? ((wT / metrics.totalEdits) * 1000).toFixed(2) : "0.00";
let totalRow = `|- style="background:#f8f9fa; font-weight:bold;"\n| style="text-align:left;" | TOTAL ${db} || — || ${wT} || ${wP1kU} || ${wP1kE}`;
monthCols.forEach(col => totalRow += ` || ${wMS[col.key]}`);
wt += totalRow + "\n";
wikiRows.forEach(r => { wt += r.html; if (r.log) rightsLog += r.log; });
}
wt += `|}\n\n== Projects with 0 actions ==\n<div style="font-size:85%; color:#54595d;">${emptyWikis.sort().join(', ')}</div>\n`;
wt += rightsLog + `\n\n<references />\n`;
$('#out').val(wt).show();
$('#status-msg').text(`Done.`); $('#start').prop('disabled', false); $('#stop').prop('disabled', true);
}
setupUI();
});
})();
mz42ocdcx3tjx7cu9255bkhv0nskg8r
737565
737563
2026-04-10T18:46:58Z
MrJaroslavik
44012
737565
javascript
text/javascript
// GlobalCheckUserStats.js
// Features:
// - Global Audit: Scans CheckUser logs across 900+ Wikimedia projects at once.
// - Smart Categorization: Identifies roles (Local CU, Steward, Staff, etc.).
// - Steward Logic: Detects temporary access, exact durations, and longest active periods.
// - Deep Scan: Automated pagination to bypass the 500-entry API limit (essential for enwiki).
// - Robust Connection: Automated retries for 429 rate-limits and custom domain mapping.
// - Full Reporting: Outputs sortable Wikitables and detailed rights change logs.
// - Custom UI: Integrated control panel on [[Special:BlankPage/GlobalCheckUserStats]].
// - With help of Gemini 3
(function () {
'use strict';
if (mw.config.get('wgCanonicalSpecialPageName') !== 'Blankpage' || mw.config.get('wgTitle').indexOf('GlobalCheckUserStats') === -1) return;
const rawWikis = ['abstractwiki', 'abwiki', 'acewiki', 'adywiki', 'afwiki', 'afwikibooks', 'afwikiquote', 'afwiktionary', 'alswiki', 'altwiki', 'amiwiki', 'amwiki', 'amwiktionary', 'angwiki', 'angwiktionary', 'annwiki', 'anpwiki', 'anwiki', 'anwiktionary', 'arcwiki', 'arwiki', 'arwikibooks', 'arwikimedia', 'arwikinews', 'arwikiquote', 'arwikisource', 'arwikiversity', 'arwiktionary', 'arywiki', 'arzwiki', 'astwiki', 'astwiktionary', 'aswiki', 'aswikiquote', 'aswikisource', 'atjwiki', 'avkwiki', 'avwiki', 'awawiki', 'aywiki', 'aywiktionary', 'azbwiki', 'azwiki', 'azwikibooks', 'azwikiquote', 'azwikisource', 'azwiktionary', 'banwiki', 'banwikisource', 'barwiki', 'bat_smgwiki', 'bawiki', 'bawikibooks', 'bbcwiki', 'bclwiki', 'bclwikiquote', 'bclwikisource', 'bclwiktionary', 'bdrwiki', 'bdwikimedia', 'be_x_oldwiki', 'betawikiversity', 'bewiki', 'bewikibooks', 'bewikimedia', 'bewikiquote', 'bewikisource', 'bewiktionary', 'bewwiki', 'bewwiktionary', 'bgwiki', 'bgwikibooks', 'bgwikiquote', 'bgwikisource', 'bgwiktionary', 'bhwiki', 'biwiki', 'bjnwiki', 'bjnwikiquote', 'bjnwiktionary', 'blkwiki', 'blkwiktionary', 'bmwiki', 'bnwiki', 'bnwikibooks', 'bnwikiquote', 'bnwikisource', 'bnwikivoyage', 'bnwiktionary', 'bowiki', 'bpywiki', 'brwiki', 'brwikimedia', 'brwikiquote', 'brwikisource', 'brwiktionary', 'bswiki', 'bswikibooks', 'bswikinews', 'bswikiquote', 'bswikisource', 'bswiktionary', 'btmwiki', 'btmwiktionary', 'bugwiki', 'bxrwiki', 'cawiki', 'cawikibooks', 'cawikimedia', 'cawikinews', 'cawikiquote', 'cawikisource', 'cawiktionary', 'cbk_zamwiki', 'cdowiki', 'cebwiki', 'cewiki', 'chrwiki', 'chrwiktionary', 'chwiki', 'chywiki', 'ckbwiki', 'ckbwiktionary', 'commonswiki', 'cowiki', 'cowikimedia', 'cowiktionary', 'crhwiki', 'csbwiki', 'csbwiktionary', 'cswiki', 'cswikibooks', 'cswikinews', 'cswikiquote', 'cswikisource', 'cswikiversity', 'cswikivoyage', 'cswiktionary', 'cuwiki', 'cvwiki', 'cvwikibooks', 'cywiki', 'cywikibooks', 'cywikiquote', 'cywikisource', 'cywiktionary', 'dagwiki', 'dawiki', 'dawikibooks', 'dawikiquote', 'dawikisource', 'dawiktionary', 'dewiki', 'dewikibooks', 'dewikinews', 'dewikiquote', 'dewikisource', 'dewikiversity', 'dewikivoyage', 'dewiktionary', 'dgawiki', 'dinwiki', 'diqwiki', 'diqwiktionary', 'dkwikimedia', 'dsbwiki', 'dtpwiki', 'dtywiki', 'dvwiki', 'dvwiktionary', 'dzwiki', 'eewiki', 'elwiki', 'elwikibooks', 'elwikinews', 'elwikiquote', 'elwikisource', 'elwikiversity', 'elwikivoyage', 'elwiktionary', 'emlwiki', 'enwiki', 'enwikibooks', 'enwikinews', 'enwikiquote', 'enwikisource', 'enwikiversity', 'enwikivoyage', 'enwiktionary', 'eowiki', 'eowikibooks', 'eowikinews', 'eowikiquote', 'eowikisource', 'eowikivoyage', 'eowiktionary', 'eswiki', 'eswikibooks', 'eswikinews', 'eswikiquote', 'eswikisource', 'eswikiversity', 'eswikivoyage', 'eswiktionary', 'etwiki', 'etwikibooks', 'eewikimedia', 'etwikiquote', 'etwikisource', 'etwiktionary', 'euwiki', 'euwikibooks', 'euwikiquote', 'euwikisource', 'euwiktionary', 'extwiki', 'fatwiki', 'fawiki', 'fawikibooks', 'fawikinews', 'fawikiquote', 'fawikisource', 'fawikivoyage', 'fawiktionary', 'ffwiki', 'fiu_vrowiki', 'fiwiki', 'fiwikibooks', 'fiwikimedia', 'fiwikinews', 'fiwikiquote', 'fiwikisource', 'fiwikiversity', 'fiwikivoyage', 'fiwiktionary', 'fjwiki', 'fjwiktionary', 'fonwiki', 'foundationwiki', 'fowiki', 'fowikisource', 'fowiktionary', 'frpwiki', 'frrwiki', 'frwiki', 'frwikibooks', 'frwikinews', 'frwikiquote', 'frwikisource', 'frwikiversity', 'frwikivoyage', 'frwiktionary', 'furwiki', 'fywiki', 'fywikibooks', 'fywiktionary', 'gagwiki', 'ganwiki', 'gawiki', 'gawiktionary', 'gcrwiki', 'gdwiki', 'gdwiktionary', 'glkwiki', 'glwiki', 'glwikibooks', 'glwikiquote', 'glwikisource', 'glwiktionary', 'gnwiki', 'gnwiktionary', 'gomwiki', 'gomwiktionary', 'gorwiki', 'gorwikiquote', 'gorwiktionary', 'gotwiki', 'gpewiki', 'gucwiki', 'gurwiki', 'guwiki', 'guwikiquote', 'guwikisource', 'guwiktionary', 'guwwiki', 'guwwikinews', 'guwwikiquote', 'guwwiktionary', 'gvwiki', 'gvwiktionary', 'hakwiki', 'hawiki', 'hawiktionary', 'hawwiki', 'hewiki', 'hewikibooks', 'hewikinews', 'hewikiquote', 'hewikisource', 'hewikivoyage', 'hewiktionary', 'hifwiki', 'hifwiktionary', 'hiwiki', 'hiwikibooks', 'hiwikiquote', 'hiwikisource', 'hiwikiversity', 'hiwikivoyage', 'hiwiktionary', 'hrwiki', 'hrwikibooks', 'hrwikiquote', 'hrwikisource', 'hrwiktionary', 'hsbwiki', 'hsbwiktionary', 'htwiki', 'huwiki', 'huwikibooks', 'huwikisource', 'huwiktionary', 'hywiki', 'hywikibooks', 'hywikiquote', 'hywikisource', 'hywiktionary', 'hywwiki', 'iawiki', 'iawikibooks', 'iawiktionary', 'ibawiki', 'idwiki', 'idwikibooks', 'idwikiquote', 'idwikisource', 'idwikivoyage', 'idwiktionary', 'iewiki', 'iewiktionary', 'iglwiki', 'igwiki', 'igwikiquote', 'igwiktionary', 'ikwiki', 'ilowiki', 'incubatorwiki', 'inhwiki', 'iowiki', 'iowiktionary', 'iswiki', 'iswikibooks', 'iswikiquote', 'iswikisource', 'iswiktionary', 'itwiki', 'itwikibooks', 'itwikinews', 'itwikiquote', 'itwikisource', 'itwikiversity', 'itwikivoyage', 'itwiktionary', 'iuwiki', 'iuwiktionary', 'jamwiki', 'jawiki', 'jawikibooks', 'jawikinews', 'jawikisource', 'jawikiversity', 'jawikivoyage', 'jawiktionary', 'jbowiki', 'jbowiktionary', 'jvwiki', 'jvwikisource', 'jvwiktionary', 'kaawiki', 'kaawiktionary', 'kabwiki', 'kaiwiki', 'kajwiki', 'kawiki', 'kawikibooks', 'kawikiquote', 'kawikisource', 'kawiktionary', 'kbdwiki', 'kbdwiktionary', 'kbpwiki', 'kcgwiki', 'kcgwiktionary', 'kgewiki', 'kgwiki', 'kiwiki', 'kkwiki', 'kkwikibooks', 'kkwiktionary', 'klwiktionary', 'kmwiki', 'kmwikibooks', 'kmwiktionary', 'kncwiki', 'knwiki', 'knwikiquote', 'knwikisource', 'knwiktionary', 'koiwiki', 'kowiki', 'kowikibooks', 'kowikinews', 'kowikiquote', 'kowikisource', 'kowikiversity', 'kowiktionary', 'krcwiki', 'kshwiki', 'kswiki', 'kswiktionary', 'kuswiki', 'kuwiki', 'kuwikibooks', 'kuwikiquote', 'kuwiktionary', 'kvwiki', 'kwwiki', 'kwwiktionary', 'kywiki', 'kywikiquote', 'kywiktionary', 'labswiki', 'ladwiki', 'lawiki', 'lawikibooks', 'lawikiquote', 'lawikisource', 'lawiktionary', 'lbewiki', 'lbwiki', 'lbwiktionary', 'lezwiki', 'lfnwiki', 'lgwiki', 'lijwiki', 'lijwikisource', 'liwiki', 'liwikibooks', 'liwikinews', 'liwikiquote', 'liwikisource', 'liwiktionary', 'lldwiki', 'lmowiki', 'lmowiktionary', 'lnwiki', 'lnwiktionary', 'lowiki', 'lowiktionary', 'ltgwiki', 'ltwiki', 'ltwikibooks', 'ltwikiquote', 'ltwikisource', 'ltwiktionary', 'lvwiki', 'lvwiktionary', 'madwiki', 'madwikisource', 'madwiktionary', 'maiwiki', 'map_bmswiki', 'mdfwiki', 'mediawikiwiki', 'metawiki', 'mgwiki', 'mgwikibooks', 'mgwiktionary', 'mhrwiki', 'minwiki', 'minwikibooks', 'minwikisource', 'minwiktionary', 'miwiki', 'miwiktionary', 'mkwiki', 'mkwikibooks', 'mkwikimedia', 'mkwikisource', 'mkwiktionary', 'mlwiki', 'mlwikibooks', 'mlwikiquote', 'mlwikisource', 'mlwiktionary', 'mniwiki', 'mniwiktionary', 'mnwiki', 'mnwiktionary', 'mnwwiki', 'mnwwiktionary', 'moswiki', 'mrjwiki', 'mrwiki', 'mrwikibooks', 'mrwikiquote', 'mrwikisource', 'mrwiktionary', 'mswiki', 'mswikibooks', 'mswikiquote', 'mswikisource', 'mswiktionary', 'mtwiki', 'mtwiktionary', 'mwlwiki', 'mxwikimedia', 'myvwiki', 'mywiki', 'mywikisource', 'mywiktionary', 'mznwiki', 'nahwiki', 'nahwiktionary', 'napwiki', 'napwikisource', 'nawiktionary', 'nds_nlwiki', 'ndswiki', 'ndswiktionary', 'newiki', 'newikibooks', 'newiktionary', 'newwiki', 'niawiki', 'niawiktionary', 'nlwiki', 'nlwikibooks', 'nlwikimedia', 'nlwikinews', 'nlwikiquote', 'nlwikisource', 'nlwikivoyage', 'nlwiktionary', 'nnwiki', 'nnwikiquote', 'nnwiktionary', 'novwiki', 'nowiki', 'nowikibooks', 'nowikimedia', 'nowikinews', 'nowikiquote', 'nowikisource', 'nowiktionary', 'nqowiki', 'nrmwiki', 'nrwiki', 'nsowiki', 'nupwiki', 'nvwiki', 'nycwikimedia', 'nywiki', 'ocwiki', 'ocwikibooks', 'ocwiktionary', 'olowiki', 'omwiki', 'omwiktionary', 'orwiki', 'orwikisource', 'orwiktionary', 'oswiki', 'outreachwiki', 'pagwiki', 'pamwiki', 'papwiki', 'pawiki', 'pawikibooks', 'pawikisource', 'pawiktionary', 'pcdwiki', 'pcmwiki', 'pcmwikiquote', 'pdcwiki', 'pflwiki', 'piwiki', 'plwiki', 'plwikibooks', 'plwikimedia', 'plwikinews', 'plwikiquote', 'plwikisource', 'plwikivoyage', 'plwiktionary', 'pmswiki', 'pmswikisource', 'pnbwiki', 'pnbwiktionary', 'pntwiki', 'pplwiki', 'pswiki', 'pswikivoyage', 'pswiktionary', 'ptwiki', 'ptwikibooks', 'ptwikimedia', 'ptwikinews', 'ptwikiquote', 'ptwikisource', 'ptwikiversity', 'ptwikivoyage', 'ptwiktionary', 'pwnwiki', 'quwiktionary', 'rkiwiki', 'rmwiki', 'rmywiki', 'rnwiki', 'roa_rupwiki', 'roa_rupwiktionary', 'roa_tarawiki', 'rowiki', 'rowikibooks', 'rowikinews', 'rowikiquote', 'rowiktionary', 'rskwiki', 'ruewiki', 'ruwiki', 'ruwikibooks', 'ruwikinews', 'ruwikiquote', 'ruwikisource', 'ruwikiversity', 'ruwikivoyage', 'ruwiktionary', 'rwwiki', 'rwwiktionary', 'sahwiki', 'sahwikiquote', 'sahwikisource', 'satwiki', 'satwiktionary', 'sawiki', 'sawikibooks', 'sawikiquote', 'sawikisource', 'sawiktionary', 'scnwiki', 'scnwiktionary', 'scowiki', 'scwiki', 'sdwiki', 'sdwiktionary', 'sewiki', 'sewikimedia', 'sgwiki', 'sgwiktionary', 'shiwiki', 'shnwiki', 'shnwikibooks', 'shnwikinews', 'shnwikivoyage', 'shnwiktionary', 'shwiki', 'shwiktionary', 'shywiktionary', 'simplewiki', 'simplewiktionary', 'siwiki', 'siwikibooks', 'siwiktionary', 'skwiki', 'skrwiki', 'skrwiktionary', 'slwiki', 'slwikibooks', 'slwikiquote', 'slwikisource', 'slwikiversity', 'slwiktionary', 'smnwiki', 'smwiki', 'smwiktionary', 'snwiki', 'sourceswiki', 'sowiki', 'sowiktionary', 'specieswiki', 'sqwiki', 'sqwikibooks', 'sqwikinews', 'sqwikiquote', 'sqwiktionary', 'srnwiki', 'srwiki', 'srwikibooks', 'srwikinews', 'srwikiquote', 'srwikisource', 'srwiktionary', 'sswiki', 'sswiktionary', 'stqwiki', 'stwiki', 'stwiktionary', 'suwiki', 'suwikiquote', 'suwikisource', 'suwiktionary', 'svwiki', 'svwikibooks', 'svwikinews', 'svwikiquote', 'svwikisource', 'svwikiversity', 'svwikivoyage', 'svwiktionary', 'swwiki', 'swwiktionary', 'sylwiki', 'szlwiki', 'szywiki', 'tawiki', 'tawikibooks', 'tawikinews', 'tawikiquote', 'tawikisource', 'tawiktionary', 'taywiki', 'tcywiki', 'tcywikisource', 'tcywiktionary', 'tddwiki', 'tewiki', 'tewikibooks', 'tewikiquote', 'tewikisource', 'tewiktionary', 'tgwiki', 'tgwikibooks', 'tgwiktionary', 'thwiki', 'thwikibooks', 'thwikimedia', 'thwikiquote', 'thwikisource', 'thwiktionary', 'tigwiki', 'tiwiki', 'tiwiktionary', 'tkwiki', 'tkwiktionary', 'tlwiki', 'tlwikibooks', 'tlwikiquote', 'tlwikisource', 'tlwiktionary', 'tlywiki', 'tnwiki', 'tnwiktionary', 'tokwiki', 'towiki', 'tpiwiki', 'tpiwiktionary', 'trvwiki', 'trwiki', 'trwikibooks', 'trwikimedia', 'trwikinews', 'trwikiquote', 'trwikisource', 'trwikivoyage', 'trwiktionary', 'tswiki', 'tswiktionary', 'ttwiki', 'ttwikibooks', 'ttwikiquote', 'ttwiktionary', 'tumwiki', 'twwiki', 'twwiktionary', 'tyvwiki', 'tywiki', 'uawikimedia', 'udmwiki', 'ugwiki', 'ugwiktionary', 'ukwiki', 'ukwikibooks', 'ukwikinews', 'ukwikiquote', 'ukwikisource', 'ukwikivoyage', 'ukwiktionary', 'urwiki', 'urwikibooks', 'urwikiquote', 'urwikisource', 'urwiktionary', 'uzwiki', 'uzwikiquote', 'uzwiktionary', 'vecwiki', 'vecwikisource', 'vecwiktionary', 'vepwiki', 'vewiki', 'viwiki', 'viwikibooks', 'viwikiquote', 'viwikisource', 'viwikivoyage', 'viwiktionary', 'vlswiki', 'vowiki', 'vowiktionary', 'warwiki', 'wawiki', 'wawikisource', 'wawiktionary', 'wikidatawiki', 'wikimaniawiki', 'wowiki', 'wowiktionary', 'wuuwiki', 'xalwiki', 'xhwiki', 'xmfwiki', 'yiwiki', 'yiwikisource', 'yiwiktionary', 'yowiki', 'zawiki', 'zeawiki', 'zghwiki', 'zghwiktionary', 'zh_classicalwiki', 'zh_min_nanwiki', 'zh_min_nanwikisource', 'zh_min_nanwiktionary', 'zh_yuewiki', 'zhwiki', 'zhwikibooks', 'zhwikinews', 'zhwikiquote', 'zhwikisource', 'zhwikiversity', 'zhwikivoyage', 'zhwiktionary', 'zuwiki', 'zuwiktionary', 'test2wiki', 'testwiki'];
const DELAY_MS = 800; // Safe balanced speed
const sleep = ms => new Promise(r => setTimeout(r, ms));
let userCache = {};
let historyCache = {};
function getDomain(db) {
const mapping = {
'commonswiki': 'commons.wikimedia.org', 'metawiki': 'meta.wikimedia.org', 'wikidatawiki': 'www.wikidata.org',
'mediawikiwiki': 'www.mediawiki.org', 'sourceswiki': 'wikisource.org', 'foundationwiki': 'foundation.wikimedia.org',
'incubatorwiki': 'incubator.wikimedia.org', 'outreachwiki': 'outreach.wikimedia.org',
'be_x_oldwiki': 'be-tarask.wikipedia.org', 'labswiki': 'wikitech.wikimedia.org',
'wikimaniawiki': 'wikimania.wikimedia.org', 'specieswiki': 'species.wikimedia.org',
'abstractwiki': 'abstract.wikipedia.org', 'betawikiversity': 'beta.wikiversity.org',
'mo_wiki': 'ro.wikipedia.org',
'testwiki': 'test.wikipedia.org', 'test2wiki': 'test2.wikipedia.org',
'wikifunctionswiki': 'www.wikifunctions.org',
'testcommonswiki': 'test-commons.wikimedia.org',
'testwikidatawiki': 'test.wikidata.org',
};
if (mapping[db]) return mapping[db];
const name = db.replace(/_/g, '-');
if (name.endsWith('wikisource')) return name.slice(0, -10) + '.wikisource.org';
if (name.endsWith('wikiversity')) return name.slice(0, -11) + '.wikiversity.org';
if (name.endsWith('wiktionary')) return name.slice(0, -10) + '.wiktionary.org';
if (name.endsWith('wikivoyage')) return name.slice(0, -10) + '.wikivoyage.org';
if (name.endsWith('wikibooks')) return name.slice(0, -9) + '.wikibooks.org';
if (name.endsWith('wikiquote')) return name.slice(0, -9) + '.wikiquote.org';
if (name.endsWith('wikinews')) return name.slice(0, -8) + '.wikinews.org';
if (name.endsWith('wikimedia')) return name.slice(0, -9) + '.wikimedia.org';
if (name.endsWith('wiki')) return name.slice(0, -4) + '.wikipedia.org';
return name + '.wikipedia.org';
}
mw.loader.using(['mediawiki.api', 'mediawiki.ForeignApi']).then(function () {
const metaApi = new mw.ForeignApi('https://meta.wikimedia.org/w/api.php', { anonymous: true });
const now = new Date();
let results = {}, emptyWikis = [], failedWikis = [], failedAQS = [], scannedWikis = [], isRunning = false;
let currentFilterMode = 'all';
let currentUserFilter = 'all';
function setupUI() {
const currentYear = now.getFullYear();
let yearOpts = '';
for (let y = currentYear; y >= 2005; y--) yearOpts += `<option value="${y}">${y}</option>`;
let monthOptsFrom = '';
let monthOptsTo = '';
for (let m = 1; m <= 12; m++) {
monthOptsFrom += `<option value="${m}" ${m === 1 ? 'selected' : ''}>${m}</option>`;
monthOptsTo += `<option value="${m}" ${m === 12 ? 'selected' : ''}>${m}</option>`;
}
$('#firstHeading').text('GlobalCheckUserStats.js');
$('#mw-content-text').empty().append(`
<div style="border:1px solid #a2a9b1; padding:15px; background:#f8f9fa;">
<h3>Stats Range</h3>
From: <select id="y-f" style="width:70px;">${yearOpts}</select> <select id="m-f" style="width:50px;">${monthOptsFrom}</select>
To: <select id="y-t" style="width:70px;">${yearOpts}</select> <select id="m-t" style="width:50px;">${monthOptsTo}</select>
<div style="margin-top:15px; display:flex; align-items:center; gap:20px; font-size:13px;">
<strong>Wiki Filter:</strong>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-all" checked> All wikis</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-except"> All wikis except</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-only"> Only these wikis</label>
<span id="wiki-help-trigger" style="cursor:help; background:#36c; color:#fff; border-radius:50%; width:18px; height:18px; display:inline-block; text-align:center; font-weight:bold; font-size:12px; line-height:18px;" title="Show all wiki DB names">?</span>
</div>
<div id="filter-input-container" style="display:none; margin-top:10px;">
<input id="wiki-filter" type="text" style="width:100%; max-width:600px;" placeholder="">
</div>
<div style="margin-top:15px; display:flex; align-items:center; gap:20px; font-size:13px;">
<strong>User Filter:</strong>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-all" checked> All users</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-local"> Only Local CUs</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-steward"> Only Stewards</label>
</div>
<div id="wiki-list-help" style="display:none; margin-top:10px; padding:10px; background:#fff; border:1px solid #a2a9b1; font-size:11px; max-height:120px; overflow-y:auto; font-family:monospace; color:#202122;">
<strong>Available Wikis (alphabetical):</strong><br>${[...rawWikis].sort().join(', ')}
</div>
<div style="margin-top:20px;">
<button id="start" class="mw-ui-button mw-ui-progressive">Run GlobalCheckUserStats.js</button>
<button id="stop" class="mw-ui-button mw-ui-destructive" disabled>Stop</button>
</div>
<div id="status-msg" style="margin-top:10px; font-weight:bold; color:#0056b3;">Ready.</div>
<div style="margin-top:5px;"><progress id="bar" value="0" max="${rawWikis.length}" style="width:100%"></progress></div>
<textarea id="out" style="width:100%; height:450px; margin-top:10px; display:none; font-family:monospace; font-size:12px;"></textarea>
</div>
`);
// Eventy pro Wiki Filter
$('#btn-all').click(() => { currentFilterMode = 'all'; $('#filter-input-container').hide(); });
$('#btn-except').click(() => { currentFilterMode = 'exclude'; $('#filter-input-container').show(); $('#wiki-filter').attr('placeholder', 'Exclude (dbname1, dbname2)...').focus(); });
$('#btn-only').click(() => { currentFilterMode = 'include'; $('#filter-input-container').show(); $('#wiki-filter').attr('placeholder', 'Only (dbname1, dbname2)...').focus(); });
// Eventy pro User Filter
$('#u-all').click(() => { currentUserFilter = 'all'; });
$('#u-local').click(() => { currentUserFilter = 'local'; });
$('#u-steward').click(() => { currentUserFilter = 'steward'; });
$('#wiki-help-trigger').click(() => $('#wiki-list-help').toggle());
$('#start').click(() => runAudit($('#y-f').val(), $('#m-f').val(), $('#y-t').val(), $('#m-t').val()));
$('#stop').click(() => isRunning = false);
}
async function fetchWikiMetrics(db, start, end) {
const project = getDomain(db);
const aqsStart = start.split('T')[0].replace(/-/g, '');
const aqsEnd = end.split('T')[0].replace(/-/g, '');
const fetchWithRetry = async (url) => {
let attempts = 0;
while (attempts < 5) {
try {
const res = await fetch(url);
if (res.status === 429) {
let wait = (attempts + 1) * 5000;
$('#status-msg').text(`AQS rate limit! Retrying ${db} in ${wait / 1000}s...`);
await sleep(wait); attempts++; continue;
}
if (!res.ok) return null;
return await res.json();
} catch (e) { attempts++; await sleep(2000); }
}
return null;
};
try {
const edRes = await fetchWithRetry(`https://wikimedia.org/api/rest_v1/metrics/editors/aggregate/${project}/all-editor-types/all-page-types/all-activity-levels/monthly/${aqsStart}/${aqsEnd}`);
await sleep(500);
const etRes = await fetchWithRetry(`https://wikimedia.org/api/rest_v1/metrics/edits/aggregate/${project}/all-editor-types/all-page-types/monthly/${aqsStart}/${aqsEnd}`);
if (!edRes || !etRes) { if (!failedAQS.includes(db)) failedAQS.push(db); return { avgEditors: 0, totalEdits: 0 }; }
const editors = edRes?.items || [];
const edits = etRes?.items || [];
const avgEditors = editors.length > 0 ? editors.reduce((sum, m) => sum + m.editors, 0) / editors.length : 0;
const totalEdits = edits.length > 0 ? edits.reduce((sum, m) => sum + m.edits, 0) : 0;
if (avgEditors === 0 && totalEdits === 0) { if (!failedAQS.includes(db)) failedAQS.push(db); }
return { avgEditors, totalEdits };
} catch (e) { if (!failedAQS.includes(db)) failedAQS.push(db); return { avgEditors: 0, totalEdits: 0 }; }
}
async function checkGlobalHistory(user, start, end) {
try {
const res = await metaApi.get({
action: 'query',
list: 'logevents',
letype: 'gblrights',
letitle: 'User:' + user,
lelimit: 'max',
formatversion: 2
});
const logs = res.query.logevents || [];
const auditStart = new Date(start), auditEnd = new Date(end);
let state = { steward: false, staff: false, ombuds: false };
// Najdeme poslední log před začátkem auditovaného období (výchozí stav)
const priorLogs = logs.filter(l => new Date(l.timestamp) <= auditStart)
.sort((a, b) => new Date(b.timestamp) - new Date(a.timestamp));
if (priorLogs.length > 0) {
const p = priorLogs[0].params || {};
// Sjednocení: API vrací seznam skupin buď v newGroups nebo v indexu [1]
const groupsInLog = p.newGroups || p[1] || [];
state.steward = groupsInLog.includes('steward');
state.staff = groupsInLog.includes('staff');
state.ombuds = groupsInLog.includes('ombuds');
}
let held = { wasSteward: state.steward, wasStaff: state.staff, wasOmbuds: state.ombuds };
// Projdeme logy uvnitř období – pokud se tam skupina objeví, zapneme příznak "was"
logs.filter(l => {
const ts = new Date(l.timestamp);
return ts > auditStart && ts < auditEnd;
}).forEach(e => {
const p = e.params || {};
const added = p.newGroups || p[1] || [];
if (added.includes('steward')) held.wasSteward = true;
if (added.includes('staff')) held.wasStaff = true;
if (added.includes('ombuds')) held.wasOmbuds = true;
});
return held;
} catch (e) {
return { wasSteward: false, wasStaff: false, wasOmbuds: false };
}
}
async function fetchUserData(user, db, start, end) {
// Musíme nadefinovat lokální kopie pro podmínky uvnitř
const auditStart = new Date(start);
const auditEnd = new Date(end); if (!userCache[user]) {
try {
const gres = await metaApi.get({ action: 'query', meta: 'globaluserinfo', guiprop: 'groups', guiuser: user, formatversion: 2 });
userCache[user] = gres.query.globaluserinfo.groups || [];
} catch (e) { userCache[user] = []; }
}
const gGroups = userCache[user];
const isGloballySteward = gGroups.includes('steward');
const isGloballyStaff = gGroups.includes('staff');
const isGloballyOmbuds = gGroups.includes('ombuds');
let isCurrentLocal = false;
try {
const localApi = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
const ures = await localApi.get({ action: 'query', list: 'users', ususers: user, usprop: 'groups', formatversion: 2 });
const lGroups = (ures.query.users[0] && ures.query.users[0].groups) || [];
isCurrentLocal = lGroups.includes('checkuser');
} catch (e) { /* API failure fallback */ }
const target = 'User:' + user + '@' + db;
let logText = '';
let addTime = null, removeTime = null, isSelfAssign = false;
let maxDurationMins = -1;
let longestTimeStr = "";
let assignCount = 0;
try {
const res = await metaApi.get({
action: 'query', list: 'logevents', letype: 'rights', letitle: target,
ledir: 'older', lelimit: 'max', formatversion: 2
});
const events = res.query.logevents || [];
let logEntries = [];
let pendingRemoved = null;
const LIMIT_COMBINE_MINS = 43200; // 30 dní
for (let i = 0; i < events.length; i++) {
const e = events[i], p = e.params || {};
const cuAdded = (p.add || []).includes('checkuser') || ((p.newgroups || []).includes('checkuser') && !(p.oldgroups || []).includes('checkuser'));
const cuRemoved = (p.remove || []).includes('checkuser') || (!(p.newgroups || []).includes('checkuser') && (p.oldgroups || []).includes('checkuser'));
const eventDate = new Date(e.timestamp), exactTime = e.timestamp.replace('T', ' ').replace('Z', '');
if (cuAdded || cuRemoved) {
if (cuAdded) addTime = eventDate;
if (cuRemoved) {
removeTime = eventDate;
if (e.user === user || !e.user) isSelfAssign = true;
}
if (eventDate >= auditStart && eventDate <= auditEnd) {
const isSelf = (e.user === user) ? " (Self-assign)" : "";
if (cuRemoved) {
// Pokud narazíme na REMOVED, podržíme ho a vypíšeme až po kontrole dalšího záznamu
if (pendingRemoved) {
logEntries.push(`* ${pendingRemoved.time}: REMOVED by ${pendingRemoved.user}${pendingRemoved.isSelf}`);
}
pendingRemoved = { time: exactTime, date: eventDate, user: e.user, isSelf: isSelf };
}
else if (cuAdded) {
if (pendingRemoved) {
const diffMins = Math.round(Math.abs(pendingRemoved.date - eventDate) / 60000);
const d = Math.floor(diffMins / 1440), h = Math.floor((diffMins % 1440) / 60), m = diffMins % 60;
const durStr = `${d > 0 ? d+'d ' : ''}${h > 0 ? h+'h ' : ''}${m}m`;
if (diffMins <= LIMIT_COMBINE_MINS) {
// Spojíme do jednoho řádku (Short-term do 30 dnů)
logEntries.push(`* ${exactTime}: ADDED/REMOVED by ${e.user}${isSelf} (Duration: ${durStr})`);
pendingRemoved = null;
} else {
// Nad 30 dnů - vypíšeme jako samostatné události
logEntries.push(`* ${pendingRemoved.time}: REMOVED by ${pendingRemoved.user}${pendingRemoved.isSelf}`);
logEntries.push(`* ${exactTime}: ADDED by ${e.user}${isSelf} (Duration: ${durStr})`);
pendingRemoved = null;
}
if (diffMins > maxDurationMins) {
maxDurationMins = diffMins;
longestTimeStr = durStr;
}
assignCount++;
} else {
// Samostatné ADDED (REMOVED nebylo v období nalezeno)
logEntries.push(`* ${exactTime}: ADDED by ${e.user}${isSelf} (Duration: Unknown/Not removed)`);
}
}
}
}
}
if (pendingRemoved) {
logEntries.push(`* ${pendingRemoved.time}: REMOVED by ${pendingRemoved.user}${pendingRemoved.isSelf}`);
}
if (logEntries.length) logText = '\n' + logEntries.join('\n');
} catch (err) {}
if (!historyCache[user]) historyCache[user] = await checkGlobalHistory(user, start, end);
const historyRes = historyCache[user];
let gStat = isGloballyStaff ? "Staff" : isGloballySteward ? "Steward" : isGloballyOmbuds ? "Ombudsman" : "";
let roleLabel = "";
// Definice: uživatel měl práva aspoň chvíli v našem období
let wasLocalInPeriod = (addTime && addTime <= auditEnd && (!removeTime || removeTime >= auditStart));
// --- ROZHODOVACÍ LOGIKA (v3.0 - Bez 90 dní, priorita self-assign) ---
if (isCurrentLocal) {
roleLabel = "Current Local CheckUser" + (gStat ? ` (${gStat})` : "");
}
// 1. PRIORITA: Pokud si steward (současný i bývalý) udělil práva sám, je to Steward action
else if (longestTimeStr && isSelfAssign && (isGloballySteward || historyRes.wasSteward)) {
let countInfo = assignCount > 1 ? `${assignCount}x, longest ` : "";
roleLabel = `Steward action (${countInfo}${longestTimeStr})`;
}
// 2. PRIORITA: Pokud měl práva v období (a nebyl to self-assign stewarda), je to Former Local CU
else if (wasLocalInPeriod) {
let suffix = gStat ? ` (${gStat})` : (historyRes.wasSteward ? " (Former Steward)" : "");
roleLabel = "Former Local CheckUser (in period)" + suffix;
}
// 3. PRIORITA: Ostatní krátkodobé/dočasné akce
else if (longestTimeStr) {
let countInfo = assignCount > 1 ? `${assignCount}x, longest ` : "";
roleLabel = `Temporary CU action (${countInfo}${longestTimeStr})`;
}
else if (gStat) roleLabel = `Current ${gStat}`;
else if (historyRes.wasSteward) roleLabel = "Former Steward (in period)";
else roleLabel = "Unknown role";
return { role: roleLabel, log: logText };
} // Uzavírá fetchUserData
async function runAudit(yf, mf, yt, mt) {
// ... zde pokračuje zbytek tvého kódu runAudit ...
isRunning = true;
userCache = {};
historyCache = {};
results = {};
emptyWikis = [];
failedWikis = [];
failedAQS = [];
scannedWikis = [];
const filterText = $('#wiki-filter').val().trim().toLowerCase();
const filterList = filterText ? filterText.split(',').map(s => s.trim()).filter(s => s !== "") : [];
let wikisToScan = rawWikis;
if (currentFilterMode === 'include') wikisToScan = rawWikis.filter(w => filterList.includes(w));
else if (currentFilterMode === 'exclude') wikisToScan = rawWikis.filter(w => !filterList.includes(w));
$('#start').prop('disabled', true); $('#stop').prop('disabled', false); $('#out').hide();
$('#bar').attr('max', wikisToScan.length).val(0);
const START = `${yf}-${String(mf).padStart(2, '0')}-01T00:00:00Z`;
const END = `${yt}-${String(mt).padStart(2, '0')}-${new Date(Date.UTC(yt, mt, 0)).getUTCDate().toString().padStart(2, '0')}T23:59:59Z`;
const monthCols = [];
let currY = parseInt(yf), currM = parseInt(mf);
const endY = parseInt(yt), endM = parseInt(mt);
while (currY < endY || (currY === endY && currM <= endM)) {
monthCols.push({ key: `${currY}-${String(currM).padStart(2, '0')}`, label: `${["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"][currM - 1]} ${currY}` });
currM++; if (currM > 12) { currM = 1; currY++; }
}
for (let i = 0; i < wikisToScan.length; i++) {
if (!isRunning) break;
const db = wikisToScan[i]; scannedWikis.push(db);
$('#status-msg').text(`Scanning ${db} (${i + 1}/${wikisToScan.length})...`);
let successLocal = false, continueToken = null;
while (!successLocal && isRunning) {
try {
const api = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
let params = { action: 'query', list: 'checkuserlog', culfrom: START, culto: END, culdir: 'newer', cullimit: 'max', formatversion: 2 };
if (continueToken) Object.assign(params, continueToken);
let res = await api.get(params);
const ent = res.query?.checkuserlog?.entries || [];
if (ent.length) {
if (!results[db]) results[db] = {};
ent.forEach(e => {
const u = e.checkuser;
if (!results[db][u]) results[db][u] = { total: 0, months: {} };
const mKey = e.timestamp.slice(0, 7);
results[db][u].total++; results[db][u].months[mKey] = (results[db][u].months[mKey] || 0) + 1;
});
}
if (res.continue && isRunning) continueToken = res.continue;
else { if (!results[db]) emptyWikis.push(db); successLocal = true; }
} catch (err) { if (err?.status === 429) await sleep(30000); else { failedWikis.push(db); successLocal = true; } }
}
$('#bar').val(i + 1); await sleep(DELAY_MS);
}
$('#status-msg').text(`Generating report...`);
const timestamp = new Date().toISOString().replace('T', ' ').slice(0, 19) + ' (UTC)';
let wt = `== Global CheckUser Stats (${mf}/${yf} - ${mt}/${yt}) ==\n''Report generated on: ${timestamp}''\n\n`;
let rightsLog = `\n== Rights Log (In Period) ==\n`;
let headerMonths = monthCols.map(m => `!! ${m.label}`).join(' ');
wt += `{| class="wikitable sortable" style="font-size:90%; text-align:right;"\n! Wiki / User !! Category !! '''Total''' !! per 1k users !! per 1k edits ${headerMonths}\n`;
const sortedDBs = Object.keys(results).sort();
for (const db of sortedDBs) {
const metrics = await fetchWikiMetrics(db, START, END);
const fmtEditors = Math.round(metrics.avgEditors).toLocaleString('en-US');
const fmtEdits = metrics.totalEdits.toLocaleString('en-US');
wt += `|-\n! colspan="${5 + monthCols.length}" style="background:#eaecf0; text-align:center;" | ${db} <small style="font-weight:normal; color:#54595d;">(Avg Editors: ${fmtEditors} • Edits: ${fmtEdits})</small>\n`;
let wikiRows = [], wT = 0, wMS = {}; monthCols.forEach(col => wMS[col.key] = 0);
const projectUsers = Object.keys(results[db]).sort();
for (const user of projectUsers) {
const m = await fetchUserData(user, db, START, END);
const isSteward = m.role.includes("Steward") || m.role.includes("Staff") || m.role.includes("Ombudsman");
const isLocalCU = m.role.includes("Local CheckUser");
if (currentUserFilter === 'local' && !isLocalCU) continue;
if (currentUserFilter === 'steward' && !isSteward) continue;
const uD = results[db][user];
wT += uD.total; monthCols.forEach(col => wMS[col.key] += (uD.months[col.key] || 0));
let uP1kU = metrics.avgEditors > 0 ? ((uD.total / metrics.avgEditors) * 1000).toFixed(1) : "0.0";
let uP1kE = metrics.totalEdits > 0 ? ((uD.total / metrics.totalEdits) * 1000).toFixed(2) : "0.00";
let row = `|-\n| style="text-align:left;" | ${user} || <small>${m.role}</small> || '''${uD.total}''' || ${uP1kU} || ${uP1kE}`;
monthCols.forEach(col => row += ` || ${uD.months[col.key] || 0}`);
wikiRows.push({ html: row + "\n", log: m.log ? `'''${user}@${db}''':${m.log}\n\n` : "" });
}
let wP1kU = metrics.avgEditors > 0 ? ((wT / metrics.avgEditors) * 1000).toFixed(1) : "0.0";
let wP1kE = metrics.totalEdits > 0 ? ((wT / metrics.totalEdits) * 1000).toFixed(2) : "0.00";
let totalRow = `|- style="background:#f8f9fa; font-weight:bold;"\n| style="text-align:left;" | TOTAL ${db} || — || ${wT} || ${wP1kU} || ${wP1kE}`;
monthCols.forEach(col => totalRow += ` || ${wMS[col.key]}`);
wt += totalRow + "\n";
wikiRows.forEach(r => { wt += r.html; if (r.log) rightsLog += r.log; });
}
wt += `|}\n\n== Projects with 0 actions ==\n<div style="font-size:85%; color:#54595d;">${emptyWikis.sort().join(', ')}</div>\n`;
wt += rightsLog + `\n\n<references />\n`;
$('#out').val(wt).show();
$('#status-msg').text(`Done.`); $('#start').prop('disabled', false); $('#stop').prop('disabled', true);
}
setupUI();
});
})();
eloous21tt4e0gk2a993qzkvzq38zgx
737567
737565
2026-04-10T19:53:38Z
MrJaroslavik
44012
e
737567
javascript
text/javascript
// GlobalCheckUserStats.js
// Features:
// - Global Audit: Scans CheckUser logs across 900+ Wikimedia projects at once.
// - Smart Categorization: Identifies roles (Local CU, Steward, Staff, etc.).
// - Steward Logic: Detects temporary access, exact durations, and longest active periods.
// - Deep Scan: Automated pagination to bypass the 500-entry API limit (essential for enwiki).
// - Robust Connection: Automated retries for 429 rate-limits and custom domain mapping.
// - Full Reporting: Outputs sortable Wikitables and detailed rights change logs.
// - Custom UI: Integrated control panel on [[Special:BlankPage/GlobalCheckUserStats]].
// - With help of Gemini 3
(function () {
'use strict';
if (mw.config.get('wgCanonicalSpecialPageName') !== 'Blankpage' || mw.config.get('wgTitle').indexOf('GlobalCheckUserStats') === -1) return;
const rawWikis = ['abstractwiki', 'abwiki', 'acewiki', 'adywiki', 'afwiki', 'afwikibooks', 'afwikiquote', 'afwiktionary', 'alswiki', 'altwiki', 'amiwiki', 'amwiki', 'amwiktionary', 'angwiki', 'angwiktionary', 'annwiki', 'anpwiki', 'anwiki', 'anwiktionary', 'arcwiki', 'arwiki', 'arwikibooks', 'arwikimedia', 'arwikinews', 'arwikiquote', 'arwikisource', 'arwikiversity', 'arwiktionary', 'arywiki', 'arzwiki', 'astwiki', 'astwiktionary', 'aswiki', 'aswikiquote', 'aswikisource', 'atjwiki', 'avkwiki', 'avwiki', 'awawiki', 'aywiki', 'aywiktionary', 'azbwiki', 'azwiki', 'azwikibooks', 'azwikiquote', 'azwikisource', 'azwiktionary', 'banwiki', 'banwikisource', 'barwiki', 'bat_smgwiki', 'bawiki', 'bawikibooks', 'bbcwiki', 'bclwiki', 'bclwikiquote', 'bclwikisource', 'bclwiktionary', 'bdrwiki', 'bdwikimedia', 'be_x_oldwiki', 'betawikiversity', 'bewiki', 'bewikibooks', 'bewikimedia', 'bewikiquote', 'bewikisource', 'bewiktionary', 'bewwiki', 'bewwiktionary', 'bgwiki', 'bgwikibooks', 'bgwikiquote', 'bgwikisource', 'bgwiktionary', 'bhwiki', 'biwiki', 'bjnwiki', 'bjnwikiquote', 'bjnwiktionary', 'blkwiki', 'blkwiktionary', 'bmwiki', 'bnwiki', 'bnwikibooks', 'bnwikiquote', 'bnwikisource', 'bnwikivoyage', 'bnwiktionary', 'bowiki', 'bpywiki', 'brwiki', 'brwikimedia', 'brwikiquote', 'brwikisource', 'brwiktionary', 'bswiki', 'bswikibooks', 'bswikinews', 'bswikiquote', 'bswikisource', 'bswiktionary', 'btmwiki', 'btmwiktionary', 'bugwiki', 'bxrwiki', 'cawiki', 'cawikibooks', 'cawikimedia', 'cawikinews', 'cawikiquote', 'cawikisource', 'cawiktionary', 'cbk_zamwiki', 'cdowiki', 'cebwiki', 'cewiki', 'chrwiki', 'chrwiktionary', 'chwiki', 'chywiki', 'ckbwiki', 'ckbwiktionary', 'commonswiki', 'cowiki', 'cowikimedia', 'cowiktionary', 'crhwiki', 'csbwiki', 'csbwiktionary', 'cswiki', 'cswikibooks', 'cswikinews', 'cswikiquote', 'cswikisource', 'cswikiversity', 'cswikivoyage', 'cswiktionary', 'cuwiki', 'cvwiki', 'cvwikibooks', 'cywiki', 'cywikibooks', 'cywikiquote', 'cywikisource', 'cywiktionary', 'dagwiki', 'dawiki', 'dawikibooks', 'dawikiquote', 'dawikisource', 'dawiktionary', 'dewiki', 'dewikibooks', 'dewikinews', 'dewikiquote', 'dewikisource', 'dewikiversity', 'dewikivoyage', 'dewiktionary', 'dgawiki', 'dinwiki', 'diqwiki', 'diqwiktionary', 'dkwikimedia', 'dsbwiki', 'dtpwiki', 'dtywiki', 'dvwiki', 'dvwiktionary', 'dzwiki', 'eewiki', 'elwiki', 'elwikibooks', 'elwikinews', 'elwikiquote', 'elwikisource', 'elwikiversity', 'elwikivoyage', 'elwiktionary', 'emlwiki', 'enwiki', 'enwikibooks', 'enwikinews', 'enwikiquote', 'enwikisource', 'enwikiversity', 'enwikivoyage', 'enwiktionary', 'eowiki', 'eowikibooks', 'eowikinews', 'eowikiquote', 'eowikisource', 'eowikivoyage', 'eowiktionary', 'eswiki', 'eswikibooks', 'eswikinews', 'eswikiquote', 'eswikisource', 'eswikiversity', 'eswikivoyage', 'eswiktionary', 'etwiki', 'etwikibooks', 'eewikimedia', 'etwikiquote', 'etwikisource', 'etwiktionary', 'euwiki', 'euwikibooks', 'euwikiquote', 'euwikisource', 'euwiktionary', 'extwiki', 'fatwiki', 'fawiki', 'fawikibooks', 'fawikinews', 'fawikiquote', 'fawikisource', 'fawikivoyage', 'fawiktionary', 'ffwiki', 'fiu_vrowiki', 'fiwiki', 'fiwikibooks', 'fiwikimedia', 'fiwikinews', 'fiwikiquote', 'fiwikisource', 'fiwikiversity', 'fiwikivoyage', 'fiwiktionary', 'fjwiki', 'fjwiktionary', 'fonwiki', 'foundationwiki', 'fowiki', 'fowikisource', 'fowiktionary', 'frpwiki', 'frrwiki', 'frwiki', 'frwikibooks', 'frwikinews', 'frwikiquote', 'frwikisource', 'frwikiversity', 'frwikivoyage', 'frwiktionary', 'furwiki', 'fywiki', 'fywikibooks', 'fywiktionary', 'gagwiki', 'ganwiki', 'gawiki', 'gawiktionary', 'gcrwiki', 'gdwiki', 'gdwiktionary', 'glkwiki', 'glwiki', 'glwikibooks', 'glwikiquote', 'glwikisource', 'glwiktionary', 'gnwiki', 'gnwiktionary', 'gomwiki', 'gomwiktionary', 'gorwiki', 'gorwikiquote', 'gorwiktionary', 'gotwiki', 'gpewiki', 'gucwiki', 'gurwiki', 'guwiki', 'guwikiquote', 'guwikisource', 'guwiktionary', 'guwwiki', 'guwwikinews', 'guwwikiquote', 'guwwiktionary', 'gvwiki', 'gvwiktionary', 'hakwiki', 'hawiki', 'hawiktionary', 'hawwiki', 'hewiki', 'hewikibooks', 'hewikinews', 'hewikiquote', 'hewikisource', 'hewikivoyage', 'hewiktionary', 'hifwiki', 'hifwiktionary', 'hiwiki', 'hiwikibooks', 'hiwikiquote', 'hiwikisource', 'hiwikiversity', 'hiwikivoyage', 'hiwiktionary', 'hrwiki', 'hrwikibooks', 'hrwikiquote', 'hrwikisource', 'hrwiktionary', 'hsbwiki', 'hsbwiktionary', 'htwiki', 'huwiki', 'huwikibooks', 'huwikisource', 'huwiktionary', 'hywiki', 'hywikibooks', 'hywikiquote', 'hywikisource', 'hywiktionary', 'hywwiki', 'iawiki', 'iawikibooks', 'iawiktionary', 'ibawiki', 'idwiki', 'idwikibooks', 'idwikiquote', 'idwikisource', 'idwikivoyage', 'idwiktionary', 'iewiki', 'iewiktionary', 'iglwiki', 'igwiki', 'igwikiquote', 'igwiktionary', 'ikwiki', 'ilowiki', 'incubatorwiki', 'inhwiki', 'iowiki', 'iowiktionary', 'iswiki', 'iswikibooks', 'iswikiquote', 'iswikisource', 'iswiktionary', 'itwiki', 'itwikibooks', 'itwikinews', 'itwikiquote', 'itwikisource', 'itwikiversity', 'itwikivoyage', 'itwiktionary', 'iuwiki', 'iuwiktionary', 'jamwiki', 'jawiki', 'jawikibooks', 'jawikinews', 'jawikisource', 'jawikiversity', 'jawikivoyage', 'jawiktionary', 'jbowiki', 'jbowiktionary', 'jvwiki', 'jvwikisource', 'jvwiktionary', 'kaawiki', 'kaawiktionary', 'kabwiki', 'kaiwiki', 'kajwiki', 'kawiki', 'kawikibooks', 'kawikiquote', 'kawikisource', 'kawiktionary', 'kbdwiki', 'kbdwiktionary', 'kbpwiki', 'kcgwiki', 'kcgwiktionary', 'kgewiki', 'kgwiki', 'kiwiki', 'kkwiki', 'kkwikibooks', 'kkwiktionary', 'klwiktionary', 'kmwiki', 'kmwikibooks', 'kmwiktionary', 'kncwiki', 'knwiki', 'knwikiquote', 'knwikisource', 'knwiktionary', 'koiwiki', 'kowiki', 'kowikibooks', 'kowikinews', 'kowikiquote', 'kowikisource', 'kowikiversity', 'kowiktionary', 'krcwiki', 'kshwiki', 'kswiki', 'kswiktionary', 'kuswiki', 'kuwiki', 'kuwikibooks', 'kuwikiquote', 'kuwiktionary', 'kvwiki', 'kwwiki', 'kwwiktionary', 'kywiki', 'kywikiquote', 'kywiktionary', 'labswiki', 'ladwiki', 'lawiki', 'lawikibooks', 'lawikiquote', 'lawikisource', 'lawiktionary', 'lbewiki', 'lbwiki', 'lbwiktionary', 'lezwiki', 'lfnwiki', 'lgwiki', 'lijwiki', 'lijwikisource', 'liwiki', 'liwikibooks', 'liwikinews', 'liwikiquote', 'liwikisource', 'liwiktionary', 'lldwiki', 'lmowiki', 'lmowiktionary', 'lnwiki', 'lnwiktionary', 'lowiki', 'lowiktionary', 'ltgwiki', 'ltwiki', 'ltwikibooks', 'ltwikiquote', 'ltwikisource', 'ltwiktionary', 'lvwiki', 'lvwiktionary', 'madwiki', 'madwikisource', 'madwiktionary', 'maiwiki', 'map_bmswiki', 'mdfwiki', 'mediawikiwiki', 'metawiki', 'mgwiki', 'mgwikibooks', 'mgwiktionary', 'mhrwiki', 'minwiki', 'minwikibooks', 'minwikisource', 'minwiktionary', 'miwiki', 'miwiktionary', 'mkwiki', 'mkwikibooks', 'mkwikimedia', 'mkwikisource', 'mkwiktionary', 'mlwiki', 'mlwikibooks', 'mlwikiquote', 'mlwikisource', 'mlwiktionary', 'mniwiki', 'mniwiktionary', 'mnwiki', 'mnwiktionary', 'mnwwiki', 'mnwwiktionary', 'moswiki', 'mrjwiki', 'mrwiki', 'mrwikibooks', 'mrwikiquote', 'mrwikisource', 'mrwiktionary', 'mswiki', 'mswikibooks', 'mswikiquote', 'mswikisource', 'mswiktionary', 'mtwiki', 'mtwiktionary', 'mwlwiki', 'mxwikimedia', 'myvwiki', 'mywiki', 'mywikisource', 'mywiktionary', 'mznwiki', 'nahwiki', 'nahwiktionary', 'napwiki', 'napwikisource', 'nawiktionary', 'nds_nlwiki', 'ndswiki', 'ndswiktionary', 'newiki', 'newikibooks', 'newiktionary', 'newwiki', 'niawiki', 'niawiktionary', 'nlwiki', 'nlwikibooks', 'nlwikimedia', 'nlwikinews', 'nlwikiquote', 'nlwikisource', 'nlwikivoyage', 'nlwiktionary', 'nnwiki', 'nnwikiquote', 'nnwiktionary', 'novwiki', 'nowiki', 'nowikibooks', 'nowikimedia', 'nowikinews', 'nowikiquote', 'nowikisource', 'nowiktionary', 'nqowiki', 'nrmwiki', 'nrwiki', 'nsowiki', 'nupwiki', 'nvwiki', 'nycwikimedia', 'nywiki', 'ocwiki', 'ocwikibooks', 'ocwiktionary', 'olowiki', 'omwiki', 'omwiktionary', 'orwiki', 'orwikisource', 'orwiktionary', 'oswiki', 'outreachwiki', 'pagwiki', 'pamwiki', 'papwiki', 'pawiki', 'pawikibooks', 'pawikisource', 'pawiktionary', 'pcdwiki', 'pcmwiki', 'pcmwikiquote', 'pdcwiki', 'pflwiki', 'piwiki', 'plwiki', 'plwikibooks', 'plwikimedia', 'plwikinews', 'plwikiquote', 'plwikisource', 'plwikivoyage', 'plwiktionary', 'pmswiki', 'pmswikisource', 'pnbwiki', 'pnbwiktionary', 'pntwiki', 'pplwiki', 'pswiki', 'pswikivoyage', 'pswiktionary', 'ptwiki', 'ptwikibooks', 'ptwikimedia', 'ptwikinews', 'ptwikiquote', 'ptwikisource', 'ptwikiversity', 'ptwikivoyage', 'ptwiktionary', 'pwnwiki', 'quwiktionary', 'rkiwiki', 'rmwiki', 'rmywiki', 'rnwiki', 'roa_rupwiki', 'roa_rupwiktionary', 'roa_tarawiki', 'rowiki', 'rowikibooks', 'rowikinews', 'rowikiquote', 'rowiktionary', 'rskwiki', 'ruewiki', 'ruwiki', 'ruwikibooks', 'ruwikinews', 'ruwikiquote', 'ruwikisource', 'ruwikiversity', 'ruwikivoyage', 'ruwiktionary', 'rwwiki', 'rwwiktionary', 'sahwiki', 'sahwikiquote', 'sahwikisource', 'satwiki', 'satwiktionary', 'sawiki', 'sawikibooks', 'sawikiquote', 'sawikisource', 'sawiktionary', 'scnwiki', 'scnwiktionary', 'scowiki', 'scwiki', 'sdwiki', 'sdwiktionary', 'sewiki', 'sewikimedia', 'sgwiki', 'sgwiktionary', 'shiwiki', 'shnwiki', 'shnwikibooks', 'shnwikinews', 'shnwikivoyage', 'shnwiktionary', 'shwiki', 'shwiktionary', 'shywiktionary', 'simplewiki', 'simplewiktionary', 'siwiki', 'siwikibooks', 'siwiktionary', 'skwiki', 'skrwiki', 'skrwiktionary', 'slwiki', 'slwikibooks', 'slwikiquote', 'slwikisource', 'slwikiversity', 'slwiktionary', 'smnwiki', 'smwiki', 'smwiktionary', 'snwiki', 'sourceswiki', 'sowiki', 'sowiktionary', 'specieswiki', 'sqwiki', 'sqwikibooks', 'sqwikinews', 'sqwikiquote', 'sqwiktionary', 'srnwiki', 'srwiki', 'srwikibooks', 'srwikinews', 'srwikiquote', 'srwikisource', 'srwiktionary', 'sswiki', 'sswiktionary', 'stqwiki', 'stwiki', 'stwiktionary', 'suwiki', 'suwikiquote', 'suwikisource', 'suwiktionary', 'svwiki', 'svwikibooks', 'svwikinews', 'svwikiquote', 'svwikisource', 'svwikiversity', 'svwikivoyage', 'svwiktionary', 'swwiki', 'swwiktionary', 'sylwiki', 'szlwiki', 'szywiki', 'tawiki', 'tawikibooks', 'tawikinews', 'tawikiquote', 'tawikisource', 'tawiktionary', 'taywiki', 'tcywiki', 'tcywikisource', 'tcywiktionary', 'tddwiki', 'tewiki', 'tewikibooks', 'tewikiquote', 'tewikisource', 'tewiktionary', 'tgwiki', 'tgwikibooks', 'tgwiktionary', 'thwiki', 'thwikibooks', 'thwikimedia', 'thwikiquote', 'thwikisource', 'thwiktionary', 'tigwiki', 'tiwiki', 'tiwiktionary', 'tkwiki', 'tkwiktionary', 'tlwiki', 'tlwikibooks', 'tlwikiquote', 'tlwikisource', 'tlwiktionary', 'tlywiki', 'tnwiki', 'tnwiktionary', 'tokwiki', 'towiki', 'tpiwiki', 'tpiwiktionary', 'trvwiki', 'trwiki', 'trwikibooks', 'trwikimedia', 'trwikinews', 'trwikiquote', 'trwikisource', 'trwikivoyage', 'trwiktionary', 'tswiki', 'tswiktionary', 'ttwiki', 'ttwikibooks', 'ttwikiquote', 'ttwiktionary', 'tumwiki', 'twwiki', 'twwiktionary', 'tyvwiki', 'tywiki', 'uawikimedia', 'udmwiki', 'ugwiki', 'ugwiktionary', 'ukwiki', 'ukwikibooks', 'ukwikinews', 'ukwikiquote', 'ukwikisource', 'ukwikivoyage', 'ukwiktionary', 'urwiki', 'urwikibooks', 'urwikiquote', 'urwikisource', 'urwiktionary', 'uzwiki', 'uzwikiquote', 'uzwiktionary', 'vecwiki', 'vecwikisource', 'vecwiktionary', 'vepwiki', 'vewiki', 'viwiki', 'viwikibooks', 'viwikiquote', 'viwikisource', 'viwikivoyage', 'viwiktionary', 'vlswiki', 'vowiki', 'vowiktionary', 'warwiki', 'wawiki', 'wawikisource', 'wawiktionary', 'wikidatawiki', 'wikimaniawiki', 'wowiki', 'wowiktionary', 'wuuwiki', 'xalwiki', 'xhwiki', 'xmfwiki', 'yiwiki', 'yiwikisource', 'yiwiktionary', 'yowiki', 'zawiki', 'zeawiki', 'zghwiki', 'zghwiktionary', 'zh_classicalwiki', 'zh_min_nanwiki', 'zh_min_nanwikisource', 'zh_min_nanwiktionary', 'zh_yuewiki', 'zhwiki', 'zhwikibooks', 'zhwikinews', 'zhwikiquote', 'zhwikisource', 'zhwikiversity', 'zhwikivoyage', 'zhwiktionary', 'zuwiki', 'zuwiktionary', 'test2wiki', 'testwiki'];
const DELAY_MS = 800;
const sleep = ms => new Promise(r => setTimeout(r, ms));
let userCache = {};
let historyCache = {};
function getDomain(db) {
const mapping = {
'commonswiki': 'commons.wikimedia.org', 'metawiki': 'meta.wikimedia.org', 'wikidatawiki': 'www.wikidata.org',
'mediawikiwiki': 'www.mediawiki.org', 'sourceswiki': 'wikisource.org', 'foundationwiki': 'foundation.wikimedia.org',
'incubatorwiki': 'incubator.wikimedia.org', 'outreachwiki': 'outreach.wikimedia.org',
'be_x_oldwiki': 'be-tarask.wikipedia.org', 'labswiki': 'wikitech.wikimedia.org',
'wikimaniawiki': 'wikimania.wikimedia.org', 'specieswiki': 'species.wikimedia.org',
'abstractwiki': 'abstract.wikipedia.org', 'betawikiversity': 'beta.wikiversity.org',
'mo_wiki': 'ro.wikipedia.org',
'testwiki': 'test.wikipedia.org', 'test2wiki': 'test2.wikipedia.org',
'wikifunctionswiki': 'www.wikifunctions.org',
'testcommonswiki': 'test-commons.wikimedia.org',
'testwikidatawiki': 'test.wikidata.org',
};
if (mapping[db]) return mapping[db];
const name = db.replace(/_/g, '-');
if (name.endsWith('wikisource')) return name.slice(0, -10) + '.wikisource.org';
if (name.endsWith('wikiversity')) return name.slice(0, -11) + '.wikiversity.org';
if (name.endsWith('wiktionary')) return name.slice(0, -10) + '.wiktionary.org';
if (name.endsWith('wikivoyage')) return name.slice(0, -10) + '.wikivoyage.org';
if (name.endsWith('wikibooks')) return name.slice(0, -9) + '.wikibooks.org';
if (name.endsWith('wikiquote')) return name.slice(0, -9) + '.wikiquote.org';
if (name.endsWith('wikinews')) return name.slice(0, -8) + '.wikinews.org';
if (name.endsWith('wikimedia')) return name.slice(0, -9) + '.wikimedia.org';
if (name.endsWith('wiki')) return name.slice(0, -4) + '.wikipedia.org';
return name + '.wikipedia.org';
}
mw.loader.using(['mediawiki.api', 'mediawiki.ForeignApi']).then(function () {
const metaApi = new mw.ForeignApi('[https://meta.wikimedia.org/w/api.php](https://meta.wikimedia.org/w/api.php)', { anonymous: true });
const now = new Date();
let results = {}, emptyWikis = [], failedWikis = [], scannedWikis = [], isRunning = false;
let currentFilterMode = 'all';
let currentUserFilter = 'all';
function setupUI() {
const currentYear = now.getFullYear();
let yearOpts = '';
for (let y = currentYear; y >= 2005; y--) yearOpts += `<option value="${y}">${y}</option>`;
let monthOptsFrom = '';
let monthOptsTo = '';
for (let m = 1; m <= 12; m++) {
monthOptsFrom += `<option value="${m}" ${m === 1 ? 'selected' : ''}>${m}</option>`;
monthOptsTo += `<option value="${m}" ${m === 12 ? 'selected' : ''}>${m}</option>`;
}
$('#firstHeading').text('GlobalCheckUserStats.js');
$('#mw-content-text').empty().append(`
<div style="border:1px solid #a2a9b1; padding:15px; background:#f8f9fa;">
<h3>Stats Range</h3>
From: <select id="y-f" style="width:70px;">${yearOpts}</select> <select id="m-f" style="width:50px;">${monthOptsFrom}</select>
To: <select id="y-t" style="width:70px;">${yearOpts}</select> <select id="m-t" style="width:50px;">${monthOptsTo}</select>
<div style="margin-top:15px; display:flex; align-items:center; gap:20px; font-size:13px;">
<strong>Wiki Filter:</strong>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-all" checked> All wikis</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-except"> All wikis except</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-only"> Only these wikis</label>
<span id="wiki-help-trigger" style="cursor:help; background:#36c; color:#fff; border-radius:50%; width:18px; height:18px; display:inline-block; text-align:center; font-weight:bold; font-size:12px; line-height:18px;" title="Show all wiki DB names">?</span>
</div>
<div id="filter-input-container" style="display:none; margin-top:10px;">
<input id="wiki-filter" type="text" style="width:100%; max-width:600px;" placeholder="">
</div>
<div style="margin-top:15px; display:flex; align-items:center; gap:20px; font-size:13px;">
<strong>User Filter:</strong>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-all" checked> All users</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-local"> Only Local CUs</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-steward"> Only Stewards</label>
</div>
<div id="wiki-list-help" style="display:none; margin-top:10px; padding:10px; background:#fff; border:1px solid #a2a9b1; font-size:11px; max-height:120px; overflow-y:auto; font-family:monospace; color:#202122;">
<strong>Available Wikis (alphabetical):</strong><br>${[...rawWikis].sort().join(', ')}
</div>
<div style="margin-top:20px;">
<button id="start" class="mw-ui-button mw-ui-progressive">Run GlobalCheckUserStats.js</button>
<button id="stop" class="mw-ui-button mw-ui-destructive" disabled>Stop</button>
</div>
<div id="status-msg" style="margin-top:10px; font-weight:bold; color:#0056b3;">Ready.</div>
<div style="margin-top:5px;"><progress id="bar" value="0" max="${rawWikis.length}" style="width:100%"></progress></div>
<textarea id="out" style="width:100%; height:450px; margin-top:10px; display:none; font-family:monospace; font-size:12px;"></textarea>
</div>
`);
$('#btn-all').click(() => { currentFilterMode = 'all'; $('#filter-input-container').hide(); });
$('#btn-except').click(() => { currentFilterMode = 'exclude'; $('#filter-input-container').show(); $('#wiki-filter').attr('placeholder', 'Exclude (dbname1, dbname2)...').focus(); });
$('#btn-only').click(() => { currentFilterMode = 'include'; $('#filter-input-container').show(); $('#wiki-filter').attr('placeholder', 'Only (dbname1, dbname2)...').focus(); });
$('#u-all').click(() => { currentUserFilter = 'all'; });
$('#u-local').click(() => { currentUserFilter = 'local'; });
$('#u-steward').click(() => { currentUserFilter = 'steward'; });
$('#wiki-help-trigger').click(() => $('#wiki-list-help').toggle());
$('#start').click(() => runAudit($('#y-f').val(), $('#m-f').val(), $('#y-t').val(), $('#m-t').val()));
$('#stop').click(() => isRunning = false);
}
async function fetchWikiMetrics(db) {
try {
const api = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
const res = await api.get({
action: 'query', meta: 'siteinfo', siprop: 'statistics', formatversion: 2
});
return { active: res.query.statistics.activeusers || 0 };
} catch (e) { return { active: 0 }; }
}
async function checkGlobalHistory(user, start, end) {
try {
const res = await metaApi.get({
action: 'query', list: 'logevents', letype: 'gblrights', letitle: 'User:' + user, lelimit: 'max', formatversion: 2
});
const logs = res.query.logevents || [];
const auditStart = new Date(start), auditEnd = new Date(end);
let state = { steward: false, staff: false, ombuds: false };
const priorLogs = logs.filter(l => new Date(l.timestamp) <= auditStart).sort((a, b) => new Date(b.timestamp) - new Date(a.timestamp));
if (priorLogs.length > 0) {
const p = priorLogs[0].params || {};
const groupsInLog = p.newGroups || p[1] || [];
state.steward = groupsInLog.includes('steward');
state.staff = groupsInLog.includes('staff');
state.ombuds = groupsInLog.includes('ombuds');
}
let held = { wasSteward: state.steward, wasStaff: state.staff, wasOmbuds: state.ombuds };
logs.filter(l => { const ts = new Date(l.timestamp); return ts > auditStart && ts < auditEnd; }).forEach(e => {
const p = e.params || {};
const added = p.newGroups || p[1] || [];
if (added.includes('steward')) held.wasSteward = true;
if (added.includes('staff')) held.wasStaff = true;
if (added.includes('ombuds')) held.wasOmbuds = true;
});
return held;
} catch (e) { return { wasSteward: false, wasStaff: false, wasOmbuds: false }; }
}
async function fetchUserData(user, db, start, end) {
const auditStart = new Date(start), auditEnd = new Date(end);
if (!userCache[user]) {
try {
const gres = await metaApi.get({ action: 'query', meta: 'globaluserinfo', guiprop: 'groups', guiuser: user, formatversion: 2 });
userCache[user] = gres.query.globaluserinfo.groups || [];
} catch (e) { userCache[user] = []; }
}
const gGroups = userCache[user];
const isGloballySteward = gGroups.includes('steward'), isGloballyStaff = gGroups.includes('staff'), isGloballyOmbuds = gGroups.includes('ombuds');
let isCurrentLocal = false;
try {
const localApi = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
const ures = await localApi.get({ action: 'query', list: 'users', ususers: user, usprop: 'groups', formatversion: 2 });
const lGroups = (ures.query.users[0] && ures.query.users[0].groups) || [];
isCurrentLocal = lGroups.includes('checkuser');
} catch (e) {}
const target = 'User:' + user + '@' + db;
let logText = '', addTime = null, removeTime = null, isSelfAssign = false, maxDurationMins = -1, longestTimeStr = "", assignCount = 0;
try {
const res = await metaApi.get({ action: 'query', list: 'logevents', letype: 'rights', letitle: target, ledir: 'older', lelimit: 'max', formatversion: 2 });
const events = res.query.logevents || [];
let logEntries = [];
let pendingRemoved = null;
const LIMIT_COMBINE_MINS = 43200; // 30 dní
for (let i = 0; i < events.length; i++) {
const e = events[i], p = e.params || {};
const cuAdded = (p.add || []).includes('checkuser') || ((p.newgroups || []).includes('checkuser') && !(p.oldgroups || []).includes('checkuser'));
const cuRemoved = (p.remove || []).includes('checkuser') || (!(p.newgroups || []).includes('checkuser') && (p.oldgroups || []).includes('checkuser'));
const eventDate = new Date(e.timestamp), exactTime = e.timestamp.replace('T', ' ').replace('Z', '');
if (cuAdded || cuRemoved) {
if (cuAdded) addTime = eventDate;
if (cuRemoved) {
removeTime = eventDate;
if (e.user === user || !e.user) isSelfAssign = true;
}
if (eventDate >= auditStart && eventDate <= auditEnd) {
const isSelf = (e.user === user) ? " (Self-assign)" : "";
if (cuRemoved) {
if (pendingRemoved) logEntries.push(`* ${pendingRemoved.time}: REMOVED by ${pendingRemoved.user}${pendingRemoved.isSelf}`);
pendingRemoved = { time: exactTime, date: eventDate, user: e.user, isSelf: isSelf };
} else if (cuAdded) {
if (pendingRemoved) {
const diffMins = Math.round(Math.abs(pendingRemoved.date - eventDate) / 60000);
const d = Math.floor(diffMins / 1440), h = Math.floor((diffMins % 1440) / 60), m = diffMins % 60;
const durStr = `${d > 0 ? d+'d ' : ''}${h > 0 ? h+'h ' : ''}${m}m`;
if (diffMins <= LIMIT_COMBINE_MINS) {
logEntries.push(`* ${exactTime}: ADDED/REMOVED by ${e.user}${isSelf} (Duration: ${durStr})`);
pendingRemoved = null;
} else {
logEntries.push(`* ${pendingRemoved.time}: REMOVED by ${pendingRemoved.user}${pendingRemoved.isSelf}`);
logEntries.push(`* ${exactTime}: ADDED by ${e.user}${isSelf} (Duration: ${durStr})`);
pendingRemoved = null;
}
if (diffMins > maxDurationMins) { maxDurationMins = diffMins; longestTimeStr = durStr; }
assignCount++;
} else { logEntries.push(`* ${exactTime}: ADDED by ${e.user}${isSelf} (Duration: Unknown/Not removed)`); }
}
}
}
}
if (pendingRemoved) logEntries.push(`* ${pendingRemoved.time}: REMOVED by ${pendingRemoved.user}${pendingRemoved.isSelf}`);
if (logEntries.length) logText = '\n' + logEntries.join('\n');
} catch (err) {}
if (!historyCache[user]) historyCache[user] = await checkGlobalHistory(user, start, end);
const historyRes = historyCache[user];
let wasLocalInPeriod = (addTime && addTime <= auditEnd && (!removeTime || removeTime >= auditStart));
let gStat = isGloballyStaff ? "Staff" : isGloballySteward ? "Steward" : isGloballyOmbuds ? "Ombudsman" : "";
let roleLabel = "";
if (isCurrentLocal) roleLabel = "Current Local CheckUser" + (gStat ? ` (${gStat})` : "");
else if (longestTimeStr && isSelfAssign && (isGloballySteward || historyRes.wasSteward)) {
roleLabel = `Steward action (Self-assign: ${assignCount > 1 ? assignCount + 'x, longest ' : ''}${longestTimeStr})`;
}
else if (wasLocalInPeriod) {
let suffix = gStat ? ` (${gStat})` : (historyRes.wasSteward ? " (Former Steward)" : "");
roleLabel = "Former Local CheckUser (in period)" + suffix;
}
else if (longestTimeStr) roleLabel = `Temporary CU action (${longestTimeStr})`;
else if (gStat) roleLabel = `Current ${gStat}`;
else if (historyRes.wasSteward) roleLabel = "Former Steward (in period)";
else roleLabel = "Unknown role";
return { role: roleLabel, log: logText };
}
async function runAudit(yf, mf, yt, mt) {
isRunning = true; userCache = {}; historyCache = {}; results = {}; emptyWikis = []; failedWikis = []; scannedWikis = [];
const filterText = $('#wiki-filter').val().trim().toLowerCase();
const filterList = filterText ? filterText.split(',').map(s => s.trim()).filter(s => s !== "") : [];
let wikisToScan = rawWikis;
if (currentFilterMode === 'include') wikisToScan = rawWikis.filter(w => filterList.includes(w));
else if (currentFilterMode === 'exclude') wikisToScan = rawWikis.filter(w => !filterList.includes(w));
if (wikisToScan.length === 0) { alert("No wikis selected!"); return; }
$('#start').prop('disabled', true); $('#stop').prop('disabled', false); $('#out').hide();
$('#bar').attr('max', wikisToScan.length).val(0);
const START = `${yf}-${String(mf).padStart(2, '0')}-01T00:00:00Z`;
const END = `${yt}-${String(mt).padStart(2, '0')}-${new Date(Date.UTC(yt, mt, 0)).getUTCDate().toString().padStart(2, '0')}T23:59:59Z`;
const monthCols = [];
let currY = parseInt(yf), currM = parseInt(mf), endY = parseInt(yt), endM = parseInt(mt);
while (currY < endY || (currY === endY && currM <= endM)) {
monthCols.push({ key: `${currY}-${String(currM).padStart(2, '0')}`, label: `${["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"][currM - 1]} ${currY}` });
currM++; if (currM > 12) { currM = 1; currY++; }
}
for (let i = 0; i < wikisToScan.length; i++) {
if (!isRunning) break;
const db = wikisToScan[i]; scannedWikis.push(db);
$('#status-msg').text(`Scanning ${db} (${i + 1}/${wikisToScan.length})...`);
let successLocal = false, continueToken = null;
while (!successLocal && isRunning) {
try {
const api = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
let params = { action: 'query', list: 'checkuserlog', culfrom: START, culto: END, culdir: 'newer', cullimit: 'max', formatversion: 2 };
if (continueToken) Object.assign(params, continueToken);
let res = await api.get(params);
const ent = res.query?.checkuserlog?.entries || [];
if (ent.length) {
if (!results[db]) results[db] = {};
ent.forEach(e => {
const u = e.checkuser;
if (!results[db][u]) results[db][u] = { total: 0, months: {} };
const mKey = e.timestamp.slice(0, 7);
results[db][u].total++; results[db][u].months[mKey] = (results[db][u].months[mKey] || 0) + 1;
});
}
if (res.continue && isRunning) continueToken = res.continue;
else { if (!results[db]) emptyWikis.push(db); successLocal = true; }
} catch (err) { if (err?.status === 429) await sleep(30000); else { failedWikis.push(db); successLocal = true; } }
}
$('#bar').val(i + 1); await sleep(DELAY_MS);
}
$('#status-msg').text(`Generating report...`);
const today = new Date().toISOString().split('T')[0];
const timestamp = new Date().toISOString().replace('T', ' ').slice(0, 19) + ' (UTC)';
let wt = `== Global CheckUser Stats (${mf}/${yf} - ${mt}/${yt}) ==\n''Report generated on: ${timestamp}''\n\n`;
let rightsLog = `\n== Rights Log (In Period) ==\n`;
wt += `{| class="wikitable sortable" style="font-size:90%; text-align:right;"\n! Wiki / User !! Category !! '''Total''' !! per 1k active users ${monthCols.map(m => `!! ${m.label}`).join(' ')}\n`;
const sortedDBs = Object.keys(results).sort();
for (const db of sortedDBs) {
const metrics = await fetchWikiMetrics(db);
const fmtActive = metrics.active.toLocaleString('en-US');
wt += `|-\n! colspan="${4 + monthCols.length}" style="background:#eaecf0; text-align:center;" | ${db} <small style="font-weight:normal; color:#54595d;">(Active Users as of ${today}: ${fmtActive})</small>\n`;
let wikiRows = [], wT = 0, wMS = {}; monthCols.forEach(col => wMS[col.key] = 0);
const projectUsers = Object.keys(results[db]).sort();
for (const user of projectUsers) {
const m = await fetchUserData(user, db, START, END);
const isSteward = m.role.includes("Steward") || m.role.includes("Staff") || m.role.includes("Ombudsman");
const isLocalCU = m.role.includes("Local CheckUser");
if (currentUserFilter === 'local' && !isLocalCU) continue;
if (currentUserFilter === 'steward' && !isSteward) continue;
const uD = results[db][user];
wT += uD.total; monthCols.forEach(col => wMS[col.key] += (uD.months[col.key] || 0));
let uP1kU = metrics.active > 0 ? ((uD.total / metrics.active) * 1000).toFixed(1) : "0.0";
let row = `|-\n| style="text-align:left;" | ${user} || <small>${m.role}</small> || '''${uD.total}''' || ${uP1kU}`;
monthCols.forEach(col => row += ` || ${uD.months[col.key] || 0}`);
wikiRows.push({ html: row + "\n", log: m.log ? `'''${user}@${db}''':${m.log}\n\n` : "" });
}
let wP1kU = metrics.active > 0 ? ((wT / metrics.active) * 1000).toFixed(1) : "0.0";
let totalRow = `|- style="background:#f8f9fa; font-weight:bold;"\n| style="text-align:left;" | TOTAL ${db} || — || ${wT} || ${wP1kU}`;
monthCols.forEach(col => totalRow += ` || ${wMS[col.key]}`);
wt += totalRow + "\n";
wikiRows.forEach(r => { wt += r.html; if (r.log) rightsLog += r.log; });
}
wt += `|}\n\n== Projects with 0 actions ==\n<div style="font-size:85%; color:#54595d;">${emptyWikis.sort().join(', ')}</div>\n`;
wt += rightsLog + `\n\n<references />\n`;
$('#out').val(wt).show();
$('#status-msg').text(`Done.`); $('#start').prop('disabled', false); $('#stop').prop('disabled', true);
}
setupUI();
});
})();
itoccxclylbkknw8hpxbzgzo6axu6k3
737568
737567
2026-04-10T19:55:01Z
MrJaroslavik
44012
e
737568
javascript
text/javascript
// GlobalCheckUserStats.js
// Features:
// - Global Audit: Scans CheckUser logs across 900+ Wikimedia projects at once.
// - Smart Categorization: Identifies roles (Local CU, Steward, Staff, etc.).
// - Steward Logic: Detects temporary access, exact durations, and longest active periods.
// - Deep Scan: Automated pagination to bypass the 500-entry API limit (essential for enwiki).
// - Robust Connection: Automated retries for 429 rate-limits and custom domain mapping.
// - Full Reporting: Outputs sortable Wikitables and detailed rights change logs.
// - Custom UI: Integrated control panel on [[Special:BlankPage/GlobalCheckUserStats]].
// - With help of Gemini 3
(function () {
'use strict';
if (mw.config.get('wgCanonicalSpecialPageName') !== 'Blankpage' || mw.config.get('wgTitle').indexOf('GlobalCheckUserStats') === -1) return;
const rawWikis = ['abstractwiki', 'abwiki', 'acewiki', 'adywiki', 'afwiki', 'afwikibooks', 'afwikiquote', 'afwiktionary', 'alswiki', 'altwiki', 'amiwiki', 'amwiki', 'amwiktionary', 'angwiki', 'angwiktionary', 'annwiki', 'anpwiki', 'anwiki', 'anwiktionary', 'arcwiki', 'arwiki', 'arwikibooks', 'arwikimedia', 'arwikinews', 'arwikiquote', 'arwikisource', 'arwikiversity', 'arwiktionary', 'arywiki', 'arzwiki', 'astwiki', 'astwiktionary', 'aswiki', 'aswikiquote', 'aswikisource', 'atjwiki', 'avkwiki', 'avwiki', 'awawiki', 'aywiki', 'aywiktionary', 'azbwiki', 'azwiki', 'azwikibooks', 'azwikiquote', 'azwikisource', 'azwiktionary', 'banwiki', 'banwikisource', 'barwiki', 'bat_smgwiki', 'bawiki', 'bawikibooks', 'bbcwiki', 'bclwiki', 'bclwikiquote', 'bclwikisource', 'bclwiktionary', 'bdrwiki', 'bdwikimedia', 'be_x_oldwiki', 'betawikiversity', 'bewiki', 'bewikibooks', 'bewikimedia', 'bewikiquote', 'bewikisource', 'bewiktionary', 'bewwiki', 'bewwiktionary', 'bgwiki', 'bgwikibooks', 'bgwikiquote', 'bgwikisource', 'bgwiktionary', 'bhwiki', 'biwiki', 'bjnwiki', 'bjnwikiquote', 'bjnwiktionary', 'blkwiki', 'blkwiktionary', 'bmwiki', 'bnwiki', 'bnwikibooks', 'bnwikiquote', 'bnwikisource', 'bnwikivoyage', 'bnwiktionary', 'bowiki', 'bpywiki', 'brwiki', 'brwikimedia', 'brwikiquote', 'brwikisource', 'brwiktionary', 'bswiki', 'bswikibooks', 'bswikinews', 'bswikiquote', 'bswikisource', 'bswiktionary', 'btmwiki', 'btmwiktionary', 'bugwiki', 'bxrwiki', 'cawiki', 'cawikibooks', 'cawikimedia', 'cawikinews', 'cawikiquote', 'cawikisource', 'cawiktionary', 'cbk_zamwiki', 'cdowiki', 'cebwiki', 'cewiki', 'chrwiki', 'chrwiktionary', 'chwiki', 'chywiki', 'ckbwiki', 'ckbwiktionary', 'commonswiki', 'cowiki', 'cowikimedia', 'cowiktionary', 'crhwiki', 'csbwiki', 'csbwiktionary', 'cswiki', 'cswikibooks', 'cswikinews', 'cswikiquote', 'cswikisource', 'cswikiversity', 'cswikivoyage', 'cswiktionary', 'cuwiki', 'cvwiki', 'cvwikibooks', 'cywiki', 'cywikibooks', 'cywikiquote', 'cywikisource', 'cywiktionary', 'dagwiki', 'dawiki', 'dawikibooks', 'dawikiquote', 'dawikisource', 'dawiktionary', 'dewiki', 'dewikibooks', 'dewikinews', 'dewikiquote', 'dewikisource', 'dewikiversity', 'dewikivoyage', 'dewiktionary', 'dgawiki', 'dinwiki', 'diqwiki', 'diqwiktionary', 'dkwikimedia', 'dsbwiki', 'dtpwiki', 'dtywiki', 'dvwiki', 'dvwiktionary', 'dzwiki', 'eewiki', 'elwiki', 'elwikibooks', 'elwikinews', 'elwikiquote', 'elwikisource', 'elwikiversity', 'elwikivoyage', 'elwiktionary', 'emlwiki', 'enwiki', 'enwikibooks', 'enwikinews', 'enwikiquote', 'enwikisource', 'enwikiversity', 'enwikivoyage', 'enwiktionary', 'eowiki', 'eowikibooks', 'eowikinews', 'eowikiquote', 'eowikisource', 'eowikivoyage', 'eowiktionary', 'eswiki', 'eswikibooks', 'eswikinews', 'eswikiquote', 'eswikisource', 'eswikiversity', 'eswikivoyage', 'eswiktionary', 'etwiki', 'etwikibooks', 'eewikimedia', 'etwikiquote', 'etwikisource', 'etwiktionary', 'euwiki', 'euwikibooks', 'euwikiquote', 'euwikisource', 'euwiktionary', 'extwiki', 'fatwiki', 'fawiki', 'fawikibooks', 'fawikinews', 'fawikiquote', 'fawikisource', 'fawikivoyage', 'fawiktionary', 'ffwiki', 'fiu_vrowiki', 'fiwiki', 'fiwikibooks', 'fiwikimedia', 'fiwikinews', 'fiwikiquote', 'fiwikisource', 'fiwikiversity', 'fiwikivoyage', 'fiwiktionary', 'fjwiki', 'fjwiktionary', 'fonwiki', 'foundationwiki', 'fowiki', 'fowikisource', 'fowiktionary', 'frpwiki', 'frrwiki', 'frwiki', 'frwikibooks', 'frwikinews', 'frwikiquote', 'frwikisource', 'frwikiversity', 'frwikivoyage', 'frwiktionary', 'furwiki', 'fywiki', 'fywikibooks', 'fywiktionary', 'gagwiki', 'ganwiki', 'gawiki', 'gawiktionary', 'gcrwiki', 'gdwiki', 'gdwiktionary', 'glkwiki', 'glwiki', 'glwikibooks', 'glwikiquote', 'glwikisource', 'glwiktionary', 'gnwiki', 'gnwiktionary', 'gomwiki', 'gomwiktionary', 'gorwiki', 'gorwikiquote', 'gorwiktionary', 'gotwiki', 'gpewiki', 'gucwiki', 'gurwiki', 'guwiki', 'guwikiquote', 'guwikisource', 'guwiktionary', 'guwwiki', 'guwwikinews', 'guwwikiquote', 'guwwiktionary', 'gvwiki', 'gvwiktionary', 'hakwiki', 'hawiki', 'hawiktionary', 'hawwiki', 'hewiki', 'hewikibooks', 'hewikinews', 'hewikiquote', 'hewikisource', 'hewikivoyage', 'hewiktionary', 'hifwiki', 'hifwiktionary', 'hiwiki', 'hiwikibooks', 'hiwikiquote', 'hiwikisource', 'hiwikiversity', 'hiwikivoyage', 'hiwiktionary', 'hrwiki', 'hrwikibooks', 'hrwikiquote', 'hrwikisource', 'hrwiktionary', 'hsbwiki', 'hsbwiktionary', 'htwiki', 'huwiki', 'huwikibooks', 'huwikisource', 'huwiktionary', 'hywiki', 'hywikibooks', 'hywikiquote', 'hywikisource', 'hywiktionary', 'hywwiki', 'iawiki', 'iawikibooks', 'iawiktionary', 'ibawiki', 'idwiki', 'idwikibooks', 'idwikiquote', 'idwikisource', 'idwikivoyage', 'idwiktionary', 'iewiki', 'iewiktionary', 'iglwiki', 'igwiki', 'igwikiquote', 'igwiktionary', 'ikwiki', 'ilowiki', 'incubatorwiki', 'inhwiki', 'iowiki', 'iowiktionary', 'iswiki', 'iswikibooks', 'iswikiquote', 'iswikisource', 'iswiktionary', 'itwiki', 'itwikibooks', 'itwikinews', 'itwikiquote', 'itwikisource', 'itwikiversity', 'itwikivoyage', 'itwiktionary', 'iuwiki', 'iuwiktionary', 'jamwiki', 'jawiki', 'jawikibooks', 'jawikinews', 'jawikisource', 'jawikiversity', 'jawikivoyage', 'jawiktionary', 'jbowiki', 'jbowiktionary', 'jvwiki', 'jvwikisource', 'jvwiktionary', 'kaawiki', 'kaawiktionary', 'kabwiki', 'kaiwiki', 'kajwiki', 'kawiki', 'kawikibooks', 'kawikiquote', 'kawikisource', 'kawiktionary', 'kbdwiki', 'kbdwiktionary', 'kbpwiki', 'kcgwiki', 'kcgwiktionary', 'kgewiki', 'kgwiki', 'kiwiki', 'kkwiki', 'kkwikibooks', 'kkwiktionary', 'klwiktionary', 'kmwiki', 'kmwikibooks', 'kmwiktionary', 'kncwiki', 'knwiki', 'knwikiquote', 'knwikisource', 'knwiktionary', 'koiwiki', 'kowiki', 'kowikibooks', 'kowikinews', 'kowikiquote', 'kowikisource', 'kowikiversity', 'kowiktionary', 'krcwiki', 'kshwiki', 'kswiki', 'kswiktionary', 'kuswiki', 'kuwiki', 'kuwikibooks', 'kuwikiquote', 'kuwiktionary', 'kvwiki', 'kwwiki', 'kwwiktionary', 'kywiki', 'kywikiquote', 'kywiktionary', 'labswiki', 'ladwiki', 'lawiki', 'lawikibooks', 'lawikiquote', 'lawikisource', 'lawiktionary', 'lbewiki', 'lbwiki', 'lbwiktionary', 'lezwiki', 'lfnwiki', 'lgwiki', 'lijwiki', 'lijwikisource', 'liwiki', 'liwikibooks', 'liwikinews', 'liwikiquote', 'liwikisource', 'liwiktionary', 'lldwiki', 'lmowiki', 'lmowiktionary', 'lnwiki', 'lnwiktionary', 'lowiki', 'lowiktionary', 'ltgwiki', 'ltwiki', 'ltwikibooks', 'ltwikiquote', 'ltwikisource', 'ltwiktionary', 'lvwiki', 'lvwiktionary', 'madwiki', 'madwikisource', 'madwiktionary', 'maiwiki', 'map_bmswiki', 'mdfwiki', 'mediawikiwiki', 'metawiki', 'mgwiki', 'mgwikibooks', 'mgwiktionary', 'mhrwiki', 'minwiki', 'minwikibooks', 'minwikisource', 'minwiktionary', 'miwiki', 'miwiktionary', 'mkwiki', 'mkwikibooks', 'mkwikimedia', 'mkwikisource', 'mkwiktionary', 'mlwiki', 'mlwikibooks', 'mlwikiquote', 'mlwikisource', 'mlwiktionary', 'mniwiki', 'mniwiktionary', 'mnwiki', 'mnwiktionary', 'mnwwiki', 'mnwwiktionary', 'moswiki', 'mrjwiki', 'mrwiki', 'mrwikibooks', 'mrwikiquote', 'mrwikisource', 'mrwiktionary', 'mswiki', 'mswikibooks', 'mswikiquote', 'mswikisource', 'mswiktionary', 'mtwiki', 'mtwiktionary', 'mwlwiki', 'mxwikimedia', 'myvwiki', 'mywiki', 'mywikisource', 'mywiktionary', 'mznwiki', 'nahwiki', 'nahwiktionary', 'napwiki', 'napwikisource', 'nawiktionary', 'nds_nlwiki', 'ndswiki', 'ndswiktionary', 'newiki', 'newikibooks', 'newiktionary', 'newwiki', 'niawiki', 'niawiktionary', 'nlwiki', 'nlwikibooks', 'nlwikimedia', 'nlwikinews', 'nlwikiquote', 'nlwikisource', 'nlwikivoyage', 'nlwiktionary', 'nnwiki', 'nnwikiquote', 'nnwiktionary', 'novwiki', 'nowiki', 'nowikibooks', 'nowikimedia', 'nowikinews', 'nowikiquote', 'nowikisource', 'nowiktionary', 'nqowiki', 'nrmwiki', 'nrwiki', 'nsowiki', 'nupwiki', 'nvwiki', 'nycwikimedia', 'nywiki', 'ocwiki', 'ocwikibooks', 'ocwiktionary', 'olowiki', 'omwiki', 'omwiktionary', 'orwiki', 'orwikisource', 'orwiktionary', 'oswiki', 'outreachwiki', 'pagwiki', 'pamwiki', 'papwiki', 'pawiki', 'pawikibooks', 'pawikisource', 'pawiktionary', 'pcdwiki', 'pcmwiki', 'pcmwikiquote', 'pdcwiki', 'pflwiki', 'piwiki', 'plwiki', 'plwikibooks', 'plwikimedia', 'plwikinews', 'plwikiquote', 'plwikisource', 'plwikivoyage', 'plwiktionary', 'pmswiki', 'pmswikisource', 'pnbwiki', 'pnbwiktionary', 'pntwiki', 'pplwiki', 'pswiki', 'pswikivoyage', 'pswiktionary', 'ptwiki', 'ptwikibooks', 'ptwikimedia', 'ptwikinews', 'ptwikiquote', 'ptwikisource', 'ptwikiversity', 'ptwikivoyage', 'ptwiktionary', 'pwnwiki', 'quwiktionary', 'rkiwiki', 'rmwiki', 'rmywiki', 'rnwiki', 'roa_rupwiki', 'roa_rupwiktionary', 'roa_tarawiki', 'rowiki', 'rowikibooks', 'rowikinews', 'rowikiquote', 'rowiktionary', 'rskwiki', 'ruewiki', 'ruwiki', 'ruwikibooks', 'ruwikinews', 'ruwikiquote', 'ruwikisource', 'ruwikiversity', 'ruwikivoyage', 'ruwiktionary', 'rwwiki', 'rwwiktionary', 'sahwiki', 'sahwikiquote', 'sahwikisource', 'satwiki', 'satwiktionary', 'sawiki', 'sawikibooks', 'sawikiquote', 'sawikisource', 'sawiktionary', 'scnwiki', 'scnwiktionary', 'scowiki', 'scwiki', 'sdwiki', 'sdwiktionary', 'sewiki', 'sewikimedia', 'sgwiki', 'sgwiktionary', 'shiwiki', 'shnwiki', 'shnwikibooks', 'shnwikinews', 'shnwikivoyage', 'shnwiktionary', 'shwiki', 'shwiktionary', 'shywiktionary', 'simplewiki', 'simplewiktionary', 'siwiki', 'siwikibooks', 'siwiktionary', 'skwiki', 'skrwiki', 'skrwiktionary', 'slwiki', 'slwikibooks', 'slwikiquote', 'slwikisource', 'slwikiversity', 'slwiktionary', 'smnwiki', 'smwiki', 'smwiktionary', 'snwiki', 'sourceswiki', 'sowiki', 'sowiktionary', 'specieswiki', 'sqwiki', 'sqwikibooks', 'sqwikinews', 'sqwikiquote', 'sqwiktionary', 'srnwiki', 'srwiki', 'srwikibooks', 'srwikinews', 'srwikiquote', 'srwikisource', 'srwiktionary', 'sswiki', 'sswiktionary', 'stqwiki', 'stwiki', 'stwiktionary', 'suwiki', 'suwikiquote', 'suwikisource', 'suwiktionary', 'svwiki', 'svwikibooks', 'svwikinews', 'svwikiquote', 'svwikisource', 'svwikiversity', 'svwikivoyage', 'svwiktionary', 'swwiki', 'swwiktionary', 'sylwiki', 'szlwiki', 'szywiki', 'tawiki', 'tawikibooks', 'tawikinews', 'tawikiquote', 'tawikisource', 'tawiktionary', 'taywiki', 'tcywiki', 'tcywikisource', 'tcywiktionary', 'tddwiki', 'tewiki', 'tewikibooks', 'tewikiquote', 'tewikisource', 'tewiktionary', 'tgwiki', 'tgwikibooks', 'tgwiktionary', 'thwiki', 'thwikibooks', 'thwikimedia', 'thwikiquote', 'thwikisource', 'thwiktionary', 'tigwiki', 'tiwiki', 'tiwiktionary', 'tkwiki', 'tkwiktionary', 'tlwiki', 'tlwikibooks', 'tlwikiquote', 'tlwikisource', 'tlwiktionary', 'tlywiki', 'tnwiki', 'tnwiktionary', 'tokwiki', 'towiki', 'tpiwiki', 'tpiwiktionary', 'trvwiki', 'trwiki', 'trwikibooks', 'trwikimedia', 'trwikinews', 'trwikiquote', 'trwikisource', 'trwikivoyage', 'trwiktionary', 'tswiki', 'tswiktionary', 'ttwiki', 'ttwikibooks', 'ttwikiquote', 'ttwiktionary', 'tumwiki', 'twwiki', 'twwiktionary', 'tyvwiki', 'tywiki', 'uawikimedia', 'udmwiki', 'ugwiki', 'ugwiktionary', 'ukwiki', 'ukwikibooks', 'ukwikinews', 'ukwikiquote', 'ukwikisource', 'ukwikivoyage', 'ukwiktionary', 'urwiki', 'urwikibooks', 'urwikiquote', 'urwikisource', 'urwiktionary', 'uzwiki', 'uzwikiquote', 'uzwiktionary', 'vecwiki', 'vecwikisource', 'vecwiktionary', 'vepwiki', 'vewiki', 'viwiki', 'viwikibooks', 'viwikiquote', 'viwikisource', 'viwikivoyage', 'viwiktionary', 'vlswiki', 'vowiki', 'vowiktionary', 'warwiki', 'wawiki', 'wawikisource', 'wawiktionary', 'wikidatawiki', 'wikimaniawiki', 'wowiki', 'wowiktionary', 'wuuwiki', 'xalwiki', 'xhwiki', 'xmfwiki', 'yiwiki', 'yiwikisource', 'yiwiktionary', 'yowiki', 'zawiki', 'zeawiki', 'zghwiki', 'zghwiktionary', 'zh_classicalwiki', 'zh_min_nanwiki', 'zh_min_nanwikisource', 'zh_min_nanwiktionary', 'zh_yuewiki', 'zhwiki', 'zhwikibooks', 'zhwikinews', 'zhwikiquote', 'zhwikisource', 'zhwikiversity', 'zhwikivoyage', 'zhwiktionary', 'zuwiki', 'zuwiktionary', 'test2wiki', 'testwiki'];
const DELAY_MS = 800;
const sleep = ms => new Promise(r => setTimeout(r, ms));
let userCache = {};
let historyCache = {};
function getDomain(db) {
const mapping = {
'commonswiki': 'commons.wikimedia.org', 'metawiki': 'meta.wikimedia.org', 'wikidatawiki': 'www.wikidata.org',
'mediawikiwiki': 'www.mediawiki.org', 'sourceswiki': 'wikisource.org', 'foundationwiki': 'foundation.wikimedia.org',
'incubatorwiki': 'incubator.wikimedia.org', 'outreachwiki': 'outreach.wikimedia.org',
'be_x_oldwiki': 'be-tarask.wikipedia.org', 'labswiki': 'wikitech.wikimedia.org',
'wikimaniawiki': 'wikimania.wikimedia.org', 'specieswiki': 'species.wikimedia.org',
'abstractwiki': 'abstract.wikipedia.org', 'betawikiversity': 'beta.wikiversity.org',
'mo_wiki': 'ro.wikipedia.org',
'testwiki': 'test.wikipedia.org', 'test2wiki': 'test2.wikipedia.org',
'wikifunctionswiki': 'www.wikifunctions.org',
'testcommonswiki': 'test-commons.wikimedia.org',
'testwikidatawiki': 'test.wikidata.org',
};
if (mapping[db]) return mapping[db];
const name = db.replace(/_/g, '-');
if (name.endsWith('wikisource')) return name.slice(0, -10) + '.wikisource.org';
if (name.endsWith('wikiversity')) return name.slice(0, -11) + '.wikiversity.org';
if (name.endsWith('wiktionary')) return name.slice(0, -10) + '.wiktionary.org';
if (name.endsWith('wikivoyage')) return name.slice(0, -10) + '.wikivoyage.org';
if (name.endsWith('wikibooks')) return name.slice(0, -9) + '.wikibooks.org';
if (name.endsWith('wikiquote')) return name.slice(0, -9) + '.wikiquote.org';
if (name.endsWith('wikinews')) return name.slice(0, -8) + '.wikinews.org';
if (name.endsWith('wikimedia')) return name.slice(0, -9) + '.wikimedia.org';
if (name.endsWith('wiki')) return name.slice(0, -4) + '.wikipedia.org';
return name + '.wikipedia.org';
}
mw.loader.using(['mediawiki.api', 'mediawiki.ForeignApi']).then(function () {
const metaApi = new mw.ForeignApi('https://meta.wikimedia.org/w/api.php', { anonymous: true });
const now = new Date();
let results = {}, emptyWikis = [], failedWikis = [], scannedWikis = [], isRunning = false;
let currentFilterMode = 'all';
let currentUserFilter = 'all';
function setupUI() {
const currentYear = now.getFullYear();
let yearOpts = '';
for (let y = currentYear; y >= 2005; y--) yearOpts += `<option value="${y}">${y}</option>`;
let monthOptsFrom = '';
let monthOptsTo = '';
for (let m = 1; m <= 12; m++) {
monthOptsFrom += `<option value="${m}" ${m === 1 ? 'selected' : ''}>${m}</option>`;
monthOptsTo += `<option value="${m}" ${m === 12 ? 'selected' : ''}>${m}</option>`;
}
$('#firstHeading').text('GlobalCheckUserStats.js');
$('#mw-content-text').empty().append(`
<div style="border:1px solid #a2a9b1; padding:15px; background:#f8f9fa;">
<h3>Stats Range</h3>
From: <select id="y-f" style="width:70px;">${yearOpts}</select> <select id="m-f" style="width:50px;">${monthOptsFrom}</select>
To: <select id="y-t" style="width:70px;">${yearOpts}</select> <select id="m-t" style="width:50px;">${monthOptsTo}</select>
<div style="margin-top:15px; display:flex; align-items:center; gap:20px; font-size:13px;">
<strong>Wiki Filter:</strong>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-all" checked> All wikis</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-except"> All wikis except</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-only"> Only these wikis</label>
<span id="wiki-help-trigger" style="cursor:help; background:#36c; color:#fff; border-radius:50%; width:18px; height:18px; display:inline-block; text-align:center; font-weight:bold; font-size:12px; line-height:18px;" title="Show all wiki DB names">?</span>
</div>
<div id="filter-input-container" style="display:none; margin-top:10px;">
<input id="wiki-filter" type="text" style="width:100%; max-width:600px;" placeholder="">
</div>
<div style="margin-top:15px; display:flex; align-items:center; gap:20px; font-size:13px;">
<strong>User Filter:</strong>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-all" checked> All users</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-local"> Only Local CUs</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-steward"> Only Stewards</label>
</div>
<div id="wiki-list-help" style="display:none; margin-top:10px; padding:10px; background:#fff; border:1px solid #a2a9b1; font-size:11px; max-height:120px; overflow-y:auto; font-family:monospace; color:#202122;">
<strong>Available Wikis (alphabetical):</strong><br>${[...rawWikis].sort().join(', ')}
</div>
<div style="margin-top:20px;">
<button id="start" class="mw-ui-button mw-ui-progressive">Run GlobalCheckUserStats.js</button>
<button id="stop" class="mw-ui-button mw-ui-destructive" disabled>Stop</button>
</div>
<div id="status-msg" style="margin-top:10px; font-weight:bold; color:#0056b3;">Ready.</div>
<div style="margin-top:5px;"><progress id="bar" value="0" max="${rawWikis.length}" style="width:100%"></progress></div>
<textarea id="out" style="width:100%; height:450px; margin-top:10px; display:none; font-family:monospace; font-size:12px;"></textarea>
</div>
`);
$('#btn-all').click(() => { currentFilterMode = 'all'; $('#filter-input-container').hide(); });
$('#btn-except').click(() => { currentFilterMode = 'exclude'; $('#filter-input-container').show(); $('#wiki-filter').attr('placeholder', 'Exclude (dbname1, dbname2)...').focus(); });
$('#btn-only').click(() => { currentFilterMode = 'include'; $('#filter-input-container').show(); $('#wiki-filter').attr('placeholder', 'Only (dbname1, dbname2)...').focus(); });
$('#u-all').click(() => { currentUserFilter = 'all'; });
$('#u-local').click(() => { currentUserFilter = 'local'; });
$('#u-steward').click(() => { currentUserFilter = 'steward'; });
$('#wiki-help-trigger').click(() => $('#wiki-list-help').toggle());
$('#start').click(() => runAudit($('#y-f').val(), $('#m-f').val(), $('#y-t').val(), $('#m-t').val()));
$('#stop').click(() => isRunning = false);
}
async function fetchWikiMetrics(db) {
try {
const api = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
const res = await api.get({
action: 'query', meta: 'siteinfo', siprop: 'statistics', formatversion: 2
});
return { active: res.query.statistics.activeusers || 0 };
} catch (e) { return { active: 0 }; }
}
async function checkGlobalHistory(user, start, end) {
try {
const res = await metaApi.get({
action: 'query', list: 'logevents', letype: 'gblrights', letitle: 'User:' + user, lelimit: 'max', formatversion: 2
});
const logs = res.query.logevents || [];
const auditStart = new Date(start), auditEnd = new Date(end);
let state = { steward: false, staff: false, ombuds: false };
const priorLogs = logs.filter(l => new Date(l.timestamp) <= auditStart).sort((a, b) => new Date(b.timestamp) - new Date(a.timestamp));
if (priorLogs.length > 0) {
const p = priorLogs[0].params || {};
const groupsInLog = p.newGroups || p[1] || [];
state.steward = groupsInLog.includes('steward');
state.staff = groupsInLog.includes('staff');
state.ombuds = groupsInLog.includes('ombuds');
}
let held = { wasSteward: state.steward, wasStaff: state.staff, wasOmbuds: state.ombuds };
logs.filter(l => { const ts = new Date(l.timestamp); return ts > auditStart && ts < auditEnd; }).forEach(e => {
const p = e.params || {};
const added = p.newGroups || p[1] || [];
if (added.includes('steward')) held.wasSteward = true;
if (added.includes('staff')) held.wasStaff = true;
if (added.includes('ombuds')) held.wasOmbuds = true;
});
return held;
} catch (e) { return { wasSteward: false, wasStaff: false, wasOmbuds: false }; }
}
async function fetchUserData(user, db, start, end) {
const auditStart = new Date(start), auditEnd = new Date(end);
if (!userCache[user]) {
try {
const gres = await metaApi.get({ action: 'query', meta: 'globaluserinfo', guiprop: 'groups', guiuser: user, formatversion: 2 });
userCache[user] = gres.query.globaluserinfo.groups || [];
} catch (e) { userCache[user] = []; }
}
const gGroups = userCache[user];
const isGloballySteward = gGroups.includes('steward'), isGloballyStaff = gGroups.includes('staff'), isGloballyOmbuds = gGroups.includes('ombuds');
let isCurrentLocal = false;
try {
const localApi = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
const ures = await localApi.get({ action: 'query', list: 'users', ususers: user, usprop: 'groups', formatversion: 2 });
const lGroups = (ures.query.users[0] && ures.query.users[0].groups) || [];
isCurrentLocal = lGroups.includes('checkuser');
} catch (e) {}
const target = 'User:' + user + '@' + db;
let logText = '', addTime = null, removeTime = null, isSelfAssign = false, maxDurationMins = -1, longestTimeStr = "", assignCount = 0;
try {
const res = await metaApi.get({ action: 'query', list: 'logevents', letype: 'rights', letitle: target, ledir: 'older', lelimit: 'max', formatversion: 2 });
const events = res.query.logevents || [];
let logEntries = [];
let pendingRemoved = null;
const LIMIT_COMBINE_MINS = 43200; // 30 dní
for (let i = 0; i < events.length; i++) {
const e = events[i], p = e.params || {};
const cuAdded = (p.add || []).includes('checkuser') || ((p.newgroups || []).includes('checkuser') && !(p.oldgroups || []).includes('checkuser'));
const cuRemoved = (p.remove || []).includes('checkuser') || (!(p.newgroups || []).includes('checkuser') && (p.oldgroups || []).includes('checkuser'));
const eventDate = new Date(e.timestamp), exactTime = e.timestamp.replace('T', ' ').replace('Z', '');
if (cuAdded || cuRemoved) {
if (cuAdded) addTime = eventDate;
if (cuRemoved) {
removeTime = eventDate;
if (e.user === user || !e.user) isSelfAssign = true;
}
if (eventDate >= auditStart && eventDate <= auditEnd) {
const isSelf = (e.user === user) ? " (Self-assign)" : "";
if (cuRemoved) {
if (pendingRemoved) logEntries.push(`* ${pendingRemoved.time}: REMOVED by ${pendingRemoved.user}${pendingRemoved.isSelf}`);
pendingRemoved = { time: exactTime, date: eventDate, user: e.user, isSelf: isSelf };
} else if (cuAdded) {
if (pendingRemoved) {
const diffMins = Math.round(Math.abs(pendingRemoved.date - eventDate) / 60000);
const d = Math.floor(diffMins / 1440), h = Math.floor((diffMins % 1440) / 60), m = diffMins % 60;
const durStr = `${d > 0 ? d+'d ' : ''}${h > 0 ? h+'h ' : ''}${m}m`;
if (diffMins <= LIMIT_COMBINE_MINS) {
logEntries.push(`* ${exactTime}: ADDED/REMOVED by ${e.user}${isSelf} (Duration: ${durStr})`);
pendingRemoved = null;
} else {
logEntries.push(`* ${pendingRemoved.time}: REMOVED by ${pendingRemoved.user}${pendingRemoved.isSelf}`);
logEntries.push(`* ${exactTime}: ADDED by ${e.user}${isSelf} (Duration: ${durStr})`);
pendingRemoved = null;
}
if (diffMins > maxDurationMins) { maxDurationMins = diffMins; longestTimeStr = durStr; }
assignCount++;
} else { logEntries.push(`* ${exactTime}: ADDED by ${e.user}${isSelf} (Duration: Unknown/Not removed)`); }
}
}
}
}
if (pendingRemoved) logEntries.push(`* ${pendingRemoved.time}: REMOVED by ${pendingRemoved.user}${pendingRemoved.isSelf}`);
if (logEntries.length) logText = '\n' + logEntries.join('\n');
} catch (err) {}
if (!historyCache[user]) historyCache[user] = await checkGlobalHistory(user, start, end);
const historyRes = historyCache[user];
let wasLocalInPeriod = (addTime && addTime <= auditEnd && (!removeTime || removeTime >= auditStart));
let gStat = isGloballyStaff ? "Staff" : isGloballySteward ? "Steward" : isGloballyOmbuds ? "Ombudsman" : "";
let roleLabel = "";
if (isCurrentLocal) roleLabel = "Current Local CheckUser" + (gStat ? ` (${gStat})` : "");
else if (longestTimeStr && isSelfAssign && (isGloballySteward || historyRes.wasSteward)) {
roleLabel = `Steward action (Self-assign: ${assignCount > 1 ? assignCount + 'x, longest ' : ''}${longestTimeStr})`;
}
else if (wasLocalInPeriod) {
let suffix = gStat ? ` (${gStat})` : (historyRes.wasSteward ? " (Former Steward)" : "");
roleLabel = "Former Local CheckUser (in period)" + suffix;
}
else if (longestTimeStr) roleLabel = `Temporary CU action (${longestTimeStr})`;
else if (gStat) roleLabel = `Current ${gStat}`;
else if (historyRes.wasSteward) roleLabel = "Former Steward (in period)";
else roleLabel = "Unknown role";
return { role: roleLabel, log: logText };
}
async function runAudit(yf, mf, yt, mt) {
isRunning = true; userCache = {}; historyCache = {}; results = {}; emptyWikis = []; failedWikis = []; scannedWikis = [];
const filterText = $('#wiki-filter').val().trim().toLowerCase();
const filterList = filterText ? filterText.split(',').map(s => s.trim()).filter(s => s !== "") : [];
let wikisToScan = rawWikis;
if (currentFilterMode === 'include') wikisToScan = rawWikis.filter(w => filterList.includes(w));
else if (currentFilterMode === 'exclude') wikisToScan = rawWikis.filter(w => !filterList.includes(w));
if (wikisToScan.length === 0) { alert("No wikis selected!"); return; }
$('#start').prop('disabled', true); $('#stop').prop('disabled', false); $('#out').hide();
$('#bar').attr('max', wikisToScan.length).val(0);
const START = `${yf}-${String(mf).padStart(2, '0')}-01T00:00:00Z`;
const END = `${yt}-${String(mt).padStart(2, '0')}-${new Date(Date.UTC(yt, mt, 0)).getUTCDate().toString().padStart(2, '0')}T23:59:59Z`;
const monthCols = [];
let currY = parseInt(yf), currM = parseInt(mf), endY = parseInt(yt), endM = parseInt(mt);
while (currY < endY || (currY === endY && currM <= endM)) {
monthCols.push({ key: `${currY}-${String(currM).padStart(2, '0')}`, label: `${["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"][currM - 1]} ${currY}` });
currM++; if (currM > 12) { currM = 1; currY++; }
}
for (let i = 0; i < wikisToScan.length; i++) {
if (!isRunning) break;
const db = wikisToScan[i]; scannedWikis.push(db);
$('#status-msg').text(`Scanning ${db} (${i + 1}/${wikisToScan.length})...`);
let successLocal = false, continueToken = null;
while (!successLocal && isRunning) {
try {
const api = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
let params = { action: 'query', list: 'checkuserlog', culfrom: START, culto: END, culdir: 'newer', cullimit: 'max', formatversion: 2 };
if (continueToken) Object.assign(params, continueToken);
let res = await api.get(params);
const ent = res.query?.checkuserlog?.entries || [];
if (ent.length) {
if (!results[db]) results[db] = {};
ent.forEach(e => {
const u = e.checkuser;
if (!results[db][u]) results[db][u] = { total: 0, months: {} };
const mKey = e.timestamp.slice(0, 7);
results[db][u].total++; results[db][u].months[mKey] = (results[db][u].months[mKey] || 0) + 1;
});
}
if (res.continue && isRunning) continueToken = res.continue;
else { if (!results[db]) emptyWikis.push(db); successLocal = true; }
} catch (err) { if (err?.status === 429) await sleep(30000); else { failedWikis.push(db); successLocal = true; } }
}
$('#bar').val(i + 1); await sleep(DELAY_MS);
}
$('#status-msg').text(`Generating report...`);
const today = new Date().toISOString().split('T')[0];
const timestamp = new Date().toISOString().replace('T', ' ').slice(0, 19) + ' (UTC)';
let wt = `== Global CheckUser Stats (${mf}/${yf} - ${mt}/${yt}) ==\n''Report generated on: ${timestamp}''\n\n`;
let rightsLog = `\n== Rights Log (In Period) ==\n`;
wt += `{| class="wikitable sortable" style="font-size:90%; text-align:right;"\n! Wiki / User !! Category !! '''Total''' !! per 1k active users ${monthCols.map(m => `!! ${m.label}`).join(' ')}\n`;
const sortedDBs = Object.keys(results).sort();
for (const db of sortedDBs) {
const metrics = await fetchWikiMetrics(db);
const fmtActive = metrics.active.toLocaleString('en-US');
wt += `|-\n! colspan="${4 + monthCols.length}" style="background:#eaecf0; text-align:center;" | ${db} <small style="font-weight:normal; color:#54595d;">(Active Users as of ${today}: ${fmtActive})</small>\n`;
let wikiRows = [], wT = 0, wMS = {}; monthCols.forEach(col => wMS[col.key] = 0);
const projectUsers = Object.keys(results[db]).sort();
for (const user of projectUsers) {
const m = await fetchUserData(user, db, START, END);
const isSteward = m.role.includes("Steward") || m.role.includes("Staff") || m.role.includes("Ombudsman");
const isLocalCU = m.role.includes("Local CheckUser");
if (currentUserFilter === 'local' && !isLocalCU) continue;
if (currentUserFilter === 'steward' && !isSteward) continue;
const uD = results[db][user];
wT += uD.total; monthCols.forEach(col => wMS[col.key] += (uD.months[col.key] || 0));
let uP1kU = metrics.active > 0 ? ((uD.total / metrics.active) * 1000).toFixed(1) : "0.0";
let row = `|-\n| style="text-align:left;" | ${user} || <small>${m.role}</small> || '''${uD.total}''' || ${uP1kU}`;
monthCols.forEach(col => row += ` || ${uD.months[col.key] || 0}`);
wikiRows.push({ html: row + "\n", log: m.log ? `'''${user}@${db}''':${m.log}\n\n` : "" });
}
let wP1kU = metrics.active > 0 ? ((wT / metrics.active) * 1000).toFixed(1) : "0.0";
let totalRow = `|- style="background:#f8f9fa; font-weight:bold;"\n| style="text-align:left;" | TOTAL ${db} || — || ${wT} || ${wP1kU}`;
monthCols.forEach(col => totalRow += ` || ${wMS[col.key]}`);
wt += totalRow + "\n";
wikiRows.forEach(r => { wt += r.html; if (r.log) rightsLog += r.log; });
}
wt += `|}\n\n== Projects with 0 actions ==\n<div style="font-size:85%; color:#54595d;">${emptyWikis.sort().join(', ')}</div>\n`;
wt += rightsLog + `\n\n<references />\n`;
$('#out').val(wt).show();
$('#status-msg').text(`Done.`); $('#start').prop('disabled', false); $('#stop').prop('disabled', true);
}
setupUI();
});
})();
itcpor1q06z4x9v2xu6knx82xd4ekky
737578
737568
2026-04-11T09:14:00Z
MrJaroslavik
44012
e
737578
javascript
text/javascript
// GlobalCheckUserStats.js
// Features:
// - Global Audit: Scans CheckUser logs across 900+ Wikimedia projects at once.
// - Smart Categorization: Identifies roles (Local CU, Steward, Staff, etc.).
// - Steward Logic: Detects temporary access, exact durations, and longest active periods.
// - Deep Scan: Automated pagination to bypass the 500-entry API limit (essential for enwiki).
// - Robust Connection: Automated retries for 429 rate-limits and custom domain mapping.
// - Full Reporting: Outputs sortable Wikitables and detailed rights change logs.
// - Custom UI: Integrated control panel on [[Special:BlankPage/GlobalCheckUserStats]].
// - With help of Gemini 3
(function () {
'use strict';
if (mw.config.get('wgCanonicalSpecialPageName') !== 'Blankpage' || mw.config.get('wgTitle').indexOf('GlobalCheckUserStats') === -1) return;
const rawWikis = ['abstractwiki', 'abwiki', 'acewiki', 'adywiki', 'afwiki', 'afwikibooks', 'afwikiquote', 'afwiktionary', 'alswiki', 'altwiki', 'amiwiki', 'amwiki', 'amwiktionary', 'angwiki', 'angwiktionary', 'annwiki', 'anpwiki', 'anwiki', 'anwiktionary', 'arcwiki', 'arwiki', 'arwikibooks', 'arwikimedia', 'arwikinews', 'arwikiquote', 'arwikisource', 'arwikiversity', 'arwiktionary', 'arywiki', 'arzwiki', 'astwiki', 'astwiktionary', 'aswiki', 'aswikiquote', 'aswikisource', 'atjwiki', 'avkwiki', 'avwiki', 'awawiki', 'aywiki', 'aywiktionary', 'azbwiki', 'azwiki', 'azwikibooks', 'azwikiquote', 'azwikisource', 'azwiktionary', 'banwiki', 'banwikisource', 'barwiki', 'bat_smgwiki', 'bawiki', 'bawikibooks', 'bbcwiki', 'bclwiki', 'bclwikiquote', 'bclwikisource', 'bclwiktionary', 'bdrwiki', 'bdwikimedia', 'be_x_oldwiki', 'betawikiversity', 'bewiki', 'bewikibooks', 'bewikimedia', 'bewikiquote', 'bewikisource', 'bewiktionary', 'bewwiki', 'bewwiktionary', 'bgwiki', 'bgwikibooks', 'bgwikiquote', 'bgwikisource', 'bgwiktionary', 'bhwiki', 'biwiki', 'bjnwiki', 'bjnwikiquote', 'bjnwiktionary', 'blkwiki', 'blkwiktionary', 'bmwiki', 'bnwiki', 'bnwikibooks', 'bnwikiquote', 'bnwikisource', 'bnwikivoyage', 'bnwiktionary', 'bowiki', 'bpywiki', 'brwiki', 'brwikimedia', 'brwikiquote', 'brwikisource', 'brwiktionary', 'bswiki', 'bswikibooks', 'bswikinews', 'bswikiquote', 'bswikisource', 'bswiktionary', 'btmwiki', 'btmwiktionary', 'bugwiki', 'bxrwiki', 'cawiki', 'cawikibooks', 'cawikimedia', 'cawikinews', 'cawikiquote', 'cawikisource', 'cawiktionary', 'cbk_zamwiki', 'cdowiki', 'cebwiki', 'cewiki', 'chrwiki', 'chrwiktionary', 'chwiki', 'chywiki', 'ckbwiki', 'ckbwiktionary', 'commonswiki', 'cowiki', 'cowikimedia', 'cowiktionary', 'crhwiki', 'csbwiki', 'csbwiktionary', 'cswiki', 'cswikibooks', 'cswikinews', 'cswikiquote', 'cswikisource', 'cswikiversity', 'cswikivoyage', 'cswiktionary', 'cuwiki', 'cvwiki', 'cvwikibooks', 'cywiki', 'cywikibooks', 'cywikiquote', 'cywikisource', 'cywiktionary', 'dagwiki', 'dawiki', 'dawikibooks', 'dawikiquote', 'dawikisource', 'dawiktionary', 'dewiki', 'dewikibooks', 'dewikinews', 'dewikiquote', 'dewikisource', 'dewikiversity', 'dewikivoyage', 'dewiktionary', 'dgawiki', 'dinwiki', 'diqwiki', 'diqwiktionary', 'dkwikimedia', 'dsbwiki', 'dtpwiki', 'dtywiki', 'dvwiki', 'dvwiktionary', 'dzwiki', 'eewiki', 'elwiki', 'elwikibooks', 'elwikinews', 'elwikiquote', 'elwikisource', 'elwikiversity', 'elwikivoyage', 'elwiktionary', 'emlwiki', 'enwiki', 'enwikibooks', 'enwikinews', 'enwikiquote', 'enwikisource', 'enwikiversity', 'enwikivoyage', 'enwiktionary', 'eowiki', 'eowikibooks', 'eowikinews', 'eowikiquote', 'eowikisource', 'eowikivoyage', 'eowiktionary', 'eswiki', 'eswikibooks', 'eswikinews', 'eswikiquote', 'eswikisource', 'eswikiversity', 'eswikivoyage', 'eswiktionary', 'etwiki', 'etwikibooks', 'eewikimedia', 'etwikiquote', 'etwikisource', 'etwiktionary', 'euwiki', 'euwikibooks', 'euwikiquote', 'euwikisource', 'euwiktionary', 'extwiki', 'fatwiki', 'fawiki', 'fawikibooks', 'fawikinews', 'fawikiquote', 'fawikisource', 'fawikivoyage', 'fawiktionary', 'ffwiki', 'fiu_vrowiki', 'fiwiki', 'fiwikibooks', 'fiwikimedia', 'fiwikinews', 'fiwikiquote', 'fiwikisource', 'fiwikiversity', 'fiwikivoyage', 'fiwiktionary', 'fjwiki', 'fjwiktionary', 'fonwiki', 'foundationwiki', 'fowiki', 'fowikisource', 'fowiktionary', 'frpwiki', 'frrwiki', 'frwiki', 'frwikibooks', 'frwikinews', 'frwikiquote', 'frwikisource', 'frwikiversity', 'frwikivoyage', 'frwiktionary', 'furwiki', 'fywiki', 'fywikibooks', 'fywiktionary', 'gagwiki', 'ganwiki', 'gawiki', 'gawiktionary', 'gcrwiki', 'gdwiki', 'gdwiktionary', 'glkwiki', 'glwiki', 'glwikibooks', 'glwikiquote', 'glwikisource', 'glwiktionary', 'gnwiki', 'gnwiktionary', 'gomwiki', 'gomwiktionary', 'gorwiki', 'gorwikiquote', 'gorwiktionary', 'gotwiki', 'gpewiki', 'gucwiki', 'gurwiki', 'guwiki', 'guwikiquote', 'guwikisource', 'guwiktionary', 'guwwiki', 'guwwikinews', 'guwwikiquote', 'guwwiktionary', 'gvwiki', 'gvwiktionary', 'hakwiki', 'hawiki', 'hawiktionary', 'hawwiki', 'hewiki', 'hewikibooks', 'hewikinews', 'hewikiquote', 'hewikisource', 'hewikivoyage', 'hewiktionary', 'hifwiki', 'hifwiktionary', 'hiwiki', 'hiwikibooks', 'hiwikiquote', 'hiwikisource', 'hiwikiversity', 'hiwikivoyage', 'hiwiktionary', 'hrwiki', 'hrwikibooks', 'hrwikiquote', 'hrwikisource', 'hrwiktionary', 'hsbwiki', 'hsbwiktionary', 'htwiki', 'huwiki', 'huwikibooks', 'huwikisource', 'huwiktionary', 'hywiki', 'hywikibooks', 'hywikiquote', 'hywikisource', 'hywiktionary', 'hywwiki', 'iawiki', 'iawikibooks', 'iawiktionary', 'ibawiki', 'idwiki', 'idwikibooks', 'idwikiquote', 'idwikisource', 'idwikivoyage', 'idwiktionary', 'iewiki', 'iewiktionary', 'iglwiki', 'igwiki', 'igwikiquote', 'igwiktionary', 'ikwiki', 'ilowiki', 'incubatorwiki', 'inhwiki', 'iowiki', 'iowiktionary', 'iswiki', 'iswikibooks', 'iswikiquote', 'iswikisource', 'iswiktionary', 'itwiki', 'itwikibooks', 'itwikinews', 'itwikiquote', 'itwikisource', 'itwikiversity', 'itwikivoyage', 'itwiktionary', 'iuwiki', 'iuwiktionary', 'jamwiki', 'jawiki', 'jawikibooks', 'jawikinews', 'jawikisource', 'jawikiversity', 'jawikivoyage', 'jawiktionary', 'jbowiki', 'jbowiktionary', 'jvwiki', 'jvwikisource', 'jvwiktionary', 'kaawiki', 'kaawiktionary', 'kabwiki', 'kaiwiki', 'kajwiki', 'kawiki', 'kawikibooks', 'kawikiquote', 'kawikisource', 'kawiktionary', 'kbdwiki', 'kbdwiktionary', 'kbpwiki', 'kcgwiki', 'kcgwiktionary', 'kgewiki', 'kgwiki', 'kiwiki', 'kkwiki', 'kkwikibooks', 'kkwiktionary', 'klwiktionary', 'kmwiki', 'kmwikibooks', 'kmwiktionary', 'kncwiki', 'knwiki', 'knwikiquote', 'knwikisource', 'knwiktionary', 'koiwiki', 'kowiki', 'kowikibooks', 'kowikinews', 'kowikiquote', 'kowikisource', 'kowikiversity', 'kowiktionary', 'krcwiki', 'kshwiki', 'kswiki', 'kswiktionary', 'kuswiki', 'kuwiki', 'kuwikibooks', 'kuwikiquote', 'kuwiktionary', 'kvwiki', 'kwwiki', 'kwwiktionary', 'kywiki', 'kywikiquote', 'kywiktionary', 'labswiki', 'ladwiki', 'lawiki', 'lawikibooks', 'lawikiquote', 'lawikisource', 'lawiktionary', 'lbewiki', 'lbwiki', 'lbwiktionary', 'lezwiki', 'lfnwiki', 'lgwiki', 'lijwiki', 'lijwikisource', 'liwiki', 'liwikibooks', 'liwikinews', 'liwikiquote', 'liwikisource', 'liwiktionary', 'lldwiki', 'lmowiki', 'lmowiktionary', 'lnwiki', 'lnwiktionary', 'lowiki', 'lowiktionary', 'ltgwiki', 'ltwiki', 'ltwikibooks', 'ltwikiquote', 'ltwikisource', 'ltwiktionary', 'lvwiki', 'lvwiktionary', 'madwiki', 'madwikisource', 'madwiktionary', 'maiwiki', 'map_bmswiki', 'mdfwiki', 'mediawikiwiki', 'metawiki', 'mgwiki', 'mgwikibooks', 'mgwiktionary', 'mhrwiki', 'minwiki', 'minwikibooks', 'minwikisource', 'minwiktionary', 'miwiki', 'miwiktionary', 'mkwiki', 'mkwikibooks', 'mkwikimedia', 'mkwikisource', 'mkwiktionary', 'mlwiki', 'mlwikibooks', 'mlwikiquote', 'mlwikisource', 'mlwiktionary', 'mniwiki', 'mniwiktionary', 'mnwiki', 'mnwiktionary', 'mnwwiki', 'mnwwiktionary', 'moswiki', 'mrjwiki', 'mrwiki', 'mrwikibooks', 'mrwikiquote', 'mrwikisource', 'mrwiktionary', 'mswiki', 'mswikibooks', 'mswikiquote', 'mswikisource', 'mswiktionary', 'mtwiki', 'mtwiktionary', 'mwlwiki', 'mxwikimedia', 'myvwiki', 'mywiki', 'mywikisource', 'mywiktionary', 'mznwiki', 'nahwiki', 'nahwiktionary', 'napwiki', 'napwikisource', 'nawiktionary', 'nds_nlwiki', 'ndswiki', 'ndswiktionary', 'newiki', 'newikibooks', 'newiktionary', 'newwiki', 'niawiki', 'niawiktionary', 'nlwiki', 'nlwikibooks', 'nlwikimedia', 'nlwikinews', 'nlwikiquote', 'nlwikisource', 'nlwikivoyage', 'nlwiktionary', 'nnwiki', 'nnwikiquote', 'nnwiktionary', 'novwiki', 'nowiki', 'nowikibooks', 'nowikimedia', 'nowikinews', 'nowikiquote', 'nowikisource', 'nowiktionary', 'nqowiki', 'nrmwiki', 'nrwiki', 'nsowiki', 'nupwiki', 'nvwiki', 'nycwikimedia', 'nywiki', 'ocwiki', 'ocwikibooks', 'ocwiktionary', 'olowiki', 'omwiki', 'omwiktionary', 'orwiki', 'orwikisource', 'orwiktionary', 'oswiki', 'outreachwiki', 'pagwiki', 'pamwiki', 'papwiki', 'pawiki', 'pawikibooks', 'pawikisource', 'pawiktionary', 'pcdwiki', 'pcmwiki', 'pcmwikiquote', 'pdcwiki', 'pflwiki', 'piwiki', 'plwiki', 'plwikibooks', 'plwikimedia', 'plwikinews', 'plwikiquote', 'plwikisource', 'plwikivoyage', 'plwiktionary', 'pmswiki', 'pmswikisource', 'pnbwiki', 'pnbwiktionary', 'pntwiki', 'pplwiki', 'pswiki', 'pswikivoyage', 'pswiktionary', 'ptwiki', 'ptwikibooks', 'ptwikimedia', 'ptwikinews', 'ptwikiquote', 'ptwikisource', 'ptwikiversity', 'ptwikivoyage', 'ptwiktionary', 'pwnwiki', 'quwiktionary', 'rkiwiki', 'rmwiki', 'rmywiki', 'rnwiki', 'roa_rupwiki', 'roa_rupwiktionary', 'roa_tarawiki', 'rowiki', 'rowikibooks', 'rowikinews', 'rowikiquote', 'rowiktionary', 'rskwiki', 'ruewiki', 'ruwiki', 'ruwikibooks', 'ruwikinews', 'ruwikiquote', 'ruwikisource', 'ruwikiversity', 'ruwikivoyage', 'ruwiktionary', 'rwwiki', 'rwwiktionary', 'sahwiki', 'sahwikiquote', 'sahwikisource', 'satwiki', 'satwiktionary', 'sawiki', 'sawikibooks', 'sawikiquote', 'sawikisource', 'sawiktionary', 'scnwiki', 'scnwiktionary', 'scowiki', 'scwiki', 'sdwiki', 'sdwiktionary', 'sewiki', 'sewikimedia', 'sgwiki', 'sgwiktionary', 'shiwiki', 'shnwiki', 'shnwikibooks', 'shnwikinews', 'shnwikivoyage', 'shnwiktionary', 'shwiki', 'shwiktionary', 'shywiktionary', 'simplewiki', 'simplewiktionary', 'siwiki', 'siwikibooks', 'siwiktionary', 'skwiki', 'skrwiki', 'skrwiktionary', 'slwiki', 'slwikibooks', 'slwikiquote', 'slwikisource', 'slwikiversity', 'slwiktionary', 'smnwiki', 'smwiki', 'smwiktionary', 'snwiki', 'sourceswiki', 'sowiki', 'sowiktionary', 'specieswiki', 'sqwiki', 'sqwikibooks', 'sqwikinews', 'sqwikiquote', 'sqwiktionary', 'srnwiki', 'srwiki', 'srwikibooks', 'srwikinews', 'srwikiquote', 'srwikisource', 'srwiktionary', 'sswiki', 'sswiktionary', 'stqwiki', 'stwiki', 'stwiktionary', 'suwiki', 'suwikiquote', 'suwikisource', 'suwiktionary', 'svwiki', 'svwikibooks', 'svwikinews', 'svwikiquote', 'svwikisource', 'svwikiversity', 'svwikivoyage', 'svwiktionary', 'swwiki', 'swwiktionary', 'sylwiki', 'szlwiki', 'szywiki', 'tawiki', 'tawikibooks', 'tawikinews', 'tawikiquote', 'tawikisource', 'tawiktionary', 'taywiki', 'tcywiki', 'tcywikisource', 'tcywiktionary', 'tddwiki', 'tewiki', 'tewikibooks', 'tewikiquote', 'tewikisource', 'tewiktionary', 'tgwiki', 'tgwikibooks', 'tgwiktionary', 'thwiki', 'thwikibooks', 'thwikimedia', 'thwikiquote', 'thwikisource', 'thwiktionary', 'tigwiki', 'tiwiki', 'tiwiktionary', 'tkwiki', 'tkwiktionary', 'tlwiki', 'tlwikibooks', 'tlwikiquote', 'tlwikisource', 'tlwiktionary', 'tlywiki', 'tnwiki', 'tnwiktionary', 'tokwiki', 'towiki', 'tpiwiki', 'tpiwiktionary', 'trvwiki', 'trwiki', 'trwikibooks', 'trwikimedia', 'trwikinews', 'trwikiquote', 'trwikisource', 'trwikivoyage', 'trwiktionary', 'tswiki', 'tswiktionary', 'ttwiki', 'ttwikibooks', 'ttwikiquote', 'ttwiktionary', 'tumwiki', 'twwiki', 'twwiktionary', 'tyvwiki', 'tywiki', 'uawikimedia', 'udmwiki', 'ugwiki', 'ugwiktionary', 'ukwiki', 'ukwikibooks', 'ukwikinews', 'ukwikiquote', 'ukwikisource', 'ukwikivoyage', 'ukwiktionary', 'urwiki', 'urwikibooks', 'urwikiquote', 'urwikisource', 'urwiktionary', 'uzwiki', 'uzwikiquote', 'uzwiktionary', 'vecwiki', 'vecwikisource', 'vecwiktionary', 'vepwiki', 'vewiki', 'viwiki', 'viwikibooks', 'viwikiquote', 'viwikisource', 'viwikivoyage', 'viwiktionary', 'vlswiki', 'vowiki', 'vowiktionary', 'warwiki', 'wawiki', 'wawikisource', 'wawiktionary', 'wikidatawiki', 'wikimaniawiki', 'wowiki', 'wowiktionary', 'wuuwiki', 'xalwiki', 'xhwiki', 'xmfwiki', 'yiwiki', 'yiwikisource', 'yiwiktionary', 'yowiki', 'zawiki', 'zeawiki', 'zghwiki', 'zghwiktionary', 'zh_classicalwiki', 'zh_min_nanwiki', 'zh_min_nanwikisource', 'zh_min_nanwiktionary', 'zh_yuewiki', 'zhwiki', 'zhwikibooks', 'zhwikinews', 'zhwikiquote', 'zhwikisource', 'zhwikiversity', 'zhwikivoyage', 'zhwiktionary', 'zuwiki', 'zuwiktionary', 'test2wiki', 'testwiki'];
const DELAY_MS = 800;
const sleep = ms => new Promise(r => setTimeout(r, ms));
let userCache = {};
let historyCache = {};
function getDomain(db) {
const mapping = {
'commonswiki': 'commons.wikimedia.org', 'metawiki': 'meta.wikimedia.org', 'wikidatawiki': 'www.wikidata.org',
'mediawikiwiki': 'www.mediawiki.org', 'sourceswiki': 'wikisource.org', 'foundationwiki': 'foundation.wikimedia.org',
'incubatorwiki': 'incubator.wikimedia.org', 'outreachwiki': 'outreach.wikimedia.org',
'be_x_oldwiki': 'be-tarask.wikipedia.org', 'labswiki': 'wikitech.wikimedia.org',
'wikimaniawiki': 'wikimania.wikimedia.org', 'specieswiki': 'species.wikimedia.org',
'abstractwiki': 'abstract.wikipedia.org', 'betawikiversity': 'beta.wikiversity.org',
'mo_wiki': 'ro.wikipedia.org',
'testwiki': 'test.wikipedia.org', 'test2wiki': 'test2.wikipedia.org',
'wikifunctionswiki': 'www.wikifunctions.org',
'testcommonswiki': 'test-commons.wikimedia.org',
'testwikidatawiki': 'test.wikidata.org',
};
if (mapping[db]) return mapping[db];
const name = db.replace(/_/g, '-');
if (name.endsWith('wikisource')) return name.slice(0, -10) + '.wikisource.org';
if (name.endsWith('wikiversity')) return name.slice(0, -11) + '.wikiversity.org';
if (name.endsWith('wiktionary')) return name.slice(0, -10) + '.wiktionary.org';
if (name.endsWith('wikivoyage')) return name.slice(0, -10) + '.wikivoyage.org';
if (name.endsWith('wikibooks')) return name.slice(0, -9) + '.wikibooks.org';
if (name.endsWith('wikiquote')) return name.slice(0, -9) + '.wikiquote.org';
if (name.endsWith('wikinews')) return name.slice(0, -8) + '.wikinews.org';
if (name.endsWith('wikimedia')) return name.slice(0, -9) + '.wikimedia.org';
if (name.endsWith('wiki')) return name.slice(0, -4) + '.wikipedia.org';
return name + '.wikipedia.org';
}
mw.loader.using(['mediawiki.api', 'mediawiki.ForeignApi']).then(function () {
const metaApi = new mw.ForeignApi('https://meta.wikimedia.org/w/api.php', { anonymous: true });
const now = new Date();
let results = {}, emptyWikis = [], failedWikis = [], scannedWikis = [], isRunning = false;
let currentFilterMode = 'all';
let currentUserFilter = 'all';
function setupUI() {
const currentYear = now.getFullYear();
let yearOpts = '';
for (let y = currentYear; y >= 2005; y--) yearOpts += `<option value="${y}">${y}</option>`;
let monthOptsFrom = '';
let monthOptsTo = '';
for (let m = 1; m <= 12; m++) {
monthOptsFrom += `<option value="${m}" ${m === 1 ? 'selected' : ''}>${m}</option>`;
monthOptsTo += `<option value="${m}" ${m === 12 ? 'selected' : ''}>${m}</option>`;
}
$('#firstHeading').text('GlobalCheckUserStats.js');
$('#mw-content-text').empty().append(`
<div style="border:1px solid #a2a9b1; padding:15px; background:#f8f9fa;">
<h3>Stats Range</h3>
From: <select id="y-f" style="width:70px;">${yearOpts}</select> <select id="m-f" style="width:50px;">${monthOptsFrom}</select>
To: <select id="y-t" style="width:70px;">${yearOpts}</select> <select id="m-t" style="width:50px;">${monthOptsTo}</select>
<div style="margin-top:15px; display:flex; align-items:center; gap:20px; font-size:13px;">
<strong>Wiki Filter:</strong>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-all" checked> All wikis</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-except"> All wikis except</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-only"> Only these wikis</label>
<span id="wiki-help-trigger" style="cursor:help; background:#36c; color:#fff; border-radius:50%; width:18px; height:18px; display:inline-block; text-align:center; font-weight:bold; font-size:12px; line-height:18px;" title="Show all wiki DB names">?</span>
</div>
<div id="filter-input-container" style="display:none; margin-top:10px;">
<input id="wiki-filter" type="text" style="width:100%; max-width:600px;" placeholder="">
</div>
<div style="margin-top:15px; display:flex; align-items:center; gap:20px; font-size:13px;">
<strong>User Filter:</strong>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-all" checked> All users</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-local"> Only Local CUs</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-steward"> Only Stewards</label>
</div>
<div id="wiki-list-help" style="display:none; margin-top:10px; padding:10px; background:#fff; border:1px solid #a2a9b1; font-size:11px; max-height:120px; overflow-y:auto; font-family:monospace; color:#202122;">
<strong>Available Wikis (alphabetical):</strong><br>${[...rawWikis].sort().join(', ')}
</div>
<div style="margin-top:20px;">
<button id="start" class="mw-ui-button mw-ui-progressive">Run GlobalCheckUserStats.js</button>
<button id="stop" class="mw-ui-button mw-ui-destructive" disabled>Stop</button>
</div>
<div id="status-msg" style="margin-top:10px; font-weight:bold; color:#0056b3;">Ready.</div>
<div style="margin-top:5px;"><progress id="bar" value="0" max="${rawWikis.length}" style="width:100%"></progress></div>
<textarea id="out" style="width:100%; height:450px; margin-top:10px; display:none; font-family:monospace; font-size:12px;"></textarea>
</div>
`);
$('#btn-all').click(() => { currentFilterMode = 'all'; $('#filter-input-container').hide(); });
$('#btn-except').click(() => { currentFilterMode = 'exclude'; $('#filter-input-container').show(); $('#wiki-filter').attr('placeholder', 'Exclude (dbname1, dbname2)...').focus(); });
$('#btn-only').click(() => { currentFilterMode = 'include'; $('#filter-input-container').show(); $('#wiki-filter').attr('placeholder', 'Only (dbname1, dbname2)...').focus(); });
$('#u-all').click(() => { currentUserFilter = 'all'; });
$('#u-local').click(() => { currentUserFilter = 'local'; });
$('#u-steward').click(() => { currentUserFilter = 'steward'; });
$('#wiki-help-trigger').click(() => $('#wiki-list-help').toggle());
$('#start').click(() => runAudit($('#y-f').val(), $('#m-f').val(), $('#y-t').val(), $('#m-t').val()));
$('#stop').click(() => isRunning = false);
}
async function fetchWikiMetrics(db) {
try {
const api = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
const res = await api.get({
action: 'query', meta: 'siteinfo', siprop: 'statistics', formatversion: 2
});
return { active: res.query.statistics.activeusers || 0 };
} catch (e) { return { active: 0 }; }
}
async function checkGlobalHistory(user, start, end) {
try {
const res = await metaApi.get({
action: 'query', list: 'logevents', letype: 'gblrights', letitle: 'User:' + user, lelimit: 'max', formatversion: 2
});
const logs = res.query.logevents || [];
const auditStart = new Date(start), auditEnd = new Date(end);
let state = { steward: false, staff: false, ombuds: false };
const priorLogs = logs.filter(l => new Date(l.timestamp) <= auditStart).sort((a, b) => new Date(b.timestamp) - new Date(a.timestamp));
if (priorLogs.length > 0) {
const p = priorLogs[0].params || {};
const groupsInLog = p.newGroups || p[1] || [];
state.steward = groupsInLog.includes('steward');
state.staff = groupsInLog.includes('staff');
state.ombuds = groupsInLog.includes('ombuds');
}
let held = { wasSteward: state.steward, wasStaff: state.staff, wasOmbuds: state.ombuds };
logs.filter(l => { const ts = new Date(l.timestamp); return ts > auditStart && ts < auditEnd; }).forEach(e => {
const p = e.params || {};
const added = p.newGroups || p[1] || [];
if (added.includes('steward')) held.wasSteward = true;
if (added.includes('staff')) held.wasStaff = true;
if (added.includes('ombuds')) held.wasOmbuds = true;
});
return held;
} catch (e) { return { wasSteward: false, wasStaff: false, wasOmbuds: false }; }
}
async function fetchUserData(user, db, start, end) {
const auditStart = new Date(start), auditEnd = new Date(end);
if (!userCache[user]) {
try {
const gres = await metaApi.get({ action: 'query', meta: 'globaluserinfo', guiprop: 'groups', guiuser: user, formatversion: 2 });
userCache[user] = gres.query.globaluserinfo.groups || [];
} catch (e) { userCache[user] = []; }
}
const gGroups = userCache[user];
const isGloballySteward = gGroups.includes('steward'), isGloballyStaff = gGroups.includes('staff'), isGloballyOmbuds = gGroups.includes('ombuds');
let isCurrentLocal = false;
try {
const localApi = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
const ures = await localApi.get({ action: 'query', list: 'users', ususers: user, usprop: 'groups', formatversion: 2 });
const lGroups = (ures.query.users[0] && ures.query.users[0].groups) || [];
isCurrentLocal = lGroups.includes('checkuser');
} catch (e) {}
const target = 'User:' + user + '@' + db;
let logText = '', addTime = null, removeTime = null, isSelfAssign = false, maxDurationMins = -1, longestTimeStr = "", assignCount = 0;
try {
// Změna ledir na 'newer' pro chronologické párování (volitelné, ale doporučené)
const res = await metaApi.get({ action: 'query', list: 'logevents', letype: 'rights', letitle: target, ledir: 'newer', lelimit: 'max', formatversion: 2 });
const events = res.query.logevents || [];
let logEntries = [];
let pendingAdded = null; // Změna na pendingAdded pro chronologii
const LIMIT_COMBINE_MINS = 43200;
for (let i = 0; i < events.length; i++) {
const e = events[i], p = e.params || {};
// Detekce práv (včetně opravy pro různé API verze)
const cuAdded = (p.add || []).includes('checkuser') || (p.newgroups || []).includes('checkuser');
const cuRemoved = (p.remove || []).includes('checkuser') || ((p.oldgroups || []).includes('checkuser') && !(p.newgroups || []).includes('checkuser'));
// Detekce expirace (pro automatické odebrání)
let expiryDate = null;
if (p.newmetadata && p.newmetadata[0] && p.newmetadata[0].expiry) {
expiryDate = new Date(p.newmetadata[0].expiry);
}
const eventDate = new Date(e.timestamp), exactTime = e.timestamp.replace('T', ' ').replace('Z', '');
if (cuAdded || cuRemoved) {
if (cuAdded) addTime = eventDate;
if (cuRemoved) { removeTime = eventDate; if (e.user === user || !e.user) isSelfAssign = true; }
if (eventDate >= auditStart && eventDate <= auditEnd) {
const isSelf = (e.user === user) ? " (Self-assign)" : "";
// SCÉNÁŘ 1: Máme expiraci přímo v ADDED logu (Steward s dočasnými právy)
if (cuAdded && expiryDate) {
const diffMins = Math.round(Math.abs(expiryDate - eventDate) / 60000);
const d = Math.floor(diffMins / 1440), h = Math.floor((diffMins % 1440) / 60), m = diffMins % 60;
const durStr = `${d > 0 ? d+'d ' : ''}${h > 0 ? h+'h ' : ''}${m}m`;
logEntries.push(`* ${exactTime}: ADDED/EXPIRED by ${e.user}${isSelf} (Duration: ${durStr})`);
if (diffMins > maxDurationMins) { maxDurationMins = diffMins; longestTimeStr = durStr; }
assignCount++;
}
// SCÉNÁŘ 2: Klasické manuální ADDED (čekáme na REMOVED)
else if (cuAdded) {
pendingAdded = { time: exactTime, date: eventDate, user: e.user, isSelf: isSelf };
}
// SCÉNÁŘ 3: Manuální REMOVED
else if (cuRemoved) {
if (pendingAdded) {
const diffMins = Math.round(Math.abs(eventDate - pendingAdded.date) / 60000);
const d = Math.floor(diffMins / 1440), h = Math.floor((diffMins % 1440) / 60), m = diffMins % 60;
const durStr = `${d > 0 ? d+'d ' : ''}${h > 0 ? h+'h ' : ''}${m}m`;
if (diffMins <= LIMIT_COMBINE_MINS) {
logEntries.push(`* ${pendingAdded.time}: ADDED/REMOVED by ${pendingAdded.user}${pendingAdded.isSelf} (Duration: ${durStr})`);
} else {
logEntries.push(`* ${pendingAdded.time}: ADDED by ${pendingAdded.user}${pendingAdded.isSelf}`);
logEntries.push(`* ${exactTime}: REMOVED by ${e.user}${isSelf} (Duration: ${durStr})`);
}
if (diffMins > maxDurationMins) { maxDurationMins = diffMins; longestTimeStr = durStr; }
assignCount++;
pendingAdded = null;
} else {
logEntries.push(`* ${exactTime}: REMOVED by ${e.user}${isSelf}`);
}
}
}
}
}
if (pendingAdded) {
logEntries.push(`* ${pendingAdded.time}: ADDED by ${pendingAdded.user}${pendingAdded.isSelf} (Duration: Active/Not removed)`);
}
if (logEntries.length) logText = '\n' + logEntries.join('\n');
} catch (err) {}
if (!historyCache[user]) historyCache[user] = await checkGlobalHistory(user, start, end);
const historyRes = historyCache[user];
let wasLocalInPeriod = (addTime && addTime <= auditEnd && (!removeTime || removeTime >= auditStart));
let gStat = isGloballyStaff ? "Staff" : isGloballySteward ? "Steward" : isGloballyOmbuds ? "Ombudsman" : "";
let roleLabel = "";
if (isCurrentLocal) roleLabel = "Current Local CheckUser" + (gStat ? ` (${gStat})` : "");
else if (longestTimeStr && isSelfAssign && (isGloballySteward || historyRes.wasSteward)) {
roleLabel = `Steward action (Self-assign: ${assignCount > 1 ? assignCount + 'x, longest ' : ''}${longestTimeStr})`;
}
else if (wasLocalInPeriod) {
let suffix = gStat ? ` (${gStat})` : (historyRes.wasSteward ? " (Former Steward)" : "");
roleLabel = "Former Local CheckUser (in period)" + suffix;
}
else if (longestTimeStr) roleLabel = `Temporary CU action (${longestTimeStr})`;
else if (gStat) roleLabel = `Current ${gStat}`;
else if (historyRes.wasSteward) roleLabel = "Former Steward (in period)";
else roleLabel = "Unknown role";
return { role: roleLabel, log: logText };
}
async function runAudit(yf, mf, yt, mt) {
isRunning = true; userCache = {}; historyCache = {}; results = {}; emptyWikis = []; failedWikis = []; scannedWikis = [];
const filterText = $('#wiki-filter').val().trim().toLowerCase();
const filterList = filterText ? filterText.split(',').map(s => s.trim()).filter(s => s !== "") : [];
let wikisToScan = rawWikis;
if (currentFilterMode === 'include') wikisToScan = rawWikis.filter(w => filterList.includes(w));
else if (currentFilterMode === 'exclude') wikisToScan = rawWikis.filter(w => !filterList.includes(w));
if (wikisToScan.length === 0) { alert("No wikis selected!"); return; }
$('#start').prop('disabled', true); $('#stop').prop('disabled', false); $('#out').hide();
$('#bar').attr('max', wikisToScan.length).val(0);
const START = `${yf}-${String(mf).padStart(2, '0')}-01T00:00:00Z`;
const END = `${yt}-${String(mt).padStart(2, '0')}-${new Date(Date.UTC(yt, mt, 0)).getUTCDate().toString().padStart(2, '0')}T23:59:59Z`;
const monthCols = [];
let currY = parseInt(yf), currM = parseInt(mf), endY = parseInt(yt), endM = parseInt(mt);
while (currY < endY || (currY === endY && currM <= endM)) {
monthCols.push({ key: `${currY}-${String(currM).padStart(2, '0')}`, label: `${["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"][currM - 1]} ${currY}` });
currM++; if (currM > 12) { currM = 1; currY++; }
}
for (let i = 0; i < wikisToScan.length; i++) {
if (!isRunning) break;
const db = wikisToScan[i]; scannedWikis.push(db);
$('#status-msg').text(`Scanning ${db} (${i + 1}/${wikisToScan.length})...`);
let successLocal = false, continueToken = null;
while (!successLocal && isRunning) {
try {
const api = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
let params = { action: 'query', list: 'checkuserlog', culfrom: START, culto: END, culdir: 'newer', cullimit: 'max', formatversion: 2 };
if (continueToken) Object.assign(params, continueToken);
let res = await api.get(params);
const ent = res.query?.checkuserlog?.entries || [];
if (ent.length) {
if (!results[db]) results[db] = {};
ent.forEach(e => {
const u = e.checkuser;
if (!results[db][u]) results[db][u] = { total: 0, months: {} };
const mKey = e.timestamp.slice(0, 7);
results[db][u].total++; results[db][u].months[mKey] = (results[db][u].months[mKey] || 0) + 1;
});
}
if (res.continue && isRunning) continueToken = res.continue;
else { if (!results[db]) emptyWikis.push(db); successLocal = true; }
} catch (err) { if (err?.status === 429) await sleep(30000); else { failedWikis.push(db); successLocal = true; } }
}
$('#bar').val(i + 1); await sleep(DELAY_MS);
}
$('#status-msg').text(`Generating report...`);
const today = new Date().toISOString().split('T')[0];
const timestamp = new Date().toISOString().replace('T', ' ').slice(0, 19) + ' (UTC)';
let wt = `== Global CheckUser Stats (${mf}/${yf} - ${mt}/${yt}) ==\n''Report generated on: ${timestamp}''\n\n`;
let rightsLog = `\n== Rights Log (In Period) ==\n`;
wt += `{| class="wikitable sortable" style="font-size:90%; text-align:right;"\n! Wiki / User !! Category !! '''Total''' !! per 1k active users ${monthCols.map(m => `!! ${m.label}`).join(' ')}\n`;
const sortedDBs = Object.keys(results).sort();
for (const db of sortedDBs) {
const metrics = await fetchWikiMetrics(db);
const fmtActive = metrics.active.toLocaleString('en-US');
wt += `|-\n! colspan="${4 + monthCols.length}" style="background:#eaecf0; text-align:center;" | ${db} <small style="font-weight:normal; color:#54595d;">(Active Users as of ${today}: ${fmtActive})</small>\n`;
let wikiRows = [], wT = 0, wMS = {}; monthCols.forEach(col => wMS[col.key] = 0);
const projectUsers = Object.keys(results[db]).sort();
for (const user of projectUsers) {
const m = await fetchUserData(user, db, START, END);
const isSteward = m.role.includes("Steward") || m.role.includes("Staff") || m.role.includes("Ombudsman");
const isLocalCU = m.role.includes("Local CheckUser");
if (currentUserFilter === 'local' && !isLocalCU) continue;
if (currentUserFilter === 'steward' && !isSteward) continue;
const uD = results[db][user];
wT += uD.total; monthCols.forEach(col => wMS[col.key] += (uD.months[col.key] || 0));
let uP1kU = metrics.active > 0 ? ((uD.total / metrics.active) * 1000).toFixed(1) : "0.0";
let row = `|-\n| style="text-align:left;" | ${user} || <small>${m.role}</small> || '''${uD.total}''' || ${uP1kU}`;
monthCols.forEach(col => row += ` || ${uD.months[col.key] || 0}`);
wikiRows.push({ html: row + "\n", log: m.log ? `'''${user}@${db}''':${m.log}\n\n` : "" });
}
let wP1kU = metrics.active > 0 ? ((wT / metrics.active) * 1000).toFixed(1) : "0.0";
let totalRow = `|- style="background:#f8f9fa; font-weight:bold;"\n| style="text-align:left;" | TOTAL ${db} || — || ${wT} || ${wP1kU}`;
monthCols.forEach(col => totalRow += ` || ${wMS[col.key]}`);
wt += totalRow + "\n";
wikiRows.forEach(r => { wt += r.html; if (r.log) rightsLog += r.log; });
}
wt += `|}\n\n== Projects with 0 actions ==\n<div style="font-size:85%; color:#54595d;">${emptyWikis.sort().join(', ')}</div>\n`;
wt += rightsLog + `\n\n<references />\n`;
$('#out').val(wt).show();
$('#status-msg').text(`Done.`); $('#start').prop('disabled', false); $('#stop').prop('disabled', true);
}
setupUI();
});
})();
boqw9nupdguo723tf5tb6y7xfy2kgj0
User talk:JWBTH/CD test page/one comment
3
174798
737566
737520
2026-04-10T19:00:08Z
JWBTH
52211
737566
wikitext
text/x-wiki
== Test section ==
Comment. [[User:Example|Example]] ([[User talk:Example|talk]]) 00:00, 1 January 2026 (UTC)
5zc15avxi2mn283e0pkdhqrknggd1j5
Category:Starter kit templates
14
174799
737547
2026-04-10T17:03:14Z
SSethi (WMF)
36407
Created page with "This collection is for templates used in the starter kit project."
737547
wikitext
text/x-wiki
This collection is for templates used in the starter kit project.
qnoi417ipdfj9o69cnvku6u8sidm6jm
Khalil Moula’s birthday
0
174800
737564
2026-04-10T18:27:28Z
~2026-19755-72
73506
Created page with "K"
737564
wikitext
text/x-wiki
K
jm6jnbq7mdyxwafag4hbyd3z2waioa1
Usuario discusión:Taichi
0
174801
737572
2026-04-11T00:12:32Z
Nacaru
54746
Aviso de resolución de solicitud mediante [[WP:TL|Twinkle Lite]]
737572
wikitext
text/x-wiki
== Resolución de tu solicitud en el tablón de Miscelánea ==
''(Este es un aviso generado automáticamente a través de [[WP:TL|Twinkle Lite]])''
Tu solicitud en el tablón de Miscelánea ha sido resuelta. Puedes acceder a la misma a través del siguiente enlace:
* [[Wikipedia:Tablón_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Miscelánea/Actual#Retomo_reporte_de_CPP_política|Enlace a la resolución]].
Ten en cuenta que el enlace caducará una vez se haya archivado el hilo. Saludos. [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:12, 11 April 2026 (UTC)
f45nwg0kplkt8ts2dkzk8qzvkc5u7hj
NovemTest100
0
174802
737579
2026-04-11T10:06:05Z
Novem Linguae
49714
Created page with "Testr"
737579
wikitext
text/x-wiki
Testr
rt8772d9jhok4bc1ekp93z5fu2u2brj