Merge branch 'testing' into 'master'

1.2

See merge request piotrex43/RcGcDw!10
This commit is contained in:
Frisk 2018-07-08 11:50:22 +00:00
commit 63f29c8f09
10 changed files with 471 additions and 402 deletions

View file

@ -65,14 +65,16 @@ Translators:
Script seem to use about 10-17MB of RAM and negligible amount of CPU when fetching changes.
Script does not log bot actions by default.
"I GoT "Unable to process the event" mESSage!!! WHaT HApND?" - it means there is some kind of action that does not have a template in the script, please [create a ticket](https://gitlab.com/piotrex43/RcGcDw/issues/new?issue%5Bassignee_id%5D=&issue%5Bmilestone_id%5D=) with information on what wiki this error ocurred and when.
[Here](https://framapic.org/rVFQD0NQVcok/Ue1SVHHM0e4V.png) is a screenshot of how few embeds look like.
[Here](https://imgur.com/a/ACOMyak) are screenshots of how few embeds look like.
### License ###
Everything except the locale directory is under GNU Affero General Public License v3.0 license. The translations are used with allowance of translators, and all rights to them are owned by their respective authors.
### Currently running on ###
There are several Discord server, the script is already running on, you can join them and see it working.
[Conan Exiles](https://discord.gg/5252dZh)
[Minecraft Wiki English](https://discord.gg/fGdE5ZE)
[Minecraft Wiki (DE)](https://discord.gg/F75vfpd) (on a hidden channel)
[Minecraft Wiki Polska](https://discord.gg/9ZCcTnT)
[Minecraft Wiki FR](https://discord.gg/PSK48k7) (temporarily)

Binary file not shown.

View file

@ -5,8 +5,8 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"POT-Creation-Date: 2018-06-25 18:01+0200\n"
"PO-Revision-Date: 2018-06-30 00:01+0200\n"
"POT-Creation-Date: 2018-07-05 20:21+0200\n"
"PO-Revision-Date: 2018-07-05 20:24+0200\n"
"Last-Translator: MarkusRost\n"
"Language-Team: \n"
"Language: de\n"
@ -16,39 +16,39 @@ msgstr ""
"Generated-By: pygettext.py 1.5\n"
"X-Generator: Poedit 2.0.8\n"
#: rcgcdw.py:103
#: rcgcdw.py:126
msgid "(N!) "
msgstr "(N!) "
#: rcgcdw.py:103
#: rcgcdw.py:126
msgid "m "
msgstr "K "
#: rcgcdw.py:116
msgid "Uploaded a new version of {name}"
msgstr "Neue Dateiversion {name}"
#: rcgcdw.py:117
#: rcgcdw.py:144
msgid "([preview]({link}) | [undo]({undolink}))"
msgstr "([Vorschau]({link}) | [zurücksetzen]({undolink}))"
#: rcgcdw.py:117 rcgcdw.py:140
#: rcgcdw.py:144 rcgcdw.py:170
msgid "Options"
msgstr "Optionen"
#: rcgcdw.py:119
#: rcgcdw.py:145
msgid "Uploaded a new version of {name}"
msgstr "Neue Dateiversion {name}"
#: rcgcdw.py:147
msgid "Uploaded {name}"
msgstr "Neue Datei {name}"
#: rcgcdw.py:131
#: rcgcdw.py:160
msgid "**No license!**"
msgstr "**Keine Lizenz!**"
#: rcgcdw.py:140
#: rcgcdw.py:170
msgid "([preview]({link}))"
msgstr "([Vorschau]({link}))"
#: rcgcdw.py:141
#: rcgcdw.py:171
msgid ""
"{desc}\n"
"License: {license}"
@ -56,306 +56,311 @@ msgstr ""
"{desc}\n"
"Lizenz: {license}"
#: rcgcdw.py:144
#: rcgcdw.py:174
msgid "Deleted page {article}"
msgstr "Löschte {article}"
#: rcgcdw.py:147
#: rcgcdw.py:177
msgid "Deleted redirect {article} by overwriting"
msgstr "Löschte die Weiterleitung {article} um Platz zu machen"
#: rcgcdw.py:150
#: rcgcdw.py:180
msgid "A redirect has been made"
msgstr "Eine Weiterleitung wurde erstellt"
#: rcgcdw.py:150
#: rcgcdw.py:180
msgid "No redirect has been made"
msgstr "Die Erstellung einer Weiterleitung wurde unterdrückt"
#: rcgcdw.py:151
#: rcgcdw.py:181
msgid "Moved {article} to {target}"
msgstr "Verschob {article} nach {target}"
#: rcgcdw.py:154
#: rcgcdw.py:184
msgid "Moved {article} to {title} over redirect"
msgstr "Verschob {article} nach {title} und überschrieb eine Weiterleitung"
#: rcgcdw.py:157
#: rcgcdw.py:187
msgid "Moved protection settings from {article} to {title}"
msgstr "Verschob die Schutzeinstellungen von {article} nach {title}"
#: rcgcdw.py:161
#: rcgcdw.py:191
msgid "infinity and beyond"
msgstr "alle Ewigkeit"
#: rcgcdw.py:162
#: rcgcdw.py:192
msgid "Blocked {blocked_user} for {time}"
msgstr "Sperrte {blocked_user} für {time}"
#: rcgcdw.py:166
#: rcgcdw.py:196
msgid "Changed block settings for {blocked_user}"
msgstr "Änderte die Sperreinstellungen für {blocked_user}"
#: rcgcdw.py:170
#: rcgcdw.py:200
msgid "Unblocked {blocked_user}"
msgstr "Hob die Sperre von {blocked_user} auf"
#: rcgcdw.py:174
#: rcgcdw.py:204
msgid "Left a comment on {target}'s profile"
msgstr "Hinterließ ein Kommentar auf dem Profil von {target}"
#: rcgcdw.py:178
#: rcgcdw.py:208
msgid "Replied to a comment on {target}'s profile"
msgstr "Antwortete auf ein Kommentar auf dem Profil von {target}"
#: rcgcdw.py:182
#: rcgcdw.py:212
msgid "Edited a comment on {target}'s profile"
msgstr "Bearbeitete ein Kommentar auf dem Profil von {target}"
#: rcgcdw.py:186
#: rcgcdw.py:216
msgid "Location"
msgstr "Wohnort"
#: rcgcdw.py:188
#: rcgcdw.py:218
msgid "About me"
msgstr "\"Über mich\"-Abschnitt"
#: rcgcdw.py:190
#: rcgcdw.py:220
msgid "Google link"
msgstr "Google-Konto"
#: rcgcdw.py:192
#: rcgcdw.py:222
msgid "Facebook link"
msgstr "Facebook-Seite"
#: rcgcdw.py:194
#: rcgcdw.py:224
msgid "Twitter link"
msgstr "Twitter-Benutzernamen"
#: rcgcdw.py:196
#: rcgcdw.py:226
msgid "Reddit link"
msgstr "Reddit-Benutzernamen"
#: rcgcdw.py:198
#: rcgcdw.py:228
msgid "Twitch link"
msgstr "Twitch-Account"
#: rcgcdw.py:200
#: rcgcdw.py:230
msgid "PSN link"
msgstr "PSN-Account"
#: rcgcdw.py:202
#: rcgcdw.py:232
msgid "VK link"
msgstr "VK-Account"
#: rcgcdw.py:204
#: rcgcdw.py:234
msgid "XVL link"
msgstr "Xbox-Live-Tag"
#: rcgcdw.py:206
#: rcgcdw.py:236
msgid "Steam link"
msgstr "Steam-Account"
#: rcgcdw.py:208
#: rcgcdw.py:238
msgid "Unknown"
msgstr "Unbekannt"
#: rcgcdw.py:209
#: rcgcdw.py:239
msgid "Edited {target}'s profile"
msgstr "Bearbeitete das Profil von {target}"
#: rcgcdw.py:210
#: rcgcdw.py:240
msgid "{field} field changed to: {desc}"
msgstr "{field} geändert zu: {desc}"
#: rcgcdw.py:214
#: rcgcdw.py:244
msgid "Deleted a comment on {target}'s profile"
msgstr "Löschte ein Kommentar auf dem Profil von {target}"
#: rcgcdw.py:217
#: rcgcdw.py:247
msgid "Changed group membership for {target}"
msgstr "Änderte die Gruppenzugehörigkeit von {target}"
#: rcgcdw.py:221 rcgcdw.py:223
#: rcgcdw.py:251 rcgcdw.py:253
msgid "none"
msgstr "keine"
#: rcgcdw.py:224 rcgcdw.py:349
#: rcgcdw.py:254 rcgcdw.py:376
msgid "No description provided"
msgstr "Keine Zusammenfassung angegeben"
#: rcgcdw.py:225
#: rcgcdw.py:255
msgid "Groups changed from {old_groups} to {new_groups}{reason}"
msgstr "Änderte die Gruppenzugehörigkeit von {old_groups} auf {new_groups}: {reason}"
msgstr ""
"Änderte die Gruppenzugehörigkeit von {old_groups} auf {new_groups}{reason}"
#: rcgcdw.py:228
#: rcgcdw.py:258
msgid "Protected {target}"
msgstr "Schützte {target}"
#: rcgcdw.py:232
#: rcgcdw.py:262
msgid "Changed protection level for {article}"
msgstr "Änderte den Schutzstatus von {article}"
#: rcgcdw.py:236
#: rcgcdw.py:266
msgid "Removed protection from {article}"
msgstr "Entfernte den Schutz von {article}"
#: rcgcdw.py:239
#: rcgcdw.py:269
msgid "Changed visibility of revision(s) on page {article} "
msgstr "Änderte die Sichtbarkeit einiger Versionen von {article}"
#: rcgcdw.py:242
#: rcgcdw.py:272
msgid "Imported {article} with {count} revision(s)"
msgstr "Importierte {article} mit {count} Versionen"
#: rcgcdw.py:245
#: rcgcdw.py:275
msgid "Restored {article}"
msgstr "Stellte {article} wieder her"
#: rcgcdw.py:248
#: rcgcdw.py:278
msgid "Changed visibility of log events"
msgstr "Änderte die Sichtbarkeit eines Logbucheintrags"
#: rcgcdw.py:251
#: rcgcdw.py:281
msgid "Imported interwiki"
msgstr "Importierte Interwiki"
#: rcgcdw.py:254
#: rcgcdw.py:284
msgid "Edited abuse filter number {number}"
msgstr "Änderte Missbrauchsfilter {number}"
#: rcgcdw.py:257
#: rcgcdw.py:287
msgid "Merged revision histories of {article} into {dest}"
msgstr "Vereinigte Versionsgeschichten von {article} in {dest}"
#: rcgcdw.py:260
#: rcgcdw.py:290
msgid "Added an entry to the interwiki table"
msgstr "Fügte ein Interwiki-Präfix hinzu"
#: rcgcdw.py:261 rcgcdw.py:265
#: rcgcdw.py:291 rcgcdw.py:295
msgid "Prefix: {prefix}, website: {website} | {desc}"
msgstr "Präfix: {prefix}, URL: {website} | {desc}"
#: rcgcdw.py:264
#: rcgcdw.py:294
msgid "Edited an entry in interwiki table"
msgstr "Änderte ein Interwiki-Präfix"
#: rcgcdw.py:268
#: rcgcdw.py:298
msgid "Deleted an entry in interwiki table"
msgstr "Entfernte ein Interwiki-Präfix"
#: rcgcdw.py:269
#: rcgcdw.py:299
msgid "Prefix: {prefix} | {desc}"
msgstr "Präfix: {prefix} | {desc}"
#: rcgcdw.py:272
#: rcgcdw.py:302
msgid "Changed the content model of the page {article}"
msgstr "Änderte das Inhaltsmodell von {article}"
#: rcgcdw.py:273
#: rcgcdw.py:303
msgid "Model changed from {old} to {new}: {reason}"
msgstr "Modell geändert von {old} zu {new}: {reason}"
#: rcgcdw.py:276
#: rcgcdw.py:306
msgid "Edited the sprite for {article}"
msgstr "Edited the sprite for {article}"
#: rcgcdw.py:279
#: rcgcdw.py:309
msgid "Created the sprite sheet for {article}"
msgstr "Created the sprite sheet for {article}"
#: rcgcdw.py:282
#: rcgcdw.py:312
msgid "Edited the slice for {article}"
msgstr "Edited the slice for {article}"
#: rcgcdw.py:285
#: rcgcdw.py:315
msgid "Created a tag \"{tag}\""
msgstr "Erstellte die Markierung \"{tag}\""
#: rcgcdw.py:289
#: rcgcdw.py:319
msgid "Deleted a tag \"{tag}\""
msgstr "Löschte die Markierung \"{tag}\""
#: rcgcdw.py:293
#: rcgcdw.py:323
msgid "Activated a tag \"{tag}\""
msgstr "Aktivierte die Markierung \"{tag}\""
#: rcgcdw.py:296
#: rcgcdw.py:326
msgid "Deactivated a tag \"{tag}\""
msgstr "Deaktivierte die Markierung \"{tag}\""
#: rcgcdw.py:317
#: rcgcdw.py:347
msgid "Tags"
msgstr "Markierungen"
#: rcgcdw.py:443
#: rcgcdw.py:469
msgid "Unable to process the event"
msgstr "Ereignis kann nicht verabreitet werden"
#: rcgcdw.py:443
#: rcgcdw.py:469
msgid "error"
msgstr "Fehler"
#: rcgcdw.py:523
#: rcgcdw.py:549
msgid "Daily overview"
msgstr "Tägliche Übersicht"
#: rcgcdw.py:539
#: rcgcdw.py:565
msgid " ({} actions)"
msgstr " ({} Aktionen)"
#: rcgcdw.py:540
#: rcgcdw.py:566
msgid " UTC ({} actions)"
msgstr " UTC ({} Aktionen)"
#: rcgcdw.py:542 rcgcdw.py:543
#: rcgcdw.py:568 rcgcdw.py:569
msgid "But nobody came"
msgstr "Keine Aktivität"
#: rcgcdw.py:547
#: rcgcdw.py:573
msgid "Admin actions"
msgstr "Admin-Aktionen"
#: rcgcdw.py:547
#: rcgcdw.py:573
msgid "Bytes changed"
msgstr "Bytes geändert"
#: rcgcdw.py:547
#: rcgcdw.py:573
msgid "Day score"
msgstr "Tageswert"
#: rcgcdw.py:547
#: rcgcdw.py:573
msgid "Edits made"
msgstr "Bearbeitungen"
#: rcgcdw.py:547
#: rcgcdw.py:573
msgid "Most active hours"
msgstr "Aktivste Stunden"
#: rcgcdw.py:547
#: rcgcdw.py:573
msgid "Most active users"
msgstr "Aktivste Benutzer"
#: rcgcdw.py:547
#: rcgcdw.py:573
msgid "New articles"
msgstr "Neue Artikel"
#: rcgcdw.py:547
#: rcgcdw.py:573
msgid "New files"
msgstr "Neue Dateien"
#: rcgcdw.py:547
#: rcgcdw.py:573
msgid "Unique contributors"
msgstr "Einzelne Autoren"
#: rcgcdw.py:664
#: rcgcdw.py:662
msgid "Connection to {wiki} seems to be stable now."
msgstr "{wiki} scheint wieder erreichbar zu sein."
#: rcgcdw.py:662 rcgcdw.py:715
msgid "Connection status"
msgstr "Verbindungsstatus"
#: rcgcdw.py:664
#: rcgcdw.py:715
msgid "{wiki} seems to be down or unreachable."
msgstr "Das {wiki} scheint unerreichbar zu sein."
#: rcgcdw.py:683
#: rcgcdw.py:737
msgid "{wiki} is back up!"
msgstr "Das {wiki} ist wieder erreichbar."

Binary file not shown.

View file

@ -5,8 +5,8 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"POT-Creation-Date: 2018-06-25 18:01+0200\n"
"PO-Revision-Date: 2018-06-25 18:03+0200\n"
"POT-Creation-Date: 2018-07-05 20:21+0200\n"
"PO-Revision-Date: 2018-07-06 10:44+0200\n"
"Last-Translator: JSBM\n"
"Language-Team: \n"
"Language: fr\n"
@ -19,39 +19,39 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Poedit-SearchPath-0: rcgcdw.pot\n"
#: rcgcdw.py:103
#: rcgcdw.py:126
msgid "(N!) "
msgstr "(N!) "
#: rcgcdw.py:103
#: rcgcdw.py:126
msgid "m "
msgstr "m "
#: rcgcdw.py:116
msgid "Uploaded a new version of {name}"
msgstr "Téléversement d'une nouvelle version de {name}"
#: rcgcdw.py:117
#: rcgcdw.py:144
msgid "([preview]({link}) | [undo]({undolink}))"
msgstr "([Aperçu]({link}) | [Annuler]({undolink}))"
#: rcgcdw.py:117 rcgcdw.py:140
#: rcgcdw.py:144 rcgcdw.py:170
msgid "Options"
msgstr "Options"
#: rcgcdw.py:119
#: rcgcdw.py:145
msgid "Uploaded a new version of {name}"
msgstr "Téléversement d'une nouvelle version de {name}"
#: rcgcdw.py:147
msgid "Uploaded {name}"
msgstr "Téléversement de {name}"
#: rcgcdw.py:131
#: rcgcdw.py:160
msgid "**No license!**"
msgstr "**Aucune license!**"
#: rcgcdw.py:140
#: rcgcdw.py:170
msgid "([preview]({link}))"
msgstr "([Aperçu]({link}))"
#: rcgcdw.py:141
#: rcgcdw.py:171
msgid ""
"{desc}\n"
"License: {license}"
@ -59,306 +59,310 @@ msgstr ""
"{desc}\n"
"License: {license}"
#: rcgcdw.py:144
#: rcgcdw.py:174
msgid "Deleted page {article}"
msgstr "Suppression de la page {article}"
#: rcgcdw.py:147
#: rcgcdw.py:177
msgid "Deleted redirect {article} by overwriting"
msgstr "Suppression par écrasement de la redirection {article}"
#: rcgcdw.py:150
#: rcgcdw.py:180
msgid "A redirect has been made"
msgstr "Une redirection a été créée"
#: rcgcdw.py:150
#: rcgcdw.py:180
msgid "No redirect has been made"
msgstr "Aucune redirection créée"
#: rcgcdw.py:151
#: rcgcdw.py:181
msgid "Moved {article} to {target}"
msgstr "Déplacement de {article} vers {target}"
#: rcgcdw.py:154
#: rcgcdw.py:184
msgid "Moved {article} to {title} over redirect"
msgstr "Déplacement de {article} vers {title} par redirection"
#: rcgcdw.py:157
#: rcgcdw.py:187
msgid "Moved protection settings from {article} to {title}"
msgstr "Transfert des paramètres de protection de {article} vers {title}"
#: rcgcdw.py:161
#: rcgcdw.py:191
msgid "infinity and beyond"
msgstr "toujours"
#: rcgcdw.py:162
#: rcgcdw.py:192
msgid "Blocked {blocked_user} for {time}"
msgstr "{blocked user} a été bloqué pour {time}"
msgstr "{blocked_user} a été bloqué pour {time}"
#: rcgcdw.py:166
#: rcgcdw.py:196
msgid "Changed block settings for {blocked_user}"
msgstr "Modification des paramètres de blocage pour {blocked_user}"
#: rcgcdw.py:170
#: rcgcdw.py:200
msgid "Unblocked {blocked_user}"
msgstr "{blocked_user} a été débloqué"
#: rcgcdw.py:174
#: rcgcdw.py:204
msgid "Left a comment on {target}'s profile"
msgstr "Ajout d'un commentaire sur le profil de {target}"
#: rcgcdw.py:178
#: rcgcdw.py:208
msgid "Replied to a comment on {target}'s profile"
msgstr "Réponse à un commentaire sur le profil de {target}"
#: rcgcdw.py:182
#: rcgcdw.py:212
msgid "Edited a comment on {target}'s profile"
msgstr "Édition d'un commentaire sur le profil de {target}"
#: rcgcdw.py:186
#: rcgcdw.py:216
msgid "Location"
msgstr "Emplacement"
#: rcgcdw.py:188
#: rcgcdw.py:218
msgid "About me"
msgstr "À propos de moi"
#: rcgcdw.py:190
#: rcgcdw.py:220
msgid "Google link"
msgstr "Lien Google"
#: rcgcdw.py:192
#: rcgcdw.py:222
msgid "Facebook link"
msgstr "Lien Facebook"
#: rcgcdw.py:194
#: rcgcdw.py:224
msgid "Twitter link"
msgstr "Lien Twitter"
#: rcgcdw.py:196
#: rcgcdw.py:226
msgid "Reddit link"
msgstr "Lien Reddit"
#: rcgcdw.py:198
#: rcgcdw.py:228
msgid "Twitch link"
msgstr "Lien Twitch"
#: rcgcdw.py:200
#: rcgcdw.py:230
msgid "PSN link"
msgstr "Lien PSN"
#: rcgcdw.py:202
#: rcgcdw.py:232
msgid "VK link"
msgstr "Lien VK"
#: rcgcdw.py:204
#: rcgcdw.py:234
msgid "XVL link"
msgstr "Lien XVL"
#: rcgcdw.py:206
#: rcgcdw.py:236
msgid "Steam link"
msgstr "Lien Steam"
#: rcgcdw.py:208
#: rcgcdw.py:238
msgid "Unknown"
msgstr "Inconnu"
#: rcgcdw.py:209
#: rcgcdw.py:239
msgid "Edited {target}'s profile"
msgstr "Modification du profil de {target}"
#: rcgcdw.py:210
#: rcgcdw.py:240
msgid "{field} field changed to: {desc}"
msgstr "{field} modifié pour: {desc}"
#: rcgcdw.py:214
#: rcgcdw.py:244
msgid "Deleted a comment on {target}'s profile"
msgstr "Retrait d'un commentaire sur le profil de {target}"
#: rcgcdw.py:217
#: rcgcdw.py:247
msgid "Changed group membership for {target}"
msgstr "Modification des groupes pour {target}"
#: rcgcdw.py:221 rcgcdw.py:223
#: rcgcdw.py:251 rcgcdw.py:253
msgid "none"
msgstr "aucun"
#: rcgcdw.py:224 rcgcdw.py:349
#: rcgcdw.py:254 rcgcdw.py:376
msgid "No description provided"
msgstr "Aucune description"
#: rcgcdw.py:225
#: rcgcdw.py:255
msgid "Groups changed from {old_groups} to {new_groups}{reason}"
msgstr "Groupe modifié de {old_groups} vers {new_groups}: {reason}"
msgstr "Groupe modifié de {old_groups} vers {new_groups}{reason}"
#: rcgcdw.py:228
#: rcgcdw.py:258
msgid "Protected {target}"
msgstr "Protection de {target}"
#: rcgcdw.py:232
#: rcgcdw.py:262
msgid "Changed protection level for {article}"
msgstr "Modification du niveau de protection de {article}"
#: rcgcdw.py:236
#: rcgcdw.py:266
msgid "Removed protection from {article}"
msgstr "Retrait de la protection de {article}"
#: rcgcdw.py:239
#: rcgcdw.py:269
msgid "Changed visibility of revision(s) on page {article} "
msgstr "Modification de la visibilité de révision(s) sur la page {article} "
#: rcgcdw.py:242
#: rcgcdw.py:272
msgid "Imported {article} with {count} revision(s)"
msgstr "Article {article} importé avec {count} révision(s)"
#: rcgcdw.py:245
#: rcgcdw.py:275
msgid "Restored {article}"
msgstr "Restauration de {article}"
#: rcgcdw.py:248
#: rcgcdw.py:278
msgid "Changed visibility of log events"
msgstr "Modification de la visibilité d'évènements des journaux"
#: rcgcdw.py:251
#: rcgcdw.py:281
msgid "Imported interwiki"
msgstr "Importation d'interwiki"
#: rcgcdw.py:254
#: rcgcdw.py:284
msgid "Edited abuse filter number {number}"
msgstr "Édition de la règle {number} du filtre anti-abus"
#: rcgcdw.py:257
#: rcgcdw.py:287
msgid "Merged revision histories of {article} into {dest}"
msgstr "Fusion de l'historique de {article} vers {dest}"
#: rcgcdw.py:260
#: rcgcdw.py:290
msgid "Added an entry to the interwiki table"
msgstr "Ajout d'une entrée à la table interwiki"
#: rcgcdw.py:261 rcgcdw.py:265
#: rcgcdw.py:291 rcgcdw.py:295
msgid "Prefix: {prefix}, website: {website} | {desc}"
msgstr "Préfixe: {prefix}, site: {website} | {desc}"
#: rcgcdw.py:264
#: rcgcdw.py:294
msgid "Edited an entry in interwiki table"
msgstr "Modification d'une entrée de la table interwiki"
#: rcgcdw.py:268
#: rcgcdw.py:298
msgid "Deleted an entry in interwiki table"
msgstr "Retrait d'une entrée de la table interwiki"
#: rcgcdw.py:269
#: rcgcdw.py:299
msgid "Prefix: {prefix} | {desc}"
msgstr "Préfixe: {prefix} | {desc}"
#: rcgcdw.py:272
#: rcgcdw.py:302
msgid "Changed the content model of the page {article}"
msgstr "Modification du modèle de contenu de l'article {article}"
#: rcgcdw.py:273
#: rcgcdw.py:303
msgid "Model changed from {old} to {new}: {reason}"
msgstr "Modèle changé de {old} à {new}: {reason}"
#: rcgcdw.py:276
#: rcgcdw.py:306
msgid "Edited the sprite for {article}"
msgstr "Édition du sprite de {article}"
#: rcgcdw.py:279
#: rcgcdw.py:309
msgid "Created the sprite sheet for {article}"
msgstr "Création d'une feuille de sprite pour {article}"
#: rcgcdw.py:282
#: rcgcdw.py:312
msgid "Edited the slice for {article}"
msgstr ""
msgstr "Edited the slice for {article}"
#: rcgcdw.py:285
#: rcgcdw.py:315
msgid "Created a tag \"{tag}\""
msgstr "Création du tag « {tag} »"
#: rcgcdw.py:289
#: rcgcdw.py:319
msgid "Deleted a tag \"{tag}\""
msgstr "Suppression du tag « {tag} »"
#: rcgcdw.py:293
#: rcgcdw.py:323
msgid "Activated a tag \"{tag}\""
msgstr "Activation du tag « {tag} »"
#: rcgcdw.py:296
#: rcgcdw.py:326
msgid "Deactivated a tag \"{tag}\""
msgstr "Désactivation du tag « {tag} »"
#: rcgcdw.py:317
#: rcgcdw.py:347
msgid "Tags"
msgstr "Tags"
#: rcgcdw.py:443
#: rcgcdw.py:469
msgid "Unable to process the event"
msgstr "Impossible d'analyser l'évènement"
#: rcgcdw.py:443
#: rcgcdw.py:469
msgid "error"
msgstr "erreur"
#: rcgcdw.py:523
#: rcgcdw.py:549
msgid "Daily overview"
msgstr "Résumé de la journée"
#: rcgcdw.py:539
#: rcgcdw.py:565
msgid " ({} actions)"
msgstr " ({} actions)"
#: rcgcdw.py:540
#: rcgcdw.py:566
msgid " UTC ({} actions)"
msgstr " UTC ({} actions)"
#: rcgcdw.py:542 rcgcdw.py:543
#: rcgcdw.py:568 rcgcdw.py:569
msgid "But nobody came"
msgstr "Aucune activité"
#: rcgcdw.py:547
#: rcgcdw.py:573
msgid "Admin actions"
msgstr "Actions d'administrateur"
#: rcgcdw.py:547
#: rcgcdw.py:573
msgid "Bytes changed"
msgstr "Octets modifiés"
#: rcgcdw.py:547
#: rcgcdw.py:573
msgid "Day score"
msgstr "Score du jour"
#: rcgcdw.py:547
#: rcgcdw.py:573
msgid "Edits made"
msgstr "Modifications effectuées"
#: rcgcdw.py:547
#: rcgcdw.py:573
msgid "Most active hours"
msgstr "Heures les plus actives"
#: rcgcdw.py:547
#: rcgcdw.py:573
msgid "Most active users"
msgstr "Membres les plus actifs"
#: rcgcdw.py:547
#: rcgcdw.py:573
msgid "New articles"
msgstr "Nouveaux articles"
#: rcgcdw.py:547
#: rcgcdw.py:573
msgid "New files"
msgstr "Nouveaux fichiers"
#: rcgcdw.py:547
#: rcgcdw.py:573
msgid "Unique contributors"
msgstr "Contributeurs uniques"
#: rcgcdw.py:664
#: rcgcdw.py:662
msgid "Connection to {wiki} seems to be stable now."
msgstr "La connexion avec {wiki} semble stable maintenant."
#: rcgcdw.py:662 rcgcdw.py:715
msgid "Connection status"
msgstr "Statut de connexion"
#: rcgcdw.py:664
#: rcgcdw.py:715
msgid "{wiki} seems to be down or unreachable."
msgstr "{wiki} semble être down ou inatteignable."
#: rcgcdw.py:683
#: rcgcdw.py:737
msgid "{wiki} is back up!"
msgstr "{wiki} est de retour!"

Binary file not shown.

View file

@ -5,8 +5,8 @@
msgid ""
msgstr ""
"Project-Id-Version: RcGcDw\n"
"POT-Creation-Date: 2018-06-25 18:01+0200\n"
"PO-Revision-Date: 2018-07-03 20:56+0200\n"
"POT-Creation-Date: 2018-07-05 20:21+0200\n"
"PO-Revision-Date: 2018-07-05 20:22+0200\n"
"Last-Translator: Frisk <piotrex43@protonmail.ch>\n"
"Language-Team: \n"
"Language: pl\n"
@ -18,39 +18,39 @@ msgstr ""
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2);\n"
#: rcgcdw.py:103
#: rcgcdw.py:126
msgid "(N!) "
msgstr "(N!) "
#: rcgcdw.py:103
#: rcgcdw.py:126
msgid "m "
msgstr "d "
#: rcgcdw.py:116
msgid "Uploaded a new version of {name}"
msgstr "Przesłał(a) nową wersję {name}"
#: rcgcdw.py:117
#: rcgcdw.py:144
msgid "([preview]({link}) | [undo]({undolink}))"
msgstr "([podgląd]({link}) | [wycofaj]({undolink}))"
#: rcgcdw.py:117 rcgcdw.py:140
#: rcgcdw.py:144 rcgcdw.py:170
msgid "Options"
msgstr "Opcje"
#: rcgcdw.py:119
#: rcgcdw.py:145
msgid "Uploaded a new version of {name}"
msgstr "Przesłał(a) nową wersję {name}"
#: rcgcdw.py:147
msgid "Uploaded {name}"
msgstr "Przesłał(a) {name}"
#: rcgcdw.py:131
#: rcgcdw.py:160
msgid "**No license!**"
msgstr "**Brak licencji!**"
#: rcgcdw.py:140
#: rcgcdw.py:170
msgid "([preview]({link}))"
msgstr "([podgląd]({link}))"
#: rcgcdw.py:141
#: rcgcdw.py:171
msgid ""
"{desc}\n"
"License: {license}"
@ -58,309 +58,313 @@ msgstr ""
"{desc}\n"
"Licencja: {license}"
#: rcgcdw.py:144
#: rcgcdw.py:174
msgid "Deleted page {article}"
msgstr "Usunął/usunęła {article}"
#: rcgcdw.py:147
#: rcgcdw.py:177
msgid "Deleted redirect {article} by overwriting"
msgstr ""
"Usunął/usunęła przekierowanie ({article}) aby utworzyć miejsce dla "
"przenoszonej strony"
#: rcgcdw.py:150
#: rcgcdw.py:180
msgid "A redirect has been made"
msgstr "Zostało utworzone przekierowanie"
#: rcgcdw.py:150
#: rcgcdw.py:180
msgid "No redirect has been made"
msgstr "Nie utworzono przekierowania"
#: rcgcdw.py:151
#: rcgcdw.py:181
msgid "Moved {article} to {target}"
msgstr "Przeniósł/przeniosła {article} do {target}"
#: rcgcdw.py:154
#: rcgcdw.py:184
msgid "Moved {article} to {title} over redirect"
msgstr "Przeniósł/przeniosła {article} do strony przekierowującej {target}"
#: rcgcdw.py:157
#: rcgcdw.py:187
msgid "Moved protection settings from {article} to {title}"
msgstr "Przeniesiono ustawienia zabezpieczeń z {article} do {title}"
#: rcgcdw.py:161
#: rcgcdw.py:191
msgid "infinity and beyond"
msgstr "wieczność"
#: rcgcdw.py:162
#: rcgcdw.py:192
msgid "Blocked {blocked_user} for {time}"
msgstr "Zablokowano {blocked_user} na {time}"
#: rcgcdw.py:166
#: rcgcdw.py:196
msgid "Changed block settings for {blocked_user}"
msgstr "Zmienił ustawienia blokady {blocked_user}"
#: rcgcdw.py:170
#: rcgcdw.py:200
msgid "Unblocked {blocked_user}"
msgstr "Odblokował {blocked_user}"
#: rcgcdw.py:174
#: rcgcdw.py:204
msgid "Left a comment on {target}'s profile"
msgstr "Pozostawiono komentarz na profilu użytkownika {target}"
#: rcgcdw.py:178
#: rcgcdw.py:208
msgid "Replied to a comment on {target}'s profile"
msgstr "Odpowiedziano na komentarz na profilu użytkownika {target}"
#: rcgcdw.py:182
#: rcgcdw.py:212
msgid "Edited a comment on {target}'s profile"
msgstr "Edytowano komentarz na profilu użytkownika {target}"
#: rcgcdw.py:186
#: rcgcdw.py:216
msgid "Location"
msgstr "Lokacja"
#: rcgcdw.py:188
#: rcgcdw.py:218
msgid "About me"
msgstr "O mnie"
#: rcgcdw.py:190
#: rcgcdw.py:220
msgid "Google link"
msgstr "link Google"
#: rcgcdw.py:192
#: rcgcdw.py:222
msgid "Facebook link"
msgstr "link Facebook"
#: rcgcdw.py:194
#: rcgcdw.py:224
msgid "Twitter link"
msgstr "link Twitter"
#: rcgcdw.py:196
#: rcgcdw.py:226
msgid "Reddit link"
msgstr "link Reddit"
#: rcgcdw.py:198
#: rcgcdw.py:228
msgid "Twitch link"
msgstr "link Twitch"
#: rcgcdw.py:200
#: rcgcdw.py:230
msgid "PSN link"
msgstr "link PSN"
#: rcgcdw.py:202
#: rcgcdw.py:232
msgid "VK link"
msgstr "link VK"
#: rcgcdw.py:204
#: rcgcdw.py:234
msgid "XVL link"
msgstr "link XVL"
#: rcgcdw.py:206
#: rcgcdw.py:236
msgid "Steam link"
msgstr "link Steam"
#: rcgcdw.py:208
#: rcgcdw.py:238
msgid "Unknown"
msgstr "Nieznana"
#: rcgcdw.py:209
#: rcgcdw.py:239
msgid "Edited {target}'s profile"
msgstr "Edytowano profil użytkownika {target}"
#: rcgcdw.py:210
#: rcgcdw.py:240
msgid "{field} field changed to: {desc}"
msgstr "pole {field} zostało zmienione na: {desc}"
#: rcgcdw.py:214
#: rcgcdw.py:244
msgid "Deleted a comment on {target}'s profile"
msgstr "Usunął komentarz na profilu użytkownika {target}"
#: rcgcdw.py:217
#: rcgcdw.py:247
msgid "Changed group membership for {target}"
msgstr "Zmieniono przynależność do grup dla {target}"
#: rcgcdw.py:221 rcgcdw.py:223
#: rcgcdw.py:251 rcgcdw.py:253
msgid "none"
msgstr "brak"
#: rcgcdw.py:224 rcgcdw.py:349
#: rcgcdw.py:254 rcgcdw.py:376
msgid "No description provided"
msgstr "Nie podano opisu zmian"
#: rcgcdw.py:225
#: rcgcdw.py:255
msgid "Groups changed from {old_groups} to {new_groups}{reason}"
msgstr "Grupy zmienione z {old_groups} do {new_groups}{reason}"
#: rcgcdw.py:228
#: rcgcdw.py:258
msgid "Protected {target}"
msgstr "Zabezpieczono {target}"
#: rcgcdw.py:232
#: rcgcdw.py:262
msgid "Changed protection level for {article}"
msgstr "Zmieniono poziom zabezpieczeń {article}"
#: rcgcdw.py:236
#: rcgcdw.py:266
msgid "Removed protection from {article}"
msgstr "Usunięto zabezpieczenie {article}"
#: rcgcdw.py:239
#: rcgcdw.py:269
msgid "Changed visibility of revision(s) on page {article} "
msgstr "Zmieniono widoczność wersji na stroni {article}"
#: rcgcdw.py:242
#: rcgcdw.py:272
msgid "Imported {article} with {count} revision(s)"
msgstr "Zaimportowano {article} z {count} wersjami"
#: rcgcdw.py:245
#: rcgcdw.py:275
msgid "Restored {article}"
msgstr "Przywrócono {article)"
#: rcgcdw.py:248
#: rcgcdw.py:278
msgid "Changed visibility of log events"
msgstr "Zmieniono widoczność logów"
#: rcgcdw.py:251
#: rcgcdw.py:281
msgid "Imported interwiki"
msgstr "Zaimportowano interwiki"
#: rcgcdw.py:254
#: rcgcdw.py:284
msgid "Edited abuse filter number {number}"
msgstr "Edytowano filtr nadużyć numer {number}"
#: rcgcdw.py:257
#: rcgcdw.py:287
msgid "Merged revision histories of {article} into {dest}"
msgstr "Połączono historie {article} z {dest}"
#: rcgcdw.py:260
#: rcgcdw.py:290
msgid "Added an entry to the interwiki table"
msgstr "Dodano wpis do tabeli interwiki"
#: rcgcdw.py:261 rcgcdw.py:265
#: rcgcdw.py:291 rcgcdw.py:295
msgid "Prefix: {prefix}, website: {website} | {desc}"
msgstr "Prefix: {prefix}, strona: {website} | desc"
#: rcgcdw.py:264
#: rcgcdw.py:294
msgid "Edited an entry in interwiki table"
msgstr "Edytowano wpis interwiki"
#: rcgcdw.py:268
#: rcgcdw.py:298
msgid "Deleted an entry in interwiki table"
msgstr "Usunięto wpis interwiki"
#: rcgcdw.py:269
#: rcgcdw.py:299
msgid "Prefix: {prefix} | {desc}"
msgstr "Prefix: {prefix} | {desc}"
#: rcgcdw.py:272
#: rcgcdw.py:302
msgid "Changed the content model of the page {article}"
msgstr "Zmieniono model zawartości {article}"
#: rcgcdw.py:273
#: rcgcdw.py:303
msgid "Model changed from {old} to {new}: {reason}"
msgstr "Model został zmieniony z {old} na {new}: {reason}"
#: rcgcdw.py:276
#: rcgcdw.py:306
msgid "Edited the sprite for {article}"
msgstr "Edytowano sprite dla {article}"
#: rcgcdw.py:279
#: rcgcdw.py:309
msgid "Created the sprite sheet for {article}"
msgstr "Utworzono sprite sheet dla {article}"
#: rcgcdw.py:282
#: rcgcdw.py:312
msgid "Edited the slice for {article}"
msgstr "Edytowano część sprite dla {article}"
#: rcgcdw.py:285
#: rcgcdw.py:315
msgid "Created a tag \"{tag}\""
msgstr "Utworzono tag \"{tag}\""
#: rcgcdw.py:289
#: rcgcdw.py:319
msgid "Deleted a tag \"{tag}\""
msgstr "Usunięto tag \"{tag}\""
#: rcgcdw.py:293
#: rcgcdw.py:323
msgid "Activated a tag \"{tag}\""
msgstr "Aktywowano tag \"{tag}\""
#: rcgcdw.py:296
#: rcgcdw.py:326
msgid "Deactivated a tag \"{tag}\""
msgstr "Dezaktywowano tag \"{tag}\""
#: rcgcdw.py:317
#: rcgcdw.py:347
msgid "Tags"
msgstr "Tagi"
#: rcgcdw.py:443
#: rcgcdw.py:469
msgid "Unable to process the event"
msgstr "Nie udało się odczytać wydarzenia"
#: rcgcdw.py:443
#: rcgcdw.py:469
msgid "error"
msgstr "błąd"
#: rcgcdw.py:523
#: rcgcdw.py:549
msgid "Daily overview"
msgstr "Podsumowanie dnia"
#: rcgcdw.py:539
#: rcgcdw.py:565
msgid " ({} actions)"
msgstr "({} akcji)"
#: rcgcdw.py:540
#: rcgcdw.py:566
msgid " UTC ({} actions)"
msgstr " UTC ({} akcji)"
#: rcgcdw.py:542 rcgcdw.py:543
#: rcgcdw.py:568 rcgcdw.py:569
msgid "But nobody came"
msgstr "Ale nikt nie przyszedł"
#: rcgcdw.py:547
#: rcgcdw.py:573
msgid "Admin actions"
msgstr "Akcji administratorskich"
#: rcgcdw.py:547
#: rcgcdw.py:573
msgid "Bytes changed"
msgstr "Zmienionych bajtów"
#: rcgcdw.py:547
#: rcgcdw.py:573
msgid "Day score"
msgstr "Wynik dnia"
#: rcgcdw.py:547
#: rcgcdw.py:573
msgid "Edits made"
msgstr "Zrobionych edycji"
#: rcgcdw.py:547
#: rcgcdw.py:573
msgid "Most active hours"
msgstr "Najbardziej aktywne godziny"
#: rcgcdw.py:547
#: rcgcdw.py:573
msgid "Most active users"
msgstr "Najbardziej aktywni użytkownicy"
#: rcgcdw.py:547
#: rcgcdw.py:573
msgid "New articles"
msgstr "Nowych artykułów"
#: rcgcdw.py:547
#: rcgcdw.py:573
msgid "New files"
msgstr "Nowych plików"
#: rcgcdw.py:547
#: rcgcdw.py:573
msgid "Unique contributors"
msgstr "Unikalnych edytujących"
#: rcgcdw.py:664
#: rcgcdw.py:662
msgid "Connection to {wiki} seems to be stable now."
msgstr "Połączenie z {wiki} wygląda na stabilne."
#: rcgcdw.py:662 rcgcdw.py:715
msgid "Connection status"
msgstr "Problem z połączeniem"
#: rcgcdw.py:664
#: rcgcdw.py:715
msgid "{wiki} seems to be down or unreachable."
msgstr "{wiki} nie działa lub jest nieosiągalna."
#: rcgcdw.py:683
#: rcgcdw.py:737
msgid "{wiki} is back up!"
msgstr "{wiki} jest ponownie osiągalna!"

View file

@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2018-06-25 18:01+0200\n"
"POT-Creation-Date: 2018-07-05 20:21+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -15,345 +15,349 @@ msgstr ""
"Generated-By: pygettext.py 1.5\n"
#: rcgcdw.py:103
#: rcgcdw.py:126
msgid "(N!) "
msgstr ""
#: rcgcdw.py:103
#: rcgcdw.py:126
msgid "m "
msgstr ""
#: rcgcdw.py:116
msgid "Uploaded a new version of {name}"
msgstr ""
#: rcgcdw.py:117
#: rcgcdw.py:144
msgid "([preview]({link}) | [undo]({undolink}))"
msgstr ""
#: rcgcdw.py:117 rcgcdw.py:140
#: rcgcdw.py:144 rcgcdw.py:170
msgid "Options"
msgstr ""
#: rcgcdw.py:119
#: rcgcdw.py:145
msgid "Uploaded a new version of {name}"
msgstr ""
#: rcgcdw.py:147
msgid "Uploaded {name}"
msgstr ""
#: rcgcdw.py:131
#: rcgcdw.py:160
msgid "**No license!**"
msgstr ""
#: rcgcdw.py:140
#: rcgcdw.py:170
msgid "([preview]({link}))"
msgstr ""
#: rcgcdw.py:141
#: rcgcdw.py:171
msgid ""
"{desc}\n"
"License: {license}"
msgstr ""
#: rcgcdw.py:144
#: rcgcdw.py:174
msgid "Deleted page {article}"
msgstr ""
#: rcgcdw.py:147
#: rcgcdw.py:177
msgid "Deleted redirect {article} by overwriting"
msgstr ""
#: rcgcdw.py:150
#: rcgcdw.py:180
msgid "A redirect has been made"
msgstr ""
#: rcgcdw.py:150
#: rcgcdw.py:180
msgid "No redirect has been made"
msgstr ""
#: rcgcdw.py:151
#: rcgcdw.py:181
msgid "Moved {article} to {target}"
msgstr ""
#: rcgcdw.py:154
#: rcgcdw.py:184
msgid "Moved {article} to {title} over redirect"
msgstr ""
#: rcgcdw.py:157
#: rcgcdw.py:187
msgid "Moved protection settings from {article} to {title}"
msgstr ""
#: rcgcdw.py:161
#: rcgcdw.py:191
msgid "infinity and beyond"
msgstr ""
#: rcgcdw.py:162
#: rcgcdw.py:192
msgid "Blocked {blocked_user} for {time}"
msgstr ""
#: rcgcdw.py:166
#: rcgcdw.py:196
msgid "Changed block settings for {blocked_user}"
msgstr ""
#: rcgcdw.py:170
#: rcgcdw.py:200
msgid "Unblocked {blocked_user}"
msgstr ""
#: rcgcdw.py:174
#: rcgcdw.py:204
msgid "Left a comment on {target}'s profile"
msgstr ""
#: rcgcdw.py:178
#: rcgcdw.py:208
msgid "Replied to a comment on {target}'s profile"
msgstr ""
#: rcgcdw.py:182
#: rcgcdw.py:212
msgid "Edited a comment on {target}'s profile"
msgstr ""
#: rcgcdw.py:186
#: rcgcdw.py:216
msgid "Location"
msgstr ""
#: rcgcdw.py:188
#: rcgcdw.py:218
msgid "About me"
msgstr ""
#: rcgcdw.py:190
#: rcgcdw.py:220
msgid "Google link"
msgstr ""
#: rcgcdw.py:192
#: rcgcdw.py:222
msgid "Facebook link"
msgstr ""
#: rcgcdw.py:194
#: rcgcdw.py:224
msgid "Twitter link"
msgstr ""
#: rcgcdw.py:196
#: rcgcdw.py:226
msgid "Reddit link"
msgstr ""
#: rcgcdw.py:198
#: rcgcdw.py:228
msgid "Twitch link"
msgstr ""
#: rcgcdw.py:200
#: rcgcdw.py:230
msgid "PSN link"
msgstr ""
#: rcgcdw.py:202
#: rcgcdw.py:232
msgid "VK link"
msgstr ""
#: rcgcdw.py:204
#: rcgcdw.py:234
msgid "XVL link"
msgstr ""
#: rcgcdw.py:206
#: rcgcdw.py:236
msgid "Steam link"
msgstr ""
#: rcgcdw.py:208
#: rcgcdw.py:238
msgid "Unknown"
msgstr ""
#: rcgcdw.py:209
#: rcgcdw.py:239
msgid "Edited {target}'s profile"
msgstr ""
#: rcgcdw.py:210
#: rcgcdw.py:240
msgid "{field} field changed to: {desc}"
msgstr ""
#: rcgcdw.py:214
#: rcgcdw.py:244
msgid "Deleted a comment on {target}'s profile"
msgstr ""
#: rcgcdw.py:217
#: rcgcdw.py:247
msgid "Changed group membership for {target}"
msgstr ""
#: rcgcdw.py:221 rcgcdw.py:223
#: rcgcdw.py:251 rcgcdw.py:253
msgid "none"
msgstr ""
#: rcgcdw.py:224 rcgcdw.py:349
#: rcgcdw.py:254 rcgcdw.py:376
msgid "No description provided"
msgstr ""
#: rcgcdw.py:225
#: rcgcdw.py:255
msgid "Groups changed from {old_groups} to {new_groups}{reason}"
msgstr ""
#: rcgcdw.py:228
#: rcgcdw.py:258
msgid "Protected {target}"
msgstr ""
#: rcgcdw.py:232
#: rcgcdw.py:262
msgid "Changed protection level for {article}"
msgstr ""
#: rcgcdw.py:236
#: rcgcdw.py:266
msgid "Removed protection from {article}"
msgstr ""
#: rcgcdw.py:239
#: rcgcdw.py:269
msgid "Changed visibility of revision(s) on page {article} "
msgstr ""
#: rcgcdw.py:242
#: rcgcdw.py:272
msgid "Imported {article} with {count} revision(s)"
msgstr ""
#: rcgcdw.py:245
#: rcgcdw.py:275
msgid "Restored {article}"
msgstr ""
#: rcgcdw.py:248
#: rcgcdw.py:278
msgid "Changed visibility of log events"
msgstr ""
#: rcgcdw.py:251
#: rcgcdw.py:281
msgid "Imported interwiki"
msgstr ""
#: rcgcdw.py:254
#: rcgcdw.py:284
msgid "Edited abuse filter number {number}"
msgstr ""
#: rcgcdw.py:257
#: rcgcdw.py:287
msgid "Merged revision histories of {article} into {dest}"
msgstr ""
#: rcgcdw.py:260
#: rcgcdw.py:290
msgid "Added an entry to the interwiki table"
msgstr ""
#: rcgcdw.py:261 rcgcdw.py:265
#: rcgcdw.py:291 rcgcdw.py:295
msgid "Prefix: {prefix}, website: {website} | {desc}"
msgstr ""
#: rcgcdw.py:264
#: rcgcdw.py:294
msgid "Edited an entry in interwiki table"
msgstr ""
#: rcgcdw.py:268
#: rcgcdw.py:298
msgid "Deleted an entry in interwiki table"
msgstr ""
#: rcgcdw.py:269
#: rcgcdw.py:299
msgid "Prefix: {prefix} | {desc}"
msgstr ""
#: rcgcdw.py:272
#: rcgcdw.py:302
msgid "Changed the content model of the page {article}"
msgstr ""
#: rcgcdw.py:273
#: rcgcdw.py:303
msgid "Model changed from {old} to {new}: {reason}"
msgstr ""
#: rcgcdw.py:276
#: rcgcdw.py:306
msgid "Edited the sprite for {article}"
msgstr ""
#: rcgcdw.py:279
#: rcgcdw.py:309
msgid "Created the sprite sheet for {article}"
msgstr ""
#: rcgcdw.py:282
#: rcgcdw.py:312
msgid "Edited the slice for {article}"
msgstr ""
#: rcgcdw.py:285
#: rcgcdw.py:315
msgid "Created a tag \"{tag}\""
msgstr ""
#: rcgcdw.py:289
#: rcgcdw.py:319
msgid "Deleted a tag \"{tag}\""
msgstr ""
#: rcgcdw.py:293
#: rcgcdw.py:323
msgid "Activated a tag \"{tag}\""
msgstr ""
#: rcgcdw.py:296
#: rcgcdw.py:326
msgid "Deactivated a tag \"{tag}\""
msgstr ""
#: rcgcdw.py:317
#: rcgcdw.py:347
msgid "Tags"
msgstr ""
#: rcgcdw.py:443
#: rcgcdw.py:469
msgid "Unable to process the event"
msgstr ""
#: rcgcdw.py:443
#: rcgcdw.py:469
msgid "error"
msgstr ""
#: rcgcdw.py:523
#: rcgcdw.py:549
msgid "Daily overview"
msgstr ""
#: rcgcdw.py:539
#: rcgcdw.py:565
msgid " ({} actions)"
msgstr ""
#: rcgcdw.py:540
#: rcgcdw.py:566
msgid " UTC ({} actions)"
msgstr ""
#: rcgcdw.py:542 rcgcdw.py:543
#: rcgcdw.py:568 rcgcdw.py:569
msgid "But nobody came"
msgstr ""
#: rcgcdw.py:547
#: rcgcdw.py:573
msgid "Admin actions"
msgstr ""
#: rcgcdw.py:547
#: rcgcdw.py:573
msgid "Bytes changed"
msgstr ""
#: rcgcdw.py:547
#: rcgcdw.py:573
msgid "Day score"
msgstr ""
#: rcgcdw.py:547
#: rcgcdw.py:573
msgid "Edits made"
msgstr ""
#: rcgcdw.py:547
#: rcgcdw.py:573
msgid "Most active hours"
msgstr ""
#: rcgcdw.py:547
#: rcgcdw.py:573
msgid "Most active users"
msgstr ""
#: rcgcdw.py:547
#: rcgcdw.py:573
msgid "New articles"
msgstr ""
#: rcgcdw.py:547
#: rcgcdw.py:573
msgid "New files"
msgstr ""
#: rcgcdw.py:547
#: rcgcdw.py:573
msgid "Unique contributors"
msgstr ""
#: rcgcdw.py:664
#: rcgcdw.py:662
msgid "Connection to {wiki} seems to be stable now."
msgstr ""
#: rcgcdw.py:662 rcgcdw.py:715
msgid "Connection status"
msgstr ""
#: rcgcdw.py:664
#: rcgcdw.py:715
msgid "{wiki} seems to be down or unreachable."
msgstr ""
#: rcgcdw.py:683
#: rcgcdw.py:737
msgid "{wiki} is back up!"
msgstr ""

109
rcgcdw.py
View file

@ -41,10 +41,7 @@ else:
_ = lambda s: s
def send(message, name, avatar):
try:
req = requests.post(settings["webhookURL"], data={"content": message, "avatar_url": avatar, "username": name}, timeout=10)
except:
pass
send_to_discord({"content": message, "avatar_url": avatar, "username": name})
def safe_read(request, *keys):
if request is None:
@ -61,6 +58,32 @@ def safe_read(request, *keys):
return None
return request
def send_to_discord_webhook(data):
try:
result = requests.post(settings["webhookURL"], data=data, headers={**{'Content-Type': 'application/json'}, **settings["header"]}, timeout=10)
except requests.exceptions.Timeout:
logging.warning("Timeouted while sending data to the webhook.")
return 3
except requests.exceptions.ConnectionError:
logging.warning("Connection error while sending the data to a webhook")
return 3
else:
return handle_discord_http(result.status_code, data)
def send_to_discord(data):
if recent_changes.unsent_messages:
recent_changes.unsent_messages.append(data)
else:
code = send_to_discord_webhook(data)
if code == 3:
recent_changes.unsent_messages.append(data)
elif code == 2:
time.sleep(5.0)
recent_changes.unsent_messages.append(data)
elif code < 2:
time.sleep(2.5)
pass
def webhook_formatter(action, STATIC, **params):
logging.debug("Received things: {thing}".format(thing=params))
colornumber = None if isinstance(STATIC["color"], str) else STATIC["color"]
@ -84,7 +107,7 @@ def webhook_formatter(action, STATIC, **params):
params["user"] = "{author} ({amount})".format(author=params["user"], amount=recent_changes.map_ips[params["user"]])
else:
author_url = "https://{wiki}.gamepedia.com/User:{user}".format(wiki=settings["wiki"], user=params["user"].replace(" ", "_"))
if action in [1, 37]: #edit or new page
if action in (1, 37): #edit or new page
editsize = params["size"]
print (editsize)
if editsize > 0:
@ -99,13 +122,13 @@ def webhook_formatter(action, STATIC, **params):
colornumber = 9175040 + (math.floor((editsize*-1)/(52)))*65536
elif editsize == 0:
colornumber = 8750469
link = "https://{wiki}.gamepedia.com/index.php?title={article}&curid={pageid}&diff={diff}&oldid={oldrev}".format(wiki=settings["wiki"], pageid=params["pageid"], diff=params["diff"], oldrev=params["oldrev"], article=article_encoded)
link = "https://{wiki}.gamepedia.com/index.php?title={article}&curid={pageid}&diff={diff}&oldid={oldrev}".format(wiki=settings["wiki"], pageid=params["pageid"], diff=params["diff"], oldrev=params["oldrev"], article=params["title"].replace(" ", "_"))
embed["title"] = "{article} ({new}{minor}{editsize})".format(article=params["title"], editsize="+"+str(editsize) if editsize>0 else editsize, new= _("(N!) ") if action == 37 else "", minor=_("m ") if action == 1 and params["minor"] else "")
elif action == 5: #sending files
license = None
urls = safe_read(recent_changes.safe_request("https://{wiki}.gamepedia.com/api.php?action=query&format=json&prop=imageinfo&list=&meta=&titles={filename}&iiprop=timestamp%7Curl&iilimit=2".format(wiki=settings["wiki"], filename=params["title"])), "query", "pages")
undolink = ""
link ="https://{wiki}.gamepedia.com/{article}".format(wiki=settings["wiki"], article=article_encoded)
link ="https://{wiki}.gamepedia.com/{article}".format(wiki=settings["wiki"], article=params["title"].replace(" ", "_"))
additional_info_retrieved = False
if urls is not None:
if "-1" not in urls: #oage removed before we asked for it
@ -160,7 +183,7 @@ def webhook_formatter(action, STATIC, **params):
link = "https://{wiki}.gamepedia.com/{article}".format(wiki=settings["wiki"], article=params["target"].replace(" ", "_"))
embed["title"] = _("Moved {article} to {title} over redirect").format(article=params["title"], title=params["target"])
elif action == 16:
link = "https://{wiki}.gamepedia.com/{article}".format(wiki=settings["wiki"], article=article_encoded)
link = "https://{wiki}.gamepedia.com/{article}".format(wiki=settings["wiki"], article=params["title"].replace(" ", "_"))
embed["title"] = _("Moved protection settings from {article} to {title}").format(article=params["title"], title=params["target"])
elif action == 17:
link = "https://{wiki}.gamepedia.com/{user}".format(wiki=settings["wiki"], user=params["blocked_user"].replace(" ", "_").replace(')', '\)'))
@ -222,13 +245,13 @@ def webhook_formatter(action, STATIC, **params):
elif action == 20:
link = "https://{wiki}.gamepedia.com/User:".format(wiki=settings["wiki"])+params["title"].split(":")[1]
embed["title"] = _("Changed group membership for {target}").format(target=params["title"].split(":")[1])
if params["old_groups"].count(' ') < params["new_groups"].count(' '):
if params["old_groups"].count(' ') < params["new_groups"].count(' ') or params["old_groups"] == "none": #TODO Hardcoded value, depends on translation
embed["thumbnail"]["url"] = "https://i.imgur.com/WnGhF5g.gif"
if len(params["old_groups"]) < 4:
params["old_groups"] = _("none")
if len(params["new_groups"]) < 4:
params["new_groups"] = _("none")
reason = "| {desc}".format(desc=params["desc"]) if params["desc"]!=_("No description provided") else ""
reason = ": {desc}".format(desc=params["desc"]) if params["desc"]!=_("No description provided") else ""
params["desc"] = _("Groups changed from {old_groups} to {new_groups}{reason}").format(old_groups=params["old_groups"], new_groups=params["new_groups"], reason=reason)
elif action == 2:
link = "https://{wiki}.gamepedia.com/{article}".format(wiki=settings["wiki"], article=params["title"].replace(" ", "_"))
@ -325,28 +348,24 @@ def webhook_formatter(action, STATIC, **params):
data["embeds"].append(dict(embed))
data['avatar_url'] = settings["avatars"]["embed"]
formatted_embed = json.dumps(data, indent=4)
headers = {'Content-Type': 'application/json'}
#logging.debug(data)
result = requests.post(settings["webhookURL"], data=formatted_embed, headers=headers)
if result.status_code != requests.codes.ok:
handle_discord_http(result.status_code, formatted_embed, headers)
send_to_discord(formatted_embed)
def handle_discord_http(code, formatted_embed, headers):
if code == 204: #message went through
return
def handle_discord_http(code, formatted_embed):
if 300 > code > 199: #message went through
return 0
elif code == 400: #HTTP BAD REQUEST
logging.error("Following message has been rejected by Discord, please submit a bug on our bugtracker adding it:")
logging.error(formatted_embed)
elif code == 401: #HTTP UNAUTHORIZED
return 1
elif code == 401 or code == 404: #HTTP UNAUTHORIZED AND NOT FOUND
logging.error("Webhook URL is invalid or no longer in use, please replace it with proper one.")
sys.exit(1)
elif code == 429:
logging.error("We are sending too many requests to the Discord, slowing down...")
time.sleep(20.0)
result = requests.post(settings["webhookURL"], data=formatted_embed, headers=headers) #TODO Replace this solution with less obscure one
elif code > 500 and code < 600:
logging.error("Discord have trouble processing the event, and because the HTTP code returned is 500> it means we blame them.")
time.sleep(20.0)
result = requests.post(settings["webhookURL"], data=formatted_embed, headers=headers)
return 2
elif 499 < code < 600:
logging.error("Discord have trouble processing the event, and because the HTTP code returned is {} it means we blame them.".format(code))
return 3
def first_pass(change): #I've decided to split the embed formatter and change handler, maybe it's more messy this way, I don't know
parsedcomment = (BeautifulSoup(change["parsedcomment"], "lxml")).get_text()
@ -406,7 +425,7 @@ def first_pass(change): #I've decided to split the embed formatter and change ha
elif logtype=="block":
webhook_formatter(19, STATIC_VARS, user=change["user"], blocked_user=change["title"], desc=parsedcomment)
elif logtype=="rights":
webhook_formatter(20, STATIC_VARS, user=change["user"], title=change["title"], desc=parsedcomment, old_groups=' '.join(change["logparams"]["oldgroups"]), new_groups=' '.join(change["logparams"]["newgroups"]))
webhook_formatter(20, STATIC_VARS, user=change["user"], title=change["title"], desc=parsedcomment, old_groups=', '.join(change["logparams"]["oldgroups"]), new_groups=', '.join(change["logparams"]["newgroups"]))
elif logtype=="abusefilter":
webhook_formatter(21, STATIC_VARS, user=change["user"], desc=parsedcomment, filternr=change["logparams"]['1'])
elif logtype=="interwiki" and logaction=="iw_add":
@ -556,9 +575,7 @@ def day_overview(): #time.strftime('%Y-%m-%dT%H:%M:%S.000Z', time.gmtime(time.ti
data = {}
data["embeds"] = [dict(embed)]
formatted_embed = json.dumps(data, indent=4)
headers = {'Content-Type': 'application/json'}
logging.debug(formatted_embed)
result = requests.post(settings["webhookURL"], data=formatted_embed, headers=headers)
send_to_discord(formatted_embed)
else:
logging.debug("function requesting changes for day overview returned with error code")
@ -571,6 +588,8 @@ class recent_changes_class(object):
last_downtime = 0
clock = 0
tags = {}
unsent_messages = []
streak = -1
if settings["limitrefetch"] != -1:
with open("lastchange.txt", "r") as record:
file_content = record.read().strip()
@ -582,12 +601,29 @@ class recent_changes_class(object):
file_id = 999999999
else:
file_id = 999999999 #such value won't cause trouble, and it will make sure no refetch happens
def add_cache(self, change):
self.ids.append(change["rcid"])
#self.recent_id = change["rcid"]
if len(self.ids) > settings["limit"]+5:
self.ids.pop(0)
def fetch(self, amount=settings["limit"]):
if self.unsent_messages:
logging.info("{} messages waiting to be delivered to Discord due to Discord throwing errors/no connection to Discord servers.".format(len(self.unsent_messages)))
for num, item in enumerate(self.unsent_messages):
logging.debug("Trying to send a message to Discord from the queue with id of {} and content {}".format(str(num), str(item)))
if send_to_discord_webhook(item) < 2:
logging.debug("Sending message succeeded")
time.sleep(2.5)
else:
logging.debug("Sending message failed")
break
else:
self.unsent_messages = []
logging.debug("Queue emptied, all messages delivered")
self.unsent_messages = self.unsent_messages[num:]
logging.debug(self.unsent_messages)
last_check = self.fetch_changes(amount=amount)
self.recent_id = last_check if last_check is not None else self.recent_id
if settings["limitrefetch"] != -1 and self.recent_id != self.file_id:
@ -595,6 +631,7 @@ class recent_changes_class(object):
with open("lastchange.txt", "w") as record:
record.write(str(self.file_id))
logging.debug("Most recent rcid is: {}".format(self.recent_id))
def fetch_changes(self, amount, clean=False):
if len(self.ids) == 0:
logging.debug("ids is empty, triggering clean fetch")
@ -617,6 +654,11 @@ class recent_changes_class(object):
else:
if self.downtimecredibility > 0:
self.downtimecredibility -= 1
if self.streak > -1:
self.streak+=1
if self.streak > 8:
self.streak = -1
send(_("Connection to {wiki} seems to be stable now.").format(wiki=settings["wikiname"]), _("Connection status"), settings["avatars"]["connection_restored"])
for change in changes:
if change["rcid"] in self.ids:
continue
@ -625,8 +667,8 @@ class recent_changes_class(object):
logging.debug("Rejected {val}".format(val=change["rcid"]))
continue
first_pass(change)
time.sleep(3.0) #sadly, the time here needs to be quite high, otherwise we are being rate-limited by the Discord, especially during re-fetch
return change["rcid"]
def safe_request(self, url):
try:
request = requests.get(url, timeout=10, headers=settings["header"])
@ -640,6 +682,7 @@ class recent_changes_class(object):
return None
else:
return request
def check_connection(self, looped=False):
online = 0
for website in ["https://google.com", "https://instagram.com", "https://steamcommunity.com"]:
@ -660,17 +703,23 @@ class recent_changes_class(object):
time.sleep(10)
return False
return True
def downtime_controller(self):
if settings["show_updown_messages"] == False:
return
if self.streak > -1: #reset the streak of successful connections when bad one happens
self.streak = 0
if self.downtimecredibility<60:
self.downtimecredibility+=15
else:
if(time.time() - self.last_downtime)>1800 and self.check_connection(): #check if last downtime happened within 30 minutes, if yes, don't send a message
send(_("{wiki} seems to be down or unreachable.").format(wiki=settings["wikiname"]), _("Connection status"), settings["avatars"]["connection_failed"])
self.last_downtime = time.time()
self.streak = 0
def clear_cache(self):
self.map_ips = {}
def update_tags(self):
tags_read = safe_read(self.safe_request("https://{wiki}.gamepedia.com/api.php?action=query&format=json&list=tags&tgprop=name%7Cdisplayname".format(wiki=settings["wiki"])), "query", "tags")
if tags_read:

View file

@ -3,7 +3,7 @@
"wiki": "minecraft",
"lang": "en",
"header": {
"user-agent": "FrisksRcGcDw/1.1"
"user-agent": "FrisksRcGcDw/1.2"
},
"limit": 11,
"webhookURL": "https://discordapp.com/api/webhooks/111111111111111111/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
@ -11,6 +11,7 @@
"wikiname": "Minecraft Wiki",
"avatars": {
"connection_failed": "https://i.imgur.com/2jWQEt1.png",
"connection_restored": "",
"no_event": "",
"embed": ""
},