Я начал погружение в мир IT лишь три недели назад. Серьезно, три недели назад я даже не понимал синтаксиса HTML, а знакомство с языками программирования заканчивалось школьной программой по Pascal 10-летней давности. Однако я решился поехать в IT-лагерь, для детей которого было бы неплохо сделать бота. Я решил, что это вряд ли так сложно. С этого начался длинный путь, в рамках которого я:
- развернул облачный сервер с Ubuntu,
- зарегистрировался на GitHub,
- выучил базовый синтаксис JavaScript,
- прочитал тонну статей на английском и русском языках,
- сделал, наконец, бота,
- написал эту статью, наконец.
mkdir bot
bot — это стало название моей папки. После этого я установил npm и Node.js, что позволит запускать мне потом код из файликов с разрешением *.js
sudo apt update sudo apt install nodejs sudo apt install npm
Очень рекомендую на этом этапе настроить подключение к серверу через свою консоль. Вот инструкция Это позволит работать с сервером напрямую через консоль своего компьютера.5. Как написать код первого бота. А вот теперь просто открытие для меня. Любая программа — это просто строки текста.
Бот телеграмм на JavaScript
Их можно вбить куда угодно, сохранить с нужным расширением и все. Ты прекрасен. Я использовал Atom, но реально, можно просто в блокноте стандартном писать. Главное — сохранить потом файл в нужном расширении. Это как написать текст в Word и сохранить.
Я сделал новый файл, в который вставил код из примера на странице telegraf и сохранил в файл index.js (вообще не обязательно называть файл так, но так принято). Важно — вместо BOT_TOKEN вставьте свой API-ключ из второго пункта.
const Telegraf = require(‘telegraf’) const bot = new Telegraf(process.env.BOT_TOKEN) bot.start((ctx) => ctx.reply(‘Welcome!’)) bot.help((ctx) => ctx.reply(‘Send me a sticker’)) bot.on(‘sticker’, (ctx) => ctx.reply(»)) bot.hears(‘hi’, (ctx) => ctx.reply(‘Hey there’)) bot.launch()
6. Как закинуть код на сервер через github Теперь мне нужно было закинуть как-то этот код на сервер и запустить его. Для меня это стало челленджем.
В итоге, после долгих мытарств я понял, что проще будет создать файл на github, который позовляет обновлять код при помощи команды в консоли. Я зарегал аккаунт на github и сделал новый проект, куда и загрузил файл. После этого мне нужно было понять, как же настроить загрузку файлов с моего аккаунта (открытого!) на сервер в папку bot (если вдруг вы вышли из нее — просто напишите cd bot).7. Как загрузить файлы на сервер через github ч.2 Мне нужно было поставить на сервер программу, которая будет загружать файлы с git. Я поставил git на сервер, вбив в консоль
apt-get install git
После этого мне нужно было настроить загрузку файлов. Для этого я вбил в командную строку
git clone git://github.com/b0tank/bot.git bot
В итоге все из проекта загрузилось на сервер. Ошибкой на данном этапе было, что я, по сути, сделал вторую папку внутри уже существующей папки bot. Адрес до файла выглядел как */bot/bot/index.js Я решил пренебречь этой проблемой. И чтобы подгрузить библиотеку telegraf, которую мы запрашиваем в первой строке кода, вбейте в консоль команду.
npm install telegraf
8. Как запустить бота Для этого, находясь в папке с файлом (чтобы переходить из папки в папку через консоль — выполняйте команду формата cd bot Чтобы убедиться, что вы там, где нужно можно вбить команду, которая отобразит в консоли все файлы и папки, которые там лежат ls -a Для запуска я ввел в консоль
node index.js
Если нет никакой ошибки — все хорошо, бот работает. Ищите его в телеграме. Если ошибка есть — применяйте свои знания из 1 пункта.9. Как запустить бота в фоновом режиме Достаточно быстро вы поймете, что бот работает только тогда, когда вы сами сидите в консоли. Чтобы решить эту проблему я использовал команду
screen
После этого появится экран с каким-то текстом. Это значит, что все хорошо. Вы на виртуальном сервере на облачном сервере. Чтобы понять лучше, как это все работает — вот статья. Просто заходите в свою папку и вбивайте команду по запуску бота
node index.js
10. Как работает бот и как расширить его функционал Что же умеет наш бот из примера? Он умеет
bot.start((ctx) => ctx.reply(‘Welcome!’))
говорить «Welcome!» в момент старта (попробуйте поменять текст)
bot.help((ctx) => ctx.reply(‘Send me a sticker’))
в ответ на стандартную команду /help отправлять сообщение «Send me a sticker»
bot.on(‘sticker’, (ctx) => ctx.reply(»))
в ответ на стикер отправлять одобрение
bot.hears(‘hi’, (ctx) => ctx.reply(‘Hey there’))
отвечать «Hey there», если ему пишут ‘hi’ bot.launch() Если вы посмотрите код на github, то быстро поймете, что сильно далеко от этого функционала я не ушел. Что активно используется, так это функция ctx.replyWithPhoto Она позволяет отправлять заданное фото или gif в ответ на определенный текст.
Значимая часть кода была написана детьми 11-13 лет, которым я дал доступ к боту. Они ввели свои user-case. Думаю, легко определить, какая часть сделана была ими. Например, на сообщение «джейк» приходит гифка с известным персонажем из мультика Adventure Time. Чтобы развивать бота дальше, подключать клавиатуру нужно смотреть примеры, например, отсюда11.
Как обновлять код и перезапускать бота Не забывайте, что надо обновлять код не только на github, но и на сервере. Делать это просто — стопим бота (нажать ctrl+c), — вводим в консоль, находясь в целевой папке, git pull — вновь запускаем бота командой node index.js END Многие вещи, описанные в этом файле, будут супер очевидны для продвинутых программистов. Однако когда я сам пытался одним махом перепрыгнуть пропасть до мира ботов, мне очень не хватало подобного гайда. Гайда, в котором не пропускается очевидные и простые для любого IT-специалиста вещи. В дальнейшем я планирую пост про то, как сделать свое первое приложение на ReactNative в таком же стиле, подписывайтесь!
- Главная »
- NodeJS »
- Node.JS: Делаем своего Telegram бота
Дата: 06.07.2017 в 17:53, Категория: NodeJS
Если вы открыли чат с ботом, кликаем на кнопку “Start“.
После чего, бот нам выдает все доступные команды.
Отправляем команду /newbot или кликаем по активной ссылке этой команды. Далее, бот нас попросить ввести имя для нашего бота.
Можете не париться с именем и вписать любое тестовое имя. Плюс в том, что вы в любой момент сможете удалить тестового бота или поменять имя.
Я решил во время статьи создать бота для этого блога и назвал его “Archakov Blog“.
На последнем этапе, бот попросит вас придумать никнейм (логин). К никнейму в конце обязательно надо добавить суффикс “bot” можно и “Bot“. К сожалению, никнейм поменять больше не получится. Если это ваш первый бот, не парьтесь и придумайте любой никнейм.
В итоге, получаем сообщение о том, что бот был создан и в конце будет указан его токен. Этот токен нам пригодится в процессе разработки.
Не советую делиться токеном с другими людьми. Так как он дает полный доступ к вашему боту. Начиная от редактирования имени и до удаления бота.
Теперь приступим к написанию кода и первым делом установим Node.JS. У меня OS X и хочу предупредить, что от операционной системы не будет зависеть разработка нашего бота.
Как установить Node.JS рассказывать я не хочу и не буду.
Для этого обращаемся к гугл с запросом как установить Node.JS.
После того, как установили Node.JS, начинаем разрабатывать наше приложение, а точней бота. Node.JS ищет в каждой папке наличие папки node_modules с модулями, откуда он и будет подключать библиотеку для работы с Telegram API.
Советую поучиться работать с npm командой в консоли.
Заранее установите этот менеджер пакетов, он нам скоро пригодится. Кстати, очень крутая и полезная штука, в будущем пригодится. Особенно, когда наступит апокалипсис, будете сидеть и пакеты устанавливать…
Создаем папку с тестовым проектом, к примеру telegram-bot . Далее, в этой папке создаем файл index.js и все! Вы красавчик! Бот создан, можете работать с ним.
Ага, канешна.
Код сам не напишется!
Прежде чем его и писать, установим модуль node-telegram-bot-api . Для этого открываем консоль, пропишем путь к директории нашего проекта cd telegram-bot (укажите полный путь к этой папке).
В моем случае, это cd /Applications/MAMP/htdocs/telegram-bot .
Если вы на Windows, советую создавать папку в корне диска, чтобы можно было обращаться к проекту по короче, к примеру cd C:telegram-bot .
Отлично, теперь не забываем про npm . В консоли вбиваем команду: npm install node-telegram-bot-api или yarn add node-telegram-bot-api (в зависимости от того, что вы используете yarn или npm).
И через несколько секунд модуль установился. Ура! В репозитории уже есть пример кода и с помощью этого кода, сделаем своего мега-тру-бота.
Теперь перейдем к файлу index.js и напишем немного кода.
// Подключаем библиотеку для работы с Telegram API в переменную var TelegramBot = require(‘node-telegram-bot-api’); // Устанавливаем токен, который выдавал нам бот var token = ‘ТУТ_ВСТАВЛЯЕМ_ТОКЕН’; // Включить опрос сервера. Бот должен обращаться к серверу Telegram, чтобы получать актуальную информацию // Подробнее: https://core.telegram.org/bots/api#getupdates var bot = new TelegramBot(token, < polling: true >); // Написать мне . (/echo Hello World! — пришлет сообщение с этим приветствием, то есть «Hello World!») bot.onText(//echo (.+)/, function (msg, match) < var fromId = msg.from.id; // Получаем ID отправителя var resp = match[1]; // Получаем текст после /echo bot.sendMessage(fromId, resp); >); // Простая команда без параметров bot.on(‘message’, function (msg) < var chatId = msg.chat.id; // Берем ID чата (не отправителя) // Фотография может быть: путь к файлу, поток (stream) или параметр file_id var photo = ‘cats.png’; // в папке с ботом должен быть файл «cats.png» bot.sendPhoto(chatId, photo, < caption: ‘Милые котята’ >); >);
В начале кода мы подключили модуль (библиотеку) для работы с Telegram API. Далее, в переменной token вставляем наш токен, который выдавал нам BotFather при создании нашего бота.
Работа с командами очень простая и понятная. Советую немного потренироваться еще с регулярными выражениями, правильно составлять команду по маске. Данный модуль содержит кучу полезных методов. Прочтите документацию в репозитории этого модуля.
Давайте в качестве моего примера, попробуем сделать напоминалку важных дел. Конечно, пример не ахти, но кому-нибудь будет полезно.
Подключаем модуль для работы с Telegram API и прописываем токен:
var TelegramBot = require(‘node-telegram-bot-api’); var token = ‘ТУТ_ВСТАВЛЯЕМ_ТОКЕН’; var bot = new TelegramBot(token, );
Далее, создаем переменную в которой будут храниться все заметки от пользователя.
var notes = [];
Добавляем команду /напомни , с помощью которой и будем добавлять напоминание.
bot.onText(/напомни (.+) в (.+)/, function (msg, match) < var userId = msg.from.id; var text = match[1]; var time = match[2]; notes.push(< ‘uid’: userId, ‘time’: time, ‘text’: text >); bot.sendMessage(userId, ‘Отлично! Я обязательно напомню, если не сдохну :)’); >);
- userId – хранит ID пользователя который прислал сообщение.
- text – хранит первый параметр – текст. Его бот и должен прислать мне.
- time – хранит второй параметр – время. Устанавливаем время когда прийдет уведомление.
setInterval(function() < for (var i = 0; i < notes.length; i++) < const curDate = new Date().getHours() + ‘:’ + new Date().getMinutes(); if (notes[i][‘time’] === curDate) < bot.sendMessage(notes[i][‘uid’], ‘Напоминаю, что вы должны: ‘+ notes[i][‘text’] + ‘ сейчас.’); notes.splice(i, 1); >> >, 1000);
Чтобы вы поняли как работает код выше, я нарисовал схему:
Итого:
var TelegramBot = require(‘node-telegram-bot-api’); var token = ‘ТУТ_ВСТАВЛЯЕМ_ТОКЕН’; var bot = new TelegramBot(token, ); var notes = []; bot.onText(/напомни (.+) в (.+)/, function (msg, match) < var userId = msg.from.id; var text = match[1]; var time = match[2]; notes.push(< ‘uid’: userId, ‘time’: time, ‘text’: text >); bot.sendMessage(userId, ‘Отлично! Я обязательно напомню, если не сдохну :)’); >); setInterval(function() < for (var i = 0; i < notes.length; i++) < const curDate = new Date().getHours() + ‘:’ + new Date().getMinutes(); if (notes[i][‘time’] === curDate) < bot.sendMessage(notes[i][‘uid’], ‘Напоминаю, что вы должны: ‘+ notes[i][‘text’] + ‘ сейчас.’); notes.splice(i, 1); >> >, 1000);
Сохраняем наш скрипт, я назвал reminder.js . Запускаем его через консоль, командой node reminder.js
В итоге, я получил свое ожидаемое напоминание.
Спасибо за внимание. Не ленитесь учить JavaScript, за ним будущее веб и в частности всей галактики! Так же, выкладываю полный файл reminder.js.
ПОДПИШИСЬ НА ОБНОВЛЕНИЯ
Только новые публикации и никакого мусора.
- https://habr.com/ru/post/447006/
- https://archakov.im/post/telegram-bot-on-nodejs.html
Источник: geopressa.ru
Как написать телеграмм бота для получения форм с сайта? [закрыт]
Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы он был сосредоточен только на одной проблеме.
Закрыт 1 год назад .
Написал фронт, но никогда не работал с ботами в тг, та и в принципе с ботами. Может кто-то помочь с реализацией. У меня есть форма, есть бот (botFathers) но нету кода для работы бота
Отслеживать
задан 4 янв 2022 в 1:15
1 1 1 бронзовый знак
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Осмелюсь предположить, что вам поможет данный способ.
- Создайте бота, получите токен.
- Создайте обычный чат(чат группу), получите id чата.
- Добавьте бота в чат(чат группу), дайте ему права, запустите.
- Создайте форму на сайте. Думаю вы понимаете как она строится.
Ваше имя Номер телефона
- Далее пишите обработчик в данном случаи send.php
$name, ‘Телефон:’ => $phone ); //Настраиваем внешний вид сообщения в телеграме foreach($arr as $key => $value) < $txt .= «».$key.» «.$value.»%0A»; >; //Передаем данные боту $sendToTelegram = fopen(«https://api.telegram.org/bot/sendMessage?chat_id=text=»,»r»); //Выводим сообщение об успешной отправке if ($sendToTelegram) < alert(‘Спасибо! Ваша заявка принята. Мы свяжемся с вами в ближайшее время.’); >//А здесь сообщение об ошибке при отправке else < alert(‘Что-то пошло не так. ПОпробуйте отправить форму ещё раз.’); >> ?>
Отслеживать
ответ дан 4 янв 2022 в 7:21
Max Watson Max Watson
1,191 4 4 серебряных знака 14 14 бронзовых знаков
Пишешь сервер, например на nodejs.. На сервере хранишь токен своего бота. Устанавливаешь необходимые зависимости npm i node-telegram-bot-api
const http = require(‘http’); const TelegramBot = require(‘node-telegram-bot-api’); const token = process.env.TOKEN || «токен бота узнаешь у botFathers» const bot = new TelegramBot(token, < polling: true, >); const chatId = process.env.CHATID || «id чата»; //Узнать id чата bot.on(‘message’, function (msg)) http.createServer( (req,res)=>< if( req.url ===»/message/»)< res.writeHead(200, < «Content-Type»: «application/json; charset=utf-8», «Access-Control-Allow-Origin»: «*»,//Внимание к данному заголовку «Date»: new Date() >); let formData = »; req.on(‘data’, function(chunk) < formData += chunk.toString(); >); req.on(‘end’, function() < let data = JSON.parse(formData); let str = «Категория: » + data.category + «nИмя: » + data.name+»nНомер: » + data.num; bot.sendMessage(chat_id, str).//бот отправляет сообщение с инфой из формы then(data=>). catch(err=>); >); res.end(«Ваша заявка оформлена.»); >else< res.writeHead(200, ); res.end(`
Ок
`) > >).listen(3000,()=>)
Форма и обработчик формы, отправляет данные на сервер, принимает ответ с сервера..
let formData = document.forms.communication; let xhr = new XMLHttpRequest(); function goSendIt() < if (formData.nam.value formData.num.value) < let obj = < category: formData.cat.value, name: formData.nam.value, num: formData.num.value >let str = JSON.stringify(obj); xhr.open(«POST», «/message/»); xhr.send(str); xhr.onreadystatechange = function() < if (xhr.readyState === XMLHttpRequest.DONE xhr.status === 200) < console.log(xhr.responseText); >> > else < alert(«Не заполнена») >>
Оформить заявку
Выберите категорию Обратный звонок Ваше имя Ваш номер телефона
Источник: ru.stackoverflow.com
Запуск NodeJS приложения на VPS на примере Telegram бота
В данном уроке вы узнаете, как запустить любое nodejs приложение на удаленном vps хостинге на примере telegram бота. В данном уроке мы создадим простого telegram бота, который будет приветствовать пользователя по имени и определять, с какой операционной системы он был запущен. Далее мы соединим наш проект с системой контроля версий git. После этого вы увидите шаги, которые необходимо выполнить, для запуска проекта на удаленном сервере.
Профессия Frontend-разработчик PRO
Готовим Frontend-разработчиков с нуля
На курсе вы научитесь создавать интерфейсы веб-сервисов с помощью языков программирования и дополнительных технологий. Сможете разрабатывать планировщики задач, мессенджеры, интернет-магазины…
До 10 проектов в портфолио для старта карьеры
Подходит для новичков без опыта в программировании
Практика на вебинарах с разработчиками из крупных компаний
Источник: webformyself.com