mirror of
https://gitlab.com/chicken-riders/RcGcDw.git
synced 2025-02-23 00:24:09 +00:00
Added #71
This commit is contained in:
parent
f010832269
commit
6e09a8dc23
72
misc.py
72
misc.py
|
@ -1,4 +1,5 @@
|
||||||
import json, logging, sys, re
|
import json, logging, sys, re
|
||||||
|
from html.parser import HTMLParser
|
||||||
|
|
||||||
# Create a custom logger
|
# Create a custom logger
|
||||||
|
|
||||||
|
@ -49,4 +50,73 @@ def weighted_average(value, weight, new_value):
|
||||||
|
|
||||||
def link_formatter(link):
|
def link_formatter(link):
|
||||||
"""Formats a link to not embed it"""
|
"""Formats a link to not embed it"""
|
||||||
return "<"+re.sub(r"([ \)])", "\\\\\\1", link)+">"
|
return "<" + re.sub(r"([ \)])", "\\\\\\1", link) + ">"
|
||||||
|
|
||||||
|
|
||||||
|
class ContentParser(HTMLParser):
|
||||||
|
more = _("\n__And more__")
|
||||||
|
current_tag = ""
|
||||||
|
small_prev_ins = ""
|
||||||
|
small_prev_del = ""
|
||||||
|
ins_length = len(more)
|
||||||
|
del_length = len(more)
|
||||||
|
added = False
|
||||||
|
|
||||||
|
def handle_starttag(self, tagname, attribs):
|
||||||
|
if tagname == "ins" or tagname == "del":
|
||||||
|
self.current_tag = tagname
|
||||||
|
if tagname == "td" and 'diff-addedline' in attribs[0]:
|
||||||
|
self.current_tag = tagname + "a"
|
||||||
|
if tagname == "td" and 'diff-deletedline' in attribs[0]:
|
||||||
|
self.current_tag = tagname + "d"
|
||||||
|
if tagname == "td" and 'diff-marker' in attribs[0]:
|
||||||
|
self.added = True
|
||||||
|
|
||||||
|
def handle_data(self, data):
|
||||||
|
data = re.sub(r"(`|_|\*|~|<|>|{|}|@|/|\|)", "\\\\\\1", data, 0)
|
||||||
|
if self.current_tag == "ins" and self.ins_length <= 1000:
|
||||||
|
self.ins_length += len("**" + data + '**')
|
||||||
|
if self.ins_length <= 1000:
|
||||||
|
self.small_prev_ins = self.small_prev_ins + "**" + data + '**'
|
||||||
|
else:
|
||||||
|
self.small_prev_ins = self.small_prev_ins + self.more
|
||||||
|
if self.current_tag == "del" and self.del_length <= 1000:
|
||||||
|
self.del_length += len("~~" + data + '~~')
|
||||||
|
if self.del_length <= 1000:
|
||||||
|
self.small_prev_del = self.small_prev_del + "~~" + data + '~~'
|
||||||
|
else:
|
||||||
|
self.small_prev_del = self.small_prev_del + self.more
|
||||||
|
if (self.current_tag == "afterins" or self.current_tag == "tda") and self.ins_length <= 1000:
|
||||||
|
self.ins_length += len(data)
|
||||||
|
if self.ins_length <= 1000:
|
||||||
|
self.small_prev_ins = self.small_prev_ins + data
|
||||||
|
else:
|
||||||
|
self.small_prev_ins = self.small_prev_ins + self.more
|
||||||
|
if (self.current_tag == "afterdel" or self.current_tag == "tdd") and self.del_length <= 1000:
|
||||||
|
self.del_length += len(data)
|
||||||
|
if self.del_length <= 1000:
|
||||||
|
self.small_prev_del = self.small_prev_del + data
|
||||||
|
else:
|
||||||
|
self.small_prev_del = self.small_prev_del + self.more
|
||||||
|
if self.added:
|
||||||
|
if data == '+' and self.ins_length <= 1000:
|
||||||
|
self.ins_length += 1
|
||||||
|
if self.ins_length <= 1000:
|
||||||
|
self.small_prev_ins = self.small_prev_ins + '\n'
|
||||||
|
else:
|
||||||
|
self.small_prev_ins = self.small_prev_ins + self.more
|
||||||
|
if data == '−' and self.del_length <= 1000:
|
||||||
|
self.del_length += 1
|
||||||
|
if self.del_length <= 1000:
|
||||||
|
self.small_prev_del = self.small_prev_del + '\n'
|
||||||
|
else:
|
||||||
|
self.small_prev_del = self.small_prev_del + self.more
|
||||||
|
self.added = False
|
||||||
|
|
||||||
|
def handle_endtag(self, tagname):
|
||||||
|
if tagname == "ins":
|
||||||
|
self.current_tag = "afterins"
|
||||||
|
elif tagname == "del":
|
||||||
|
self.current_tag = "afterdel"
|
||||||
|
else:
|
||||||
|
self.current_tag = ""
|
||||||
|
|
59
rcgcdw.py
59
rcgcdw.py
|
@ -20,14 +20,12 @@
|
||||||
# WARNING! SHITTY CODE AHEAD. ENTER ONLY IF YOU ARE SURE YOU CAN TAKE IT
|
# WARNING! SHITTY CODE AHEAD. ENTER ONLY IF YOU ARE SURE YOU CAN TAKE IT
|
||||||
# You have been warned
|
# You have been warned
|
||||||
|
|
||||||
import time, logging.config, json, requests, datetime, re, gettext, math, random, os.path, schedule, sys, ipaddress, misc
|
import time, logging.config, json, requests, datetime, re, gettext, math, random, os.path, schedule, sys, ipaddress
|
||||||
from bs4 import BeautifulSoup
|
from bs4 import BeautifulSoup
|
||||||
from collections import defaultdict, Counter
|
from collections import defaultdict, Counter
|
||||||
from urllib.parse import quote_plus
|
from urllib.parse import quote_plus
|
||||||
from html.parser import HTMLParser
|
from html.parser import HTMLParser
|
||||||
|
|
||||||
from misc import link_formatter
|
|
||||||
|
|
||||||
if __name__ != "__main__": # return if called as a module
|
if __name__ != "__main__": # return if called as a module
|
||||||
logging.critical("The file is being executed as a module. Please execute the script using the console.")
|
logging.critical("The file is being executed as a module. Please execute the script using the console.")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
@ -52,6 +50,21 @@ logging.debug("Current settings: {settings}".format(settings=settings))
|
||||||
logging.config.dictConfig(settings["logging"])
|
logging.config.dictConfig(settings["logging"])
|
||||||
logger = logging.getLogger("rcgcdw")
|
logger = logging.getLogger("rcgcdw")
|
||||||
|
|
||||||
|
# Setup translation
|
||||||
|
|
||||||
|
try:
|
||||||
|
lang = gettext.translation('rcgcdw', localedir='locale', languages=[settings["lang"]])
|
||||||
|
except FileNotFoundError:
|
||||||
|
logger.critical("No language files have been found. Make sure locale folder is located in the directory.")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
lang.install()
|
||||||
|
ngettext = lang.ngettext
|
||||||
|
|
||||||
|
import misc
|
||||||
|
|
||||||
|
from misc import link_formatter
|
||||||
|
from misc import ContentParser
|
||||||
|
|
||||||
storage = misc.load_datafile()
|
storage = misc.load_datafile()
|
||||||
|
|
||||||
|
@ -64,17 +77,6 @@ if settings["limitrefetch"] != -1 and os.path.exists("lastchange.txt") is True:
|
||||||
misc.save_datafile(storage)
|
misc.save_datafile(storage)
|
||||||
os.remove("lastchange.txt")
|
os.remove("lastchange.txt")
|
||||||
|
|
||||||
# Setup translation
|
|
||||||
|
|
||||||
try:
|
|
||||||
lang = gettext.translation('rcgcdw', localedir='locale', languages=[settings["lang"]])
|
|
||||||
except FileNotFoundError:
|
|
||||||
logger.critical("No language files have been found. Make sure locale folder is located in the directory.")
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
lang.install()
|
|
||||||
ngettext = lang.ngettext
|
|
||||||
|
|
||||||
# A few initial vars
|
# A few initial vars
|
||||||
|
|
||||||
logged_in = False
|
logged_in = False
|
||||||
|
@ -512,6 +514,35 @@ def embed_formatter(action, change, parsed_comment, categories):
|
||||||
embed["title"] = "{redirect}{article} ({new}{minor}{editsize})".format(redirect="⤷ " if "redirect" in change else "", article=change["title"], editsize="+" + str(
|
embed["title"] = "{redirect}{article} ({new}{minor}{editsize})".format(redirect="⤷ " if "redirect" in change else "", article=change["title"], editsize="+" + str(
|
||||||
editsize) if editsize > 0 else editsize, new=_("(N!) ") if action == "new" else "",
|
editsize) if editsize > 0 else editsize, new=_("(N!) ") if action == "new" else "",
|
||||||
minor=_("m ") if action == "edit" and "minor" in change else "")
|
minor=_("m ") if action == "edit" and "minor" in change else "")
|
||||||
|
if settings["appearance"]["embed"]["show_edit_changes"]:
|
||||||
|
changed_content = safe_read(recent_changes.safe_request(
|
||||||
|
"https://{wiki}.gamepedia.com/api.php?action=compare&format=json&fromtext=&torev={diff}&topst=1&prop=diff".format(
|
||||||
|
wiki=settings["wiki"], diff=change["revid"]
|
||||||
|
)), "compare", "*")
|
||||||
|
if changed_content:
|
||||||
|
if "fields" not in embed:
|
||||||
|
embed["fields"] = []
|
||||||
|
EditDiff = ContentParser()
|
||||||
|
EditDiff.feed(changed_content)
|
||||||
|
if EditDiff.small_prev_del:
|
||||||
|
if EditDiff.small_prev_del.replace("~~", "").isspace():
|
||||||
|
EditDiff.small_prev_del = '__Only whitespace__'
|
||||||
|
else:
|
||||||
|
EditDiff.small_prev_del = EditDiff.small_prev_del.replace("~~~~", "")
|
||||||
|
if EditDiff.small_prev_ins:
|
||||||
|
if EditDiff.small_prev_ins.replace("**", "").isspace():
|
||||||
|
EditDiff.small_prev_ins = '__Only whitespace__'
|
||||||
|
else:
|
||||||
|
EditDiff.small_prev_ins = EditDiff.small_prev_ins.replace("****", "")
|
||||||
|
logger.debug("Changed content: {}".format(EditDiff.small_prev_ins))
|
||||||
|
if EditDiff.small_prev_del and not action == "new":
|
||||||
|
embed["fields"].append(
|
||||||
|
{"name": "Removed", "value": "{data}".format(data=EditDiff.small_prev_del), "inline": True})
|
||||||
|
if EditDiff.small_prev_ins:
|
||||||
|
embed["fields"].append(
|
||||||
|
{"name": "Added", "value": "{data}".format(data=EditDiff.small_prev_ins), "inline": True})
|
||||||
|
else:
|
||||||
|
logging.warning("Unabled to download data on the edit content!")
|
||||||
elif action in ("upload/overwrite", "upload/upload"): # sending files
|
elif action in ("upload/overwrite", "upload/upload"): # sending files
|
||||||
license = None
|
license = None
|
||||||
urls = safe_read(recent_changes.safe_request(
|
urls = safe_read(recent_changes.safe_request(
|
||||||
|
|
|
@ -55,7 +55,8 @@
|
||||||
"appearance":{
|
"appearance":{
|
||||||
"mode": "embed",
|
"mode": "embed",
|
||||||
"embed": {
|
"embed": {
|
||||||
"daily_overview": {
|
"show_edit_changes": false,
|
||||||
|
"daily_overview": {
|
||||||
"color": 16312092,
|
"color": 16312092,
|
||||||
"icon":""
|
"icon":""
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in a new issue