/** * @copyright nhcarrigan * @license Naomi's Public License * @author Naomi Carrigan */ import { MessageFlags, type ChatInputCommandInteraction } from "discord.js"; import { personality } from "../config/personality.js"; import { ai } from "../utils/ai.js"; import { isSubscribed } from "../utils/isSubscribed.js"; /** * Accepts an arbitrary code snippet from the user, then sends * it to Anthropic to be evaluated. * @param interaction -- The interaction payload from Discord. */ export const evaluate = async( interaction: ChatInputCommandInteraction, ): Promise => { await interaction.deferReply({ flags: [ MessageFlags.Ephemeral ] }); const sub = await isSubscribed(interaction); if (!sub) { return; } const code = interaction.options.getString("code", true); const messages = await ai.messages.create({ // eslint-disable-next-line @typescript-eslint/naming-convention -- Required key format for SDK. max_tokens: 2000, messages: [ { content: code, role: "user" } ], model: "claude-3-5-sonnet-latest", system: `${personality} Your role in this conversation is to evaluate the user's code and provide the result. Wrap ONLY THE CODE RESULT in a multi-line code block for easy copying.`, temperature: 1, }); const response = messages.content.find((message) => { return message.type === "text"; }); await interaction.editReply( response?.text ?? "I'm sorry, I don't have an answer for that. Please try again later.", ); };