Bugs y restaurar mastodon a su estado original, que se tocó sin querer

This commit is contained in:
Jesús Pavón Abián
2026-02-05 09:31:50 +01:00
parent de1c9ee744
commit abf4cb0df1
5 changed files with 39 additions and 19 deletions

View File

@@ -954,9 +954,14 @@ class BaseBuffer(base.Buffer):
return post.get("uri") return post.get("uri")
if it.get("uri"): if it.get("uri"):
return it.get("uri") return it.get("uri")
for key in ("id", "convoId", "convo_id", "messageId", "message_id", "msgId", "msg_id"): for key in ("id", "cid", "rev", "convoId", "convo_id", "messageId", "message_id", "msgId", "msg_id"):
if it.get(key): if it.get(key):
return it.get(key) return it.get(key)
nested = it.get("message") or it.get("record")
if isinstance(nested, dict):
for key in ("id", "cid", "rev", "messageId", "message_id", "msgId", "msg_id"):
if nested.get(key):
return nested.get(key)
if it.get("did"): if it.get("did"):
return it.get("did") return it.get("did")
if it.get("handle"): if it.get("handle"):
@@ -965,27 +970,33 @@ class BaseBuffer(base.Buffer):
if isinstance(author, dict): if isinstance(author, dict):
return author.get("did") or author.get("handle") return author.get("did") or author.get("handle")
# Chat message fallback # Chat message fallback
sent_at = it.get("sentAt") or it.get("sent_at") sent_at = it.get("sentAt") or it.get("sent_at") or it.get("createdAt") or it.get("created_at")
sender = it.get("sender") or {} sender = it.get("sender") or (nested.get("sender") if isinstance(nested, dict) else {}) or {}
sender_did = sender.get("did") if isinstance(sender, dict) else None sender_did = sender.get("did") if isinstance(sender, dict) else None
text = it.get("text") text = it.get("text") or (nested.get("text") if isinstance(nested, dict) else None)
if sent_at or sender_did or text: if sent_at or sender_did or text:
return (sent_at, sender_did, text) return (sent_at, sender_did, text)
return None return None
post = getattr(it, "post", None) post = getattr(it, "post", None)
if post is not None: if post is not None:
return getattr(post, "uri", None) return getattr(post, "uri", None)
for attr in ("uri", "id", "convoId", "convo_id", "messageId", "message_id", "msgId", "msg_id", "did", "handle"): for attr in ("uri", "id", "cid", "rev", "convoId", "convo_id", "messageId", "message_id", "msgId", "msg_id", "did", "handle"):
val = getattr(it, attr, None) val = getattr(it, attr, None)
if val: if val:
return val return val
nested = getattr(it, "message", None) or getattr(it, "record", None)
if nested is not None:
for attr in ("id", "cid", "rev", "messageId", "message_id", "msgId", "msg_id"):
val = getattr(nested, attr, None)
if val:
return val
author = getattr(it, "author", None) author = getattr(it, "author", None)
if author is not None: if author is not None:
return getattr(author, "did", None) or getattr(author, "handle", None) return getattr(author, "did", None) or getattr(author, "handle", None)
sent_at = getattr(it, "sentAt", None) or getattr(it, "sent_at", None) sent_at = getattr(it, "sentAt", None) or getattr(it, "sent_at", None) or getattr(it, "createdAt", None) or getattr(it, "created_at", None)
sender = getattr(it, "sender", None) sender = getattr(it, "sender", None) or (getattr(nested, "sender", None) if nested is not None else None)
sender_did = getattr(sender, "did", None) if sender is not None else None sender_did = getattr(sender, "did", None) if sender is not None else None
text = getattr(it, "text", None) text = getattr(it, "text", None) or (getattr(nested, "text", None) if nested is not None else None)
if sent_at or sender_did or text: if sent_at or sender_did or text:
return (sent_at, sender_did, text) return (sent_at, sender_did, text)
return None return None

View File

@@ -92,15 +92,22 @@ class ConversationListBuffer(BaseBuffer):
return obj.get(key, default) return obj.get(key, default)
return getattr(obj, key, default) return getattr(obj, key, default)
for attr in ("id", "messageId", "message_id", "msgId", "msg_id"): for attr in ("id", "messageId", "message_id", "msgId", "msg_id", "cid", "rev"):
val = g(last_msg, attr) val = g(last_msg, attr)
if val: if val:
return val return val
sent_at = g(last_msg, "sentAt") or g(last_msg, "sent_at") nested = g(last_msg, "message") or g(last_msg, "record")
sender = g(last_msg, "sender") or {} if nested:
for attr in ("id", "messageId", "message_id", "msgId", "msg_id", "cid", "rev"):
val = g(nested, attr)
if val:
return val
sent_at = g(last_msg, "sentAt") or g(last_msg, "sent_at") or g(last_msg, "createdAt") or g(last_msg, "created_at")
sender = g(last_msg, "sender") or (g(nested, "sender") if nested else {}) or {}
sender_did = g(sender, "did") sender_did = g(sender, "did")
text = g(last_msg, "text") text = g(last_msg, "text") or (g(nested, "text") if nested else None)
if sent_at or sender_did or text: if sent_at or sender_did or text:
return (sent_at, sender_did, text) return (sent_at, sender_did, text)
return None return None
@@ -210,11 +217,13 @@ class ConversationListBuffer(BaseBuffer):
new_db = [] new_db = []
new_count = 0 new_count = 0
first_load = len(self.session.db[self.name]) == 0
for convo in items: for convo in items:
key = self.get_convo_id(convo) or self._get_members_key(convo) key = self.get_convo_id(convo) or self._get_members_key(convo)
new_db.append(convo) new_db.append(convo)
if key is None: if key is None:
new_count += 1 if first_load:
new_count += 1
continue continue
if key not in existing: if key not in existing:
new_count += 1 new_count += 1

View File

@@ -21,7 +21,7 @@ def character_count(post_text, post_cw, character_limit=500):
# We will use text for counting character limit only. # We will use text for counting character limit only.
full_text = post_text+post_cw full_text = post_text+post_cw
# find remote users as Mastodon doesn't count the domain in char limit. # find remote users as Mastodon doesn't count the domain in char limit.
users = re.findall(r"@[\w\.-]+@[\w\.-]+", full_text) users = re.findall("@[\w\.-]+@[\w\.-]+", full_text)
for user in users: for user in users:
domain = user.split("@")[-1] domain = user.split("@")[-1]
full_text = full_text.replace("@"+domain, "") full_text = full_text.replace("@"+domain, "")

View File

@@ -20,7 +20,7 @@ class EditTemplate(object):
self.template: str = template self.template: str = template
def validate_template(self, template: str) -> bool: def validate_template(self, template: str) -> bool:
used_variables: List[str] = re.findall(r"\$\w+", template) used_variables: List[str] = re.findall("\$\w+", template)
validated: bool = True validated: bool = True
for var in used_variables: for var in used_variables:
if var[1:] not in self.variables: if var[1:] not in self.variables:

View File

@@ -44,7 +44,7 @@ class Session(base.baseSession):
if self.settings["mastodon"]["access_token"] != None and self.settings["mastodon"]["instance"] != None: if self.settings["mastodon"]["access_token"] != None and self.settings["mastodon"]["instance"] != None:
try: try:
log.debug("Logging in to Mastodon instance {}...".format(self.settings["mastodon"]["instance"])) log.debug("Logging in to Mastodon instance {}...".format(self.settings["mastodon"]["instance"]))
self.api = mastodon.Mastodon(access_token=self.settings["mastodon"]["access_token"], api_base_url=self.settings["mastodon"]["instance"], mastodon_version=MASTODON_VERSION, user_agent="TWBlue/{}".format(application.version), version_check_mode=self.version_check_mode, request_timeout=30) self.api = mastodon.Mastodon(access_token=self.settings["mastodon"]["access_token"], api_base_url=self.settings["mastodon"]["instance"], mastodon_version=MASTODON_VERSION, user_agent="TWBlue/{}".format(application.version), version_check_mode=self.version_check_mode)
if verify_credentials == True: if verify_credentials == True:
credentials = self.api.account_verify_credentials() credentials = self.api.account_verify_credentials()
self.db["user_name"] = credentials["username"] self.db["user_name"] = credentials["username"]