diff --git a/README.md b/README.md index 0b112fc..b1ea2c9 100644 --- a/README.md +++ b/README.md @@ -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) diff --git a/locale/de/LC_MESSAGES/rcgcdw.mo b/locale/de/LC_MESSAGES/rcgcdw.mo index 0fc7338..a1bfff2 100644 Binary files a/locale/de/LC_MESSAGES/rcgcdw.mo and b/locale/de/LC_MESSAGES/rcgcdw.mo differ diff --git a/locale/de/LC_MESSAGES/rcgcdw.po b/locale/de/LC_MESSAGES/rcgcdw.po index c6195db..965f9c9 100644 --- a/locale/de/LC_MESSAGES/rcgcdw.po +++ b/locale/de/LC_MESSAGES/rcgcdw.po @@ -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 -msgid "Groups changed from {old_groups} to {new_groups} {reason}" -msgstr "Änderte die Gruppenzugehörigkeit von {old_groups} auf {new_groups}: {reason}" +#: 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}" -#: 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." diff --git a/locale/fr/LC_MESSAGES/rcgcdw.mo b/locale/fr/LC_MESSAGES/rcgcdw.mo index 719a1f5..785353c 100644 Binary files a/locale/fr/LC_MESSAGES/rcgcdw.mo and b/locale/fr/LC_MESSAGES/rcgcdw.mo differ diff --git a/locale/fr/LC_MESSAGES/rcgcdw.po b/locale/fr/LC_MESSAGES/rcgcdw.po index 99fc37b..c556bb8 100644 --- a/locale/fr/LC_MESSAGES/rcgcdw.po +++ b/locale/fr/LC_MESSAGES/rcgcdw.po @@ -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 -msgid "Groups changed from {old_groups} to {new_groups} {reason}" -msgstr "Groupe modifié de {old_groups} vers {new_groups}: {reason}" +#: rcgcdw.py:255 +msgid "Groups changed from {old_groups} to {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!" diff --git a/locale/pl/LC_MESSAGES/rcgcdw.mo b/locale/pl/LC_MESSAGES/rcgcdw.mo index f47d70a..f64f3b8 100644 Binary files a/locale/pl/LC_MESSAGES/rcgcdw.mo and b/locale/pl/LC_MESSAGES/rcgcdw.mo differ diff --git a/locale/pl/LC_MESSAGES/rcgcdw.po b/locale/pl/LC_MESSAGES/rcgcdw.po index 2b7135a..6ccc2f6 100644 --- a/locale/pl/LC_MESSAGES/rcgcdw.po +++ b/locale/pl/LC_MESSAGES/rcgcdw.po @@ -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 \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 -msgid "Groups changed from {old_groups} to {new_groups} {reason}" -msgstr "Grupy zmienione z {old_groups} do {new_groups} {reason}" +#: 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!" diff --git a/rcgcdw.pot b/rcgcdw.pot index 3f97c65..a13b3ee 100644 --- a/rcgcdw.pot +++ b/rcgcdw.pot @@ -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 \n" "Language-Team: LANGUAGE \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 -msgid "Groups changed from {old_groups} to {new_groups} {reason}" +#: 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 "" diff --git a/rcgcdw.py b/rcgcdw.py index acad31c..58f8cad 100644 --- a/rcgcdw.py +++ b/rcgcdw.py @@ -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: @@ -60,7 +57,33 @@ def safe_read(request, *keys): logging.warning("Failure while extracting data from request in {change}".format(change=request)) 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,14 +245,14 @@ 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 "" - params["desc"] = _("Groups changed from {old_groups} to {new_groups} {reason}").format(old_groups=params["old_groups"], new_groups=params["new_groups"], reason=reason) + 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(" ", "_")) embed["title"] = _("Protected {target}").format(target=params["title"]) @@ -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: diff --git a/settings.json.example b/settings.json.example index 2a6724f..d5d6766 100644 --- a/settings.json.example +++ b/settings.json.example @@ -3,14 +3,15 @@ "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", "limitrefetch": 28, "wikiname": "Minecraft Wiki", "avatars": { - "connection_failed": "https://i.imgur.com/2jWQEt1.png", + "connection_failed": "https://i.imgur.com/2jWQEt1.png", + "connection_restored": "", "no_event": "", "embed": "" },