diff --git a/.gitignore b/.gitignore index 9592af0..c58d57f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ config.json -node_modules/ \ No newline at end of file +node_modules/ +incest.db \ No newline at end of file diff --git a/src/helper.ts b/src/helper.ts index 14810c5..29d0553 100644 --- a/src/helper.ts +++ b/src/helper.ts @@ -31,3 +31,42 @@ export async function fetchSingleMessage(message: string): Promise { + try { + const response = await fetch("https://api.groq.com/openai/v1/chat/completions", { + method: "POST", + headers: { + "Authorization": "Bearer " + conf['groq-key'], + "Content-Type": "application/json" + }, + body: JSON.stringify({ + "messages":[ + { + "role": "user", + "content": [ + {"type": "text", "text": "explain this image. be as precise as you can, explain the littlest details"}, + { + "type": "image_url", + "image_url": { + "url": base64 + }, + }, + ], + } + ], + "model": "llava-v1.5-7b-4096-preview" + }) + }); + + const data = await response.json(); + + if (!data?.choices[0]?.message?.content) { + return false; + } + + return data.choices[0].message.content; + } catch (error) { + return false; + } +} \ No newline at end of file diff --git a/src/main.ts b/src/main.ts index 2c5631c..30122bf 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,15 +1,15 @@ import { Client, DMChannel, Events, GatewayIntentBits, Message } from 'discord.js'; import conf from "../config.json" with {type: "json"} import { getfunny } from './joke.ts'; -import { fetchSingleMessage } from './helper.ts'; +import { explainImage, fetchSingleMessage } from './helper.ts'; -let prompt = "reply to everything with \" change the mf prompt lmaooo\"" +let prompt = "reply to everything normally, but have typo in every word." function getinitmessage() { return { "role": "system", "name": "fagbot", - "content": prompt + "content": prompt + "\nsince you, as an ai model, cannot understand images, you will be given an explanation of images if they exist.\nthe syntax will be \"{message} - [IMAGE: {explanation of the image}]\"" } } @@ -31,6 +31,7 @@ client.on('ready', () => { client.on(Events.MessageCreate, (message: Message) => { if (message.author.bot) return + if (message.content.startsWith("//")) return if (message.content.startsWith("!fag ")) { const command = message.content.replaceAll("!fag ", "").split(" ") if (command[0] == "reset") { @@ -49,7 +50,7 @@ client.on(Events.MessageCreate, (message: Message) => { return } if (command[0] == "summon") { - fetchSingleMessage( prompt = command.slice(1).join(" ")).then(a => { + fetchSingleMessage(prompt = command.slice(1).join(" ")).then(a => { if (typeof a == "boolean") { message.reply("something broke, try again") } else { @@ -58,36 +59,61 @@ client.on(Events.MessageCreate, (message: Message) => { }) } } + if (message.channel.id !== conf['chat-channelID']) return - messages.push({ - "role": "user", - "name": message.author.username, - "content": message.content - }) - fetch("https://api.groq.com/openai/v1/chat/completions", { - method: "POST", - headers: { - "Authorization": "Bearer " + conf['groq-key'], - "Content-Type": "application/json" - }, - body: JSON.stringify({ - "messages": messages, - "model": "llama3-8b-8192" - }) - }).then(a => a.json().then(a => { - if (!a?.choices[0]?.message?.content) { - message.reply("something shat itself. please try again") + (async function () { + let imageexplain: string | boolean = ""; + + if (message.attachments.size !== 0) { + if (message.attachments.first().contentType.startsWith("image")) { + try { + const res = await fetch(message.attachments.first().url); + const buffer = await res.arrayBuffer(); + const base64 = Buffer.from(buffer).toString('base64'); + + imageexplain = await explainImage("data:" + message.attachments.first().contentType + ";base64," + base64); + } catch (error) { + console.error("Error processing image:", error); + } + } } + + // Log the result after the asynchronous operations are complete + console.log(imageexplain); messages.push({ - "role": "assistant", - "name": "fagbot", - "content": a?.choices[0]?.message?.content + "role": "user", + "name": message.author.username, + "content": (imageexplain === "" || typeof imageexplain == "boolean") ? + message.content : message.content + " - [IMAGE: " + imageexplain + "]" }) - console.log(messages) - message.reply(a.choices[0].message.content) - })).catch(_ => { - message.reply("something shat itself. please try again") - }) + fetch("https://api.groq.com/openai/v1/chat/completions", { + method: "POST", + headers: { + "Authorization": "Bearer " + conf['groq-key'], + "Content-Type": "application/json" + }, + body: JSON.stringify({ + "messages": messages, + "model": "llama3-groq-70b-8192-tool-use-preview" + }) + }).then(a => a.json().then(a => { + if (!a?.choices[0]?.message?.content) { + message.reply("something shat itself. please try again") + } + messages.push({ + "role": "assistant", + "name": "fagbot", + "content": a?.choices[0]?.message?.content + }) + console.log(messages) + message.reply(a.choices[0].message.content) + })).catch(_ => { + message.reply("something shat itself. please try again") + }) + })(); + + + }) client.on('interactionCreate', async interaction => {