mirror of
https://gitlab.com/chicken-riders/RcGcDb.git
synced 2025-02-23 00:54:09 +00:00
Fix discussion issue, add stacker for discussions
This commit is contained in:
parent
59d2869f4f
commit
ef679e042c
15
src/bot.py
15
src/bot.py
|
@ -357,7 +357,7 @@ async def discussion_handler():
|
||||||
try:
|
try:
|
||||||
while True:
|
while True:
|
||||||
fetch_all = db_cursor.execute(
|
fetch_all = db_cursor.execute(
|
||||||
"SELECT wiki, rcid, postid FROM rcgcdw WHERE postid != '-1'")
|
"SELECT wiki, rcid, postid FROM rcgcdw WHERE postid != '-1' OR postid IS NULL")
|
||||||
for db_wiki in fetch_all.fetchall():
|
for db_wiki in fetch_all.fetchall():
|
||||||
header = settings["header"]
|
header = settings["header"]
|
||||||
header["Accept"] = "application/hal+json"
|
header["Accept"] = "application/hal+json"
|
||||||
|
@ -376,8 +376,8 @@ async def discussion_handler():
|
||||||
discussion_feed_resp = await feeds_response.json(encoding="UTF-8")
|
discussion_feed_resp = await feeds_response.json(encoding="UTF-8")
|
||||||
if "title" in discussion_feed_resp:
|
if "title" in discussion_feed_resp:
|
||||||
error = discussion_feed_resp["error"]
|
error = discussion_feed_resp["error"]
|
||||||
if error == "site doesn't exists":
|
if error == "site doesn't exists": # Discussions disabled
|
||||||
if db_wiki["rcid"] != -1:
|
if db_wiki["rcid"] != -1: # RC feed is disabled
|
||||||
db_cursor.execute("UPDATE rcgcdw SET postid = ? WHERE wiki = ?",
|
db_cursor.execute("UPDATE rcgcdw SET postid = ? WHERE wiki = ?",
|
||||||
("-1", db_wiki["wiki"],))
|
("-1", db_wiki["wiki"],))
|
||||||
else:
|
else:
|
||||||
|
@ -426,11 +426,14 @@ async def discussion_handler():
|
||||||
await generic_msg_sender_exception_logger(traceback.format_exc(),
|
await generic_msg_sender_exception_logger(traceback.format_exc(),
|
||||||
"Exception on Feeds article comment request",
|
"Exception on Feeds article comment request",
|
||||||
Post=str(post)[0:1000], Wiki=db_wiki["wiki"])
|
Post=str(post)[0:1000], Wiki=db_wiki["wiki"])
|
||||||
|
message_list = defaultdict(list)
|
||||||
for post in discussion_feed: # Yeah, second loop since the comments require an extra request
|
for post in discussion_feed: # Yeah, second loop since the comments require an extra request
|
||||||
if post["id"] > db_wiki["postid"]:
|
if post["id"] > db_wiki["postid"]:
|
||||||
for target in targets.items():
|
for target in targets.items():
|
||||||
try:
|
try:
|
||||||
await essential_feeds(post, comment_pages, db_wiki, target)
|
message = await essential_feeds(post, comment_pages, db_wiki, target)
|
||||||
|
if message is not None:
|
||||||
|
message_list[target[0]].append(message)
|
||||||
except asyncio.CancelledError:
|
except asyncio.CancelledError:
|
||||||
raise
|
raise
|
||||||
except:
|
except:
|
||||||
|
@ -440,6 +443,10 @@ async def discussion_handler():
|
||||||
else:
|
else:
|
||||||
logger.exception("Exception on Feeds formatter")
|
logger.exception("Exception on Feeds formatter")
|
||||||
await generic_msg_sender_exception_logger(traceback.format_exc(), "Exception in feed formatter", Post=str(post)[0:1000], Wiki=db_wiki["wiki"])
|
await generic_msg_sender_exception_logger(traceback.format_exc(), "Exception in feed formatter", Post=str(post)[0:1000], Wiki=db_wiki["wiki"])
|
||||||
|
for messages in message_list.values():
|
||||||
|
messages = stack_message_list(messages)
|
||||||
|
for message in messages:
|
||||||
|
await send_to_discord(message)
|
||||||
if discussion_feed:
|
if discussion_feed:
|
||||||
DBHandler.add(db_wiki["wiki"], post["id"], True)
|
DBHandler.add(db_wiki["wiki"], post["id"], True)
|
||||||
await asyncio.sleep(delay=2.0) # hardcoded really doesn't need much more
|
await asyncio.sleep(delay=2.0) # hardcoded really doesn't need much more
|
||||||
|
|
|
@ -11,7 +11,7 @@ from src.i18n import langs
|
||||||
|
|
||||||
logger = logging.getLogger("rcgcdw.discussion_formatters")
|
logger = logging.getLogger("rcgcdw.discussion_formatters")
|
||||||
|
|
||||||
async def feeds_compact_formatter(post_type, post, message_target, wiki, article_page=None):
|
async def feeds_compact_formatter(post_type, post, message_target, wiki, article_page=None) -> DiscordMessage:
|
||||||
"""Compact formatter for Fandom discussions."""
|
"""Compact formatter for Fandom discussions."""
|
||||||
_ = langs[message_target[0][0]]["discussion_formatters"].gettext
|
_ = langs[message_target[0][0]]["discussion_formatters"].gettext
|
||||||
message = None
|
message = None
|
||||||
|
@ -58,10 +58,10 @@ async def feeds_compact_formatter(post_type, post, message_target, wiki, article
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
message = "❓ "+_("Unknown event `{event}` by [{author}]({author_url}), report it on the [support server](<{support}>).").format(event=post_type, author=author, author_url=author_url, support=settings["support"])
|
message = "❓ "+_("Unknown event `{event}` by [{author}]({author_url}), report it on the [support server](<{support}>).").format(event=post_type, author=author, author_url=author_url, support=settings["support"])
|
||||||
await send_to_discord(DiscordMessage("compact", "discussion", message_target[1], content=message, wiki=wiki))
|
return DiscordMessage("compact", "discussion", message_target[1], content=message, wiki=wiki)
|
||||||
|
|
||||||
|
|
||||||
async def feeds_embed_formatter(post_type, post, message_target, wiki, article_page=None):
|
async def feeds_embed_formatter(post_type, post, message_target, wiki, article_page=None) -> DiscordMessage:
|
||||||
"""Embed formatter for Fandom discussions."""
|
"""Embed formatter for Fandom discussions."""
|
||||||
_ = langs[message_target[0][0]]["discussion_formatters"].gettext
|
_ = langs[message_target[0][0]]["discussion_formatters"].gettext
|
||||||
embed = DiscordMessage("embed", "discussion", message_target[1], wiki=wiki)
|
embed = DiscordMessage("embed", "discussion", message_target[1], wiki=wiki)
|
||||||
|
@ -159,7 +159,7 @@ async def feeds_embed_formatter(post_type, post, message_target, wiki, article_p
|
||||||
else:
|
else:
|
||||||
embed.add_field(_("Report this on the support server"), change_params)
|
embed.add_field(_("Report this on the support server"), change_params)
|
||||||
embed.finish_embed()
|
embed.finish_embed()
|
||||||
await send_to_discord(embed)
|
return embed
|
||||||
|
|
||||||
|
|
||||||
class DiscussionsFromHellParser:
|
class DiscussionsFromHellParser:
|
||||||
|
|
|
@ -239,7 +239,7 @@ async def essential_info(change: dict, changed_categories, local_wiki: Wiki, tar
|
||||||
return await appearance_mode(identification_string, change, parsed_comment, changed_categories, local_wiki, target, paths, rate_limiter, additional_data=additional_data)
|
return await appearance_mode(identification_string, change, parsed_comment, changed_categories, local_wiki, target, paths, rate_limiter, additional_data=additional_data)
|
||||||
|
|
||||||
|
|
||||||
async def essential_feeds(change: dict, comment_pages: dict, db_wiki: sqlite3.Row, target: tuple):
|
async def essential_feeds(change: dict, comment_pages: dict, db_wiki: sqlite3.Row, target: tuple) -> src.discord.DiscordMessage:
|
||||||
"""Prepares essential information for both embed and compact message format."""
|
"""Prepares essential information for both embed and compact message format."""
|
||||||
appearance_mode = feeds_embed_formatter if target[0][1] > 0 else feeds_compact_formatter
|
appearance_mode = feeds_embed_formatter if target[0][1] > 0 else feeds_compact_formatter
|
||||||
identification_string = change["_embedded"]["thread"][0]["containerType"]
|
identification_string = change["_embedded"]["thread"][0]["containerType"]
|
||||||
|
@ -248,4 +248,4 @@ async def essential_feeds(change: dict, comment_pages: dict, db_wiki: sqlite3.Ro
|
||||||
comment_page = comment_pages.get(change["forumId"], None)
|
comment_page = comment_pages.get(change["forumId"], None)
|
||||||
if comment_page is not None:
|
if comment_page is not None:
|
||||||
comment_page["fullUrl"] = "/".join(db_wiki["wiki"].split("/", 3)[:3]) + comment_page["relativeUrl"].replace(")", "\)").replace("()", "\(")
|
comment_page["fullUrl"] = "/".join(db_wiki["wiki"].split("/", 3)[:3]) + comment_page["relativeUrl"].replace(")", "\)").replace("()", "\(")
|
||||||
await appearance_mode(identification_string, change, target, db_wiki["wiki"], article_page=comment_page)
|
return await appearance_mode(identification_string, change, target, db_wiki["wiki"], article_page=comment_page)
|
||||||
|
|
Loading…
Reference in a new issue