forked from pinks/eris
1
0
Fork 0
nyx/bot/pnginfoCommand.ts

50 lines
1.8 KiB
TypeScript
Raw Normal View History

2023-09-24 13:08:35 +00:00
import { CommandContext } from "grammy";
import { bold, fmt } from "grammy_parse_mode";
import { StatelessQuestion } from "grammy_stateless_question";
2023-09-23 18:49:05 +00:00
import { getPngInfo, parsePngInfo } from "../sd/parsePngInfo.ts";
2023-09-24 13:08:35 +00:00
import { ErisContext } from "./mod.ts";
2023-09-11 20:43:12 +00:00
2023-09-24 13:08:35 +00:00
export const pnginfoQuestion = new StatelessQuestion<ErisContext>(
2023-09-11 20:43:12 +00:00
"pnginfo",
async (ctx) => {
await pnginfo(ctx, false);
},
);
2023-09-24 13:08:35 +00:00
export async function pnginfoCommand(ctx: CommandContext<ErisContext>) {
2023-09-11 20:43:12 +00:00
await pnginfo(ctx, true);
}
2023-09-24 13:08:35 +00:00
async function pnginfo(ctx: ErisContext, includeRepliedTo: boolean): Promise<void> {
2023-09-11 20:43:12 +00:00
const document = ctx.message?.document ||
(includeRepliedTo ? ctx.message?.reply_to_message?.document : undefined);
if (document?.mime_type !== "image/png") {
await ctx.reply(
"Please send me a PNG file." +
pnginfoQuestion.messageSuffixMarkdown(),
{ reply_markup: { force_reply: true, selective: true }, parse_mode: "Markdown" },
);
return;
}
const file = await ctx.api.getFile(document.file_id);
const buffer = await fetch(file.getUrl()).then((resp) => resp.arrayBuffer());
const params = parsePngInfo(getPngInfo(new Uint8Array(buffer)) ?? "");
const paramsText = fmt([
`${params.prompt}\n`,
params.negative_prompt ? fmt`${bold("Negative prompt:")} ${params.negative_prompt}\n` : "",
params.steps ? fmt`${bold("Steps:")} ${params.steps}, ` : "",
params.sampler_name ? fmt`${bold("Sampler:")} ${params.sampler_name}, ` : "",
params.cfg_scale ? fmt`${bold("CFG scale:")} ${params.cfg_scale}, ` : "",
params.seed ? fmt`${bold("Seed:")} ${params.seed}, ` : "",
params.width && params.height ? fmt`${bold("Size")}: ${params.width}x${params.height}` : "",
]);
await ctx.reply(paramsText.text, {
reply_to_message_id: ctx.message?.message_id,
entities: paramsText.entities,
});
}