58 lines
2.2 KiB
JavaScript
58 lines
2.2 KiB
JavaScript
//const { ollama } = require('ollama');
|
|
import ollama from 'ollama'
|
|
import error from 'console';
|
|
import { Client, Message, MessageAttachment } from 'discord.js-selfbot-v13';
|
|
import axios from 'axios';
|
|
import config from './config.json' with { type: "json" };
|
|
const client = new Client();
|
|
|
|
function newAIMessage(text) {
|
|
return { role: 'user', content: text }
|
|
}
|
|
|
|
function requestAIMessage(prevmessages) {
|
|
return ollama.chat({ model: config.modelname, messages: prevmessages, stream: false})
|
|
}
|
|
|
|
client.on('ready', async () => {
|
|
console.log(`${client.user.username} is ready!`);
|
|
})
|
|
|
|
let savedMessage;
|
|
let history = [{ role: 'system', content: config.systemd }];
|
|
let count = 0;
|
|
|
|
function isAllowedUser(id) {
|
|
if (config.ALLOWED_IDS.find(string => string == id)) return true;
|
|
return false;
|
|
}
|
|
|
|
async function getMessageContent(message) {
|
|
if (!message.reference) return message.author.displayName + ": " + message.content;
|
|
else {
|
|
let reply = message.channel.messages.fetch(message.reference.messageId);
|
|
return message.author.displayName + ": " + message.content + " `Ответ на: " + reply.author.displayName + ": " + reply.content + "`";
|
|
}
|
|
}
|
|
|
|
client.on("messageCreate", async function(message){
|
|
try {
|
|
history.push(newAIMessage(await getMessageContent(message)));
|
|
if (message.author.id == config.admin && message.content.startsWith("e ")) {
|
|
eval(message.content.substring(1));
|
|
}
|
|
else if ((message.author.id != client.user.id && (message.mentions.users.get(client.user.id) || isAllowedUser(message.author.id) || (!isAllowedUser && count % 5 == 0) || (message.reference && message.channel.messages.cache.get(message.reference.messageId).author.id == client.user.id)))) {
|
|
savedMessage = message;
|
|
savedMessage.channel.sendTyping();
|
|
let aimessage = (await requestAIMessage(history)).message.content
|
|
history.push({role: 'assistant', content: aimessage});
|
|
savedMessage.channel.send("<@" + savedMessage.author.id + "> " + aimessage);
|
|
}
|
|
if (!isAllowedUser(message.author.id)) count++;
|
|
} catch(error) {
|
|
console.error(error);
|
|
}
|
|
});
|
|
|
|
client.login(config.token);
|