mirror of
https://gitlab.com/chicken-riders/RcGcDw.git
synced 2025-02-23 00:24:09 +00:00
Merge branch '71-add-support-for-showing-diffs-in-the-embed' into 'testing'
Resolve "Add support for showing diffs in the embed" See merge request piotrex43/RcGcDw!49
This commit is contained in:
commit
f488788189
72
misc.py
72
misc.py
|
@ -1,4 +1,5 @@
|
|||
import json, logging, sys, re
|
||||
from html.parser import HTMLParser
|
||||
|
||||
# Create a custom logger
|
||||
|
||||
|
@ -49,4 +50,73 @@ def weighted_average(value, weight, new_value):
|
|||
|
||||
def link_formatter(link):
|
||||
"""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
|
||||
# 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 collections import defaultdict, Counter
|
||||
from urllib.parse import quote_plus
|
||||
from html.parser import HTMLParser
|
||||
|
||||
from misc import link_formatter
|
||||
|
||||
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.")
|
||||
sys.exit(1)
|
||||
|
@ -52,6 +50,21 @@ logging.debug("Current settings: {settings}".format(settings=settings))
|
|||
logging.config.dictConfig(settings["logging"])
|
||||
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()
|
||||
|
||||
|
@ -64,17 +77,6 @@ if settings["limitrefetch"] != -1 and os.path.exists("lastchange.txt") is True:
|
|||
misc.save_datafile(storage)
|
||||
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
|
||||
|
||||
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(
|
||||
editsize) if editsize > 0 else editsize, new=_("(N!) ") if action == "new" 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
|
||||
license = None
|
||||
urls = safe_read(recent_changes.safe_request(
|
||||
|
|
|
@ -55,7 +55,8 @@
|
|||
"appearance":{
|
||||
"mode": "embed",
|
||||
"embed": {
|
||||
"daily_overview": {
|
||||
"show_edit_changes": false,
|
||||
"daily_overview": {
|
||||
"color": 16312092,
|
||||
"icon":""
|
||||
},
|
||||
|
|
Loading…
Reference in a new issue