diff --git a/.env.example b/.env.example index f39099c..a691438 100644 --- a/.env.example +++ b/.env.example @@ -8,6 +8,8 @@ CHATGPT_CONTEXT=thread #CHATGPT_MODEL=text-chat-davinci-002-20221122 # (Optional) Explicitly set the prefix sent to model at the beginning of a conversation #CHATGPT_PROMPT_PREFIX=Instructions:\nYou are ChatGPT, a large language model trained by OpenAI. +# (Optional) Set to true if ChatGPT should ignore any messages which are not text +#CHATGPT_IGNORE_MEDIA=false # Set data store settings KEYV_BACKEND=file diff --git a/src/env.ts b/src/env.ts index ae07dce..da36de8 100644 --- a/src/env.ts +++ b/src/env.ts @@ -31,6 +31,7 @@ export const { CHATGPT_TIMEOUT, CHATGPT_MODEL, CHATGPT_PROMPT_PREFIX, + CHATGPT_IGNORE_MEDIA, } = parseEnv(process.env, { DATA_PATH: { schema: z.string().default("./storage"), description: "Set to /storage/ if using docker, ./storage if running without" }, KEYV_BACKEND: { schema: z.enum(["file", "other"]).default("file"),description: "Set the Keyv backend to 'file' or 'other' if other set KEYV_URL" }, @@ -59,4 +60,5 @@ export const { CHATGPT_CONTEXT: { schema: z.enum(["thread", "room", "both"]).default("thread"), description: "Set the ChatGPT conversation context to 'thread', 'room' or 'both'" }, CHATGPT_MODEL: { schema: z.string().default("text-chat-davinci-002-20221122"), description: "The model for the ChatGPT-API to use" }, CHATGPT_PROMPT_PREFIX: { schema: z.string().default('Instructions:\nYou are ChatGPT, a large language model trained by OpenAI.'), description: "Instructions to feed to ChatGPT on startup"}, + CHATGPT_IGNORE_MEDIA: { schema: z.boolean().default(false), description: "Wether or not the bot should react to non-text messages"}, }); diff --git a/src/handlers.ts b/src/handlers.ts index 7ba66aa..6a1fa16 100644 --- a/src/handlers.ts +++ b/src/handlers.ts @@ -1,6 +1,6 @@ import ChatGPTClient from '@waylaidwanderer/chatgpt-api'; import { LogService, MatrixClient, UserID } from "matrix-bot-sdk"; -import { CHATGPT_CONTEXT, CHATGPT_TIMEOUT, MATRIX_DEFAULT_PREFIX_REPLY, MATRIX_DEFAULT_PREFIX, MATRIX_BLACKLIST, MATRIX_WHITELIST, MATRIX_RICH_TEXT, MATRIX_PREFIX_DM, MATRIX_THREADS } from "./env.js"; +import { CHATGPT_CONTEXT, CHATGPT_TIMEOUT, CHATGPT_IGNORE_MEDIA, MATRIX_DEFAULT_PREFIX_REPLY, MATRIX_DEFAULT_PREFIX, MATRIX_BLACKLIST, MATRIX_WHITELIST, MATRIX_RICH_TEXT, MATRIX_PREFIX_DM, MATRIX_THREADS } from "./env.js"; import { RelatesTo, MessageEvent, StoredConversation, StoredConversationConfig } from "./interfaces.js"; import { sendChatGPTMessage, sendError, sendReply } from "./utils.js"; @@ -35,6 +35,7 @@ export default class CommandHandler { if (MATRIX_WHITELIST && !MATRIX_WHITELIST.split(" ").find(w => event.sender.endsWith(w))) return true; // Ignore if not on whitelist if set if (Date.now() - event.origin_server_ts > 10000) return true; // Ignore old messages if (event.content["m.relates_to"]?.["rel_type"] === "m.replace") return true; // Ignore edits + if (CHATGPT_IGNORE_MEDIA && event.content.msgtype !== "m.text") return true; // Ignore everything which is not text if set return false; }