С какого ip подключается бот к telegram
Перейти к содержимому

С какого ip подключается бот к telegram

  • автор:

Line Shorts

Шаг 1. Для включения мониторинга состояния вашего сервера зайдите в ваш личный кабинет «Линия Облако», включите «Мониторинг», нажмите на карандаш в пункте «Telegram CHAT_ID». Появится QR-код на бот «Линия».

Нажмите на изображение для просмотра

Нажмите на изображение для просмотра
Шаг 2. Перейдите по ссылке и запустите бот. Вам придет сообщение с вашим Chat ID.

Нажмите на изображение для просмотра
Шаг 3. Снова перейдите в личный кабинет «Линия Облако». Введите ваш Chat ID в соответствующее поле.

Нажмите на изображение для просмотра

Теперь вы будете получать сообщения в Telegram, когда ваш сервер отключился и когда он возобновил работу.

Нажмите на изображение для просмотра

Шаг 4. Настройка в программном обеспечении «Линия». Версия «Линии» должна быть 8.1 или выше. Зайдите в «Администрирование», вкладка «Реакции», «Настройки отправки». Выберите Telegram. Поставьте галочку «Использовать «Линия Облако» для отправки»

Нажмите на изображение для просмотра
ВАЖНО! Ограничения бота «Линия»: 1 пользователь и 300 сообщений в день.

Шаг 5. Создание реакции. Перейдите во вкладку «Реакции» и создайте реакцию, по которой вы хотите получать уведомления: детекция движения, пропал сигнал и т. д.

Нажмите на изображение для просмотра

ВАЖНО! Пока открыто «Администрирование», реакция работать не будет. Теперь вы можете использовать Telegram как бесплатное облачное хранилище важных событий.

Использование бота «Линия» в Telegram

Как создать и подключить собственный Telegram чат-бот для программного обеспечения «Линия» без ограничений

Откройте мессенджер Telegram, войдите в вашу учетную запись или создайте новую. Шаг 1. Введите в поле поиска @BotFather и выберите бота. У официального бота Telegram будет стоять синий подтверждающий знак возле имени в виде галочки.

Нажмите на изображение для просмотра

Шаг 2. Нажмите «Запустить» для активации бота BotFather. В ответ вы получите список команд по управлению ботами.

Нажмите на изображение для просмотра
Шаг 3. Выберите или напечатайте и отправьте команду /newbot.

Нажмите на изображение для просмотра

Шаг 4. Выберите название бота, оно может быть на русском. На следующий запрос укажите адрес для вашего бота, адрес обязательно должен заканчиваться на bot и быть уникальным.

Нажмите на изображение для просмотра

При успешном создании бота скопируйте и сохраните значение токена , оно понадобится позже для получения chat_id канала и для настройки отправки в «Линии».

Нажмите на изображение для просмотра
Шаг 5. Создаем канал. Для получения сообщений от бота создайте свой личный канал.

Нажмите на изображение для просмотра

На телефоне, в нижнем правом углу нажмите иконку «Карандаш» => «Создать канал». В приложении для компьютера нажмите ☰ «Создать канал».

Нажмите на изображение для просмотра

На время настройки сделайте канал публичным. Скопируйте и сохраните адрес публичной ссылки канала , он понадобится позже для получения chat_id канала.

Нажмите на изображение для просмотра

Шаг 6. После создания канала зайдите в его настройки (клик по иконке в канале или ⋮ в приложении для компьютера) и добавьте вашего бота в «Администраторы» канала.

Нажмите на изображение для просмотра

Шаг 7. Узнаем chat_id канала. Для получения chat_id понадобятся ранее сохранённые значения токена и адрес канала .

Нажмите на изображение для просмотра

Откройте в браузере ссылку типа:
https://api.telegram.org/bot/getChat?chat_id=@
пример ссылки:
https://api.telegram.org/bot5945925335:AAHr5NpRewewew5Mq3A0f50hEoQuQ8s/getChat?chat_id=@nin_line_bot

Нажмите на изображение для просмотра

  • Перед должно быть написано bot.
  • Перед именем канала @.
  • Канал должен быть публичным.
  • Бот должен быть добавлен в администраторы.
  • В ответ в браузере вы получите:

Это и есть ваш chat_id -1001702544865 , скопируйте и сохраните его, он нам понадобится для настройки реакции.

ВАЖНО! Если в chat_id есть знак минуса (-), его также нужно копировать.

Шаг 8. Настройка в программном обеспечении «Линия». Версия «Линии» должна быть 8.1 или выше. Зайдите в «Администрирование», вкладка «Реакции», «Настройки отправки». Выберите Telegram. Снимите галочку «Использовать «Линия Облако» для отправки» и вставьте ваш (без пробелов, bot и т. п.).

Нажмите на изображение для просмотра

Шаг 9. Создание реакции.

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

Нажмите на изображение для просмотра

  1. Пока открыто «Администрирование», реакция работать не будет.
  2. Чтобы не попасть под бан Telegram, ограничивайте частоту отправки.

Шаг 10. Измените канал на частный.

Пишем чат-бот для Telegram на Python, используя webhook и минимум внешних библиотек

Меня зовут Андрей Устьянцев, я ведущий аналитик направления Big Data Лиги Цифровой Экономики, и в этой статье я расскажу, как писал чат‑бот в Telegram на webhook. Если вы знаете, что это такое, и подготовка не вызывает интереса — можете сразу переходить к разделу «Очень кратко». С остальными поделюсь всеми необходимыми шагами.

Почему webhook

Чат‑бот в Telegram может работать в одном из двух режимов.

Один из них называется polling — это когда код, непосредственно реализующий механику бота, опрашивает сервера Telegram с определенной периодичностью («не появилось ли чего новенького»). А если обнаружена активность в чате — реализуется определенная механика взаимодействия (общения).

Большинство материалов в интернете посвящено описанию того, как создавать ботов именно на этой механике, но мне (частное мнение без претензии на истину в последней инстанции) такой подход не очень нравится. Вот почему:

  • не вижу смысла постоянно «дергать» сервера Telegram почем зря;
  • таймаут, установленный для опроса всех чатов, в которых «общается» бот — это суть задержка в коммуникациях с человеком, который «общается» с ботом.

Второй режим работы ботов, webhook, подразумевает, что Telegram сам вызывает обработчик события/сообщения, когда в боте происходит какая‑то активность. Другими словами, код, реализующий механику бота, срабатывает по инициативе человека, который «общается» с ботом. Самый главный плюс от такого режима работы — ответ бота на действие человека происходит мгновенно: человек написал что‑то боту, Telegram тут же вызвал webhook, написанный код сразу «ответил» человеку.

Лирическое отступление: на тему «что лучше — polling или webhook» спорить можно бесконечно долго. Критерий истины: все зависит от решаемой задачи и от user‑story.

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

При чем тут «минимум» внешних библиотек?

Мое личное убеждение — использовать «чужие» библиотеки по минимуму при написании кода. Особенно в процессе изучения языка программирования. Это отнюдь не означает, что надо впадать в крайности и писать вообще все с нуля — везде возможен разумный компромисс.

Ниже я покажу, что можно написать аккуратный, короткий и читаемый код на Python и без использования специализированных библиотек именно для чат‑ботов (особенно работающих в режиме webhook).

Пошаговая инструкция: как и с чего начать

Расскажу, как я писал код на Python, с какими трудностями столкнулся по пути и как их решал.

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

Итак, что необходимо для работы чат-бота в режиме webhook?

Ссылка на официальную документацию Telegam, где описана работа чат‑ботов в режиме webhook: https://core.telegram.org/bots/api#setwebhook

1. Бот. Я не буду здесь подробно расписывать, как зарегистрировать бота — подробных мануалов достаточно и в интернете, и на этом портале.

2. Сервер для размещения кода, обрабатывающего механику бота — тот самый webhook, которого будет вызывать Telegram при активностях в боте.

Важные моменты (требования Telegram к таким серверам):

  • Сервер должен работать круглосуточно. Telegram периодически проверяет служебными запросами наличие и работоспособность webhook.
  • Важно, чтобы на сервере был установлен SSL‑сертификат, обеспечивающий (подтверждающий) безопасное соединение с серверами Telegram.
Ну и где брать такой сервер?

Первое — создать свой сервер:

  • настроить собственный компьютер под управлением Linux в режиме сервера,
  • получить, купить «фирменный» SSL-сертификат или сформировать самостоятельно такой, который Telegram примет как достоверный.

Недостатки такого решения:

  • Необходимы дополнительные компетенции по «поднятию» сервера (обычно это еще и на основе Linux) и созданию SSL-сертификата.

Хотя пошаговых инструкций и статей на эту тему достаточно.

  • Нужен постоянный IP-адрес подключения к интернету.

Если компьютер подключен к интернету из домашней сети — скорее всего, у вас динамический IP-адрес, который точно не подойдет.

  • Надо держать компьютер постоянно включенным в 220В.

Мне в рамках этой задачи круглосуточно гудящий под столом системный блок не нужен.

  • Об этом редко пишут, но на поднятый на скорую руку сервер, на который может «постучаться» Telegram, точно будут «ломиться» разные люди, боты, сети в попытке использовать ваш сервер для своих (не всегда хороших) целей.

А это означает, что мало «поднять» сервер, его еще надо и защитить от потенциальных атак из внешних сетей — суровая дополнительная компетенция, скажу я вам.

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

Поэтому я выбрал второе решение — облачное.

Идеальный вариант — виртуальный хостинг.

  1. Круглосуточно работающий сервер Apach, настроенный для запуска приложений на Python.
  2. Защита от ddos-атак и прочих «пакостей» извне.
  3. Автоматический выпуск качественного SSL-сертификата.
  4. Качественный url webhook, соответствующий требованиям Telegram.
  5. Удобный интерфейс для написания кода на Python прямо из браузера.

Итак, напишем простенького бота, который при любом взаимодействии с ним будет всегда писать в ответ «Ну привет, >»

Очень кратко

  1. Берем виртуальный хостинг. Подробная инструкция здесь.
  2. Регистрируем бота.
  3. Определяем URL-адрес, который сообщим Telegram — что это webhook, соответствующий нашему чат-боту.
  4. Пишем код на Python.
  5. «Сообщаем» Telegram адрес webhook нашего бота.

Важно! Рекомендую не менять местами последовательность действий из пунктов 5 и 4. В чем риск? Если Telegram решит проверить работоспособность адреса webhook, а там еще не отлажен код на Python, неправильный ответ Telegram на запрос может привести к блокировке webhook и бота. Снятие блокировки — отдельная неинтересная история.

Разберем код

import time import json import requests def MainProtokol(s,ts = 'Запись'): dt=time.strftime('%d.%m.%Y %H:%M:')+'00' f=open('log.txt','a') f.write(dt+';'+str(ts)+';'+str(s)+'\n') f.close def application(env, start_response): try: content='' token='5937929205:AAHW3_J3oQTSo1fCncpoK7tu6wD6iyH-kSo' if env['PATH_INFO'].lower() == '/tg_bot': # тут вся механика бота именно этот код будет исполняться, когда Telegram будет вызывать webhook wsgi_string=env['wsgi.input'].read() x=wsgi_string.decode('UTF-8') y=x.replace('\n',' ') try: json_string=json.loads(y) except: raise ValueError('Не удалось распарсить в JSON полученную строку') chat_id=json_string['message']['chat']['id'] from_first_name=json_string['message']['from']['first_name'] # имя отправителя # отправка сообщения в чат msg='Ну, привет, '+str(from_first_name) send_message=requests.get('https://api.telegram.org/bot'+token+'/sendMessage?&chat_id='+str(chat_id)+'&text='+str(msg)) if not send_message: raise ValueError('Не удалось отправить текст в бот') elif env['PATH_INFO'] == '/': # случай, когда кто-то просто из браузера зашел на сайт MainProtokol('кто-то просто зашел на сайт') else: # заглушка для обработки ситуации, когда кто-то методом перебора пытается обратиться к какой-то странице сайта raise ValueError('Вызов неизвестного URL :: '+env['PATH_INFO']) start_response('200 OK', [('Content-Type','text/html')]) return [content.encode('utf-8')] except Exception as S: content=str(S) MainProtokol(content,'Ошибка') start_response('200 OK', [('Content-Type','text/html')]) return [content.encode('utf-8')]

Нам понадобятся следующие библиотеки:

  • time — для работы с функциями даты и времени;
  • JSON — для распарсивания JSON-строки, получаемой от Telegram;
  • requests — для отправки сообщений в бот.

Примечание: в зависимости от настроек виртуальных серверов по умолчанию и инсталляций Python перечисленные библиотеки могут быть уже предустановлены. Если нет — необходимо их установить командой pip install.

Строка 5: Функция MainProtokol написана для логирования происходящего в коде. Задача этой функции — записывать в текстовый файл то, что в обычных условиях выводится на экран компьютера. Поскольку код выполняется по сути на сервере в момент вызова webhook Telegram, на экран ничего вывести нельзя, потому что экрана как такового нет. Так что текстовый файл — это замена вывода на экран ошибок (если они возникнут при выполнении кода), а также всего, что было бы полезно залогировать.

Строка 12: Функция application — основная у Python, которую вызывает сервер Apach при любом обращении к сайту. И при вызове webhook тоже.

Все данные, которые поступают при обращении к сайту (не важно, открывают ли его в браузере при прямом заходе по имени сайта, или происходит вызов webhook), сохраняются в переменной env (тип — словарь) — суть переменные окружения.

Строка 14: Переменная content в текущем коде — это «заглушка», потому что на экран ничего выводиться не должно. Можно в ней разместить HTML-код, который будет отображается в случае захода на сайт из браузера.

Строка 15: Переменная token — в ней хранится токен бота, полученный при его регистрации.

Строка 17: Проверяем, что вызывается именно webhook. В env[‘PATH_INFO’] хранится имя страницы, к которой было обращение. Я решил, что у меня страница для коммуникаций с ботами будет называться ‘tg_bot’. Настоятельно рекомендую придумывать страницу (адрес) webhook, а не сообщать Telegram просто имя домена – это защитит дополнительно ваш сайт от внешних атак.

Примечание: приведение значения переменной окружения к нижнему регистру функцией lower() — это, можно сказать, мой «пунктик»: так я еще больше уверен, что сравнение строк в одинаковом регистре произойдет корректно.

Строка 19: Получаем данные, переданные из Telegram («от бота») — они хранятся в переменной окружения «wsgi.input» в формате WSGI. Для его дальнейшей обработки применяем метод read().

Строки 24–27: Распарсиваем JSON-строку, полученную от бота.

И вот тут меня ждал подводный камень размерами с булыжник. Метод load библиотеки JSON выдавал ошибку «нарушение структуры JSON». Потратив значительное время и логируя в текстовый файл с использованием функции MainProtokol все, что только можно, я обнаружил следующее:

В JSON-строке, передаваемой из Telegram, совершенно непонятно зачем добавляется спецсимвол «\n» (перевод строки). Причем только в одном месте.

Решение проблемы — перед распарсиванием JSON-строки принудительно заменить в ней «мешающий» спецсимвол на пробел: replace(‘\n’,’ ‘).

Ремарка: по-хорошему надо было бы написать кусок кода или функцию, которая «убирает» из JSON-строки все известные спецсимволы. Но я СТОЛЬКО времени потратил на поиск проблемы, что сил на ее полномасштабное устранение со всеми возможными вариантами последствий впредь у меня уже не осталось.

Итого мы получили словарь в переменной json_string, содержащий все, что передал Telegram от бота. В общем-то, блок строк 17-30 — это то место, где необходимо реализовывать логику «общения» бота. Суть — анализировать полученный JSON и в зависимости от полученных данных программировать поведение бота.

Как разбираться с полученным JSON? По сути это объект message, полное описание которого можно найти в официальной документации вместе с описанием всех вложенных объектов типа chat, user и т. д.

Я пошел другим путем: писал в лог получаемые JSON по разным сценариям взаимодействия с ботом (отправка команды боту, отправка текста боту, отправка картинки), потом смотрел их структуру и реализовывал нужную мне логику.

Ремарка: Telegram передает в webhook только те поля, которые имеют значение. Покажу на примере.

(Исходный код – тут log1 с примерами JSON.txt)

Отправка команды «/start»

Отправка простого текста

Телеграм-бот на сервере: загрузка, настройка и запуск

В предыдущей статье мы рассказали, как создать простого бота на Node.js, однако он работал только на локальном компьютере. Эта статья о том, как загрузить бота на сервер, запустить его и проверить, что всё работает.

Шаг 1. Выбрать хостинг

Как правило, на shared-хостинге отсутствует поддержка Node.js, поэтому нам понадобится как минимум виртуальный сервер. Существуют сервисы, предлагающие VPS бесплатно, но с заметными ограничениями: например на количество трафика или нагрузку на сервер. Можно выделить несколько известных зарубежных провайдеров (но стоит отметить, что для новичков они могут оказаться сложными):

  • Google Cloud
  • Oracle Cloud
  • Amazon Web Services

Преимущество платных VPS в более высоких лимитах или их отсутствии, а также в гарантии стабильной работы сервера. Вместе с этим вы получаете активную поддержку и всегда можете рассчитывать на помощь хостинг-провайдера, если возникнут проблемы.

Для примера мы закажем облачный VPS в REG.RU, вы можете воспользоваться любым VPS-хостингом. Он удобен для тестового проекта тем, что оплата почасовая. При выборе тарифа мы рекомендуем ориентироваться на несколько параметров:

  1. Прогнозируемая нагрузка — зависит от сложности вашего бота и количества запросов к нему.
  2. Количество оперативной памяти — это зависит от многих факторов, как, например, уровень оптимизации кода и общий масштаб вашего проекта.

Так как наш бот использует только одну основную библиотеку и состоит из нескольких строк кода, мы выбираем самый младший тариф — Cloud-0. В будущем, если возникнет необходимость, можно перейти на более дорогой тариф.

Шаг 2. Заказать хостинг

Переходим по ссылке: https://www.reg.ru/vps/cloud/, выбираем тариф, операционную систему и шаблон «Чистая ОС». Если у вас нет особых предпочтений, рекомендуем выбрать Ubuntu 18.04. Хотя у REG.RU есть шаблон c Node.js, для чистоты эксперимента всё необходимое ПО мы установим сами. Нажимаем кнопку «Заказать»:

После заказа и оплаты дождёмся настройки сервера:

В течение минуты статус сервера сменится с «В процессе» на «Активен». После этого отобразятся реквизиты доступа к серверу, они также будут отправлены на почту:

Шаг 3. Загрузить бота

Приступим к загрузке бота на сервер. Это можно сделать разными способами — с помощью FTP, SFTP, панели управления или, к примеру, rsync. Мы выберем самый быстрый вариант — SFTP, так как для него нужна только возможность подключения к серверу по SSH, которая обычно присутствует на всех VPS сразу после заказа.

Мы подключимся к серверу с помощью FileZilla. Укажем IP-адрес сервера, а также логин root и пароль в настройках клиента:

При первом подключении появится окно с предупреждением:

Ставим галочку «Всегда доверять этому хосту» и нажимаем «Ок».

Переходим на директорию выше ( . ), затем в каталог /opt и создаём папку с произвольным названием (мы выбрали keksbot ):

Переходим в созданную папку и загружаем файлы index.js и package.json :

Шаг 4. Зайти на сервер по SSH

Теперь нужно подключиться к серверу по SSH, чтобы установить Node.js и запустить бота. Для этого необходим SSH-клиент, например Putty, XShell, Bitvise SSH или любой другой. Функциональность программ может немного отличаться, но большой разницы в использовании между ними нет. Мы выбрали PuTTY как самый популярный и бесплатный SSH-клиент для Windows.

Открываем PuTTY, указываем IP-адрес сервера, порт 22 уже указан по умолчанию:

Нажимаем «Соединиться». Откроется окно с запросом логина:

Вводим root , после чего появится запрос пароля, при вводе которого символы не отображаются. Не стоит переживать, это особенность работы Linux — пароль нужно вводить вслепую. Чтобы не делать этого вручную, можно скопировать пароль и нажать правой кнопкой мыши в окне PuTTY. Убедитесь, что вы скопировали пароль без пробелов!

Шаг 5. Установить Node.js

Теперь займёмся установкой. Обратите внимание, что команды для установки Node.js отличаются в зависимости от операционной системы. В наших примерах указаны команды для Ubuntu, Debian и CentOS — мы будем вводить их в консоли SSH-клиента.

Если вы не знаете, какая ОС установлена на сервере, можете проверить это командой:

cat /etc/os-release 

Вывод будет примерно таким:

NAME="Ubuntu" VERSION="16.04.6 LTS (Xenial Xerus)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 16.04.6 LTS" VERSION_ID="16.04" HOME_URL="http://www.ubuntu.com/" SUPPORT_URL="http://help.ubuntu.com/" BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/" VERSION_CODENAME=xenial UBUNTU_CODENAME=xenial 

Нас интересует поле NAME , в котором указано название дистрибутива.

Помимо Node.js нам понадобится утилита Screen, чтобы бот продолжал работать, когда мы отключимся от сервера. Также нужен менеджер пакетов npm для установки зависимостей.

apt -y install nodejs npm screen 
yum -y install nodejs npm screen 

Подождём завершения установки и проверим, что Node.js работает:

nodejs -v 

Если в ответе отобразилась версия установленного пакета, то всё прошло успешно.

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

cd /opt/keksbot npm install 

Возможные ошибки при установке, и как их решить

При установке могут появиться ошибки вида:

Existing lock /var/run/yum.pid: another copy is running as pid 9571. Another app is currently holding the yum lock; waiting for it to exit. 
E: Could not get lock /var/lib/dpkg/lock – open (11: Resource temporarily unavailable) E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it? 

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

В первом случае необходимо убедиться, что вы подключились к серверу под именем суперпользователя root — при необходимости зайдите на сервер заново.

Во втором случае для решения проблемы нужно завершить процесс менеджера пакетов и удалить lock -файлы. Чтобы это сделать, запустите команды:

ps aux | grep ‘apt\|apt-get’ | awk ‘’ | xargs kill -9 rm -f /var/cache/apt/archives/lock rm -f /var/lib/dpkg/lock rm -rf /var/lib/dpkg/lock-frontend 
ps aux | grep ‘yum’ | awk ‘’ | xargs kill -9 rm -f /var/cache/apt/archives/lock rm -f /var/lib/dpkg/lock 

После этого попробуйте заново запустить установку.

Шаг 6. Запустить и проверить бота

Пришло время запустить бота. Для начала запустим утилиту Screen простой командой:

screen 

Перейдём в каталог с файлом бота:

cd /opt/keksbot 
npm install 

После этого можем запустить бота:

nodejs index.js 

Заходим в Telegram, проверяем бота:

Отлично! Всё работает.

Теперь можно отключиться от сервера и закрыть окно PuTTY, бот продолжит работу.

Шаг 7. Обеспечить автоматический перезапуск бота

Из-за ошибок в коде бот может «упасть» в самый неожиданный момент. Чтобы этого не случилось, настроим автозапуск бота при старте сервера и его автоматический перезапуск при ошибках.

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

Большинство современных Linux-систем используют systemd для управления службами, поэтому следующая инструкция подойдёт для последних версий Ubuntu, Debian и CentOS.

Для начала отключим бота командой:

killall node 

Нам понадобится создать собственную службу, для этого в каталоге /lib/systemd/system создадим файл:

имя_бота.service 

В нашем случае это будет файл /lib/systemd/system/keksbot.service . В файл поместим следующий код:

[Unit] Description=Keksbot - Telegram bot After=network.target [Service] ExecStart=/usr/bin/node index.js ExecReload=/usr/bin/node index.js WorkingDirectory=/opt/keksbot/ KillMode=process Restart=always RestartSec=5 [Install] WantedBy=multi-user.target 

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

В поле Description указывается описание службы. Вы можете указать в ней краткую информацию о боте.

Description=Keksbot - Telegram bot 

Команда для запуска бота.

ExecStart=/usr/bin/node index.js ExecReload=/usr/bin/node index.js 

Её следует поменять, если имя скрипта вашего бота отличается от index.js . В таком случае нужно будет указать следующие значения:

ExecStart=/usr/bin/node имя_файла.js ExecReload=/usr/bin/node имя_файла.js 

Папка со скриптом, который мы запускаем. В нашем случае это /opt/keksbot/ .

WorkingDirectory=/opt/keksbot/ 

Сохраняем файл. В примерах далее мы будем использовать имя службы keksbot — если вы указали другое имя, не забудьте поменять его. Для установки службы воспользуемся командами:

systemctl enable keksbot 

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

systemctl start keksbot 

Готово. Теперь бот будет автоматически запускаться при старте сервера или при возникновении ошибок. Можно проверить это, завершив процесс node:

killall node 

Через пять секунд бот автоматически перезапустится.

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

systemctl stop keksbot 
systemctl restart keksbot 
systemctl status keksbot 

Ещё о создании бота:

  • Как написать Телеграм-бота на JavaScript
  • Как настроить работу Телеграм-бота с Google Sheets

«Доктайп» — журнал о фронтенде. Читайте, слушайте и учитесь с нами.

Читать дальше

Объект URL в JavaScript: полный разбор

Объект URL в JavaScript: полный разбор

Объект URL в JavaScript представляет URL-адрес и предоставляет удобные методы для работы с ним. Он позволяет анализировать, конструировать и декодировать URL-адреса.

Создать объект URL можно двумя способами:

Конструктор URL() — самый распространённый способ, в котором вы передаёте любой URL в виде строки в качестве аргумента.

const url = new URL("https://www.example.com/path?query=123#hash"); 

Использование window.location — это глобальный объект в браузерах, который содержит информацию о текущем URL.

const currentUrl = new URL(window.location.href); 
  • 23 января 2024

Генерация QR-кодов на JS в 4 шага. Node.js + qrcode

Генерация QR-кодов на JS в 4 шага. Node.js + qrcode

Сегодня сделаем простой REST API на Node.js и Express, который будет генерировать QR-коды для любой ссылки. Если у вас ещё не установлены Node.js и npm , установите их с официального сайта.

  • 22 ноября 2023

ChatGPT не справляется

ChatGPT не справляется

Притворитесь нейросетью и решите 101 задачку по JavaScript как можно быстрее.

  • 2 ноября 2023

Знакомство с JavaScript

Знакомство с JavaScript

Теперь, когда вы знаете, как создать структуру веб-страницы с помощью HTML и оформить ее стилями с помощью CSS, пришло время оживить её с помощью JavaScript (JS). JavaScript — это мощный язык программирования, который используется для создания интерактивных и динамических веб-сайтов.

Вы можете добавить JavaScript в ваш HTML-документ двумя способами:

Встроенный JavaScript: непосредственно в HTML-документ, в тегах :

  

Внешний JavaScript: подключение внешнего .js файла к HTML-документу:

  • 1 ноября 2023

Событие onclick в JS на примерах

Событие onclick в JS на примерах

Интерактивность — ключевой компонент любого современного сайта. И одним из наиболее часто используемых событий для создания интерактивности является событие onclick . В этой статье мы подробно разберёмся, что такое событие onclick , как его использовать и приведем примеры применения.

Событие onclick — это событие JavaScript, которое активируется, когда пользователь кликает на определенный элемент страницы. Это может быть кнопка, ссылка, изображение или любой другой элемент, на который можно нажать.

  • 30 октября 2023

Как перевернуть сайт. Самая короткая инструкция

Как перевернуть сайт. Самая короткая инструкция

Не представляем, зачем это может понадобиться, но не могли пройти мимо.

Никакой магии. Мы вызываем JavaScript-функцию rotateBody() , которая применяет свойство transform с значением rotate(180deg) к элементу . Когда вы нажмете на кнопку «Перевернуть», всё, что находится внутри будет повернуто на 180 градусов (то есть, встанет вниз головой)

function rotateBody() < document.body.style.transform = 'rotate(180deg)'; > 

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

let isRotated = false; function rotateBody() < if (isRotated) < document.body.style.transform = 'rotate(0deg)'; document.body.style.direction = "ltr"; >else < document.body.style.transform = 'rotate(180deg)'; document.body.style.direction = "rtl"; >isRotated = !isRotated; > 

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

  • 25 октября 2023

Как узнать геолокацию: Geolocation API

Как узнать геолокацию: Geolocation API

Geolocation API позволяет сайтам запрашивать, а пользователям предоставлять свое местоположение веб-приложениям. Геолокация может использоваться для выбора города в интернет-магазине, отображения пользователя на карте или навигации в ближайший гипермаркет.

Основной метод Geolocation API — getCurrentPosition() , но есть и другие методы и свойства, которые могут пригодиться.

  • 16 октября 2023

Что такое localStorage и как им пользоваться

Что такое localStorage и как им пользоваться

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

До localStorage разработчики часто использовали cookies, но они были не очень удобны: мало места и постоянная передача данных туда-сюда. LocalStorage появился, чтобы сделать процесс более простым и эффективным.

  • 12 октября 2023

Случайное число из диапазона

Случайное число из диапазона

Допустим, вам зачем-то нужно целое случайное число от min до max . Вот сниппет, который поможет:

function getRandomInRange(min, max)
  1. Math.random () генерирует случайное число между 0 и 1. Например, нам выпало число 0.54 .
  2. (max — min + 1): определяет количество возможных значений в заданном диапазоне. 10 — 0 + 1 = 11 . Это значит, что у нас есть 11 возможных значений (0, 1, 2, . 10).
  3. Math.random () * (max — min + 1): умножает случайное число на количество возможных значений: 0.54 * 11 = 5.94 .
  4. Math.floor (): округляет число вниз до ближайшего целого. Так, Math.floor(5.94) = 5 .
  5. . + min: смещает диапазон так, чтобы минимальное значение соответствовало min . Но в нашем примере, так как min = 0 , это не изменит результат. Пример: 5 + 0 = 5 .
  6. Итак, в нашем примере получилось случайное число 5 из диапазона от 0 до 10.

Чтобы протестировать, запустите:

console.log(getRandomInRange(1, 10)); // Тест 
  • 7 сентября 2023

В чём разница между var и let

В чём разница между var и let

Если вы недавно пишете на JavaScript, то наверняка задавались вопросом, чем отличаются var и let , и что выбрать в каждом случае. Объясняем.

var и let — это просто два способа объявить переменную. Вот так:

var x = 10; let y = 20; 

Переменная, объявленная через var , доступна только внутри «своей» функции, или глобально, если она была объявлена вне функции.

function myFunction() < var z = 30; console.log(z); // 30 >myFunction(); console.log(z); // ReferenceError 

Это может создавать неожиданные ситуации. Допустим, вы создаёте цикл в функции и хотите, чтобы переменная i осталась в этой функции. Если вы используете var , эта переменная «утечёт» за пределы цикла и будет доступна во всей функции.

Переменные, объявленные с помощью let доступны только в пределах блока кода, в котором они были объявлены.

if (true) < let a = 40; console.log(a); // 40 >console.log(a); // ReferenceError 

В JavaScript блок кода — это участок кода, заключённый в фигурные скобки <> . Это может быть цикл, код в условном операторе или что-нибудь ещё.

if (true) < let blockScoped = "Я виден только здесь"; console.log(blockScoped); // "Я виден только здесь" >// здесь переменная blockScoped недоступна console.log(blockScoped); // ReferenceError 

Если переменная j объявлена в цикле с let , она останется только в этом цикле, и попытка обратиться к ней за его пределами вызовет ошибку.

  • 30 августа 2023

Telegram-бот на сервере RUVDS

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

Итак, предположим у вас есть один или несколько простых ботов, помимо требуемой мощности важно на каком языке и для какой платформы написан бот. Так как для всех языков невозможно предусмотреть единую инструкцию, будет рассмотрен наиболее распространённый вариант с ботом, написанным на Python.

В разделе заказа сервера выбираем:

  • Московский дата-центр
  • Минимальные характеристики CPU, RAM, диск – HDD
  • Шаблон сервера – “Установить чистую ОС”
  • Операционную систему Debian 10 (если бот кроссплатформенный, а не заточен под конкретную ОС)

Или просто воспользуйтесь этой ссылкой для заказа идентичной конфигурации.

Начинаем настройку

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

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

Для настройки вашего сервера необходима программа удалённого управления (терминал), если у вас нет такого ПО, то можно установить широко известный терминал Putty.

Запускаем терминал и в настройках для подключения вводим IP-адрес вашего сервера, который указан в информации о сервере на портале. Порт подключения менять не надо (22, стандартный для SSH). Нажимаем подключиться, “Open”. Если появится текст, предлагающий ввести данные для входа, то всё было указано правильно.

Вводим имя администратора root, нажимаем ENTER и вводим пароль администратора, ENTER. При вводе пароля не будет отображаться никаких символов, так должно быть. Для вставки пароля из буфера обмена нужно нажать правой клавишей мыши в любом месте окна терминала.

После правильного ввода данных появится приглашение системы.

Добавляем учетную запись администратора

Золотым правилом обеспечения безопасности сервера является невозможность использования аккаунта root из интернета. Мы добавим дополнительного администратора в систему и отключим удалённый вход для root. Для управления сервером должен использоваться только второй администратор, это исключит возможность случайного раскрытия пароля root третьим лицам и сделает бессмысленными попытки подбора этого пароля сканерами хакеров. В случае потери пароля нового администратора вы всегда сможете использовать аварийный доступ к серверу с нашего портала, так что запрещение удалённого входа для root не может привести к ситуации потери доступа к вашему серверу.

Обновляем компоненты системы.

Устанавливаем сервис sudo, который нужен для выполнения команд администратора без логина под учётной записью root.

apt install sudo -y

Устанавливаем утилиту скачивания файлов, которая потребуется в процессе настройки системы.

apt install curl -y

Добавляем нового пользователя с любым именем.

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

Далее предоставляем новому пользователю возможность вызывать команды администрирования.

usermod -aG sudo johnwho

Переключаемся на нового пользователя.

На запрос пароля вводим только что созданный пароль для нового администратора johnwho.

Должно появиться приглашение:

Проверяем наличие административных прав

Если система выдала список неких файлов, а не ошибку, то второй администратор был создан успешно.

Далее необходимо зайти на ваш сервер от имени нового администратора.

Закрываем программу удалённого доступа и запускаем её заново, вводим адрес сервера, подключаемся и на этапе логина вводим имя нового администратора и его пароль.

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

Запускаем редактирование настроек удалённого доступа.

sudo nano /etc/ssh/sshd_config

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

Откроется текстовый файл настроек, листаем стрелками вниз до параметра “PermitRootLogin yes”, который необходимо поменять на:

Выходим нажатием CTRL+x, редактор спросит сохранять ли изменения? Вводим Y. На запрос имени файла нажать ENTER, чтобы сохранить изменения в прежний файл.

Перезапускаем сервис удалённого управления

sudo systemctl restart sshd

Если после этого оборвётся связь, надо снова подключиться от имени нового администратора.

Настраиваем firewall

Устанавливаем удобный брандмауэр UFW.

sudo apt install ufw

Если происходило переподключение, то система запросит пароль нового администратора.

Установим защиту от брутфорса паролей:

sudo apt install -y fail2ban

Запрещаем все входящие подключения.

sudo ufw default deny incoming

Делаем исключение для удалённого управления.

sudo ufw allow ssh

Разрешаем все исходящие подключения.

sudo ufw default allow outgoing

sudo ufw enable

На запрос подтверждения вводим “y”.

Проверяем правильность настройки.

sudo ufw status verbose

Правильный вывод выглядит следующим образом:

Готовим систему для запуска бота

Далее необходимо создать пользователя, от имени которого будет работать бот. Это позволит не бояться за сервер, и в случае необходимости проведения дополнительных настроек разработчиком, можно не опасаясь предоставить пароль этого пользователя. Если разработчик попросит дополнительно предоставить доступ администратора для установки, например, ПО для базы данных, то не забудьте потом посмотреть историю его действий под администратором командой “history”, а потом поменять пароль второго администратора. Доступ к root при наличии доступа к дополнительному администратору адекватный разработчик просить не должен.

Добавляем нового пользователя (имя произвольное)

sudo adduser telegrambot

Закрываем терминал и заходим уже под новым пользователем.

Создаём папку для хранения файлов бота

Переходим в эту папку

Далее необходимо скопировать файл(ы) бота на сервер.

Под Windows это проще всего сделать встроенной утилитой pscp, открываем командную строку cmd. И там вводим команду, в которой нужно скорректировать следующее: путь к файлу бота, имя пользователя для бота, IP-адрес сервера.

pscp c:/full/path/telebot.py telegrambot@76.54.32.10:/home/telegrambot/telebot_1

Утилита спросит пароль, надо ввести пароль от пользователя telegrambot.

Переходим в окно удалённого управления сервером и проверяем появление файла.

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

Установка Python

Переходим в каталог для временных файлов.

Скачиваем скрипт установки Miniconda. Это менеджер пакетов Python, его установщик автоматически установит интерпретатор Python, нужный для запуска самого бота.

curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh

Запускаем скрипт скачивания-установки

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

Закрываем терминал и запускаем снова, подключаемся обратно пользователем telegrambot. Без переподключения команда python будет недоступна.

Проверяем правильность установки Python

Если всё сделано верно, то появится номер версии Python.

Запуск бота

Переходим в каталог с файлами бота.

Запускаем следующим образом, если разработчик не обозначил другой вариант.

Поскольку для функционирования ботов нужны сторонние библиотеки, появится ошибка такого типа:

ModuleNotFoundError: No module named ‘pyrogram’

Это означает, что надо установить недостающие библиотеки.

Если в комплекте с ботом разработчик положил файл requirements.txt, то этот файл содержит список необходимых библиотек и их можно установить одной командой:

pip install -r requirements.txt

Иначе необходимо последовательно выполнять установку недостающих библиотек, используя команду pip install:

pip install module_name

, где module_name это название очередного недостающего модуля из ошибки

ModuleNotFoundError: No module named ‘module_name’

Возможен редкий вариант, что имя модуля в программе не соответствует имени для установки, правильную команду подскажет гугл по запросу “pip имя_модуля”.

Когда бот запустится без ошибок, проверьте его функциональность в телеграме. Найдите его сначала через поиск контактов, используя имя, под которым он был зарегистрирован разработчиком. Далее проверьте его работу. Если же бот не был разработан специально для вас, а вы хотите использовать чей-то готовый код, то необходимо зарегистрировать нового бота через официальный бот телеграма @botfather и там же запросить токен нового бота. Этот токен необходимо прописать в коде вашего бота вместо указанного автором, прежний токен можно найти под названием token или bot_token.

Если всё получилось, необходимо перезапустить скрипт бота в фоновом режиме. Дело в том, что при запуске командой “python telebot.py”, бот работает как простое приложение, и при закрытии терминала, система его завершит.

Чтобы бот был запущен постоянно в фоновом режиме, нужно производить запуск таким образом:

nohup python telebot.py &

После запуска команды курсор пропадёт и система будет как будто чего-то ожидать, нужно нажать ENTER, чтобы вернуться в командную строку. При этом все текстовые сообщения, которые бот выводит на экран, будут сохраняться в файле nohup.out.

Посмотреть его содержимое можно командой:

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

Чтобы убедиться, что бот запущен, надо использовать следующую команду:

ps -ax | grep python

Она выведет что-то подобное:

6152 pts/0 S 0:00 python telebot.py
6154 pts/0 S+ 0:00 grep python

Если в выводе есть “python telebot.py”, значит, он запущен.

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

, где 6152 – это номер процесса, который есть в выводе команды “ps -ax | grep python”.

Настройка завершена. Надеемся, что руководство было вам полезно.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *