Skip to content

Commit

Permalink
Clean code, move functions to functions.js
Browse files Browse the repository at this point in the history
  • Loading branch information
Quskia committed Oct 29, 2023
1 parent 50df4b7 commit dfe63e0
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 164 deletions.
168 changes: 6 additions & 162 deletions discordChatGPTVoiceBot.js
Original file line number Diff line number Diff line change
Expand Up @@ -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');
Expand Down Expand Up @@ -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.
Expand All @@ -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 });
Expand All @@ -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!');
Expand Down Expand Up @@ -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);
}



Expand Down Expand Up @@ -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)
Expand All @@ -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
Expand Down Expand Up @@ -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)
}
Expand Down
32 changes: 30 additions & 2 deletions functions.js
Original file line number Diff line number Diff line change
@@ -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();
Expand All @@ -16,3 +39,8 @@ function getDateTime() {
day = (day < 10 ? "0" : "") + day;
return day + "/" + month + "/" + year + " " + hour + ":" + min + ":" + sec;
}
module.exports = {

triggerRandomly,
getDateTime
};

0 comments on commit dfe63e0

Please sign in to comment.