From 109398beea8e186dd76d089d12b3728dd35e853a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jozef=20Steinh=C3=BCbl?= Date: Sat, 11 May 2024 19:36:18 +0200 Subject: [PATCH] feat: improve ping command --- bun.lockb | Bin 18133 -> 18915 bytes globals.d.ts | 22 ++++++++++++++ package.json | 1 + src/commands/ping.tsx | 55 ++++++++++++++++++++++++++++++++++- src/constants.ts | 5 +++- src/message-commands/ping.ts | 55 ++++++++++++++++++++++++++++++++++- 6 files changed, 135 insertions(+), 3 deletions(-) diff --git a/bun.lockb b/bun.lockb index 670577f7ea4b300eabde958562f549cf0fe1a6e9..9da793183234ddccd4a6bc4e1b04b39a41d2c0be 100755 GIT binary patch delta 3062 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 + } + + interface WolframResponse { + pods: WolframPod[]; + } + + interface WolframPod { + id: string; + subpods: WolframSubpod[]; + } + + interface WolframSubpod { + plaintext: string; } } diff --git a/package.json b/package.json index 6ceaf47..f348d58 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "@lilybird/jsx": "0.2.0", "@lilybird/transformers": "^0.2.0", "@paperdave/logger": "^3.0.1", + "@wolfram-alpha/wolfram-alpha-api": "^23.1004.144821-RELEASE", "algoliasearch": "^4.23.2", "bun-tracestrings": "github:oven-sh/bun.report", "gray-matter": "^4.0.3", diff --git a/src/commands/ping.tsx b/src/commands/ping.tsx index 7bcdc0a..b6db28e 100644 --- a/src/commands/ping.tsx +++ b/src/commands/ping.tsx @@ -1,5 +1,6 @@ import { ApplicationCommand as JSXApplicationCommand } from "@lilybird/jsx"; import { ApplicationCommand } from "@lilybird/handlers"; +import { wolframApiClient } from "../constants.ts"; export default { post: "GLOBAL", @@ -9,8 +10,60 @@ export default { const { ws, rest } = await interaction.client.ping(); + const wsClosedForm = await possibleClosedForm(ws); + const restClosedForm = await possibleClosedForm(rest); + await interaction.editReply({ - content: `🏓 WebSocket: \`${ws}ms\` | Rest: \`${rest}ms\``, + content: [ + `🏓`, + `WebSocket: \`${wsClosedForm} ms\``, + `Rest: \`${restClosedForm} ms\``, + `||(\`${ws} ms\`, \`${rest} ms\`)||`, + ].join("\n"), }); }, } satisfies ApplicationCommand; + +async function possibleClosedForm( + value: number | string +): Promise { + try { + const res = await wolframApiClient.getFull(value.toString()); + const pod = res?.pods?.find((p) => p.id === "PossibleClosedForm"); + if (!pod) { + return value; + } + + pod.subpods.sort((a, b) => { + if ( + a.plaintext.includes("log") || + a.plaintext.includes("e") || + a.plaintext.includes("π") + ) { + return -1; + } + + if ( + b.plaintext.includes("log") || + b.plaintext.includes("e") || + b.plaintext.includes("π") + ) { + return 1; + } + + return Math.random() - 0.5; + }); + + const randomSubpod = pod.subpods[0]; + + const text = randomSubpod.plaintext; + + if (text.includes("=") && !text.includes("near") && !text.includes("≈")) { + return text.split("=")[0].trim(); + } + + return randomSubpod.plaintext.split("≈")[0].trim(); + } catch { + return value; + } +} diff --git a/src/constants.ts b/src/constants.ts index b71eed9..e835042 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -1,6 +1,7 @@ -import { spawnSync } from "bun"; +import WolframAlphaAPI from "@wolfram-alpha/wolfram-alpha-api"; import { dependencies } from "../package.json"; import { sliceIfStartsWith } from "./util.ts"; +import { spawnSync } from "bun"; export const COMMIT_HASH = spawnSync({ cmd: ["git", "log", "--pretty=format:%h", "-n", "1"], @@ -50,3 +51,5 @@ export const BUN_EMOJIS = [ export const MDN_API = "https://developer.mozilla.org"; export const MDN_DISCORD_EMOJI = "mdn:1236028636826566758"; + +export const wolframApiClient = WolframAlphaAPI(process.env.WOLFRAM_ALPHA); diff --git a/src/message-commands/ping.ts b/src/message-commands/ping.ts index 1cafb5a..7225372 100644 --- a/src/message-commands/ping.ts +++ b/src/message-commands/ping.ts @@ -1,4 +1,5 @@ import { MessageCommand } from "@lilybird/handlers"; +import { wolframApiClient } from "../constants.ts"; export default { name: "ping", @@ -9,8 +10,60 @@ export default { const { ws, rest } = await message.client.ping(); + const wsClosedForm = await possibleClosedForm(ws); + const restClosedForm = await possibleClosedForm(rest); + await newMessage.edit({ - content: `🏓 WebSocket: \`${ws}ms\` | Rest: \`${rest}ms\``, + content: [ + `🏓`, + `WebSocket: \`${wsClosedForm} ms\``, + `Rest: \`${restClosedForm} ms\``, + `||(\`${ws} ms\`, \`${rest} ms\`)||`, + ].join("\n"), }); }, } satisfies MessageCommand; + +async function possibleClosedForm( + value: number | string +): Promise { + try { + const res = await wolframApiClient.getFull(value.toString()); + const pod = res?.pods?.find((p) => p.id === "PossibleClosedForm"); + if (!pod) { + return value; + } + + pod.subpods.sort((a, b) => { + if ( + a.plaintext.includes("log") || + a.plaintext.includes("e") || + a.plaintext.includes("π") + ) { + return -1; + } + + if ( + b.plaintext.includes("log") || + b.plaintext.includes("e") || + b.plaintext.includes("π") + ) { + return 1; + } + + return Math.random() - 0.5; + }); + + const randomSubpod = pod.subpods[0]; + + const text = randomSubpod.plaintext; + + if (text.includes("=") && !text.includes("near") && !text.includes("≈")) { + return text.split("=")[0].trim(); + } + + return randomSubpod.plaintext.split("≈")[0].trim(); + } catch { + return value; + } +}