Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Mineflayer JS 1.12.2

Светучка Антихелперия Мастер (1282), на голосовании 1 неделю назад
Я создал бота с помощью muneflayer JS. И я хочу, чтобы бот отреагировал на сообщение: Очистил инвентарь Sweety4ka, удалив 65 предметов. Это сообщение от самого Minecraft и бот не отвечает на него условием, что делать?

if (message === "Cleared inventory of Sweety4ka, removing 65 items" { bot.chat('hi') }

И как можно сделать что бы он отвечал на команды в ЛС? Через /w
Голосование за лучший ответ
GGG Просветленный (33206) 1 месяц назад
Проблема в том, что в твоём коде есть несколько ошибок, из-за которых бот не реагирует на сообщение. Во-первых, в условии if отсутствует закрывающая скобка после сравнения строки с сообщением. Во-вторых, возможно, строка сообщения, получаемого от Minecraft, не совпадает точно с той, что ты используешь в коде. Например, там могут быть пробелы или другие скрытые символы. Убедись, что строка полностью идентична.

Кроме того, если ты хочешь, чтобы бот реагировал на команды в личных сообщениях, тебе нужно проверять не только само сообщение, но и источник (кто его отправил и каким способом). В Mineflayer это можно сделать через события chat и whisper.

Попробуй что-то вроде этого:
 bot.on('chat', (username, message) => { 
if (message.includes('Cleared inventory of Sweety4ka, removing 65 items')) {
bot.chat('hi');
}
});

bot.on('whisper', (username, message) => {
if (username === 'Sweety4ka' && message === 'какая-то команда') {
bot.whisper(username, 'Ответ на команду в ЛС');
}
});
Так ты проверяешь, если в сообщении содержится нужный текст, и реагируешь на команды в ЛС через whisper. Убедись, что сообщения и условия точно совпадают, иначе код не сработает.
Светучка АнтихелперияМастер (1282) 1 месяц назад
Спасибо большое, мне нужна ещё помощь. Можно как-то сделать так же, например: Я отчищаю инвентарь на 4 земли, если их нет, то бот не говорит в чат привет. Как бы выходит ошибка, что команда не сделана.
Светучка АнтихелперияМастер (1282) 1 месяц назад
И можно ли разбить на массив сообщение от Майнкрафта? просто у меня не получалось:
const args = message.split(' ');
if (args[0] === "Cleared") {
bot.chat('hi')
}
вот он не работал(
GGG Просветленный (33206) Светучка Антихелперия, Да, можно сделать проверку на наличие определённого предмета перед выполнением действия. Для этого нужно использовать инвентарь бота и его методы для проверки количества нужного предмета. Например, если тебе нужно проверить наличие 4 блоков земли перед выполнением команды, код может выглядеть так:
 bot.on('chat', (username, message) => { 
    if (message.includes('Cleared inventory of Sweety4ka, removing 4 dirt')) { 
        const dirtCount = bot.inventory.count(mcData.itemsByName.dirt.id); 
        if (dirtCount >= 4) { 
            bot.chat('hi'); 
            // тут можно добавить код для очистки инвентаря от земли 
        } else { 
            bot.chat('Недостаточно земли в инвентаре'); 
        } 
    } 
}); 
 
Светучка АнтихелперияМастер (1282) 1 месяц назад
Помогите, код не работает
GGG Просветленный (33206) Светучка Антихелперия, Основные возможные проблемы: Точное соответствие строки: Убедитесь, что сообщение в коде полностью соответствует тому, что выводится в чате Minecraft. В вашем коде строка if (message === "Cleared inventory of Sweety4ka, removing 65 items") должна точно соответствовать сообщению, включая любые пробелы, заглавные буквы и скрытые символы. Использование includes вместо точного соответствия: Попробуйте использовать метод includes, который проверяет, содержится ли подстрока в сообщении. Это поможет избежать проблем с небольшими несовпадениями:
 bot.on('chat', (username, message) => {  
    if (message.includes('Cleared inventory of Sweety4ka, removing 65 items')) {  
        bot.chat('hi');  
    }  
}); 
 
Похожие вопросы