mirror of
https://github.com/kolbytn/mindcraft.git
synced 2025-09-10 12:02:59 +02:00
fixed file importing/deleting
This commit is contained in:
parent
3315bc87b6
commit
7a37757b69
2 changed files with 51 additions and 28 deletions
5
.gitignore
vendored
5
.gitignore
vendored
|
@ -2,4 +2,7 @@
|
||||||
node_modules/
|
node_modules/
|
||||||
package-lock.json
|
package-lock.json
|
||||||
temp.js
|
temp.js
|
||||||
scratch.js
|
scratch.js
|
||||||
|
# ignore eveything in agent_code except for 0.js
|
||||||
|
agent_code/**
|
||||||
|
!agent_code/0.js
|
|
@ -1,11 +1,11 @@
|
||||||
import { writeFile } from 'fs';
|
import { writeFile, unlink } from 'fs';
|
||||||
|
|
||||||
export class Coder {
|
export class Coder {
|
||||||
constructor(agent) {
|
constructor(agent) {
|
||||||
this.agent = agent;
|
this.agent = agent;
|
||||||
this.current_code = '';
|
this.current_code = '';
|
||||||
this.filename = './temp.js';
|
this.file_counter = 0;
|
||||||
this.execution_file = import('.'+this.filename);
|
this.fp = './agent_code/';
|
||||||
}
|
}
|
||||||
|
|
||||||
queueCode(code) {
|
queueCode(code) {
|
||||||
|
@ -16,39 +16,59 @@ export class Coder {
|
||||||
return this.current_code.length > 0;
|
return this.current_code.length > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
writeFilePromise(filename, src) {
|
||||||
|
// makes it so we can await this function
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
writeFile(filename, src, (err) => {
|
||||||
|
if (err) {
|
||||||
|
reject(err);
|
||||||
|
} else {
|
||||||
|
resolve();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
async execute() {
|
async execute() {
|
||||||
if (!this.current_code) return {success: false, message: "No code to execute."};
|
if (!this.current_code) return {success: false, message: "No code to execute."};
|
||||||
let src = "import * as skills from './utils/skills.js';";
|
let src = "import * as skills from '../utils/skills.js';";
|
||||||
src += "\nimport * as world from './utils/world.js';"
|
src += "\nimport * as world from '../utils/world.js';"
|
||||||
src += `\n\nexport async function main(bot) {\n`;
|
src += `\n\nexport async function main(bot) {\n`;
|
||||||
for (let line of this.current_code.split('\n')) {
|
for (let line of this.current_code.split('\n')) {
|
||||||
src += ` ${line}\n`;
|
src += ` ${line}\n`;
|
||||||
}
|
}
|
||||||
src += ` return true;\n}\n`; // potentially redundant return statement, agent doesn't need to write a return statement
|
src += ` return true;\n}\n`; // potentially redundant return statement, in case agent doesn't return anything
|
||||||
|
|
||||||
|
|
||||||
console.log("writing to file...", src)
|
console.log("writing to file...", src)
|
||||||
|
|
||||||
writeFile(this.filename, src, async (err) => {
|
|
||||||
|
|
||||||
console.log('done writing file')
|
let filename = this.fp + this.file_counter + '.js';
|
||||||
if (err) throw err;
|
if (this.file_counter > 0) {
|
||||||
try {
|
let prev_filename = this.fp + (this.file_counter-1) + '.js';
|
||||||
console.log('beginning execution...')
|
unlink(prev_filename, (err) => {
|
||||||
delete this.execution_file;
|
console.log("deleted file " + prev_filename);
|
||||||
this.execution_file = await import('.'+this.filename);
|
if (err) console.error(err);
|
||||||
|
});
|
||||||
let success = await this.execution_file.main(this.agent.bot);
|
}
|
||||||
this.current_code = '';
|
this.file_counter++;
|
||||||
// return {success, message: ""};
|
|
||||||
} catch (err) {
|
let result = await this.writeFilePromise(filename, src);
|
||||||
console.log(err);
|
|
||||||
this.current_code = '';
|
|
||||||
// return {success: false, message: err};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return {success: true, message: "yay"};
|
|
||||||
|
|
||||||
|
|
||||||
|
if (result) {
|
||||||
|
console.error('Error writing code execution file: ' + result);
|
||||||
|
return {success: false, message: result};
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
console.log('executing code...\n');
|
||||||
|
let execution_file = await import('.'+filename);
|
||||||
|
|
||||||
|
let success = await execution_file.main(this.agent.bot);
|
||||||
|
this.current_code = '';
|
||||||
|
return {success, message: ""};
|
||||||
|
} catch (err) {
|
||||||
|
console.error("Problem executing code:" + err);
|
||||||
|
this.current_code = '';
|
||||||
|
return {success: false, message: err};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Add table
Reference in a new issue