Хостинг ТГ бота на гитхаб

В статье расскажем, как создать телеграм-бота, а в качестве площадки для бота будем использовать облачный сервер от Timeweb Cloud.

Преимущества облачного сервера для Telegram-бота

  • Быстрая регистрация и начало работы;
  • Не нужно покупать домен, сервер имеет открытый IP-адрес;
  • Нет привязки к какому-то одному языку программирования, легко можно запустить любой скрипт;
  • Нет ограничения на ресурсы: бот не перестанет работать из-за превышения лимита трафика или процессорного времени контейнера;
  • Стабильность: время бесперебойной работы облачного сервера не ниже 99,99%.

Регистрация бота

Чтобы бот заработал, его необходимо зарегистрировать в Telegram. За регистрацию отвечает BotFather .

Шаг 2. Нам нужно зарегистрировать нового бота, поэтому выбираем команду:

/newbot

Шаг 3. Теперь необходимо придумать имя нашего бота. Указываем что угодно, для примера напишем:

MyBotTest

Шаг 4. Следующий шаг – необходимо придумать логин. Обратите внимание, чтобы логин заканчивался на «bot» в любом его виде, либо «*Bot», либо «_bot»:

Программируем телеграм бота и деплоим на Heroku!

Сложность этого шага заключается в том, чтобы найти свободный никнейм. Если такой логин занят, мы получим соответствующее извещение.

При успешной регистрации в ответ получим приветственное сообщение и ключ для HTTP-API. Сохраните ключ в надёжном месте.

Если потерялся сохранённый ключ, узнать его можно при помощи команды /token . Далее выберите бота, для которого нужен новый ключ. Заново создавать бота не потребуется.

Проверка и настройка бота

После завершения регистрации ищем бота в списке контактов. На текущий момент он ничего не умеет делать, просто прочитывает сообщения. С логикой работы разберёмся позже.

/mybots

В появившемся списке выберем нужного бота и посмотрим, что с ним можно сделать.

По названиям кнопок будет понятно, что можно изменить имя, описание (приветствие при первом подключении), загрузить аватар. Из этого меню можно указать список доступных команд для бота с их описанием. Сами команды работать будут только с использованием дополнительной логики, реализованной сторонними программами-клиентами.

Подготовка рабочего пространства

Для запуска бота нам понадобится рабочее пространство. В нашем случае мы будем использовать облачный сервер . Подойдёт даже самая простая конфигурация, а из операционных систем порекомендуем Ubuntu или Debian. Но отметим, ввиду того, что обновления для Debian выходят с большим опозданием, скорее всего, версии нужных пакетов не будут соответствовать минимальным требованиям программ-клиентов и придётся собирать нужную версию Python из исходников.

Выбор языка программирования

Самые распространённые боты написаны на языке Python. Установить Python на облачный сервер можно командой:

sudo apt-get install python3 python3-pip

После установки проверить версию:

python3 -V

Одной из последних версий является 3.11, но для работы нашего примера подойдёт и 3.7.

Установка python-telegram-bot

Для установки python-клиента достаточно написать в консоли:

pip3 install python-telegram-bot

По зависимостям будут установлены дополнительные пакеты, необходимые для работы python-telegram-bot . Чтобы не засорять систему, рекомендуется использовать виртуальное окружение. Эта возможность встроена в Python, быстро настраивается, не засоряет основную систему, а виртуальную среду со всем содержимым можно безболезненно удалить в будущем одной командой ( rm -rf ).

Создадим каталог для виртуального окружения, зайдём в него и установим копию Python:

mkdir bot_env cd bot_env
python3 -m venv venv

Активируем виртуальное окружение:

source venv/bin/activate

После успешной активации перед строкой для ввода команд появится venv . Теперь установим клиент:

pip install python-telegram-bot

Деактивировать виртуальное окружение можно, набрав:

deactivate

Предусмотрена возможность запускать скрипты без его явной активации, в таком случае необходимо набирать полный путь, вместо python3 .

При деактивированном окружении в нашем примере набираем:

/root/bot_env/venv/bin/python3

Примеры ботов

Примеры ботов можно найти на этой странице . Для демонстрации работы используем пример echobot.py , сохраните его в домашнюю папку (по умолчанию это /root ). Если используется виртуальное окружение, директория будет /root/bot_env . Необходимо в 67 строке заменить слово TOKEN на ключ, полученный при регистрации.

Еще по теме:  Завершение активных сеансов в Телеграм

Загрузить пример можно сначала на свой компьютер, отредактировать файл и загрузить через файловый менеджер, например WinSCP.

Запустить пример можно, набрав в консоли:

python3 echobot.py

После успешного запуска в ответ получим:

telegram.ext._application — INFO — Application started

Тестирование бота

Если всё сделали верно, в ответ получим приветствие с вашим именем и ссылкой на профиль. При дальнейшем общении бот будет отправлять сообщения с полученным текстом.

echobot.py – самый простой демонстрационный бот. На странице примеров python-telegram-bot есть более сложные рабочие заготовки, которые можно сразу опробовать и применить для своих нужд с минимальными правками.

Запуск бота как службы

Чтобы бот автоматически запускался при загрузке системы, создадим свою службу в Systemd. Systemd доступен в новых версиях Ubuntu и в Debian версии 8.

Если не использовалось виртуальное окружение, нам потребуется полный путь к Python. Узнать, где он установлен, можно командой:

which python3

В ответ получим строку вида:

/usr/local/bin/python3

Перейдём в каталог Systemd:

  • в Debian: /usr/lib/systemd/system/
  • Ubuntu: /lib/systemd/system/

И создадим файл bot.service :

[Unit]
Description=My Python Bot
After=network.target network-online.target

[Service]
Type=simple
User=root
Group=root
Restart=on-failure
ExecStartPre=/bin/mkdir -p /var/run/bot
PIDFile=/var/run/bot/service.pid
ExecStart=

[Install]
WantedBy=multi-user.target

Возможные значения ExecStart :

  • без venv : ExecStart=/usr/local/bin/python3 /root/echobot.py
  • в venv : ExecStart=/root/bot_env/venv/bin/python3 /root/bot_env/echobot.py

Сохраняем файл, выставляем разрешения не ниже 644, перезагружаем Systemd:

systemctl daemon-reload

Добавляем службу бота в автозагрузку:

systemctl enable bot.service

Проверить состояние службы можно командой:

systemctl status bot

В ответ получим информацию о службе. Нас интересуют 2 пунка:

Loaded: loaded
Active: inactive

Служба добавлена ( loaded ), но не запущена ( inactive ), запустить её можно, перезагрузив облачный сервер или выполнив команду:

systemctl start bot

Ещё раз проверяем состояние службы, значение «Active» должно стать active (running) и быть зелёного цвета.

Другие скрипты-клиенты

Представленный пример на Python представлен как самый простой. Telegram – достаточно популярный, существуют клиентские программы, написанные на разных языках: Java, PHP, NodeJS и прочее. Все имеют готовые примеры для подключения и получения сообщений, нужную логику работы реализует сам пользователь.

В сети можно найти разные готовые скрипты викторин, опросников или прочих развлечений.

Зачем нужны боты для Telegram

Подобно голосовому меню мобильных операторов, боты могут решать большинство простых задач без привлечения человека: отвечать на заранее известные вопросы; отслеживать заказы; проводить опросы и даже бронировать места в различных заведениях.

В Интернете есть множество готовых типичных решений, которые помогут быстро начать разработку логики работы на любом понятном языке программирования. Если вы не обладаете знаниями программиста, простую логику работы можно собрать на специальных конструкторах.

Боты могут не только отвечать на заранее настроенные вопросы. Сложные клиентские программы могут использовать машинное обучение, которое анализирует введённый текст и совершает нужное действие.

Некоторые программы-клиенты поддерживают не только текстовый ввод, они принимают звонки или проигрывают музыку.

Надеемся, что информация была полезной. Попробуйте самостоятельно запустить бота, для этого потребуются только желание и 10 минут свободного времени.

Источник: timeweb.cloud

Как построить простой Telegram-бот на Node.js

С тех пор, как Telegram в 2015 году представил ботов, другие мессенджеры тоже добавили ботов на свои собственные платформы. Но Telegram по-прежнему опережает своих конкурентов благодаря обширному боту API и свободе, которую он предлагает разработчику. API-бот это интерфейс на основе HTTP, созданный для разработчиков, желающих создавать боты для Telegram.

В последнее время предприятия начали использовать бот-платформу Telegram для создания полностью обособленных приложений, способных выполнять совершенно любые действия в границах бота.

Как работают боты

Чтобы получать обновления от Telegram, вам понадобится токен (token). Все обновления и взаимодействия с вашим ботом в Telegram сохраняются, так что вы можете обратиться к ним, послав запрос по этому URL с указанием токена:

https://api.telegram.org/bot/METHOD_NAME

С чего начать

Прежде всего, создайте ваш бот с помощью BotFather, который сам по себе также является ботом. Теперь у вас есть токен и вы можете получать обновления из Telegram. Давайте попробуем получить какую-нибудь информацию от Telegram, чтобы убедиться, что наш бот работает.

Еще по теме:  Где сохраняется скачанная из Телеграмма музыка

Замените вышеуказанный URL на ваш токен и укажите один из методов API-бота Telegram. Давайте используем метод getMe.

https://api.telegram.org/bot/getMe // —> >

Отлично. Но как это сделать в NodeJS? В общем-то так же. Каждый раз, когда нам нужно обновление, мы отсылаем запрос по адресу с указанием нужного метода.

Но делать все это вручную не хочется, поэтому у нас есть удобные фреймворки. Чтобы управлять всем этим процессом и дать нам возможность сфокусироваться на важных вещах. Для NodeJS есть целый ряд хороших фреймворков, а в этом руководстве мы остановимся на Telegraf.

Начинаем писать код

Инициализируйте процесс и установите Telegraf:

npm init
npm install telegraf —save

Теперь давайте добавим его к нашему скрипту и создадим простой бот:

const Telegraf = require(‘telegraf’); const app = new Telegraf(YOUR_TOKEN_HERE); app.hears(‘hi’, ctx => < return ctx.reply(‘Hey!’); >); app.startPolling();

Что происходит? У Telegraf есть свои собственный методы чтобы сделать за нас большую часть работы. Мы может использовать этот метод чтобы ответить на сообщение пользователя:

Reddit bot

Давайте рассмотрим пример. Мы будем отсылать верхний пост из сабредита по запросу пользователя. Установим библиотеку axios чтобы упростить отсылку запросов GET и получение данных от Reddit.

npm install axios —save
const axios = require(‘axios’); // add axios // handle the reaction everytime user sends a text message app.on(‘text’, ctx => < // ctx object holds the Update object from Telegram API // So you can use everything you see there // get the text message sent by user const subreddit = ctx.message.text; // GET the data from Reddit API axios.get(`https://reddit.com/r/$/top.json?limit=10`) .then(res => < // data recieved from Reddit const data = res.data.data; // if subbreddit does not exist if (data.children.length < 1) return ctx.reply(‘The subreddit couldn’t be found.’); // send the first top post link to the user const link = `https://reddit.com/$`; return ctx.reply(link); >) // if there’s any error in request .catch(err => console.log(err)); >);

Когда пользователь отсылает название сабредита, мы будем брать верхний пост из сабредита и отсылать ссылку на него. Просто, а?

Сохранение состояния (state)

Представьте, что пользователь хочет иметь возможность выбрать не только верхний пост, но и самый популярный или самый новый. Нам нужно сохранить последние команды, которые он использовал, чтобы суметь ответить правильно. Заметьте, что мы используем для этого метод command вместо on.

Вы можете создать команды на боте Telegram. Команды начинаются с «/» и являются кликабельными. Чтобы добавить команды к вашему боту, отправьте сообщение BotFather.

let state = >; app.command(‘top’, ctx => const userId = ctx.message.from.id; // if user id does not exist create one if (!state[userId]) state[userId] = id: userId >; // save/update user last command state[userId].command = ‘top’; return ctx.replyWithMarkdown(`Enter a subreddit name to get *top* posts.`); >); app.command(‘hot’, ctx => const userId = ctx.message.from.id; if (!state[userId]) state[userId] = id: userId >; state[userId].command = ‘hot’; return ctx.replyWithMarkdown(‘Enter a subreddit name to get *hot* posts.’); >);

Теперь мы можем отсылать правильные посты на основе фильтра. В нашем text-ответе:

const userId = ctx.message.from.id; // check if state and command exists and set defaults const type = !state[userId] ? ‘top’ : state[userId].command ? state[userId].command : ‘top’; axios.get(`https://reddit.com/r/$subreddit>/$type>.json?limit=10`) .then(res => [ // do stuff ])

Встроенные кнопки

У ботов в Telegramесть интерактивные кнопки под названием InlineKeyboardMarkup. Мы добавим кнопку next, так что пользователь сможет получить следующий пост из данной категории.

Нам нужно извлечь из Telegraf особые методы для кнопок чтобы получить возможность работать с ними:

const Markup > = require(‘telegraf’);

Во-первых, давайте добавим номер текущего поста к state. Каждый раз, когда пользователь запрашивает сабредит, нам нужно установить индекс в 0. В нашем методе text:

if (!state[userId]) state[userId] = >; state[userId].index = 0;

Вместо отсылки простого текста, мы отсылаем его со встроенной кнопкой в ответе axios:

// old response, only text return ctx.reply(link); // new response, with inline buttons return ctx.reply(link, Markup.inlineKeyboard([ // first argument is button’s text // second argument is callback text Markup.callbackButton(‘➡️ Next’, subreddit), ]).extra() );

Еще по теме:  Как скинуть ссылку на диалог в Телеграмме

Подключаем webhooks для репозитория

Android Tools

Вебхуки (Webhooks) позволяют настроить репозиторий для отправки различных запросов и сообщений на удалённый сервер при возникновении на репозитории определённых событий.

Вебхук состоит из следующих компонентов:

  • Субъект — ресурс, в котором создаётся вебхук, то есть собственно репозиторий.
  • Одно или несколько событий — события, посылаемые вебхуком при срабатывании триггера (у большинства репозиториев событием по умолчанию является push).
  • URL — конечная точка, куда вебхук должен отправить данные.

После создания вебхука для определенного события, каждый раз, когда это событие будет происходить, вебхук будет срабатывать и отправлять информацию на заданный URL. Таким образом, можно рассматривать вебхуки как систему уведомлений.

Создание сервера

Перед тем, как создать вебхук в репозитории, нам нужен сервер, который будет принимать данные. Особенность вебхуков заключается в том, что их можно интегрировать в различные приложения или сервисы (Telegram, Битрикс24 и так далее).

Для примера воспользуемся месседжером Discord, который также поддерживает интеграцию вебхуков. Создадим в нём новый сервер, который будет получать данные от репозитория.

Затем на созданном сервере нажмём на его название и в открывшемся меню выберем Настройки сервера.

В открывшемся окне настроек выберем раздел Вебхуки, где будет предложено создать новый вебхук.

В появившемся окне будет предложено задать следующие данные для вебхука:

  • Имя вебхука, которое будет отображаться в сообщениях.
  • Канал, в который будут приходить сообщения (по умолчанию, в Discord создаётся канал #general, при желании вы можете создать новый канал специально для вебхука и задать его в параметрах).
  • Иконка для вебхука.

В поле URL вебхука автоматически сгенерируется URL, который нужно скопировать. Этот URL затем будет использоваться в качестве конечной точки при отправки вебхука.

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

Создание вебхука на репозитории

Теперь нужно создать вебхук на стороне репозитория, который будет отправлять данные на сервер. Воспользуемся для этого репозиторием GitHub.

В уже имеющемся проекте откроем вкладку Settings. Зайдём в раздел Webhooks и нажмём Add webhook, чтобы создать новый вебхук.

Здесь, аналогично созданию вебхука на сервере, нужно задать значения следующим полям:

    Payload URL — собственно конечная точка, адрес сервера, куда нужно отправлять данные. Сюда нужно скопировать URL, который был сгенерирован в Discord при создании вебхука.
    Примечание: в официальной документации говорится, что для взаимодействия между Discord и GitHub крайне важно добавить в конец URL ‘/github‘. Например:

https://discordapp.com/api/webhooks/424423662137901059/45LkPViOlhf7HEtpG_Pm8C-_B7Q_9ykWp9luUxP35XrM3kl8BVxPzKG3-oq-gzGzJksF/github

Введя все необходимые данные, сохраним вебхук, нажав Add webhook. Если всё сделано правильно, в списке вебхуков рядом с созданным вебхуком появится галочка, означающая, что соединение с сервером работает.

На этом подключение вебхуков завершено. Теперь, когда мы будем выполнять push в этот репозиторий, в Discord будут приходить соответствующие сообщения.

Добавление вебхука через Telegram

В Telegram существует большое количество ботов для автоматизации выполнения определённых операций. Одним из таких ботов является Integram, который позволяет интегрировать в Telegram различные сервисы в пару кликов.

Подключив Integram, можно увидеть диалог, предлагающий выбрать, что именно необходимо подключить.

Выберем GitHub, после чего откроется диалог с одноимённым ботом, который предложит ряд команд для работы с ним.

Пропишем команду /connect. Бот сгенерирует ссылку, по которой нужно пройти, чтобы связать бота с аккаунтом на GitHub.

После того, как соединение между ними будет установлено, нужно ввести команду /newintegration для того, чтобы интегрировать вебхук в нужный репозиторий.

Здесь будет предложено выбрать, какой репозиторий необходимо подключить. Далее нужно будет выбрать, куда отправлять данные: в личные сообщения или в группу.

После завершения интеграции можно увидеть сообщение о том, что репозиторий подключен. Если зайти в его настройки на GitHub, то в списке вебхуков будет созданный ботом вебхук.

В результате в Telegram будут приходить уведомления, отправленные этим вебхуком.

Источник: android-tools.ru

Рейтинг
( Пока оценок нет )
Загрузка ...