js telegram bot

242
01 апреля 2018, 22:16

Помогите разобраться с ошибкой в коде. В данном коде бот не запускается из-за строки: 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} и что вообще она должна делать. Особенно интересует знак "$". Где конкретно оно использовалось сейчас уже сказать не смогу. Но если объясните, как оно вообще должно работать, тоже неплохо будет. И да, понимаю, последний вопрос скорее всего некорректно сформулирован, поэтому если что - просто пропустите его.

READ ALSO
Найти все совершенные числа, меньшие n : JavaScript

Найти все совершенные числа, меньшие n : JavaScript

ПомогитеВот сам код, который, к сожалению, не работает:Посмотрите, пожалуйста, в чем ошибка

238
Отправить post-запрос vue (vue-axios)

Отправить post-запрос vue (vue-axios)

ЗдравствуйтеУ меня есть таблица:

227
Скрыть кнопки JS

Скрыть кнопки JS

Есть кнопки такого вида:

206
Получить значение функции

Получить значение функции

Можно ли получить значение функции first из функции calc? Я знаю как идет вызов функций, но без понятия как получить значение ещё не выполненной...

201