WIP/following feat
This commit is contained in:
parent
fe09de3cd8
commit
e251dca8ae
3 changed files with 52 additions and 2 deletions
|
@ -24,8 +24,8 @@ class BaseActor:
|
|||
return self.ap_actor["inbox"]
|
||||
|
||||
async def fetch_actor(
|
||||
actor_id : str,
|
||||
db_session : AsyncSession,
|
||||
actor_id : str,
|
||||
) -> Actor:
|
||||
exist_actor = (
|
||||
await db_session.scalars(
|
||||
|
|
30
app/boxes.py
30
app/boxes.py
|
@ -69,7 +69,7 @@ async def process_incoming(
|
|||
db_session: AsyncSession,
|
||||
ap_object: dict,
|
||||
) -> bool:
|
||||
actor = await fetch_actor(ap_object["actor"], db_session)
|
||||
actor = await fetch_actor(db_session, ap_object["actor"])
|
||||
|
||||
def build_object(object) -> InboxObject:
|
||||
inbox_object = models.InboxObject(
|
||||
|
@ -190,3 +190,31 @@ async def _handle_undo(
|
|||
return True
|
||||
|
||||
return False
|
||||
|
||||
|
||||
async def send_follow(
|
||||
db_session : AsyncSession,
|
||||
acct : str
|
||||
):
|
||||
await _send_follow(db_session, acct)
|
||||
await db_session.commit()
|
||||
await db_session.flush()
|
||||
|
||||
async def _send_follow(
|
||||
db_session : AsyncSession,
|
||||
actor_url : str,
|
||||
):
|
||||
actor = await fetch_actor(db_session, actor_url)
|
||||
|
||||
follow_id = allocate_outbox_id()
|
||||
out = {
|
||||
"@context": ap.AS_CTX,
|
||||
"id": build_object_id(follow_id),
|
||||
"type": "Follow",
|
||||
"actor": ME["id"],
|
||||
"object": actor.ap_id,
|
||||
}
|
||||
await ap.post(
|
||||
actor.ap_actor["inbox"],
|
||||
out,
|
||||
)
|
||||
|
|
22
tasks.py
22
tasks.py
|
@ -1,6 +1,7 @@
|
|||
import os
|
||||
import sys
|
||||
import tomli_w
|
||||
import asyncio
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
|
@ -55,3 +56,24 @@ def config(ctx):
|
|||
|
||||
print("Done")
|
||||
sys.exit(0)
|
||||
|
||||
|
||||
@task
|
||||
def follow(ctx):
|
||||
from app.database import async_session
|
||||
from app.boxes import send_follow
|
||||
|
||||
acct = prompt("enter want to follow actor id:")
|
||||
|
||||
async def _dodo():
|
||||
async with async_session() as db_session: #type: ignore
|
||||
try:
|
||||
await send_follow(db_session,acct)
|
||||
except Exception as e:
|
||||
print(f"ERROR: Failed to {e}")
|
||||
return
|
||||
|
||||
print("Done!")
|
||||
|
||||
|
||||
asyncio.run(_dodo())
|
||||
|
|
Loading…
Reference in a new issue