Найти тему
BOBKOV TECH

Telegram бот для рабочего чата. (В стадии написания)

Оглавление

Часть Первая Подготовка

И так для написания бота нам нужны:

Ну в принципе все. Устанавливаем 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 после чего я сразу же словил ошибку:

-2

Эта ошибка говорит нам добавить строчку в package.json? Что мы и сделаем:

-3

После этого ни каких проблем не должно возникнуть, опять запускаем node app.js, находим нашего бота

-4

Вводим команду /start либо жмем на кнопку старт и получаем приветствие от бота. Поздравляю вас с вашим первым ботом, Вы молодцы!!!

-5

Часть Четвертая Разнообразим функционал

Добавьте строчку: Tbot.hears('Привет', (ctx) => ctx.reply('Здарова, как дела?'));

-6

Перезапустите бота и теперь если вы отправите сообщение Привет то получите ответ Здарова, как дела?

У Telegraf есть куча разных команд функций таких как: start, help, hears, on и т.д. Но пока мы их разбирать не будем у нас же в переди основная задача, это Написать чат бота с напоминанием о днях рождениях сотрудников, и так, продолжим...

Часть Пятая Создадим базу данных

Так как у нас задача отображать определенную информацию по личному составу в в организации, то нам необходимо добавить сотрудников и информацию о них.

  • Создадим файл db.js
  • Добавим экспортную константу stuff как массив
  • И заполним массив информацией
  • Получится своеобразная не реляционная база данных типа манго.дб, шучу конечно.
-7
  • Добавим в файл 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 #Создаем своего бота #телеграм бот #бот