Некоторые мессенджеры, такие как Telegram, иногда предоставляют API, который можно использовать для создания бота. Боты — это полезная в хозяйстве вещь. Например — хороший способ взаимодействия с приложениями, работающими на вашем домашнем сервере, без заморочек (в плане безопасности) с открытием директорий, проброса и подобной нездоровой фигни. Данный тип ботов легко написать, и они очень универсальны. В этой статье я покажу, как создать бота с помощью Python и Telegram.
Создание бота с помощью Python и Telegram
Недавно мне пришлось подавать документы на визу, а чтобы записаться на прием, нужно зайти на правительственный сайт и постоянно мониторить появление свободных мест. В этом деле надо быть шустрым, чтобы успеть, так как квоты разлетаются, как горячие бабушкины пирожки.
Поэтому я решил написать бота, который перемещается по формам каждые 10 минут и в случае появления изменений отправляет мне сообщение в Telegram.
Бот состоит из двух частей:
- Код для взаимодействия с Selenium WebDriver.
- Оповещения об изменениях через Telegram.
Для начала нужно скачать с сайта Selenium WebDriver один драйвер для браузера:
КАК СОЗДАТЬ И ЗАЛИТЬ НА СЕРВЕР ТЕЛЕГРАМ-БОТА НА PYTHON ЗА 15 МИНУТ?
Затем используем библиотеку Splinter, которая абстрагирует взаимодействие с драйвером.
from splinter import Browser
with Browser ( ) as browser :
browser . visit ( «http://www.google.com» )
# Find and fill out the search form.
browser . find_by_name ( ‘q’ ) . fill ( ‘splinter’ )
# Find and click the ‘search’ button.
button = browser . find_by_name ( ‘btnK’ ) . click ( )
# Check for result on the page.
if browser . is_text_present ( ‘splinter.readthedocs.io’ ) :
print ( «Yes, the official website was found!» )
print ( «No, it wasn’t found. » )
Чтобы запустить код, сначала запустите ранее загруженный драйвер, а затем запустите приложение Python.
Теперь, когда у нас есть скрипт, который мониторит изменения на сайте, нам нужен способ получения уведомлений. Чтобы создать бота Telegram, нам понадобится токен. Для получения токена воспользуемся ботом BotFather.
После отправления команды / newbot , BotFather предложит придумать имя бота, а затем предоставит токен.
Здесь я обернул библиотеку python-telegram-bot в класс только для того, чтобы при необходимости было проще перейти на другое решение, но вы можете пропустить это и использовать библиотеку напрямую.
import telegram
class Telegram :
def __init__ ( self , token : str ) :
self . bot = telegram . Bot ( token = token )
self . offset = 0
def send ( self , chat_id , message ) :
self . bot . send_message ( chat_id = chat_id , text = message )
Добавьте бота в группу.
Пишем TELEGRAM бота на Python
Ссылка для получения обновлений бота:
https : //api.telegram.org/bot/getUpdates
https : //api.telegram.org/bot123456789:jbd78sadvbdy63d37gda37bd8/getUpdates
Найдите объект chat :
«update_id» : 8393 ,
«message_id» : 3 ,
«first_name» : «AAA»
«date» : 25497 ,
«new_chat_participant» : <
«first_name» : «NAME» ,
«username» : «YOUR_BOT_NAME»
Пишем Telegram Bot на Python
Python – язык программирования высокого уровня, который появился сравнительно недавно. Однако его простота и легкий синтаксис уже сделали язык лидером в программировании. Многие предпочитают Python для создания Telegram Bot.
Что требуется для создания бота
- Среда программирования Python.
- Если у вас установлена версия до 3.4, то следует скачать Gid и Pip. Первое – система управления версиями, второе – система управления пакетами Python. Pip позволяет устанавливать пакеты из командной строки.
- Регистрация на GitHub.com
- Регистрация на сервере Heroku.com.
Последние два позволят развернуть бот в сети.
Создаем бота
В результате вы получите токен – символьно-числовую последовательность, уникальную для каждого бота Telegram. Именно с помощью этого идентификатора отправляются запросы на сайт https://api.telegram.org.
Каждый запрос имеет вид:
Методы описаны в документации к Telegram Bot API и являются стандартными. Задача программиста при написании бота заключается в создании кода, который получает сообщения от пользователя и отправляет команду боту на выполнение действий. Запрос может выглядеть следующим образом:
Это пример отправки сообщения для клиента Telegram. Обязательно необходимо знать параметр id_chat – это идентификатор чата. Узнать его можно из ответа, который присылает сервер, который имеет вид JSON-строки:
По сути программа отправляет запросы, считывает ответы и выполняет парсинг полученной строки. В зависимости от сообщений пользователя выполняются те или иные действия.
Пишем бота для Telegram на Python
Сначала создадим программный код. Необходимо установить Python и среду разработки.
- Скачайте Python с официального сайта https://www.python.org/downloads/
- Установите, обязательно указав «Add Python to Path».
- Проверьте установку, открыв командную строку и набрав pip. Должен появится справочный материал по pip.
Откройте среду программирования IDLE. Это делается через пуск, в главном меню ищите раздел с установленным Python и выбирайте нужную команду. Отроется окно. Создайте в нем новый файл и вставьте программный код бота Telegram на Python.
import requests
import datetime
#Установка адреса бота
url = https://api.telegram.org/bot507226896:AAGT_fsEO1milOkqbNp-VolQDJ0tGjaPvD7/
#Поиск последнего сообщения из массива чата с пользователем Telegram.
def lastUpdate(dataEnd):
res = dataEnd[‘result’]
totalUpdates = len(res) — 1
return res[totalUpdates]
#Получение идентификатора чата Telegram
def getChatID(update):
chatID = update[‘message’][‘chat’][‘id’]
return chatID
#отправка запроса sendMessage боту
def sendResp(chat, value):
settings =
resp = requests.post(url + ‘sendMessage’, data=settings)
return resp
#Get-запрос на обновление информации к боту. Результат – строка json. Метод .json позволяет развернуть ее в массив
def getUpdatesJson(request):
settings =
response = requests.get(request + ‘getUpdates’, data=settings)
return response.json()
#Главная функция
def main():
chatID = getChatID(lastUpdate(getUpdatesJson(url)))
sendResp(chatID, ‘Ваше сообщение’)
updateID = lastUpdate(getUpdatesJson(url))[‘update_id’]
#Бесконечный цикл, который отправляет запросы боту на получение обновлений
while True:
#Если обновление есть, отправляем сообщение
if updateID == lastUpdate(getUpdatesJson(url))[‘update_id’]:
sendResp(getChatID(lastUpdate(getUpdatesJson(url))), ‘проба’)
updateID += 1
sleep(1)
#Запуск главной функции
if __name__ == ‘__main__’:
main()
Python чувствителен к пробелам и табуляции, поэтому выполните Format-Untabify Region.
Запустите здесь же в среде разработки. В созданном боте Telegram должно появиться сообщение «Ваше сообщение Проба».
Разворачиваем проект на сервере
Самое сложное – заставить наш проект для Telegram работать на сервере. Мы воспользуемся бесплатным сервисом Heroku.
- Устанавливаем окружение, набирая pip install pipenv – ее надо набрать в командной строке.
- Регистрируемся на Heroku.com
- Устанавливаем интерфейс командной строки Heroku (CLI)
https://devcenter.heroku.com/articles/getting-started-with-python#set-up - В командной строке набираем Heroku и Enter
- Вводим адрес электронной почты, с которым регистрировались на сервере, и пароль, придуманный при регистрации
- Создаем папку. Ее лучше создать в папке с Python. Для примера создадим папку run
- Набираем virtualenv run , чтобы инициализировать в ней virtualenv.
- Регистрируемся на github.com и создаем свой репозиторий
- Переходим в папку run с помощью cd run
- Клонируем репозиторий git командой git clone https:/github.com/ВАШЕ_ИМЯ/ВАШ РЕПОЗИТОРИЙ . ВАШЕ_ИМЯ – имя пользователя на github
- Скопируйте скрипт в папку созданного репозитория (она появится в run)
- Зайдите в папку run/scripts , чтобы запустить файл activate.bat. Если он сработал успешно, то перед адресом в командной строке будет стоять название вашей папки. Например,
- Перейдем в папку run , затем в папку репозитория с помощью команды cd
- Установим модуль requests. Наберем pip install requests
- Чтобы создать зависимость введите pip freeze > requirements.txt
- В папке run создайте файл Procfile или Procfile.windows (для Windows) и сохраните в нем строку web: python bot.py, где bot.py – имя вашего файла с программой для бота
- В папке репозитория создайте файл __init__.py. Он будет пустым
Далее последовательно набирайте в командной строке
Вы увидите сообщение об инициализации пустого репозитория.
Внимание, после add пробел и точка! Добавляет файлы в локальный депозиторий.
Выполнение команды занимает некоторое время, необходимо подождать.
git commit -m ‘short message that describe changes to commit’
Фиксирует изменения в репозитории.
git push -u https://github.com/ИМЯ_ПОЛЬЗОВАТЕЛЯ/ИМЯ_РЕПОЗИТОРИЯ
Позволит развернуть проект на github.
Затем выполните команды:
heroku create имя проекта
В результате вы получите адрес вашего проекта, например, runbot.herokuapp.com.
git push heroku master
Ждем окончания процесса компиляции проекта.
heroku ps:scale web=1
heroku open
Последняя команда откроет ваше приложение на сервере. Бот на Питоне для Телеграмма начнет свою работу.
На сайте с документацией можно посмотреть другие Telegram Bot примеры на Python.
Источник: telegramzy.ru
Как запустить бота телеграмм на питоне
Нейросети Бот на Python, использующий ChatGPT для Telegram [Гайд]
2023-02-09T16:51:43.485000+03:00
Оценки статьи
Еще никто не оценил статью
В этой статье мы реализуем бота, работающего на базе ChatGPT, с помощью языка Python и библиотеки aiogram. А также проверим его в работе!
Примечание: у вас уже должен быть зарегистрирован аккаунт в ChatGPT — OpenAI, если вы этого ещё не сделали, можете ознакомиться с этой статьёй
Дополнительно (может быть полезно): доступен гайд для запуска данного telegram-бота с ChatGPT на VPS сервере, используя Docker контейнер.
Получаем API токен для ChatGPT
- Нам необходимо получить токен для API, переходим на сайт: platform.openai.com
На сайте нажимаем Personal, и выбираем View API keys:
Далее нажимаем Create new secret key
Получаем наш ключ для ChatGPT API.
Опционально: вы можете изучить документацию и другие моменты в управлении ChatGPT.
Получаем токен для бота в телеграмм
Получаем ключ для доступа к API, на скриншоте он закрашен. Сохраняем в удобное место.
Создаем бота на Python
- Открываем папку, где хотим хранить проект с помощью IDE редактора, например VS CODE, открываем терминал, пишем команду cmd и создаем виртуальное окружение с помощью команды py -m venv venv . На компьютере у вас должен быть установлен Python. Скачать его можно на официальном сайте.
Далее активируем виртуальное окружение следующей командой: cd venv/scripts activate и возвращаемся в корневой каталог с помощью команды cd ../../ , в терминале у нас появится, что вирутальное окружение активировано, в скобках (venv).
Далее создаем файл рядом с venv под названием main.py.
Теперь нам необходимо установить два пакета с помощью терминала: pip install openai aiogram
Результат выполнения команды:
(venv) C:UsersRazilatorDesktopProjectsProgHunterBot>pip install openai aiogram Collecting openai Downloading openai-0.26.5.tar.gz (55 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 55.5/55.5 kB 481.5 kB/s eta 0:00:00 Installing build dependencies done Getting requirements to build wheel
done Installing backend dependencies done Preparing metadata (pyproject.toml) done Collecting aiogram Using cached aiogram-2.25.1-py3-none-any.whl (203 kB) Collecting requests>=2.20 Using cached requests-2.28.2-py3-none-any.whl (62 kB) Collecting tqdm Using cached tqdm-4.64.1-py2.py3-none-any.whl (78 kB) Collecting aiohttp Using cached aiohttp-3.8.3-cp311-cp311-win_amd64.whl (317 kB) Collecting Babel2.10.0,>=2.9.1 Using cached Babel-2.9.1-py2.py3-none-any.whl (8.8 MB) Collecting certifi>=2021.10.8 Using cached certifi-2022.12.7-py3-none-any.whl (155 kB) Collecting magic-filter>=1.0.9 Using cached magic_filter-1.0.9-py3-none-any.whl (9.3 kB) Collecting attrs>=17.3.0 Using cached attrs-22.2.0-py3-none-any.whl (60 kB) Collecting charset-normalizer3.0,>=2.0 Using cached charset_normalizer-2.1.1-py3-none-any.whl (39 kB) Collecting multidict7.0,>=4.5 Using cached multidict-6.0.4-cp311-cp311-win_amd64.whl (28 kB) Collecting async-timeout5.0,>=4.0.0a3 Using cached async_timeout-4.0.2-py3-none-any.whl (5.8 kB) Collecting yarl2.0,>=1.0 Using cached yarl-1.8.2-cp311-cp311-win_amd64.whl (55 kB) Collecting frozenlist>=1.1.1 Using cached frozenlist-1.3.3-cp311-cp311-win_amd64.whl (32 kB) Collecting aiosignal>=1.1.2 Using cached aiosignal-1.3.1-py3-none-any.whl (7.6 kB) Collecting pytz>=2015.7 Using cached pytz-2022.7.1-py2.py3-none-any.whl (499 kB) Collecting idna4,>=2.5 Using cached idna-3.4-py3-none-any.whl (61 kB) Collecting urllib31.27,>=1.21.1 Using cached urllib3-1.26.14-py2.py3-none-any.whl (140 kB) Collecting colorama Using cached colorama-0.4.6-py2.py3-none-any.whl (25 kB) Building wheels for collected packages: openai Building wheel for openai (pyproject.toml) done Created wheel for openai: filename=openai-0.26.5-py3-none-any.whl size=67643 sha256=37dc116c709234495442341b7ee6aa3dd3bc4106aaff6db62e06b270896d5d7e Stored in directory: c:usersrazilatorappdatalocalpipcachewheelsea6cec 84e3e339332a539336f4b1c6990779c508ee73a760b2697e6 Successfully built openai Installing collected packages: pytz, urllib3, multidict, magic-filter, idna, frozenlist, colorama, charset-normalizer, certifi, Babel, attrs, async-timeout, yarl, tqdm, requests, aiosignal, aiohttp, openai, aiogram Successfully installed Babel-2.9.1 aiogram-2.25.1 aiohttp-3.8.3 aiosignal-1.3.1 async-timeout-4.0.2 attrs-22.2.0 certifi-2022.12.7 charset-normalizer-2.1.1 colorama-0.4.6 frozenlist-1.3.3 idna-3.4 magic-filter-1.0.9 multidict-6.0.4 openai-0.26.5 pytz-2022.7.1 requests-2.28.2 tqdm-4.64.1 urllib3-1.26.14 yarl-1.8.2 [notice] A new release of pip available: 22.3 -> 23.0 [notice] To update, run: python.exe -m pip install —upgrade pip
Теперь в наш файл main.py добавляем следующий фрагмент кода:
В примере выше вы должны вставить токены, которые сохранили соответственно для телеграмм бота и для OpenAI ChatGPT.
Это самые стандартные настройки для запуска и работы бота и стандартные настройки для нейросети, чтоб он вам отвечал непосредственно от нейросети ChatGPT в телеграмме. В коде я передаю ответ от нейросети в виде пришедшего ответа по API.
Запускам бота, проверяем работу
Теперь нам необходимо запустить бота, для этого в терминале напишите py main.py и если все сделали правильно, результат будет следующим:
(venv) C:UsersRazilatorDesktopProjectsProgHunterBot>py main.py Updates were skipped successfully.
Теперь напишем нашему боту
Отлично. Надеюсь у вас все получилось! Иногда может случится такое, что сервер будет выдавать ошибку, к сожалению, это просто нагружен сам сервер нейросети.
Плюсы способа с телеграм-ботом:
- Вы можете обойтись без VPN.
- Всегда в легкой доступности. Минусы:
- Ограниченное кол-во на использование, OpenAI выдает вам 30$ как проверка. На самом деле вы можете долго им пользоваться. Тарификация маленькая и если будет желание, можете купить подписку. Это касается только использования ChatGPT через API.
- Общение не в рамках контекста. Нейросеть просто не запоминает ваши предудыщие сообщения через API, как это реализовано на самом сайте с нейросетью.
Добро пожаловать в Блог Разработчика Владислава Александровича.
Ведется медленная, но уверенная разработка функционала сайта.
Django Core: 0.3.3 / Next.js 0.2.3 / UPD: 17.05.2023
Источник: proghunter.ru