PR #24

Merged
pinks merged 11 commits from nameless/eris:pr-main into main 2023-11-17 18:00:14 +00:00
6 changed files with 38 additions and 25 deletions
Showing only changes of commit 2f62c17e32 - Show all commits

View File

@ -26,8 +26,8 @@ export const getUserDailyStats = kvMemoize(
for await ( for await (
const generation of generationStore.listBy("fromId", { const generation of generationStore.listBy("fromId", {
before: new Date(new Date(year, month - 1, day).getTime() + 24 * 60 * 60 * 1000), after: new Date(Date.UTC(year, month - 1, day)),
after: new Date(year, month - 1, day), before: new Date(Date.UTC(year, month - 1, day + 1)),
value: userId, value: userId,
}) })
) { ) {

View File

@ -115,7 +115,7 @@ bot.api.setMyDescription(
bot.api.setMyCommands([ bot.api.setMyCommands([
{ command: "txt2img", description: "Generate image from text" }, { command: "txt2img", description: "Generate image from text" },
{ command: "img2img", description: "Generate image from image" }, { command: "img2img", description: "Generate image from image" },
{ command: "getprompt", description: "Try to extract prompt from raw file" }, { command: "pnginfo", description: "Try to extract prompt from raw file" },
{ command: "queue", description: "Show the current queue" }, { command: "queue", description: "Show the current queue" },
{ command: "cancel", description: "Cancel all your requests" }, { command: "cancel", description: "Cancel all your requests" },
]); ]);
@ -160,7 +160,7 @@ bot.use(txt2imgQuestion.middleware());
bot.command("img2img", img2imgCommand); bot.command("img2img", img2imgCommand);
bot.use(img2imgQuestion.middleware()); bot.use(img2imgQuestion.middleware());
bot.command("getprompt", pnginfoCommand); bot.command("pnginfo", pnginfoCommand);
bot.use(pnginfoQuestion.middleware()); bot.use(pnginfoQuestion.middleware());
bot.command("queue", queueCommand); bot.command("queue", queueCommand);

View File

@ -1,23 +1,25 @@
import * as ExifReader from "exifreader"; import * as ExifReader from "exifreader";
export function getPngInfo(pngData: ArrayBuffer): string | undefined { export function getPngInfo(pngData: ArrayBuffer): string | undefined {
nameless marked this conversation as resolved
Review

I don't like as here. How about:

export function getImageInfo(imageData: ArrayBuffer): string | undefined {
  const info = ExifReader.load(imageData);

  if (info.UserComment?.value && Array.isArray(info.UserComment.value)) {
    // JPEG image
    return String.fromCharCode(
      ...info.UserComment.value
        .filter((char): char is number => typeof char == "number")
        .filter((char) => char !== 0),
    ).replace("UNICODE", "");
  }

  if (info.parameters?.description) {
    // PNG image
    return info.parameters.description;
  }

  // Unknown image type
  return undefined;
}
I don't like `as` here. How about: ```ts export function getImageInfo(imageData: ArrayBuffer): string | undefined { const info = ExifReader.load(imageData); if (info.UserComment?.value && Array.isArray(info.UserComment.value)) { // JPEG image return String.fromCharCode( ...info.UserComment.value .filter((char): char is number => typeof char == "number") .filter((char) => char !== 0), ).replace("UNICODE", ""); } if (info.parameters?.description) { // PNG image return info.parameters.description; } // Unknown image type return undefined; } ```
const image = ExifReader.load(pngData); const info = ExifReader.load(pngData);
if (image.UserComment && image.UserComment.value) { if (info.UserComment?.value && Array.isArray(info.UserComment.value)) {
// JPEG image // JPEG image
return String.fromCharCode.apply( return String.fromCharCode(
0, ...info.UserComment.value
(image.UserComment.value as number[]).filter((char: number) => char != 0), .filter((char): char is number => typeof char == "number")
) .filter((char) => char !== 0),
.replace("UNICODE", ""); ).replace("UNICODE", "");
} else if (image.parameters && image.parameters.description) { }
if (info.parameters?.description) {
// PNG image // PNG image
return image.parameters.description; return info.parameters.description;
} else { }
// Unknown image type // Unknown image type
return undefined; return undefined;
} }
}
export interface PngInfo { export interface PngInfo {
prompt: string; prompt: string;

View File

@ -22,7 +22,7 @@ async function pnginfo(ctx: ErisContext, includeRepliedTo: boolean): Promise<voi
if (document?.mime_type !== "image/png" && document?.mime_type !== "image/jpeg") { if (document?.mime_type !== "image/png" && document?.mime_type !== "image/jpeg") {
await ctx.reply( await ctx.reply(
"Please send me a PNG file." + "Please send me a PNG or JPEG file." +
pnginfoQuestion.messageSuffixMarkdown(), pnginfoQuestion.messageSuffixMarkdown(),
omitUndef( omitUndef(
{ {
@ -37,7 +37,14 @@ async function pnginfo(ctx: ErisContext, includeRepliedTo: boolean): Promise<voi
const file = await ctx.api.getFile(document.file_id); const file = await ctx.api.getFile(document.file_id);
const buffer = await fetch(file.getUrl()).then((resp) => resp.arrayBuffer()); const buffer = await fetch(file.getUrl()).then((resp) => resp.arrayBuffer());
const params = parsePngInfo(getPngInfo(buffer) ?? "Nothing found.", undefined, true); const info = getPngInfo(buffer);
if (!info) {
return await ctx.reply(
"No info found in file.",
omitUndef({ reply_to_message_id: ctx.message?.message_id }),
);
}
const params = parsePngInfo(info, undefined, true);
const paramsText = fmt([ const paramsText = fmt([
`${params.prompt}\n`, `${params.prompt}\n`,

View File

@ -56,9 +56,11 @@ export function AdminsPage(props: { sessionId: string | null }) {
) )
: getAdmins.data?.length === 0 : getAdmins.data?.length === 0
? ( ? (
<ul className="flex flex-col gap-2">
<li className="flex flex-col gap-2 rounded-md bg-zinc-100 dark:bg-zinc-800 p-2"> <li className="flex flex-col gap-2 rounded-md bg-zinc-100 dark:bg-zinc-800 p-2">
<p key="no-admins" className="text-center text-gray-500">No admins.</p> <p key="no-admins" className="text-center text-gray-500">No admins.</p>
</li> </li>
</ul>
) )
: getAdmins.error : getAdmins.error
? <p className="alert">Loading admins failed</p> ? <p className="alert">Loading admins failed</p>

View File

@ -39,9 +39,11 @@ export function WorkersPage(props: { sessionId: string | null }) {
) )
: getWorkers.data?.length === 0 : getWorkers.data?.length === 0
? ( ? (
<ul className="flex flex-col gap-2">
<li className="flex flex-col gap-2 rounded-md bg-zinc-100 dark:bg-zinc-800 p-2"> <li className="flex flex-col gap-2 rounded-md bg-zinc-100 dark:bg-zinc-800 p-2">
<p key="no-workers" className="text-center text-gray-500">No workers.</p> <p key="no-workers" className="text-center text-gray-500">No workers.</p>
</li> </li>
</ul>
) )
: getWorkers.error : getWorkers.error
? <p className="alert">Loading workers failed</p> ? <p className="alert">Loading workers failed</p>