Added language related files, fixes

This commit is contained in:
Frisk 2018-06-16 14:09:28 +02:00
parent b23553fbda
commit b6f02521c2
No known key found for this signature in database
GPG key ID: 0E9A7D3C0A01586C
5 changed files with 507 additions and 7 deletions

1
.gitignore vendored
View file

@ -1 +1,2 @@
settings.json settings.json
pygettext.py

Binary file not shown.

View file

@ -0,0 +1,250 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR ORGANIZATION
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: RcGcDw\n"
"POT-Creation-Date: 2018-06-16 13:32+0200\n"
"PO-Revision-Date: 2018-06-16 13:58+0200\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
"X-Generator: Poedit 2.0.8\n"
"Last-Translator: Frisk <piotrex43@protonmail.ch>\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"Language: pl\n"
#: rcgcdw.py:88
msgid "New file version {name}"
msgstr "Nowa wersja pliku (name)"
#: rcgcdw.py:89
msgid "([preview]({link}) | [undo]({undolink}))"
msgstr "([podgląd]({link}) | [wycofaj]({undolink}))"
#: rcgcdw.py:89 rcgcdw.py:105
msgid "Options"
msgstr "Opcje"
#: rcgcdw.py:91
msgid "New file {name}"
msgstr "Nowy plik {name}"
#: rcgcdw.py:105
msgid "([preview]({link}))"
msgstr "([podgląd]({link})"
#: rcgcdw.py:106
msgid ""
"{desc}\n"
"License: {license}"
msgstr ""
"{desc}\n"
"Licencja: {license}"
#: rcgcdw.py:111
msgid "Deleted {article}"
msgstr "Usunięto {article}"
#: rcgcdw.py:116
msgid "Deleted redirect ({article}) to make space for moved page"
msgstr "Usunięto przekierowanie ({article}) aby utworzyć miejsce dla przenoszonej strony"
#: rcgcdw.py:120
msgid "A redirect has been made"
msgstr "Zostało utworzone przekierowanie"
#: rcgcdw.py:120
msgid "No redirect has been made"
msgstr "Nie utworzono przekierowania"
#: rcgcdw.py:121
msgid "Moved \"{article}\" to \"{target}\""
msgstr "Przeniesiono \"{article}\" do \"{target}\""
#: rcgcdw.py:124
msgid "Moved {article} to redirect page ({title})"
msgstr "Przeniesiono {article} do przekierowania ({title})"
#: rcgcdw.py:128
msgid "Moved protection settings from {article} to {title}"
msgstr "Przeniesiono ustawienia zabezpieczeń z {article} do {title}"
#: rcgcdw.py:133
msgid "infinity and beyond"
msgstr "wieczność"
#: rcgcdw.py:134
msgid "Blocked {blocked_user} for {time}"
msgstr "Zablokowano {blocked_user} na {time}"
#: rcgcdw.py:140
msgid "Reapplied the block on {blocked_user}"
msgstr "Ponownie nałożono blokadę na {blocked_user}"
#: rcgcdw.py:146
msgid "Removed the block on {blocked_user}"
msgstr "Usunięto blokadę na {blocked_user}"
#: rcgcdw.py:151
msgid "Left a comment on {target}'s profile"
msgstr "Pozostawiono komentarz na profilu użytkownika {target}"
#: rcgcdw.py:154
msgid "Replied to a comment on {target}'s profile"
msgstr "Odpowiedziano na komentarz na profilu użytkownika {target}"
#: rcgcdw.py:157
msgid "Edited a comment on {target}'s profile"
msgstr "Edytowano komentarz na profilu użytkownika {target}"
#: rcgcdw.py:161
msgid "Location"
msgstr "Lokacja"
#: rcgcdw.py:163
msgid "About me"
msgstr "O mnie"
#: rcgcdw.py:183
msgid "Unknown"
msgstr "Nieznana"
#: rcgcdw.py:184
msgid "Edited {target}'s profile"
msgstr "Edytowano profil użytkownika {target}"
#: rcgcdw.py:185
msgid "{field} field changed to: {desc}"
msgstr "pole {field} zostało zmienione na: {desc}"
#: rcgcdw.py:188
msgid "Removed a comment on {target}'s profile"
msgstr "Usunięto komentarz na profilu użytkownika {target}"
#: rcgcdw.py:191
msgid "Changed {target}'s user groups"
msgstr "Zmieniono grupy użytkownika {target}"
#: rcgcdw.py:195 rcgcdw.py:197
msgid "none"
msgstr "brak"
#: rcgcdw.py:198
msgid "Groups changed from {old_groups} to {new_groups} with reason given: {desc}"
msgstr "Grupy zmienione z {old_groups} do {new_groups} z powodu: {desc}"
#: rcgcdw.py:201
msgid "Protected the page {target}"
msgstr "Zabezpieczono stronę: {target}"
#: rcgcdw.py:206
msgid "Modified protection settings for {article}"
msgstr "Zmodyfikowano ustawienia zabezpieczeń dla {article}"
#: rcgcdw.py:211
msgid "Removed protection for {article}"
msgstr "Usunięto zabezpieczenia dla {article}"
#: rcgcdw.py:215
msgid "Removed revision(s) from public view for {article}"
msgstr "Usunięto edycje z widoku publicznego dla {article}"
#: rcgcdw.py:218
msgid "Imported {article} with {count} revision(s)"
msgstr "Zaimportowano {article} z {count} wersjami"
#: rcgcdw.py:221
msgid "Restored {article}"
msgstr "Przywrócono {article)"
#: rcgcdw.py:224
msgid "Removed events"
msgstr "Usunięto wydarzenia"
#: rcgcdw.py:227
msgid "Imported interwiki"
msgstr "Zaimportowano interwiki"
#: rcgcdw.py:230
msgid "Edited abuse filter number {number}"
msgstr "Edytowano filtr nadużyć numer (number)"
#: rcgcdw.py:233
msgid "Merged revision histories for {article}"
msgstr "Połączono historie artykułu dla {article}"
#: rcgcdw.py:236
msgid "Added interwiki entry"
msgstr "Dodano intwrwiki"
#: rcgcdw.py:237 rcgcdw.py:241
msgid "Prefix: {prefix}, website: {website} | {desc}"
msgstr "Prefix: {prefix}, strona: {website} | desc"
#: rcgcdw.py:240
msgid "Edited interwiki entry"
msgstr "Edytowano interwiki"
#: rcgcdw.py:244
msgid "Deleted interwiki entry"
msgstr "Usunięto interwiki"
#: rcgcdw.py:245
msgid "Prefix: {prefix} | {desc}"
msgstr "Prefix: {prefix} | {desc}"
#: rcgcdw.py:248
msgid "Changed content model of {article}"
msgstr "Zmieniono model zawartości {article}"
#: rcgcdw.py:249
msgid "Model changed from {old} to {new}: {reason}"
msgstr "Model został zmieniony z {old} na {new}: reason"
#: rcgcdw.py:252
msgid "Edited the sprite for {article}"
msgstr "Edytowano sprite dla {article}"
#: rcgcdw.py:255
msgid "Created the sprite sheet for {article}"
msgstr "Utworzono sprite sheet dla {article}"
#: rcgcdw.py:258
msgid "Edited the slice for {article}"
msgstr "Edytowano część sprite dla {article}"
#: rcgcdw.py:261
msgid "Created a tag \"{tag}\""
msgstr "Utworzono tag \"{tag}\""
#: rcgcdw.py:264
msgid "Deleted a tag \"{tag}\""
msgstr "Usunięto tag \"{tag}\""
#: rcgcdw.py:283
msgid "No description provided"
msgstr "Nie podano opisu zmian"
#: rcgcdw.py:364
msgid "Unable to process the event"
msgstr "Nie udało się odczytać wydarzenia"
#: rcgcdw.py:364
msgid "error"
msgstr "błąd"
#: rcgcdw.py:445
msgid "Connection status"
msgstr "Problem z połączeniem"
#: rcgcdw.py:445
msgid "Minecraft Wiki seems to be down or unreachable."
msgstr "Minecraft Wiki nie działa lub jest nieosiągalna."
#: rcgcdw.py:445
msgid "https://i.imgur.com/2jWQEt1.png"
msgstr "https://i.imgur.com/2jWQEt1.png"

247
rcgcdw.pot Normal file
View file

@ -0,0 +1,247 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR ORGANIZATION
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2018-06-16 13:32+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"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
#: rcgcdw.py:88
msgid "New file version {name}"
msgstr ""
#: rcgcdw.py:89
msgid "([preview]({link}) | [undo]({undolink}))"
msgstr ""
#: rcgcdw.py:89 rcgcdw.py:105
msgid "Options"
msgstr ""
#: rcgcdw.py:91
msgid "New file {name}"
msgstr ""
#: rcgcdw.py:105
msgid "([preview]({link}))"
msgstr ""
#: rcgcdw.py:106
msgid ""
"{desc}\n"
"License: {license}"
msgstr ""
#: rcgcdw.py:111
msgid "Deleted {article}"
msgstr ""
#: rcgcdw.py:116
msgid "Deleted redirect ({article}) to make space for moved page"
msgstr ""
#: rcgcdw.py:120
msgid "A redirect has been made"
msgstr ""
#: rcgcdw.py:120
msgid "No redirect has been made"
msgstr ""
#: rcgcdw.py:121
msgid "Moved \"{article}\" to \"{target}\""
msgstr ""
#: rcgcdw.py:124
msgid "Moved {article} to redirect page ({title})"
msgstr ""
#: rcgcdw.py:128
msgid "Moved protection settings from {article} to {title}"
msgstr ""
#: rcgcdw.py:133
msgid "infinity and beyond"
msgstr ""
#: rcgcdw.py:134
msgid "Blocked {blocked_user} for {time}"
msgstr ""
#: rcgcdw.py:140
msgid "Reapplied the block on {blocked_user}"
msgstr ""
#: rcgcdw.py:146
msgid "Removed the block on {blocked_user}"
msgstr ""
#: rcgcdw.py:151
msgid "Left a comment on {target}'s profile"
msgstr ""
#: rcgcdw.py:154
msgid "Replied to a comment on {target}'s profile"
msgstr ""
#: rcgcdw.py:157
msgid "Edited a comment on {target}'s profile"
msgstr ""
#: rcgcdw.py:161
msgid "Location"
msgstr ""
#: rcgcdw.py:163
msgid "About me"
msgstr ""
#: rcgcdw.py:183
msgid "Unknown"
msgstr ""
#: rcgcdw.py:184
msgid "Edited {target}'s profile"
msgstr ""
#: rcgcdw.py:185
msgid "{field} field changed to: {desc}"
msgstr ""
#: rcgcdw.py:188
msgid "Removed a comment on {target}'s profile"
msgstr ""
#: rcgcdw.py:191
msgid "Changed {target}'s user groups"
msgstr ""
#: rcgcdw.py:195 rcgcdw.py:197
msgid "none"
msgstr ""
#: rcgcdw.py:198
msgid "Groups changed from {old_groups} to {new_groups} with reason given: {desc}"
msgstr ""
#: rcgcdw.py:201
msgid "Protected the page {target}"
msgstr ""
#: rcgcdw.py:206
msgid "Modified protection settings for {article}"
msgstr ""
#: rcgcdw.py:211
msgid "Removed protection for {article}"
msgstr ""
#: rcgcdw.py:215
msgid "Removed revision(s) from public view for {article}"
msgstr ""
#: rcgcdw.py:218
msgid "Imported {article} with {count} revision(s)"
msgstr ""
#: rcgcdw.py:221
msgid "Restored {article}"
msgstr ""
#: rcgcdw.py:224
msgid "Removed events"
msgstr ""
#: rcgcdw.py:227
msgid "Imported interwiki"
msgstr ""
#: rcgcdw.py:230
msgid "Edited abuse filter number {number}"
msgstr ""
#: rcgcdw.py:233
msgid "Merged revision histories for {article}"
msgstr ""
#: rcgcdw.py:236
msgid "Added interwiki entry"
msgstr ""
#: rcgcdw.py:237 rcgcdw.py:241
msgid "Prefix: {prefix}, website: {website} | {desc}"
msgstr ""
#: rcgcdw.py:240
msgid "Edited interwiki entry"
msgstr ""
#: rcgcdw.py:244
msgid "Deleted interwiki entry"
msgstr ""
#: rcgcdw.py:245
msgid "Prefix: {prefix} | {desc}"
msgstr ""
#: rcgcdw.py:248
msgid "Changed content model of {article}"
msgstr ""
#: rcgcdw.py:249
msgid "Model changed from {old} to {new}: {reason}"
msgstr ""
#: rcgcdw.py:252
msgid "Edited the sprite for {article}"
msgstr ""
#: rcgcdw.py:255
msgid "Created the sprite sheet for {article}"
msgstr ""
#: rcgcdw.py:258
msgid "Edited the slice for {article}"
msgstr ""
#: rcgcdw.py:261
msgid "Created a tag \"{tag}\""
msgstr ""
#: rcgcdw.py:264
msgid "Deleted a tag \"{tag}\""
msgstr ""
#: rcgcdw.py:283
msgid "No description provided"
msgstr ""
#: rcgcdw.py:364
msgid "Unable to process the event"
msgstr ""
#: rcgcdw.py:364
msgid "error"
msgstr ""
#: rcgcdw.py:445
msgid "Connection status"
msgstr ""
#: rcgcdw.py:445
msgid "Minecraft Wiki seems to be down or unreachable."
msgstr ""
#: rcgcdw.py:445
msgid "https://i.imgur.com/2jWQEt1.png"
msgstr ""

View file

@ -1,12 +1,14 @@
#!/usr/bin/python #!/usr/bin/python
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import time, logging, json, requests, datetime, re import time, logging, json, requests, datetime, re, gettext
from bs4 import BeautifulSoup from bs4 import BeautifulSoup
from collections import defaultdict from collections import defaultdict
logging.basicConfig(level=logging.DEBUG) logging.basicConfig(level=logging.DEBUG)
#logging.warning('Watch out!') #logging.warning('Watch out!')
#DEBUG, INFO, WARNING, ERROR, CRITICAL #DEBUG, INFO, WARNING, ERROR, CRITICAL
pl = gettext.translation('rcgcdw', localedir='locale', languages=['pl'])
pl.install()
with open("settings.json") as sfile: with open("settings.json") as sfile:
settings = json.load(sfile) settings = json.load(sfile)
@ -39,7 +41,7 @@ def webhook_formatter(action, timestamp, **params):
article_encoded = params["title"].replace(" ", "_").replace(')', '\)') article_encoded = params["title"].replace(" ", "_").replace(')', '\)')
if re.match(r"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b", params["author"]) is not None: if re.match(r"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b", params["author"]) is not None:
author_url = "https://{wiki}.gamepedia.com/Special:Contributions/{user}".format(wiki=settings["wiki"], user=params["author"]) author_url = "https://{wiki}.gamepedia.com/Special:Contributions/{user}".format(wiki=settings["wiki"], user=params["author"])
if params["author"] not in recent_changes.map_ips.keys(): if params["author"] not in list(recent_changes.map_ips.keys()):
contibs = safe_read(recent_changes.safe_request("https://{wiki}.gamepedia.com/api.php?action=query&format=json&list=usercontribs&uclimit=max&ucuser={user}&ucprop=".format(wiki=settings["wiki"], user=params["author"])), "query", "usercontribs") contibs = safe_read(recent_changes.safe_request("https://{wiki}.gamepedia.com/api.php?action=query&format=json&list=usercontribs&uclimit=max&ucuser={user}&ucprop=".format(wiki=settings["wiki"], user=params["author"])), "query", "usercontribs")
if contibs is None: if contibs is None:
logging.warning("WARNING: Something went wrong when checking amount of contributions for given IP address") logging.warning("WARNING: Something went wrong when checking amount of contributions for given IP address")
@ -77,23 +79,23 @@ def webhook_formatter(action, timestamp, **params):
undolink = "" 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=article_encoded)
if urls is not None: if urls is not None:
img_info = urls.itervalues().next()["imageinfo"] img_info = iter(urls.values()).next()["imageinfo"]
embed["image"]["url"] = img_info[0]["url"] embed["image"]["url"] = img_info[0]["url"]
else: else:
return return
if params["overwrite"]: if params["overwrite"]:
colornumber = 12390624 colornumber = 12390624
img_timestamp = filter(lambda x: x.isdigit(), img_info[1]["timestamp"]) img_timestamp = [x for x in img_info[1]["timestamp"] if x.isdigit()]
undolink = "https://{wiki}.gamepedia.com/index.php?title={filename}&action=revert&oldimage={timestamp}%21{filenamewon}".format(wiki=settings["wiki"], filename=article_encoded, timestamp=img_timestamp, filenamewon = article_encoded[5:]) undolink = "https://{wiki}.gamepedia.com/index.php?title={filename}&action=revert&oldimage={timestamp}%21{filenamewon}".format(wiki=settings["wiki"], filename=article_encoded, timestamp=img_timestamp, filenamewon = article_encoded[5:])
embed["title"] = _("New file version {name}").format(name=params["title"]) embed["title"] = _("New file version {name}").format(name=params["title"])
embed["fields"] = [{"name": _("Options"), "value": _("([preview]({link}) | [undo]({undolink}))").format(link=embed["image"]["url"], undolink=undolink)}] embed["fields"] = [{"name": _("Options"), "value": _("([preview]({link}) | [undo]({undolink}))").format(link=embed["image"]["url"], undolink=undolink)}]
else: else:
embed["title"] = _("New file {name}").format(name=params["title"]) embed["title"] = _("New file {name}").format(name=params["title"])
article_content = safe_read(recent_changes.safe_request("https://minecraft.gamepedia.com/api.php?action=query&format=json&prop=revisions&titles={article}&rvprop=content".format(article=urllib.quote_plus(params["title"]))), "query", "pages") #TODO Napewno urllib? article_content = safe_read(recent_changes.safe_request("https://minecraft.gamepedia.com/api.php?action=query&format=json&prop=revisions&titles={article}&rvprop=content".format(article=urllib.parse.quote_plus(params["title"]))), "query", "pages") #TODO Napewno urllib?
if article_content is None: if article_content is None:
logging.warning("Something went wrong when getting license for the image") logging.warning("Something went wrong when getting license for the image")
return 0 return 0
content = article_content.values()[0]['revisions'][0]['*'].lower() content = list(article_content.values())[0]['revisions'][0]['*'].lower()
if "{{license" not in content: if "{{license" not in content:
license = "**No license!**" license = "**No license!**"
else: else:
@ -387,7 +389,7 @@ class recent_changes(object):
self.ids.pop(0) self.ids.pop(0)
def fetch(self): def fetch(self):
self.recent_id = self.fetch_changes() self.recent_id = self.fetch_changes()
def fetch_changes(self): def fetch_changes(self, clean=False):
if len(self.cache) == 0: if len(self.cache) == 0:
logging.debug("cache is empty, triggering clean fetch") logging.debug("cache is empty, triggering clean fetch")
clean = True clean = True