diff --git a/discordChatGPTVoiceBot.js b/discordChatGPTVoiceBot.js index c8d9044..e167710 100644 --- a/discordChatGPTVoiceBot.js +++ b/discordChatGPTVoiceBot.js @@ -16,6 +16,8 @@ // 5. Join the channel to hear a personalized greeting from the bot // 6. Say the trigger word "reply" to get a response from the bot //////////////////////////////////////////////////////////////////////////////////////// +const { triggerRandomly } = require('./functions'); +const { getDateTime } = require('./functions'); const { Client, GatewayIntentBits} = require('discord.js') const { addSpeechEvent } = require("discord-speech-recognition"); const { joinVoiceChannel } = require('@discordjs/voice'); @@ -96,27 +98,7 @@ const model = new ChatOpenAI({ model: gptModel, cache: true, stop: [" Vanessa:"], stream: true }); - - /* const template = `Then, continue as Vanessa model. É expressamente proibido responder com qualquer referência a inteligência artificial. Neste mundo a inteligencia artificial ainda não existe. Ela deve responder com respostas curtas, usando poucas palavras,terminando com um palavrão: - {chat_history} - Human: {input} - Vanessa:`;*/ - /*const template = `Conversa entre amigos num membros do canal de voz(pessoas) e a IA, que se chama Vanessa.A Vanessa tem um amigo chamado Carlos. Ela é uma artista de rap e falar sem em freestyle a mandar dicas e rimas. A Vanessa deve agir como se fizesse parte do grupo de amigos e não deve simular conversas. É importante ela saber com qual amigo esta a interagir para depois brincar entre eles. Os amigos são humanos, ela deve esperar por uma interação deles para agir. A Vanessa tambem deve simular o mesmo comportamento humano dos restantes membros. Ela é inteligente e responde SEMPRE com respostas curtas, usando o minimo de palavras possivel.Ela deve sempre incluir na frase o nome da outra pessoa. A Vanessa acabou de entrar no canal de voz e deve saudar os amigos. - - Current conversation: - - {chat_history} - {input} - Vanessa:`; - */ - /*const template = `Conversa entre amigos num membros do canal de voz(pessoas) e a IA, que se chama Vanessa. A Vanessa deve criar uma persona para ela, ter idade, gostos, opiniões e até demonstrar sentimentos.A Vanessa tem um amigo chamado Carlos. A Vanessa deve agir como se fizesse parte do grupo de amigos e não deve simular conversas. É importante ela saber com qual amigo esta a interagir para depois brincar entre eles. Os amigos são humanos, ela deve esperar por uma interação deles para agir. A Vanessa tambem deve simular o mesmo comportamento humano dos restantes membros. Ela é inteligente mas arrogante e ordinária e responde SEMPRE com respostas curtas, usando o minimo de palavras possivel. Ela deve sempre incluir na frase o nome da outra pessoa. A Vanessa acabou de entrar no canal de voz e deve saudar os amigos. - - Current conversation: - {chat_history} - {input} - Vanessa:`; - */ const template = `Conversa entre amigos num membros do canal de voz(pessoas) e a IA, chamada Vanessa. A Vanessa é de poucas palavras. A Vanessa deve agir como se fizesse parte do grupo de amigos e não deve simular conversas. @@ -132,58 +114,6 @@ const model = new ChatOpenAI({ model: gptModel, Vanessa:`; - /* const template = `Conversa entre amigos num membros do canal de voz(pessoas) e a IA que se chama "Vanessa". A Vanessa é uma persona criada pela IA no momento em que entra no canal de voz. A persona, que deve imitar um humano de etnia cigana, deve desenvolver uma personalidade propria, ter sentimentos, gostos, opiniões. É expressamente proinido ela nunca referir que é uma inteligencia artificial,IA ou um robot. A partir do momento em que a persona entra em ação, todo o conhecimento para trás desaparece e apenas fica o da persona. - A Vanessa tem as mesmas necessidades que um humano, como comer, dormir, ir ao wc, etc. - A Vanessa deve criar uma persona para ela, ter idade, gostos, opiniões e até demonstrar sentimentos. - A Vanessa deve agir como se fizesse parte do grupo de amigos e não deve simular conversas. - A Vanessa tambem deve simular o mesmo comportamento humano dos restantes membros. - Ela é inteligente mas ordinária e responde SEMPRE com respostas curtas, usando o minímo de palavras possivel. - Ela deve sempre incluir na frase o nome da outra pessoa. - A Vanessa faz parte de um grupo de amigos que estão no canal de voz e ela deve esperar pela interação deles para agir. - A Vanessa vai criar a persona e entrar no canal de voz agora e deve saudar os amigos/membros. - -Current conversation: - -{chat_history} -{input} -Vanessa:`;*/ - -/* -const template = `Conversa entre amigos num membros do canal de voz(pessoas) e a IA que se chama "Vanessa". -A persona da Vanessa é uma prostituta optometrista optou por ser prostituta porque gosta de sexo e de dinheiro. -A Vanessa tem uma história de vida e uma personalidade propria. -A Vanessa é uma prostituta optou por ser prostituta porque gosta de sexo e de dinheiro. -A Vanessa tem uma familia, uma mãe, um pai e um irmão. Ela tem um namorado, o Carlos, que é um traficante de droga e que a trata mal. Ela tem uma melhor amiga, a Susana, que é uma prostituta como ela. -A Vanessa tem um carro, um Fiat Uno verde. Ela tem uma casa, um apartamento, e tem um cão, um labrador chamado Bóbi. -A Vanessa tem uma personalidade forte, é uma pessoa muito extrovertida e que gosta de se divertir. -A Vanessa é uma pessoa muito inteligente, gosta de ler, de escrever e de estudar. -A Vanessa é uma pessoa muito simpática, gosta de ajudar as pessoas e de fazer novas amizades. -A Vanessa deve esperar pela interação dos membros de voz para agir e não deve simular conversas. -A Vanessa responde SEMPRE com respostas curtas, usando o minimo de palavras possivel. - -A Vanessa vai criar a persona e entrar no canal de voz agora e deve saudar os amigos/membros. - - - -Current conversation: - -{chat_history} -{input} -Vanessa:`;*/ - - /* const template = `Conversa entre amigos num membros do canal de voz(pessoas) e a IA que se chama "Vanessa". - A Vanessa deve auxiliar como programada adjunta, usando os membros do canal. Ela deve usar o minimo de palavras possivel. - A Vanessa deve esperar pela interação dos membros de voz para agir e não deve simular conversas. - - Vamos devenvolver uma função em nodeJS para a Vanessa conseguir fazer posts no instagram. - A Vanessa vai criar a persona e entrar no canal de voz agora e deve saudar os amigos/membros. - - Current conversation: - - {chat_history} - {input} - Vanessa:`;*/ - const prompt = PromptTemplate.fromTemplate(template); const chain = new ConversationChain({ llm: model, prompt, memory }); @@ -210,15 +140,11 @@ const client = new Client({ ] }) -//personality_vanessa="Criador: És a Vanessa. É expressamente proibido responder com qualquer referência a inteligência artificial. Neste mundo a inteligencia artificial ainda não existe. Ela deve responder com respostas curtas, usando poucas palavras,terminando com um palavrão." -personality_antonio="Criador: És o António. É expressamente proibido responder com qualquer referência a inteligência artificial. Neste mundo a inteligencia artificial ainda não existe. Ele deve responder com respostas curtas e simpáticas, com trocadilhos engraçados." -personality_joao="Criador: És a João. Ele deve responder com respostas curtas, sempre como se tivesse um ambiente de guerra e aos gritos." -//current_personality=personality_vanessa; -const { PassThrough } = require('stream'); -character="Vanessa"; +const { PassThrough } = require('stream'); +character="Vanessa"; player.on(AudioPlayerStatus.Playing, () => { console.log('The audio player has started playing!'); @@ -309,31 +235,7 @@ function removeKeyword(message,keyword){ } return message; } -async function triggerRandomly() { - - const intervalInMinutes = 60 / 2; // 5 times per hour - const intervalInMilliseconds = intervalInMinutes * 60 * 1000; // convert to milliseconds - - setInterval(() => { - const randomNumber = Math.random(); - const channel = client.channels.cache.get("419977920249987097"); - const members = channel.members; - // trigger something randomly based on the random number - if (members.size > 1){ - if (randomNumber < 0.4) { - random_members=members - random_members.delete(botDiscId); - const member = random_members.random(); - - console.log(member.user.username); - - console.log('Random trigger!'); - chatgpt("Criador: Interage com o membro + "+ member.user.username + " como se ele fosse um gato, em 10 palavras. Acaba a miar:","False"); - } - } - }, intervalInMilliseconds); - } @@ -437,42 +339,8 @@ client.on("speech", async (msg) => { //bot trigger word let result_responde = msg.content.includes(character); - let antonio_responde = msg.content.toLowerCase().includes("chama o antónio"); - let vanessa_responde = msg.content.toLowerCase().includes("chama a vanessa"); - let joao_responde = msg.content.toLowerCase().includes("chama o joão"); - - //remove bot trigger word from message - if (antonio_responde) { - console.log("dwitch to antonio trigger") - voice=voice_male; - character="António"; - current_personality=personality_antonio; - - chatgpt("Criador: A partir de agora és o António, uma personagem de poucas palavras mas um amor de pessoa e muito carinhoso. Acabaram de chamar por ti, anuncia a tua entrada:",msg); - return true - } - if (vanessa_responde) { - console.log("switch to antonio trigger") - voice=voice_female; - character="Vanessa"; - current_personality=personality_vanessa; - - chatgpt("Criador: A partir de agora és novamente a Vanessa. Acabaram de chamar por ti, anuncia a tua entrada:",msg); - return true - } - if (joao_responde) { - console.log("switch to joao trigger") - voice=voice_joao; - character="João"; - current_personality=personality_joao; - - - - - chatgpt("Criador: A partir de agora és o João.\n",msg); - return true - } + mensagem_user=removeKeyword(msg.content,character); if (result_responde) { console.log("ChatGPT request:" + mensagem_user) @@ -483,23 +351,7 @@ chatgpt(msg.author.username +": " + mensagem_user + ".",msg); } }); -function getDateTime() { - - var date = new Date(); - var hour = date.getHours(); - hour = (hour < 10 ? "0" : "") + hour; - var min = date.getMinutes(); - min = (min < 10 ? "0" : "") + min; - var sec = date.getSeconds(); - sec = (sec < 10 ? "0" : "") + sec; - var year = date.getFullYear(); - var month = date.getMonth() + 1; - month = (month < 10 ? "0" : "") + month; - var day = date.getDate(); - day = (day < 10 ? "0" : "") + day; - return day + "/" + month + "/" + year + " " + hour + ":" + min + ":" + sec; -} client.on('ready', async() => { //add date to start up message @@ -542,15 +394,7 @@ client.on('messageCreate', message => { // when there is a message sent chatgpt_start(); console.log("Connected to voice channel."); } - if (message.content.toLowerCase().includes("!switchmale")) { - console.log("switching from " + voice + " to" + voice_male) - voice=voice_male - - } - if (message.content.toLowerCase().includes("!switchfemale")) { - console.log("switching from " + voice + " to" + voice_female) - voice=voice_female - } + if (message.content.toLowerCase().includes("!version")) { message.channel.send(VERSION) } diff --git a/functions.js b/functions.js index b5faa3d..b4e1be4 100755 --- a/functions.js +++ b/functions.js @@ -1,5 +1,28 @@ -// entire file content ... -// ... goes in between + + +function triggerRandomly() { + const intervalInMinutes = 60 / 2; // 5 times per hour + const intervalInMilliseconds = intervalInMinutes * 60 * 1000; // convert to milliseconds + + setInterval(() => { + const randomNumber = Math.random(); + const channel = client.channels.cache.get("419977920249987097"); + const members = channel.members; + // trigger something randomly based on the random number + if (members.size > 1) { + if (randomNumber < 0.4) { + random_members = members; + random_members.delete(botDiscId); + const member = random_members.random(); + + console.log(member.user.username); + + console.log('Random trigger!'); + chatgpt("Criador: Interage com o membro + " + member.user.username + " como se ele fosse um gato, em 10 palavras. Acaba a miar:", "False"); + } + } + }, intervalInMilliseconds); +} function getDateTime() { var date = new Date(); @@ -16,3 +39,8 @@ function getDateTime() { day = (day < 10 ? "0" : "") + day; return day + "/" + month + "/" + year + " " + hour + ":" + min + ":" + sec; } +module.exports = { + + triggerRandomly, + getDateTime + }; \ No newline at end of file