Skip to content

Instantly share code, notes, and snippets.

@codesxt
Created March 29, 2023 16:26
Show Gist options
  • Save codesxt/161663dc113c1c7404cc36dd56e78e43 to your computer and use it in GitHub Desktop.
Save codesxt/161663dc113c1c7404cc36dd56e78e43 to your computer and use it in GitHub Desktop.
Simulador de batallas
import * as dotenv from 'dotenv'
import * as tmi from 'tmi.js'
import express from 'express'
dotenv.config()
import { Configuration, OpenAIApi } from "openai";
const configuration = new Configuration({
apiKey: process.env.OPENAI_TOKEN,
});
const openai = new OpenAIApi(configuration);
async function battle(user1, user2, environment, temperature = 0) {
let prompt = 'Imagina que eres un juego de peleas narrativo. '
+ 'Te doy dos nombres y tú simulas una pelea narrando paso a paso y luego'
+ 'concluyendo un ganador. '
+ 'La pelea debe resolverse en un máximo de 10 pasos. '
if (environment != null) {
prompt += 'La batalla está ambientada en ' + environment + '. '
}
prompt += `Los personajes son ${user1} y ${user2}. `
+ 'Responde en formato json con la siguiente estructura: '
+ '{ "steps": [La lista de pasos de la batalla], "winner": "El ganador de la batalla" }'
const completion = await openai.createCompletion({
model: 'text-davinci-003',
prompt: prompt,
n: 1,
temperature: temperature,
max_tokens: 2000
});
const { id, object, created, model, choices, usage } = completion.data
console.log(choices[0].text)
// const result = JSON.parse(choices[0].text)
// console.log(result)
// return result
}
const fighters = []
const maps = [
'un bar',
'una protesta',
'el metro',
'un bosque',
'un bosque, sin magia ni pelea física, sólo con argumentos lógicos',
'un baño',
'un stripclup',
'una sexshop',
'un skatepark',
'el escenario de la batalla entre Hollow Knight y Radiance',
'una calle de pueblo medieval',
'en las ramadas de Chile durante fiestas patrias',
'un juzgado',
'una florería',
'un avión',
'un parque lleno de zombies',
'una batalla de rap freestyle',
'un sitio mágico donde los luchadores se convierten en animales',
'un circo usando animales de globos'
]
const client = new tmi.Client({
channels: [ 'EseMismoBruno' ]
});
client.connect();
client.on('message', (channel, tags, message, self) => {
// "Alca: Hello, World!"
console.log(`${tags['display-name']}: ${message}`);
if (message.startsWith('!join')) {
const user = tags['display-name']
if (!fighters.includes(user)) {
fighters.push(user)
console.log('El usuario ' + user + ' se ha unido a la cola de peleas')
console.log('Usuarios en la cola de peleas:')
console.log(fighters)
checkIfBattleStarts()
} else {
console.log('El usuario ' + user + ' ya está en la cola de peleas')
}
}
});
checkIfBattleStarts()
async function checkIfBattleStarts() {
if (fighters.length >= 2) {
const user1 = fighters.shift()
const user2 = fighters.shift()
console.log(`Comenzando la batalla entre ${user1} y ${user2}`)
const index = Math.floor(Math.random() * maps.length)
const map = maps[index]
console.log('La batalla será en ' + map)
try {
await battle(user1, user2, map, 1)
} catch (error) {
console.log(error)
await battle(user1, user2, map, 1)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment