Помогите разобраться с ошибкой в коде. В данном коде бот не запускается из-за строки: if (error) throw new Error(error) - она находится в конце кода в функции sendPictureByName А без нее выдает ошибку при попытке получить картинку. Код полностью переписаны из видео. Может я где-то что-то пропустил/не дописал. Комментарии в коде для себя делал (для понимания). И еще буду благодарен за ссылочки на материалы, которые помогут разобраться с js, а еще лучше в работе js с ботами телеграмм. Вот собственно сам код:
const TelegramBot = require('node-telegram-bot-api')
const _ = require('lodash')
const fs = require('fs')
//модуль fs служит для работы с файлами внутри nodejs. Это нативный модуль и доступен глобально.
const token = 'Здесь есть токен, я его не забыл вставить :)'
const bot = new TelegramBot(token, {polling: true})
const KB = {
currency: 'Курс валюты',
picture: 'Картинка',
cat: 'Котик',
car: 'Машина',
back: 'Назад'
}
/*глобальная переменная, которая является объектов, в котором по ключам описываем текст для кнопок,
чтобы обращаться к ним */
const PicScrs = {
[KB.cat]: [
'cat1.jpg',
'cat2.jpg',
'cat3.jpg',
'cat4.jpg'
],
[KB.car]: [
'car1.jpg',
'car2.jpg',
'car3.jpg',
'car4.jpg'
]
}
bot.onText (/\/start/, msg => {
sendGreeting(msg)
})
bot.on('message', msg => {
switch (msg.text) {
case KB.picture:
sendPictureScreen(msg.chat.id)
//msg.chat.id чтобы бот мог определять в какой чат отправлять. внизу функция sendPictureScreen
break
case KB.currency:
break
case KB.back:
sendGreeting(msg, false)
break
case KB.car:
case KB.cat:
sendPictureByName(msg.chat.id, msg.text)
break
}
})
//обращаемся к боту с помощью метода "on" - "прослушка"
//ниже определяется какую кнопку нажал пользователь
function sendGreeting(msg, sayHello = true) {
const text = sayHello
? 'Добрый вечер, ' + msg.from.first_name + '\nЧто вы хотите сделать?'
: 'Что вы хотите сделать?'
bot.sendMessage(msg.chat.id, text, {
reply_markup: {
keyboard: [
[KB.currency, KB.picture]
]
}
})
}
function sendPictureScreen(chatId) {
bot.sendMessage(chatId, 'Выберите тип картинки: ', {
reply_markup: {
keyboard: [
[KB.car, KB.cat],
[KB.back]
]
}
})
}
/*
отправить новую клавиатуру, которая позволяет пользователю выбрать тип картинки
и вернуться на главный экран
*/
function sendPictureByName(chatId, picName) {
const srcs = PicScrs[picName]
const src = srcs[_.random(0, srcs.length - 1)]
fs.readFile('${_dirname}/pictures/${src}', (error, picture) => {
if (error) throw new Error(error)
bot.sendPhoto(chatId, picture)
})
//обратимся у библиотеке lodash и используем ее метод random от 0 до длины данного массива srcs
//теперь в src будет храниться путь до картинки, которая нам нужна
}
Также слабо понимаю, как можно реализовать отправку случайной фотографии из папки, которая находится в папке с проектом. То есть то, что должно было быть реализовано в этом коде.
Также был такой вопрос. Почему не работает такая конструкция? ${msg.from.first_name} и что вообще она должна делать. Особенно интересует знак "$". Где конкретно оно использовалось сейчас уже сказать не смогу. Но если объясните, как оно вообще должно работать, тоже неплохо будет. И да, понимаю, последний вопрос скорее всего некорректно сформулирован, поэтому если что - просто пропустите его.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
ПомогитеВот сам код, который, к сожалению, не работает:Посмотрите, пожалуйста, в чем ошибка
Можно ли получить значение функции first из функции calc? Я знаю как идет вызов функций, но без понятия как получить значение ещё не выполненной...