54 lines
1.9 KiB
JavaScript
54 lines
1.9 KiB
JavaScript
const { getBot, getStateMachine, setAllowDestruction } = require('../core/context');
|
|
const db = require('../db');
|
|
const path = require('path');
|
|
const fs = require('fs');
|
|
const { chatWithAI } = require('../lib/ai-helper');
|
|
const config = require('../config.json');
|
|
|
|
const taskName = 'find-flower';
|
|
|
|
module.exports = async function FindFlower() {
|
|
const bot = getBot();
|
|
console.log(`[TASK] Starting ${taskName}`);
|
|
setAllowDestruction(false);
|
|
|
|
try {
|
|
const flowerNames = [
|
|
'dandelion', 'poppy', 'blue_orchid', 'allium',
|
|
'azure_bluet', 'red_tulip', 'orange_tulip', 'white_tulip',
|
|
'pink_tulip', 'oxeye_daisy', 'cornflower', 'lily_of_the_valley'
|
|
];
|
|
|
|
const flower = bot.findBlock({
|
|
matching: block => flowerNames.includes(block.name),
|
|
maxDistance: 32
|
|
});
|
|
|
|
if (!flower) {
|
|
bot.chat("I couldn't find a flower nearby.");
|
|
db.run(`INSERT INTO tasks (action, outcome, score) VALUES (?, 'not-found', 0)`, [taskName]);
|
|
return;
|
|
}
|
|
|
|
const { GoalNear } = require('mineflayer-pathfinder').goals;
|
|
bot.pathfinder.setGoal(new GoalNear(flower.position.x, flower.position.y, flower.position.z, 1));
|
|
|
|
bot.chat("Heading to a flower...");
|
|
db.run(`INSERT INTO tasks (action, outcome, score) VALUES (?, 'success', 1)`, [taskName]);
|
|
|
|
} catch (err) {
|
|
console.error(`[TASK] ${taskName} failed:`, err.message);
|
|
bot.chat(`Task ${taskName} failed.`);
|
|
db.run(`INSERT INTO tasks (action, outcome, score) VALUES (?, 'failed', -1)`, [taskName]);
|
|
|
|
const scriptPath = path.join(__dirname, `${taskName}.js`);
|
|
const original = fs.readFileSync(scriptPath, 'utf8');
|
|
const prompt = `This script called '${taskName}' failed. Please improve it:\n\n${original}`;
|
|
const rewritten = await chatWithAI(prompt, config.ai);
|
|
fs.writeFileSync(scriptPath, rewritten);
|
|
} finally {
|
|
setTimeout(() => {
|
|
getStateMachine().transition('Idle');
|
|
}, 10000);
|
|
}
|
|
};
|