all repos — stealth-developers @ 43a6ea6a77ad7a662d493b0f020e52f86b72e076

apps/bot/src/lib/tickets.ts (view raw)

 1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
import db, { tickets, eq, getActor, getActorByDiscordId } from "@stealth-developers/db";

export async function hasAccessToTicket(userId: string, ticketId: string) {
	const [ticket] = await db.select().from(tickets).where(eq(tickets.id, ticketId)).limit(1);
	if (!ticket) return false;

	const userPromise = getActorByDiscordId(userId, ticket.guildId);
	const subjectPromise = getActor(ticket.subject);
	const openedByPromise = ticket.subject === ticket.openedBy ? null : getActor(ticket.openedBy);

	const [user, subject, openedByResult] = await Promise.all([
		userPromise,
		subjectPromise,
		openedByPromise,
	]);
	const openedBy = ticket.subject === ticket.openedBy ? subject : openedByResult;
	if (!user) return false;

	if (user.moderator) return true;
	if (!subject || !openedBy) return false;
	if (user.id === subject.id || user.id === openedBy.id) return true;
}