Files
2026-07-26 18:25:37 +09:00

40 lines
1.4 KiB
JavaScript

import renderDelete from "../remote/activitypub/renderer/delete.js";
import { renderActivity } from "../remote/activitypub/renderer/index.js";
import { deliver } from "../queue/index.js";
import config from "../config/index.js";
import { Users, Followings } from "../models/index.js";
import { Not, IsNull } from "typeorm";
import { publishInternalEvent } from "./stream.js";
export async function doPostSuspend(user) {
publishInternalEvent("userChangeSuspendedState", {
id: user.id,
isSuspended: true
});
if (Users.isLocalUser(user)) {
// Send Delete to all known SharedInboxes
const content = renderActivity(renderDelete(`${config.url}/users/${user.id}`, user));
const queue = [];
const followings = await Followings.find({
where: [
{
followerSharedInbox: Not(IsNull())
},
{
followeeSharedInbox: Not(IsNull())
}
],
select: [
"followerSharedInbox",
"followeeSharedInbox"
]
});
const inboxes = followings.map((x)=>x.followerSharedInbox || x.followeeSharedInbox);
for (const inbox of inboxes){
if (inbox != null && !queue.includes(inbox)) queue.push(inbox);
}
for (const inbox of queue){
deliver(user, content, inbox);
}
}
}