feat(triviaAI): add an option to send ai replies as clyde (#948)

* feat(triviaAI): add an option to send ai replies as clyde and refactor

* refactor: remove messageReference from sendBotMessage because it does not work

* ok

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* Update src/equicordplugins/triviaAI/utils.ts

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* refactor

* refactor

---------

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
This commit is contained in:
YashRaj 2026-04-04 00:24:09 +05:30 • committed by GitHub
parent fb5d32ba91
commit b3dff901cd
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 37 additions and 31 deletions

View file

@ -40,10 +40,14 @@ export const settings = definePluginSettings({
default: "https://openrouter.ai/api/v1/chat/completions",
placeholder: "Enter your OpenAI compatible AI endpoint here."
},
autoRespond: {
type: OptionType.BOOLEAN,
description: "Automatically respond to messages on receiving a response.",
default: false
mode: {
type: OptionType.SELECT,
description: "How should answers be handled?",
options: [
{ label: "Auto Reply", value: "autoreply" },
{ label: "Replace Chatbar Text", value: "chatbar", default: true },
{ label: "Clyde", value: "bot" }
]
},
supportImages: {
type: OptionType.BOOLEAN,

View file

@ -4,6 +4,7 @@
* SPDX-License-Identifier: GPL-3.0-or-later
*/
import { sendBotMessage } from "@api/Commands";
import { insertTextIntoChatInputBox, sendMessage } from "@utils/discord";
import { Logger } from "@utils/Logger";
import { Message } from "@vencord/discord-types";
@ -102,18 +103,24 @@ export function parseMessageContent(message: Message): ContentPayload | null {
}
export async function handleResponse(message: Message, response: string): Promise<string> {
if (settings.store.autoRespond) {
sendMessage(
message.channel_id,
{ content: response },
true,
{ messageReference: { channel_id: message.channel_id, message_id: message.id } }
);
return response;
} else {
insertTextIntoChatInputBox(response);
return response;
switch (settings.store.mode) {
case "autoreply":
sendMessage(
message.channel_id,
{ content: response },
true,
{ messageReference: { channel_id: message.channel_id, message_id: message.id } }
);
break;
case "chatbar":
insertTextIntoChatInputBox(response);
break;
case "bot":
sendBotMessage(message.channel_id, { content: response });
break;
}
return response;
}
export async function getResponse(payload: ContentPayload): Promise<string> {
@ -155,25 +162,20 @@ export async function getResponse(payload: ContentPayload): Promise<string> {
})
});
if (!req.ok) {
const errorBody = await req.text();
const errorMessage = `API request failed with status ${req.status}: ${errorBody}`;
logger.error(errorMessage);
showToast(errorMessage, Toasts.Type.FAILURE);
const rawBody = await req.text();
const data: { error?: { message?: string; }, choices?: { message: { content: string; }; }[]; } = (() => {
try { return JSON.parse(rawBody); }
catch { return {}; }
})();
if (!req.ok || data.error) {
const errorMsg = data.error?.message ?? rawBody ?? `Status ${req.status}`;
logger.error(`API Error: ${errorMsg}`);
showToast(errorMsg, Toasts.Type.FAILURE);
return "";
}
const data = await req.json();
if (data.error) {
const errorMessage = data.error.message ?? "An unknown error occurred";
logger.error(`API Error: ${errorMessage}`);
showToast(errorMessage, Toasts.Type.FAILURE);
return "";
}
const response = data.choices[0].message.content;
const response = data.choices?.[0]?.message?.content;
if (!response?.trim()) {
logger.warn("no response from AI model");
return "";