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")
if 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):
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"):
return it.get("did")
if it.get("handle"):
@@ -965,27 +970,33 @@ class BaseBuffer(base.Buffer):
if isinstance(author, dict):
return author.get("did") or author.get("handle")
# Chat message fallback
sent_at = it.get("sentAt") or it.get("sent_at")
sender = it.get("sender") or {}
sent_at = it.get("sentAt") or it.get("sent_at") or it.get("createdAt") or it.get("created_at")
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
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:
return (sent_at, sender_did, text)
return None
post = getattr(it, "post", None)
if post is not 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)
if 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)
if author is not None:
return getattr(author, "did", None) or getattr(author, "handle", None)
sent_at = getattr(it, "sentAt", None) or getattr(it, "sent_at", None)
sender = getattr(it, "sender", 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) 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
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:
return (sent_at, sender_did, text)
return None

View File

@@ -92,15 +92,22 @@ class ConversationListBuffer(BaseBuffer):
return obj.get(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)
if val:
return val
sent_at = g(last_msg, "sentAt") or g(last_msg, "sent_at")
sender = g(last_msg, "sender") or {}
nested = g(last_msg, "message") or g(last_msg, "record")
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")
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:
return (sent_at, sender_did, text)
return None
@@ -210,10 +217,12 @@ class ConversationListBuffer(BaseBuffer):
new_db = []
new_count = 0
first_load = len(self.session.db[self.name]) == 0
for convo in items:
key = self.get_convo_id(convo) or self._get_members_key(convo)
new_db.append(convo)
if key is None:
if first_load:
new_count += 1
continue
if key not in existing:

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.
full_text = post_text+post_cw
# 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:
domain = user.split("@")[-1]
full_text = full_text.replace("@"+domain, "")

View File

@@ -20,7 +20,7 @@ class EditTemplate(object):
self.template: str = template
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
for var in used_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:
try:
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:
credentials = self.api.account_verify_credentials()
self.db["user_name"] = credentials["username"]