Для начала нужно зарегистрироваться в соцсети Telegram.
Откройте приложение, через поиск найдите главный бот для создания ботов @BotFather и начните беседу командой /start, которая выведет все доступные команды.
Для создания нового бота вводим команду /newbot
и вводим уникальное имя нашего бота. Получаем токен — уникальный ключ бота. Теперь наш бот создан, но пока он не активен.
Далее нам нужно найти наш новоиспеченный бот. Для этого вводим в поиск его имя. Открываем беседу с ботом. Отправим ему первое сообщение, например, «Привет», таким образом произойдет первое обновление бота.
Для удобства будем использовать веб-интерфейс, что бы познакомится с основами работы ботов.
Открываем браузер и переходим по URL: https://api.telegram.org/bot123456789:ABCDEF1234ghIklzyx57W2v1u123ew11/sendMessage?chat_id=123456789&text=Hello
Где:
Таким способом мы можем имитировать работу бота, т.е. отправлять сообщения в чат. В ответ Telegram выдаст ответ в формате JSON, примерно такой:
Открываем браузер и переходим по URL: https://api.telegram.org/bot123456789:ABCDEF1234ghIklzyx57W2v1u123ew11/sendMessage?chat_id=123456789&text=Hello
Где:
- 123456789:ABC-DEF1234ghIkl-zyx57W2v1u123ew11 — токен бота
- chat_id — идентификатор чата, его нужно взять из токена, это цифры до знака «:» 123456789
- text — отсылаемый ботом текст в чат, в данном случае нами «Hello»
Таким способом мы можем имитировать работу бота, т.е. отправлять сообщения в чат. В ответ Telegram выдаст ответ в формате JSON, примерно такой:
{
"ok": true,
"result": {
"message_id": 001,
"from": {
"id": 123456789,
"is_bot": true,
"first_name": "tbot",
"username": "telega_bot"
},
"chat": {
"id": 123123123,
"first_name": "user_name",
"type": "private"
},
"date": 1558635770,
"text": "hello word!"
}
}
Для начала работы, наш бот должен проверить обновления при помощи метода getUpdates, который возвращает все обновления за последние 24 часа. Самое первое сообщение будет считаться самым новым.
Пример запроса через браузер:
https://api.telegram.org/bot<токен>/getUpdates
Ответ сервера будет примерно таким:
{"ok":true,"result":[]}
Что бы не отправлять запросы слишком часто, при использовании метода getUpdates нужно добавлять параметры. Добавим параметр timeout, что бы увеличить интервал между запросами. Параметр offset нужен для того, что бы отмечать уже ранее полученных обновлений.
Установим зависимую библиотеку:
pip install requests
Подключим ее в проект
import requests
Создадим класс
class TeleBot:
И проинициализируем его нашим токеном бота:
def __init__(self, token):
self.url = "https://api.telegram.org/bot{}/".format(token)
Напишем функцию для получения обновления:
def get_updates(self, offset=None, timeout=30):
method = 'getUpdates'
params = {'timeout': timeout, 'offset': offset}
response_get = requests.get(self.url + method, params)
result_json = response_get.json()['result']
if len(result_json) > 0:
last_update = result_json[-1]
else:
last_update = None
return last_update
Теперь создадим функция для отправки сообщений:
def send_message(self, chat_id, text):
params = {'chat_id': chat_id, 'text': text}
method = 'sendMessage'
response_post = requests.post(self.url + method, params)
return response_post
Ну и завершающую главную функцию где создадим объект нашего класса и в цикле будем опрашивать и отправлять сообщения в чат:
def main():
my_bot = TeleBot("849847953:AAHGRZ1uR8540xxwXsLoYWzy1LiWlUqvU10")
hello_words = ('hello', 'hi')
offset = None
while True:
last_update = my_bot.get_updates(offset)
if last_update is None:
continue
update_id = last_update['update_id']
chat_id = last_update['message']['chat']['id']
user_name = last_update['message']['chat']['first_name']
chat_text = last_update['message']['text']
if chat_text.lower() in hello_words:
my_bot.send_message(chat_id, 'Welcome, {}'.format(user_name))
offset = update_id + 1
if __name__ == '__main__':
try:
main()
except KeyboardInterrupt:
exit()
Теперь развернем наш бот в облаке heroku. Сначала нужно зарегистрироваться на сайте https://www.heroku.com и скачать клиента командой строки https://devcenter.heroku.com/articles/heroku-command-line.
Затем в папке со скриптом создадим файл Procfile и пропишем в нем команду запуска нашего скрипта:
worker: python tbot.py
Где tbot имя нашего скрипта с ботом.
Создаим файл __init__.py, может быть пустым.
Так же создадим файл зависимостей для Heroku командой:
pip freeze > requirements.txt
Регистрируемся на https://github.com .
Устанавливаем клиента git для Linux:
sudo apt install git-all
Для Mac OS через ports:
port install git
или через brew:
brew install git
Для Windows качаем с официального сайта и устанавливаем стандартным образом.
Теперь создадим проект на GitHub и запускаем консольный git. Переходим в папку проекта и инициализируем проект командой:
git init
Добавляем все наши файлы в индекс:
git add .
Фиксируем это действие с сообщением:
git commit -m "add all files"
Добавляем удаленный репоизторий:
git remote add origin https://github.com/username/tbot.git
И отправляем все файлы на сервер GitHub
git push -u origin master
Теперь пришло время залить наши файлы на сервер heroku. Для этого сначала автроизуемся командой:
heroku login
Далее отправляем файлы командой:
git push heroku master
И запускаем нашего бота:
heroku ps:scale worker=1
Проверим работает ли наш бот. Заходим через Telegram к нашему боту и пишем ему сообщения.
Для просмотра логов воспользуемся командой:
heroku logs
Остановить приложение можной командой:
heroku ps:scale web=0Если что то пошло не так, коды ошибок и их объяснения есть на сайте https://devcenter.heroku.com/articles/error-codes
Комментариев нет:
Отправить комментарий