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 (
const generation of generationStore.listBy("fromId", {
before: new Date(new Date(year, month - 1, day).getTime() + 24 * 60 * 60 * 1000),
after: new Date(year, month - 1, day),
after: new Date(Date.UTC(year, month - 1, day)),
before: new Date(Date.UTC(year, month - 1, day + 1)),
value: userId,
})
) {

View File

@ -115,7 +115,7 @@ bot.api.setMyDescription(
bot.api.setMyCommands([
{ command: "txt2img", description: "Generate image from text" },
{ 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: "cancel", description: "Cancel all your requests" },
]);
@ -160,7 +160,7 @@ bot.use(txt2imgQuestion.middleware());
bot.command("img2img", img2imgCommand);
bot.use(img2imgQuestion.middleware());
bot.command("getprompt", pnginfoCommand);
bot.command("pnginfo", pnginfoCommand);
bot.use(pnginfoQuestion.middleware());
bot.command("queue", queueCommand);

View File

@ -1,22 +1,24 @@
import * as ExifReader from "exifreader";
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
return String.fromCharCode.apply(
0,
(image.UserComment.value as number[]).filter((char: number) => char != 0),
)
.replace("UNICODE", "");
} else if (image.parameters && image.parameters.description) {
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 image.parameters.description;
} else {
return info.parameters.description;
}
// Unknown image type
return undefined;
}
}
export interface PngInfo {

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") {
await ctx.reply(
"Please send me a PNG file." +
"Please send me a PNG or JPEG file." +
pnginfoQuestion.messageSuffixMarkdown(),
omitUndef(
{
@ -37,7 +37,14 @@ async function pnginfo(ctx: ErisContext, includeRepliedTo: boolean): Promise<voi
const file = await ctx.api.getFile(document.file_id);
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([
`${params.prompt}\n`,

View File

@ -56,9 +56,11 @@ export function AdminsPage(props: { sessionId: string | null }) {
)
: 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">
<p key="no-admins" className="text-center text-gray-500">No admins.</p>
</li>
</ul>
)
: getAdmins.error
? <p className="alert">Loading admins failed</p>

View File

@ -39,9 +39,11 @@ export function WorkersPage(props: { sessionId: string | null }) {
)
: 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">
<p key="no-workers" className="text-center text-gray-500">No workers.</p>
</li>
</ul>
)
: getWorkers.error
? <p className="alert">Loading workers failed</p>