diff --git a/activitypub.py b/activitypub.py index c256b70..ad599fa 100644 --- a/activitypub.py +++ b/activitypub.py @@ -83,6 +83,18 @@ def _answer_key(choice: str) -> str: return h.hexdigest() +def _is_local_reply(create: ap.Create) -> bool: + for dest in _to_list(create.to or []): + if dest.startswith(BASE_URL): + return True + + for dest in _to_list(create.cc or []): + if dest.startswith(BASE_URL): + return True + + return False + + class Box(Enum): INBOX = "inbox" OUTBOX = "outbox" @@ -641,7 +653,7 @@ class MicroblogPubBackend(Backend): if ( reply.id.startswith(BASE_URL) and reply.has_type(ap.ActivityType.QUESTION.value) - and _to_list(create.get_object().to)[0].startswith(BASE_URL) + and _is_local_reply(create) and not create.is_public() ): return self._process_question_reply(create, reply) diff --git a/app.py b/app.py index 2da1358..354fa6e 100644 --- a/app.py +++ b/app.py @@ -1594,6 +1594,7 @@ def admin_notifications(): replies_query = { "type": ActivityType.CREATE.value, "activity.object.inReplyTo": {"$regex": f"^{BASE_URL}"}, + "meta.poll_answer": False, } announced_query = { "type": ActivityType.ANNOUNCE.value, @@ -2163,7 +2164,13 @@ def api_new_question(): a = _user_api_arg(f"answer{i}", default=None) if not a: break - answers.append({"type": ActivityType.NOTE.value, "name": a}) + answers.append( + { + "type": ActivityType.NOTE.value, + "name": a, + "replies": {"type": ActivityType.COLLECTION.value, "totalItems": 0}, + } + ) open_for = int(_user_api_arg("open_for")) choices = {