Часть Первая Подготовка
И так для написания бота нам нужны:
Ну в принципе все. Устанавливаем visual studio code и запускаем.
Создаем в удобном для вас месте папку где будет располагаться наш будущий проект.
- Открываем папку в VSc: file -> Open Folder
- создаем файл app.js
- Создаем новый терминал или открываем текущий: Terminal -> New Terminal
- Убеждаемся что мы находимся в папке нашего проекта и запускаем: npm init -y - эта команда создаст файл package.json
- Далее устанавливаем telegraf (api для работы с Telegram, можно ознакомиться на сайте): npm install telegraf
И вот наш первый бот практически готов осталось только получить Ключ - Токен от Бото Бати и прописать нужный код в app.js
Часть вторая В гости к Батя Боту
И так, для того что бы наш телеграмм бот заработал нам нужен Токен, некий ключ благодаря которому Бот оживет и будет радовать нас своим функционалом, который мы в него вложим конечно же.
Запускаем telegram и ищем Батя бота: @Botfather
- Пишем или выбираем из левого меню команду /newbot
- Придумайте имя бота потом username бота
- И вот мы получили наш Токен который будем использовать в нашем боте. Обращаю ваше внимание что всегда можно запросить новый токен и если долго не использовать токен то он может перестать работать так что придется его еще раз сгенерировать. Все эти операции можно легко сделать в диалоге с Батя ботом через интерфейс чата.
Часть Третья запускаем Кракена Бота
А теперь вернемся к нашему файлу app.js и напишем минимально возможный код для запуска нашего бота.
import { TOKEN } from "./secret.js"
import { Telegraf } from "telegraf"
const Tbot = new Telegraf(TOKEN)
Tbot.start((context) => {
context.replyWithHTML(
"Добро пожаловать в <b>Макси бот</b>\n\n"
);
});
Tbot.launch()
Создадим новый файл secret.js и добавим в него:
export const TOKEN = 'ВАш токен'
export const ChatID = Любое число
В ChatID пока укажем любое число так как он нам пока не известен.
Запускаем наш Чат командой node app.js после чего я сразу же словил ошибку:
Эта ошибка говорит нам добавить строчку в package.json? Что мы и сделаем:
После этого ни каких проблем не должно возникнуть, опять запускаем node app.js, находим нашего бота
Вводим команду /start либо жмем на кнопку старт и получаем приветствие от бота. Поздравляю вас с вашим первым ботом, Вы молодцы!!!
Часть Четвертая Разнообразим функционал
Добавьте строчку: Tbot.hears('Привет', (ctx) => ctx.reply('Здарова, как дела?'));
Перезапустите бота и теперь если вы отправите сообщение Привет то получите ответ Здарова, как дела?
У Telegraf есть куча разных команд функций таких как: start, help, hears, on и т.д. Но пока мы их разбирать не будем у нас же в переди основная задача, это Написать чат бота с напоминанием о днях рождениях сотрудников, и так, продолжим...
Часть Пятая Создадим базу данных
Так как у нас задача отображать определенную информацию по личному составу в в организации, то нам необходимо добавить сотрудников и информацию о них.
- Создадим файл db.js
- Добавим экспортную константу stuff как массив
- И заполним массив информацией
- Получится своеобразная не реляционная база данных типа манго.дб, шучу конечно.
- Добавим в файл app.js import { stuff } from "./db.js" для того что бы импортировать значения stuff из файла db.js
Теперь у нас есть сотрудники с датами дней рождений и не только, как же нам выводить информацию о том что у коллеги скоро день рождения?
- Необходим шедулер типа cron который например будет каждый день проверять информацию о предстоящих днях рождения
- Необходим алгоритм проверки на то что скоро случится др
Часть Шестая Шедулер Cron
Для настройки крона нам необходимо установить пакет npm install node-cron добавить импорт import cron from "node-cron"
И теперь мы можем вызывать cron хоть каждую минуту:
cron.shedule('* * * * *', ()=>{})
Вопрос лишь остался в том что же мы будем вызывать, а вызывать мы будем функцию которую положим в отдельный файл.
Часть Седьмая обработка условий
И так, бот у нас есть, база данных есть, даже Шедулер есть. Но для того что бы у нас все заработала этого мало. Шедулер должен запускать какое нибудь условие. И вот как раз по поводу этого условия мы и поговорим:
Создадим в нашей папку файлик birthday.js и добавим туда код
const now = new Date();
const year = now.getFullYear();
const month = ("0" + (now.getMonth() + 1)).slice(-2);
const day = ("0" + now.getDate()).slice(-2);
Так мы получим три константы: Текущую дату, год, месяц и день.
Далее мы напишем функцию которая будет вычислять количество дней до дня рождения:
function getNumberOfDays(start, end) {
const date1 = new Date(start);
const date2 = new Date(end);
// One day in milliseconds
const oneDay = 1000 * 60 * 60 * 24;
// Calculating the time difference between two dates
const diffInTime = date2.getTime() - date1.getTime();
// Calculating the no. of days between two dates
const diffInDays = Math.round(diffInTime / oneDay);
return diffInDays;
}
И собственно запустим все это:
var index
const scoroDr = []
var i = 0
for(index = 0; index < stuff.length;++index){
const formatted = `${stuff[index].month}/${stuff[index].day}/${year}`;
const formatted2 = `${month}/${day}/${year}`;
const Ostalos = getNumberOfDays(formatted2, formatted)
let ScheduleMessageBDays = (
'\n\n**' + stuff[index].lastName + ' '+stuff[index].name + ' '+stuff[index].midName + '**' +
'\n' + 'Осталось до днюхи: ' + Ostalos +' '+ 'дней.'
)
if (Ostalos == 0){
ScheduleMessageBDays = (
'\n\n**' + stuff[index].lastName + ' '+stuff[index].name + ' '+stuff[index].midName + '**' +
'\n' + 'Сегодня празднует день рождения!!!'
)
}
if (Ostalos >= 0 && Ostalos < 14){
scoroDr[i] = ScheduleMessageBDays
i=i+1
}
}
return scoroDr.join(' ')
}
Часть Восьмая выводим сообщения в чат
И наконец то добавляем в cron вывод сообщений в чат
const scoroDr = birthDay(stuff)
// Отправить сообщение в чат
if (scoroDr){
Tbot.telegram.sendMessage('%Telegram chat ID%', scoroDr);
}
...Статья в стадии написания(в конце мы получим чат бот который будет отправлять сообщения в рабочую группу о предстоящих днях рождениях сотрудников)
#telegram-bot #Создаем своего бота #телеграм бот #бот