56 lines
1.7 KiB
TypeScript
56 lines
1.7 KiB
TypeScript
import { createEndpoint, createMethodFilter, createPathFilter } from "t_rest/server";
|
|
import { getConfig } from "../app/config.ts";
|
|
import { bot } from "../bot/mod.ts";
|
|
|
|
export const usersRoute = createPathFilter({
|
|
"{userId}/photo": createMethodFilter({
|
|
GET: createEndpoint(
|
|
{ query: null, body: null },
|
|
async ({ params }) => {
|
|
const chat = await bot.api.getChat(params.userId);
|
|
if (chat.type !== "private") {
|
|
throw new Error("Chat is not private");
|
|
}
|
|
const photoData = chat.photo?.small_file_id
|
|
? await fetch(
|
|
`https://api.telegram.org/file/bot${bot.token}/${await bot.api.getFile(
|
|
chat.photo.small_file_id,
|
|
).then((file) => file.file_path)}`,
|
|
).then((resp) => resp.arrayBuffer())
|
|
: undefined;
|
|
if (!photoData) {
|
|
return { status: 404, body: { type: "text/plain", data: "User has no photo" } };
|
|
}
|
|
return {
|
|
status: 200,
|
|
body: {
|
|
type: "image/jpeg",
|
|
data: new Blob([photoData], { type: "image/jpeg" }),
|
|
},
|
|
};
|
|
},
|
|
),
|
|
}),
|
|
|
|
"{userId}": createMethodFilter({
|
|
GET: createEndpoint(
|
|
{ query: null, body: null },
|
|
async ({ params }) => {
|
|
const chat = await bot.api.getChat(params.userId);
|
|
if (chat.type !== "private") {
|
|
throw new Error("Chat is not private");
|
|
}
|
|
const config = await getConfig();
|
|
const isAdmin = chat.username && config?.adminUsernames?.includes(chat.username);
|
|
return {
|
|
status: 200,
|
|
body: {
|
|
type: "application/json",
|
|
data: { ...chat, isAdmin },
|
|
},
|
|
};
|
|
},
|
|
),
|
|
}),
|
|
});
|