Twemoji12 1f3d7.svg
Twemoji12 1f3d7.svg
This page is a work in progress.

Welcome to our Bot Service !

Welcome to Lingua Libre Technical board !
Logo of Lingua Libre
Wiktionary Bots.png

Lingua Libre Bot (short: LiLiBot or LLBot) is Lingua Libre's loyal bot, passionate about audio recordings, languages and Wikimedia projects. Every day, it adds LinguaLibre's new audio recordings to the relevant pages on various Wikimedia projects. Its work of automatically sharing these wonderfully diverse audio recordings with the world grants it great recognition from the communities who use it.

Due to the sheer and growing amount of audio recordings to list every day, it is necessary for LiLiBot to be granted the Bot role in order to safely be able to contribute on the Wikis. As of today, the bot is allowed and able to contribute to four Wikimedia projects.

YOU can help LiLiBot pursue its mission! Follow the guidelines on this page!

Do you need help ?

This page also serves as a forum for bot developments. You are welcome to open a section and discussion below.

Technical documentations ?
  • Lingua Libre Bot (GitHub, Python) is a high-impact project. Help is needed to authorize it on more wikis.
  • WikiAPI (GitHub, NodeJS) is and emerging and under active development base for programmatic edits of wikis.
Before you start…

Currently active bots (list)
  • Lingua Libre Bot (Python) – dispatch audios on other wikis (maintainer: Poslovitch)
  • Olafbot (Java) – list editing (maintainer: Olaf)
  • Dragons Bot (JS) – lists editing (maintainer: Yug)

Please visit LinguaLibre:About to learn more about the project.

Bot request's form

Copy this form, open a new section at the bottom of this page and change the values to match your language.

== Bot request for {language} witkionary ==
* '''Example pages (3):''' [[:ku:wikt:Apple]], [[:ku:wikt:Pomme]] - You can see best audio integration there.
* '''Target section:''' the audio file should be added at the end of the <code>==Bilêvkirin==</code> section, which means ...
* '''Local audio template(s) example(s):''' {{deng|en|en-us-apple.ogg|Deng (DYA)}} 
* '''Local audio template(s) explained:''' 
** {Deng} means "audio", and take the following parameters...
** <code>en</code> is the iso639-2 of the audio.
** <code>en-us-apple.ogg</code> is the filename
** <code>Deng (DYA)</code> means audio (deng) and USA (DYA) which is the local variant or accent.
* Request by: ~~~~ 

Bot request for {or} witkionary

  • Example pages (3): or:wikt:ଓଡ଼ିଆ, or:wikt:ଓଡ଼ିଆ - You can see best audio integration there.
  • Target section: the audio file should be added at the end of the ==ଉଚ୍ଚାରଣ== section, which means pronunciation
  • Local audio template(s) example(s): Template:ଅଡ଼ିଓ
  • Local audio template(s) explained:
    • {ଅଡ଼ିଓ} means "audio", and take the following parameters...
    • or is the iso639-2 of the audio.
    • or-ଓଡ଼ିଆ.wav is the filename
    • ଧ୍ୱନି (ମାନକ ଓଡ଼ିଆ) means audio (ଧ୍ୱନି) in "ମାନକ ଓଡ଼ିଆ" (standard spoken Odia language) which is the standard spoken variant or accent.
  • Request by: Subhashish (talk) 19:04, 24 June 2021 (UTC)
Hi @Poslovitch: is there anything that I need to share with you here? --Subhashish (talk) 01:33, 29 June 2021 (UTC)
Hi @Psubhashish: the request looks fine. I'm attending a hackathon this week; I probably won't get to go through all of the requests, but we will probably find a way to speed up the process. I'll keep you posted once the bot is ready to contribute on orwikt ;) --Poslovitch (talk) 13:15, 29 June 2021 (UTC)
Hi @Poslovitch:, all the best for the hackathon! :) This can wait after all. Quick question -- there are more than 6K words in the ory category on Commons which have the File:or-WORD.wav/ogg/flac format (some are ori-nor-NAME.wav and are categorized properly). 3.7K of these 6K+ files were recorded using LL but are now disconnected from the LL Wikibase (meaning LL Wikibase will have their former filenames) while renaming on Commons. Can we use your bot to insert them into the respective pages on orwikt? --Subhashish (talk) 15:07, 29 June 2021 (UTC)
If they got renamed, the bot won't be able to find them, sadly. I'm noting we need a way to detect if a file got renamed on Commons so that the Wikibase here gets updated, which in turn would allow the bot to find the recordings. --Poslovitch (talk) 16:07, 29 June 2021 (UTC)
@Poslovitch:, indeed, linking changed files would be very helpful. Please let me know once your bot starts to insert the recorded files to the Odia Wiktionary. --Subhashish (talk) 04:14, 5 July 2021 (UTC)
@Psubhashish: I have one more question concerning the template "audio". In the description you gave above, it can be used only for Odia words. If you want LinguaLibre Bot to add audio pronunciations also for words in other languages (French, English, Hindi, etc) that may be present on the Odia Wiktionary, you should give us a string corresponding to ଧ୍ୱନି (ମାନକ ଓଡ଼ିଆ) but for all the other languages (or maybe, there is a way to get these names automatically from Wikidata or any other way). Pamputt (talk) 20:54, 11 July 2021 (UTC)
@Pamputt: I'd guess Wikidata would be the place for other language words. We don't have any active contribution at the moment in other languages but what you asked might arise in the future. There are however, pronunciations in the Baleswari Odia dialect which are rightly tagged here on LL. --Subhashish (talk) 13:18, 12 July 2021 (UTC)
@Poslovitch: circling back quickly to check if the Lili bot can be enabled for Odia and the Wiktionary entries can be updated with the recorded audio? Thanks! --Subhashish (talk) 09:23, 21 July 2021 (UTC)
@Psubhashish: If you don't change the filenames, we will be able to take over Odia Wiktionary with Lingua Libre Bot in the coming weeks. 🙂 — WikiLucas (🖋️) 09:59, 21 July 2021 (UTC)
@WikiLucas00: @Poslovitch: I haven't actually changed many [edit: any recently, I am referring to a few thousand recordings that I have not changed]. Not sure if you have checked my most recent edits. I paused changing until we fully discuss that matter. Please go ahead and help run the bot. --Subhashish (talk) 04:41, 22 July 2021 (UTC)
@WikiLucas00: @Poslovitch: sorry to say this but it feels like going in circles explaining something. I've stopped renaming files for a reason -- I didn't want to break the linked data from LL which I did not realize. Can we please *not* go again and again over the same renaming issue that is non-existent now and have the bot running for Odia? I do not know how to explain something more explicitly. I had made a request for a bot a month ago and have not renamed files after that. Being a Wikipedian myself, I understand that there are many volunteers who are working hard and I don't expect any requested action to come swiftly. But going over the same thing when it does not exist is a sheer waste of collective time. Should I give up on the bot request and continue only recording? --Subhashish (talk) 09:00, 24 July 2021 (UTC)
@Psubhashish: I think the delay comes mainly from the fact people are currently on holidays in France and usually there are less contributions, including coding contributions, during summer time. That's said, I will code the Odia Wiktionary support in Lingua Libre Bot. For now, I have proposed a support for the Shawiya Wiktionary because their structure in very close from the French Wiktionary. Once it will be on production, we will add support for Odia Wiktionary. I prefer to add support one by one not to get all bug reports at the same time. Pamputt (talk) 09:59, 24 July 2021 (UTC)
@WikiLucas00: Thanks for sharing these. I was almost giving up on the bot linking. No rush though now that there is some plan. --Subhashish (talk) 09:37, 25 July 2021 (UTC)

Technical details

Psubhashish, I have more technical questions regarding the Oriya Wiktionary support.

  1. Could you tell me all the languages Lingua Libre Bot should support. I already understood that one section is title ==ଓଡ଼ିଆ== but you talked about the Baleswari Odia dialect; is the title section also ==ଓଡ଼ିଆ== ?
    (SP) I'm not sure if I get your question correctly. Baleswari Odia is a dialect of Odia (ଓଡ଼ିଆ) so all words still go to the same Odia Wiktionary.
    Ok, clear all the recordings you would like LLBot manage are under ==ଓଡ଼ିଆ==.
    (SP) Yes.
  2. Could you translate "Adding a pronunciation audio file from Lingua Libre"? This is the summary that will be displayed when Lingua Libre Bot will add a pronunciation.
    (SP) Sure, "ଲିଙ୍ଗୁଆ ଲିବ୍ରେରୁ ଏକ ଉଚ୍ଚାରଣ ଅଡ଼ିଓ ଯୋଡ଼ିଲି" (translates to "[I] have added a LL pronunciation audio from Lingua Libre" as it sounds more appropriate for the summary. The literal translation for the English text you've shared would be "ଲିଙ୍ଗୁଆ ଲିବ୍ରେରୁ ଏକ ଉଚ୍ଚାରଣ ଅଡ଼ିଓ ଯୋଡ଼ୁଛି". I am hoping transliterating Lingua Libre is okay. Otherwise you could replace "ଲିଙ୍ଗୁଆ ଲିବ୍ରେ" with "Lingua Libre".)
    Thanks, for the transliteration of the name Lingua Libre, up to you; this is what will be displayed on your wiki. If this understandable by contributors over there, no problem.
    (SP) The contributors are one admin who is not active at the moment but is also responsible for keeping the project alive and myself. But we certainly approve. :D
  3. Could you list all the sections that may follow the pronunciation section (ଉଚ୍ଚାରଣ)?
    (SP) Odia Wiktionary does not yet have the structure for most of the words. Creating/adding inside the "ଉଚ୍ଚାରଣ" section would be just fine for now.
    Ok, I will take into account this point.
    @Psubhashish: Actually, this question is useful to know where to create the pronunciation section if there is none. Should LLbot add the pronunciation section at the end of the language section, just before the categories or is there a most suitable location? Pamputt (talk) 20:53, 26 July 2021 (UTC)
    (SP) A new "ଉଚ୍ଚାରଣ" section at the end of the language section would make more.
    @Pamputt: I just checked an example. The section (if it doesn't exist already) ==ଓଡ଼ିଆ== should have a subsection called ===ଉଚ୍ଚାରଣ=== and the audio should go under the "ଉଚ୍ଚାରଣ" section.
  4. It seems that the ଅଡ଼ିଓ template does not take parameter for specifying the location of the speaker; could you confirm that?
    (SP) I believe so. Is there an example where it displays the location? We could update the template and translate the parameter fields.
    Actually the audio template from enwiktionary does not have such parameter. If you want one example, the écouter template on the French Wiktionary has such parameter. It has to been discussed on your wiki to know whether you want to implement this paramter on your template and so whether you want to display such information.

Pamputt (talk) 20:05, 24 July 2021 (UTC)

  1. This seems to be quite useful but I am not sure if the location data is captured well. For instance, I have used "Odisha" (which is a province and not city) in all my recordings. This can be ignored for the time being I guess. --Subhashish (talk) 05:00, 27 July 2021 (UTC)

Bot request for ku.wiktionary

  • Example pages (3): ku:wikt:beran, ku:wikt:başûr, ku:wikt:keskesor- You can see best audio integration there.
  • Target section: The audio file should be added at the end of the === Bilêvkirin === section, which means "Pronunciation". If there is no === Bilêvkirin === section on the page, please create one after the language section, that is == {{ziman|<lang code>}} ==. If there is no language section, the audio file should not be added.
  • Local audio template(s) example(s): {{deng|ku|LL-Q36368 (kur)-Mihemed Qers-keskesor.wav|Deng|dever=Qers}}
  • Local audio template(s) explained:
    • {Deng} is the template name which means "audio", and takes the following parameters...
    • ku is the lang code from ISO 639-1 of the audio, ISO 639-3 and ISO 639-2 are also in use.
    • LL-Q36368 (kur)-Mihemed Qers-keskesor.wav is the filename
    • Deng means audio, should always be present.
    • |dever= means place of origin, could be local variant or accent, country or city name. In the example "Qers" is the Kurdish name for the city en:Kars.
  • Request by: Balyozxane (talk) 04:05, 22 February 2021 (UTC)
Here are two examples [1], [2]. If there are multiple part of speech sections we still collect them all at the top of the page like this [3]. |dever= parameter should fetch the Kurdish names for places from Wikidata if possible. Lingua libre uses "kur" code for Kurdish, but we use "ku" and sometimes "kmr" on ku.wikt. Even when the language code is "kmr" in language section, the lang code in {{deng|<lang code>}} should be "ku". I think that's all I can remember. Any questions? --Balyozxane (talk) 00:26, 21 February 2021 (UTC)
You can also take a look at this page [4] for guidance.--Balyozxane (talk) 00:47, 21 February 2021 (UTC)
@Balyozxane:, your last link is a diff, is it normal ? Also, can you reformat a bit your request so it follow the template above. You can also allow me to edit your text and I will happily do it. cc: user:Poslovitch. Yug (talk) 18:52, 21 February 2021 (UTC)
@Yug: The last link was for example only to show there are other varients but the first two are the desired outcome from the LiLiBot. Feel free to correct my use of the template as free as you can. Balyozxane (talk) 04:05, 22 February 2021 (UTC)
@Balyozxane: Thanks! I'll get to work ASAP. I'll notify you once I'm ready to test the bot ;) --Poslovitch (talk) 13:19, 23 February 2021 (UTC)
Thank you!Balyozxane (talk) 08:00, 24 February 2021 (UTC)

Connexion via Oauth and Bots for Unilex lists editing

@Olaf and Poslovitch: Hello folks. I'am having some connection issues with WikiAPI (JS) code to connect to LinguaLibre. Is there some special thing to do to connect my bot to edit Lili ? As human using chrome, being connected to Commons alone doesn't connect you to LinguaLibre. We have to come here, click login, which sends a Oauth query (I guess), check my login status on Commons, then makes something so I'am loggued into both Commons and Lingualibre. I suspect some additional Oauth query is needed inside my bot. Yug (talk) 21:22, 1 March 2021 (UTC)

Normally the login procedure here is very complicated: mw:OAuth/For_Developers, and I've never managed to implement it, however if you use a bot account, you can create a password in Special:BotPasswords, and then log in directly on Lingua Libre wiki without Commons. Alternatively you can use one of the JS frameworks to log in. Finally, if you are logged in manually in the browser, the authorization proof should be in cookies, so the JS scripts in the browser should work fine. Olaf (talk) 21:19, 1 March 2021 (UTC)
Special:BotPasswords/Dragons_Bot. Progress underway. Thank you.
I see :
Allowed IP ranges:
Any explanation for this ? Dragons Bot (talk) 21:30, 1 March 2021 (UTC)
Starting to work. Situation unlocked. Thank Olaf. Yug (talk) 22:08, 1 March 2021 (UTC)

Lists: approach and limits

Dragons Bot script is ready to run. A test back is visible on Special:Contributions/Dragons_Bot.

I propose the following ranges of words for lists creations :

var ranges = [
	[ '00001', '00200' ],  // 1) 'List:Ibo/Most_used_words,_UNILEX_1:_words_00001_to_00200'
	[ '00201', '01000' ],  // 2) 'List:Ibo/Most_used_words,_UNILEX_2:_words_00201_to_01000'
	[ '01001', '02000' ],  // …
	[ '02001', '04000' ],  // 4) <←——— 1st threshold
	[ '05001', '10000' ],  // …
	[ '10001', '15000' ],  // 
	[ '15001', '20000' ],  // 
	[ '20001', '25000' ],  // 
	[ '25001', '30000' ],  // 9) <←——— 2nd threshold
	[ '30001', '35000' ],  // 
	[ '35001', '40000' ],  // 
	[ '40001', '45000' ],  // 
	[ '45001', '50000' ]   // 

I willfully create a smooth ramp approach to onboard new comers. I tested, 200 is a nice balance while we start. It is gently ambitious and about 10 mins works. It typically the kind of list-size I was looking for demoing in IRL events, with new users. Then can do just 20 if they wish. But the length alone, 200, encourage to flow it forward and to try out the Lingualibre productive flow which appears after 20~30 words but requires 50 words to "see the power" of LinguaLibre.

As for the depth, I first though of a deal :

// `corpus-limit`: 
//  - default: x = 6000; 
//  - active: x = 30000
//  - rule: if recordings > 2000 according to, then `active`.

With that rule, our 17 most active languages get 30,000 words via 9 files. All others get 5,000 words via 4 files.

But after some though I'am wondering if this 5,000 first limit is too small. It allows good on-boarding, but then nothing. Waiting still a bit. Yug (talk) 22:22, 4 March 2021 (UTC)

Hi everyone ! Unilex import has started, you may see it happen on recent bot edits or on Special:Contributions/Dragons_Bot. At the end :

  • breath: 1001 languages will be covered
  • type: with their frequency lists, from Unilex.
  • amount: ~100 major languages (has iso639-2 in 2 character) will have by default a maximum of 30,000 words. Minor languages will have at maximum 6000 words.

Note: I noticed some errors after launching. Those will be fixed in my code and on Lingualibre.

These uploads are done using User:Kanasimi's Wikiapijs framework. :) Yug (talk) 10:15, 17 May 2021 (UTC)

Imported list names ?

@Pamputt:, I derivated from the IETF's column on the right a new `iso639-3` column on the left. These `iso639-3` will provide the Iso in List:{Iso}/{Title}{range}. But I often didn't know what was the `iso639-3` versions so I kept the IETF tag (ceux avec les -). Could you review languages.js and share with me possible corrective indications ? Or is it ok if I use those ? (I don't think so, the record wizard will have difficulties finding them) Yug (talk) 22:28, 4 March 2021 (UTC)
About two letters code, you can find the "equivalent" ISO 639-3 code using this Wikipedia page. For example, "ae-Latn" corresponds to "ave" on LinguaLibre. Pamputt (talk) 06:46, 5 March 2021 (UTC)
Yes, I need to be sure I'am converting correctly from composite IETF into current conventions (iso639-3 right?). Thanks for the lead on `ave`, I will check those. I gathered below the list of items I'am confused by.
	{ 'iso639-3':'ave', file:'ae-Latn' },
	{ 'iso639-3':'', file:'be-tarask' },
	{ 'iso639-3':'', file:'blt-Latn' },
	{ 'iso639-3':'', file:'ca-valencia' },
	{ 'iso639-3':'', file:'ctd-Latn' },
	{ 'iso639-3':'', file:'el-Latn-u-sd-it75' },
	{ 'iso639-3':'', file:'gsw-u-sd-chag' },
	{ 'iso639-3':'', file:'gsw-u-sd-chbe' },
	{ 'iso639-3':'', file:'gsw-u-sd-chfr' },
	{ 'iso639-3':'', file:'kab-Arab' },
	{ 'iso639-3':'', file:'kab-Tfng' },
	{ 'iso639-3':'', file:'rm-puter' },
	{ 'iso639-3':'', file:'rm-rumgr' },
	{ 'iso639-3':'', file:'rm-surmiran' },
	{ 'iso639-3':'', file:'rm-sursilv' },
	{ 'iso639-3':'', file:'rm-sutsilv' },
	{ 'iso639-3':'', file:'rm-vallader' },
	{ 'iso639-3':'', file:'sr-Latn' },
	{ 'iso639-3':'', file:'vec-u-sd-itpd' },
	{ 'iso639-3':'', file:'vec-u-sd-itts' },
	{ 'iso639-3':'', file:'vec-u-sd-itvr' },
Do we have a naming convention for cases like gsw, rm and vec which has several sub elements each ? Should I do List:{gsw}/u-sd-chag/{title} ? I will return here later to complete all those I can. Yug (talk)
What I know is Lingua Libre uses ISO 639-3 to identify the language in the lists. So we should use pure ISO 639-3 to name the lists. Let us talk about rm for example, the ISO 639-3 code is "roh". The text after the hyphen is used to discriminate the dialects. On LinguaLibre, we can create list for a given dialect, but it should be named such as "List:Roh/Puter-namelist" or maybe "List:Roh/Puter/Namelist". I have not checked what is the behaviour of the list taht would be named following the last proposal.
The same remark applied for IETF code such as "kab-Arab". It that case, "Arab" is about the script. So we could name the list such as "List:Kab/Arab/namelist" for example. Pamputt (talk) 08:59, 5 March 2021 (UTC)
It's a more general question - how should the resulting recording files look like? For example be-tarask is a standard Belarussian but written with Latin script instead of Cirillic. Still most Wiktionaries considers it a separate language (example: wikt:fr:Catégorie:biélorusse_(tarashkevitsa)). If the LiLi bot is supposed to attach the recordings properly, the language should have a separate ISO code in LiLi. You can't just put it as a version of bel. But LiLi has only one Belarussian language code defined.
sr-latin is a Latinized version of Serbian, but the French Wiktionary puts it in the same bag with Cyrillic: wikt:fr:Catégorie:serbe, in the Polish Wiktionary we allow only the Cyrillic script in Serbian, in English Wiktionary everything is together with Croatian as the Serbo-Croatian language. Total mess. A few other codes are also different script versions of standard languages.
gsw-*, on the other hand, are various dialects of Swiss German. I believe they all are treated in Lingua Libre and Wiktionaries as dialects of German (deu). Perhaps code gsw could also be created here, but it isn't.
rm-* are dialects of the Romansh language. LiLi treats them as one language roh.
In general, if we want to have rare languages on board, they should be defined here first. It's not enough to make a list if you can't select proper language while recording. Maybe you should import only lists for the languages defined in LiLi? Olaf (talk) 09:26, 5 March 2021 (UTC)
Special:RecordWizard's Step 3 : Details (which should be List IMHO) does 2 things:
  • List picking: seems to load the list via a simple research by name. The list's name (and iso prefix) does NOT influences the recordings.
  • « You record words in: {pick your language} » : this defined how the words's Qid will be tagged, imported to Commons, and categorized.
You can load List:Mar/wiktionary, and pick the language Japanese. Then your recordings Qitems will be iso639-3 = jpn.
So, for today case (list creation), I just need to have my list starting with recognizable iso639-3 so they show up properly.
The question of languages is a Wikidata/LanguageImporter issue.
I'am cognitively tired of this past coding days so I will simply not upload those composite-names languages for now. But it stays a practical question with implications and side effects (wikidata, wiktionary) to kink about. Yug (talk) 21:36, 5 March 2021 (UTC)

Bots ?

Let's welcome User:Babel AutoCreate (tc), User:FuzzyBot (tc) :D Yug (talk) 23:00, 8 March 2021 (UTC)

Bot request for Catalan Witkionary

  • Example pages (3): ca:wikt:mariner, ca:wikt:activity, ca:wikt:fèr - You can see best audio integration there.
  • Target section: There is no specific section. The audio file should be added under the language heading == {{-xx-}} == and before the first POS section. It should be added in a new line after pronuntiation templates, if any, either {{pron|xx|...}}, {{pronafi|xx|...}} or {{xx-pron}}. In these templates xx means language code ISO 639-1 or ISO 639-3.
  • Local audio template(s) example(s): {{àudio|en-us-activity.ogg|lang=en|accent=EUA}}
  • Local audio template(s) explained:
    • {àudio} means "audio", and take the following parameters...
    • en-us-activity.ogg is the filename
    • lang=en is the ISO 639-1 of the language.
    • accent=EUA means USA which is the accent or local variant. This parameter is optional and it may be codified for Catalan as explained at ca:wikt:Template:àudio.
  • Request by: Vriullop (talk) 14:41, 9 March 2021 (UTC)

API end point

Please note : Lingualibre API endpoint is atypical, and is : --Yug (talk) 21:01, 25 April 2021 (UTC)

Welcome to Kanashimi & Cewbot !

Welcome to Cewbot and its bot master Kanashimi‎ ! Kanashimi is the creator of Wikiapi.js (doc), a JS framework to create nodejs bots which edit Wikimedia's Wiki via API queries. I use this framework as well, so we are creating a little testing group and creating tools to ease juniors developers on-boarding. Yug (talk) 08:18, 27 April 2021 (UTC)

Thank you. cewbot runs on several wikis, including enwiki. I think I may transfer some tasks already running on other wiki projects to Lingua Libre:
Nickname Definition Helpfulness Difficulty to code
Topic list Add topic list to discussion pages including LinguaLibre:Chat room, LinguaLibre:Administrators' noticeboard, LinguaLibre:Technical board. Topic listed here is a sample. ? ?
Signature fixer. On talk page, when signature is missing, add user's signature and date. 2/4 ?
Discussions archiver. On defined pages marked by a category via template, when a section is inactive for n days, archive it. 3/4 ?
Anchors fixers. Fixing broken anchors including those archived. 2/4 ?
Sandbox cleaner. Periodically blanks LinguaLibre:Sandbox. 1/4 Easy
Welcome bot. When user makes an edit be has an user_talk page empty, post {{subst:welcome|~~~~}} 2/4 Easy
How about these? --Kanashimi (talk) 09:52, 27 April 2021 (UTC)
Hello Kanashimi, we were asking for a welcome bot just 1 days prior !
I added scores to your list in order of priority from my POV.
If your codes are accessible on github, I will reuse those for my Wikiapi eggs ! Yug (talk) 12:39, 28 April 2021 (UTC)
The codes are on github. However some programs are not simple. --Kanashimi (talk) 12:47, 28 April 2021 (UTC)

Draft bot

Is there anywhere a piece of code showing how to connect a bot to Lingua Libre and how to retrieve a page. Or maybe someone can share such code? I think it would be very helpful to point to such "draft bot" that could be used as a skeleton for several tasks. Pamputt (talk) 18:25, 7 July 2021 (UTC)

@Pamputt: I also started to look for a way to have a bot working here but couldn't find simple instructions. Poslovitch gave me some advice though, to build a bot working on the same base than LLBot (i.e. not based on Pywikibot). I can send you the info if you are interested. Best — WikiLucas (🖋️) 08:24, 8 July 2021 (UTC)
EDIT @Pamputt: Thank you very much for phabricator:T286303! I will try to implement a Welcome bot soon and a bot similar to what Olafbot does (i.e. updating local lists), but based on Wikt categories (lists are easier to find a suggest to newcomers than wiki categories). All the best — WikiLucas (🖋️) 09:36, 8 July 2021 (UTC)
It was fast for T286303 and it is really a good news. So it is right now possible to edit Lingua Libre using Pywikibot. Pamputt (talk) 13:11, 8 July 2021 (UTC)

And so, using Pywikibot, a draft code would be:

  • get a Mediawiki page
import pywikibot
site = pywikibot.Site('lingualibre','ligualibre')
page = pywikibot.Page(site, 'User:Example')
print(page.get()) #print the wikicode
  • get a Wikibase element
import pywikibot
site = pywikibot.Site('lingualibre:lingualibre')
repo = site.data_repository()  # the Wikibase repository for given site
item = pywikibot.ItemPage(repo, 'Q42')  # a repository item
data = item.get()  # get all item data from repository for this item
print(data) #print item content

Pamputt (talk) 13:36, 8 July 2021 (UTC)

Using PAWS, I get a UnknownFamilyError: Family lingualibre does not exist... EDIT: It is apparently due to PAWS updating pywikibot files with a delay, let's hope not too long! (and WMF team is apparently on holidays). Best — WikiLucas (🖋️) 14:04, 8 July 2021 (UTC)

Log in to Lingua Libre for a bot

While I started the support of Lingua Libre through Pywikibot, I think something is still missing because I do not manage to find how to log in to Lingua Libre so far. Pywikibot is usable to "read" Lingua Libre (get pages and items) but I cannot figure out yet how to write on Lingua Libre. Could someone please share a piece of code showing how their bot log in to Lingua Libre (@Yug and Olaf:). Pamputt (talk) 19:36, 8 July 2021 (UTC)

@Pamputt:: share your terminal error message. If you code with pywikibot, a proven bot framework, it's likely your code, maybe the login which fails. Questions :
  1. which account is your bot ?
  2. Do you login using a) human-friendly username and password or b) did you go through Special:BotPasswords ?
  3. to which base url api do you connect ? For me using WikiapiJS : (Not which partially redirects to
As for Pywikibot-speciffic code sample, I think mw:Manual:Pywikibot/Use_on_third-party_wikis and nearby pages may help. Yug (talk) 09:00, 12 July 2021 (UTC)
@Yug: actually Pywikibot is a proven bot framework but I am not aware of any other supported wiki that works like Lingua LIbre (log in through Wikimedia Commons using OAuth). So the problem is PWB does not manage to connect to LinguaLibre (I will send the log of "python login -v -debug" later if it can help). Because I proposed a patch to PWB to support LinguaLibre, something may be missing (getting page works, modifying or creating page does not work). That is why I am interesting to know the line of code related to WikiapiJS that you use. Pamputt (talk) 11:17, 12 July 2021 (UTC)
To reply to your questions, my bot is PamputtBot and currently I try to log in via password given in the terminal. Pamputt (talk) 11:18, 12 July 2021 (UTC)
@Pamputt:, still unable to edit ?
In my case Lingualibre's Special:BotPasswords gives me something like that :
  • user: 'Dragons Bot@Dragons_Bot'
  • pass: 'ueuh9er9qe7rteqr8t0qe9roeatmi2fb'
I also met some issues login in... and I had to use my mouse to log in online into that "Dragons_bot" account, you know, and to confirm on Commons. I went over this quickly and without thinking, but maybe the Oath on commons should also be activated ?? Yug (talk) 17:38, 12 July 2021 (UTC)
@Yug: yess, still unable to edit. Here is the output of "python login -v" (I tried to log in with Pamputt using PWB)
Python 3.8.9 (default, Apr  5 2021, 18:09:13) 
[GCC 10.2.1 20210130]
Found 1 lingualibre:lingualibre processes running, including this one.
WARNING: No user is logged in on site lingualibre:lingualibre
Password for user Pamputt on lingualibre:lingualibre (no characters will be shown): 
Logging in to lingualibre:lingualibre as Pamputt
WARNING: API warning (main): Unrecognized parameters: username, password.
ERROR: Login failed (FAIL).
Traceback (most recent call last):
  File "/home/pamputt/bot/core/pywikibot/", line 307, in login
  File "/home/pamputt/bot/core/pywikibot/data/", line 2968, in login_to_site
    raise pywikibot.exceptions.APIError(code=status, info=fail_reason)
pywikibot.exceptions.APIError: FAIL: The supplied credentials could not be authenticated.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "", line 399, in <module>
    if not main():
  File "", line 391, in main
  File "", line 106, in run_python_file
    exec(compile(source, filename, 'exec', dont_inherit=True),
  File "./scripts/", line 151, in <module>
  File "./scripts/", line 139, in main
  File "/home/pamputt/bot/core/pywikibot/site/", line 390, in login
    if login_manager.login(retry=True, autocreate=autocreate):
  File "/home/pamputt/bot/core/pywikibot/", line 316, in login
    raise NoUsernameError(error_msg)
pywikibot.exceptions.NoUsernameError: Username "Pamputt" does not have read permissions on lingualibre:lingualibre
.The supplied credentials could not be authenticated.
The interesting line is "WARNING: API warning (main): Unrecognized parameters: username, password.". Indeed, if we look at, we can see
"canauthenticatenow": "",
which means (AFAIK) that it is not possible to log in directly through the API. This is why we can only log in though Wikimedia Commons using OAuth.
So I am still looking for a reliable way (and reproducible way) to log in to Lingua Libre. If I find it, I will document it but if someong can document it before, he/she will be very welcome. Pamputt (talk) 19:13, 12 July 2021 (UTC)

Ok, I finally figured out how to log in to Lingua Libre using Pywikibot and Special:BotPasswords (this is the only way). I have created Help:Log in to Lingua Libre with Pywikibot to document it. Pamputt (talk) 18:08, 15 July 2021 (UTC)


Hi. To perform some tests for users that would like to develop a bot modifying items, I have create Lingua Libre-sandbox (Q595275). This item can be used to test their script before using it on real items. Pamputt (talk) 18:34, 8 July 2021 (UTC)

Tag misleading items

Now I am able to edit with PamputtBot, I have started to tag recording item that have an issue. See for example Q53462#P33. At the end, I plan to tag all recordings listed in LinguaLibre:Misleading items. Pamputt (talk) 18:57, 15 July 2021 (UTC)

Ok, PamputtBot is ready to tag all recordings that have an issue and that are listed here. I tested the bot on all recordings listed in LinguaLibre:Misleading items/Lepticed7 20181219. Could you validate that it makes sense to do so and please report if you see any weird stuff. If all is ok, I will run the bot on all the other recordings listed over there. Pamputt (talk) 23:59, 16 July 2021 (UTC)

Welcome bot

Hi @Pamputt, Yug, Poslovitch, and Olaf:

Have you heard of this welcoming script for Pywikibots? I think it would be valuable to have a bot welcoming new users with the {{Welcome}} template and adding a signature from a list of volunteers (for the moment, most of the welcoming is done by Pamputt and I). I am thinking about this because we will probably have a lot of newcomers related to Wikimania (in a couple of weeks).

I wanted to make this bot myself using PAWS, but it is not working on LiLi for the moment... @Pamputt, now that you managed to have a functional bot operating on LiLi, maybe you are able to add this task to your bot?

All the best, — WikiLucas (🖋️) 22:57, 1 August 2021 (UTC)

Hi, yes, it could be interesing to use the welcome script from Pywikibot. Unforutnately, I do not manage to log in anymore (I do not know why so far). So once I will solve this issue, why not. I could run the bot on Toolforge (I already have an account). Pamputt (talk) 21:07, 2 August 2021 (UTC)
My bot is working again Pamputt (talk) 11:38, 3 August 2021 (UTC)
I've looked at the welcome script from Pywikibot. Actually it is rather heavy and it needs a patch to be able to work here. Especially, the following variables have to be defined for Lingua Libre
  • "logbook", the page where the bot will save the log (see French Wikipedia for example)
  • "netext": the text for the welcome message ({{subst:welcome|%s}})
  • "report_pag": the page where the bot will report users with a possibly bad username
  • "bad_pag": the page where the bot reads the real-time bad words page (optional)
  • ...
So before going ahead, I think we need a clear consensus to go further. To me, I think we can manage without using such bot ut I am not against using a bot. Pamputt (talk) 18:45, 3 August 2021 (UTC)