Бот для Телеграм с режимом endpoint

Я уже писал ранее, что Notion выпустили свое API и я написал интеграцию с Telegram (подробнее тут) и я был несказанно рад этой новости! Писал я про это уже 4 месяца назад и я, сразу-же, сделал себе на коленке небольшого бота, который ставит мне задачи и через которого другие люди также могут ставить мне задачи.

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

Видео-версию можно увидеть на моем YouTube.

Но я для себя заметил, что добавление задач отнимает много времени — зайти в notion, открыть нужную доску, дождаться пока загрузится страница, добавить задачу. Разумеется, мой ленивый разум быстро нашел в этом причину чтобы не вести задачи. Но потом появилось API и я быстро накидал себе бота, который добавляет задачу на каждое сообщение в Telegram.

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

Inline режим бота в Telegram

Первая версия бота

Первое, что я сделал с его появлением — простого Telegram бота, через которого мне можно ставить задачи. Работает он простым образом:

  1. Я пишу Telegram боту любой текст
  2. В notion, в моем списке задач, создается карточка, в названии которого лежит текст сообщения
  3. В ответ бот присылает мне оповещение о том, что задача создана и передает ссылку на карточку
  4. Также боту может написать человек, которому я дал право ставить мне задачи. Это тоже приводит к созданию карточки задачи с пометкой автора задачи.

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

Подключение к Notion API

Для начала нужно получить token для работы. Сделать это можно по инструкции здесь. Также опишу этот процесс здесь:

  • notion.so/my-integrations переходим по этой ссылке
  • Нажимаем New Integration

  • Придумываем название интеграции

  • Попадаем на страницу с вашим токеном

Дальше этот токен можно скопировать кнопкой Copy и использовать его в своем приложении.

Создаем базу данных задач

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

Отлично! Теперь у нас есть база задач, которую вы можете наполнять руками через Notion! Но мы здесь с вами не для этого. Теперь нам необходимо настроить интеграцию между notion и telegram ботом.

Заготовка Telegram бота на typescript

Я подготовил проект, в котором реализовал базовую логику интеграции. Вы можете посмотреть его код на GitHub (версия 0.0.1). Внутри есть readme.md, в котором описано как запускать бота, а я пройдусь по основным моментам работы интеграции.

Базовая инициализация бота

const bot = new Telegraf(process.env!.TELEGRAM_BOT_TOKEN) const telegramownerid = Number(process.env!.TELEGRAM_OWNER_ID) const allowTelegramIds = process.env!.TELEGRAM_ALLOW_IDS.split(‘,’).map(e => Number(e)) console.log(< allowTelegramIds, telegramownerid >) bot.start((ctx) => ctx.reply(‘Welcome’)) bot.on(‘message’, async function (ctx: Context)

В рамках данной инициализации мы используем следующие переменные:

Обработка входящего сообщения

Сообщение, которое мы отправляем боту, приходит на наш сервер в виде объекта Context, у которого есть поле message с полями:

  • id сообщения
  • текст сообщения
  • информация об отправителе: имя, username и, самое главное, id
Еще по теме:  Что значит удалить из кэша в Телеграмме на телефоне

Разумеется есть много чего еще, но нам достаточно этого набора полей.

Подготовка объекта на отправку в notion

Для отправки задачи в Notion мы создаем объект

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

На 23 строчке в примере в переменную tgAuthor , в моем примере, подставляется username пользователя, чтобы потом можно было сообразить. Также можно увидеть другие поля в этом объекте:

  • Name — название задачи,
  • TGAuthor — автор задачи,
  • Status — статус, в который мы отправляем задачу. В нашем примере это Backlog,
  • Source — источник задачи. Проставляем Telegram.

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

Обработка сообщений от других пользователей

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

Когда они ставят мне задачу бот также создает задачу в Notion и оповещает меня о том, что кто то осчастливил меня новой задачей.

Вместо заключения

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

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

Если вам интересны темы интеграции с Notion, то предлагаю прочитать пост про интеграцию Notion с Google Calendar

Источник: amorev.ru

Парсим новости с сайта и отправляем их в телеграмм бота на Python: руководство с примерами кода

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

Python — это один из наиболее удобных языков для веб-скрапинга благодаря своим мощным библиотекам. Beautiful Soup, например, позволяет нам легко анализировать HTML и извлекать нужную информацию.

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

import requests from bs4 import BeautifulSoup url = ‘https://example.com/news’

Теперь, с помощью requests мы получим HTML страницы, а BeautifulSoup поможет нам его анализировать.

response = requests.get(url) soup = BeautifulSoup(response.text, ‘html.parser’)

Предположим, что каждая новость на сайте обернута в тег div с классом ‘news-item’. Мы можем получить все такие элементы следующим образом:

news_items = soup.find_all(‘div’, class_=’news-item’)

Далее, Telegram предоставляет удобное API для создания ботов. Для отправки сообщений нам потребуется библиотека python-telegram-bot . Допустим, у нас уже есть токен бота и ID чата, куда мы хотим отправлять новости. Каждую новость мы отправим в виде отдельного сообщения.

from telegram import Bot bot_token = ‘your_bot_token’ chat_id = ‘your_chat_id’ bot = Bot(token=bot_token) for item in news_items: title = item.find(‘h2’).text link = item.find(‘a’)[‘href’] bot.send_message(chat_id, f’n’)

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

Источник: devprac.ru

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-адрес сервера.

Утилита спросит пароль, надо ввести пароль от пользователя 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 имя_модуля”.

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

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

nohup python telebot.py https://ruvds.com/ru/helpcenter/telegram-bot-dlya-ruvds/» target=»_blank»]ruvds.com[/mask_link]

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