Sending message to telegram python

Простой Telegram-бот на Python за 30 минут

На Хабре, да и не только, про ботов рассказано уже так много, что даже слишком. Но заинтересовавшись пару недель назад данной темой, найти нормальный материал у меня так и не вышло: все статьи были либо для совсем чайников и ограничивались отправкой сообщения в ответ на сообщение пользователя, либо были неактуальны. Это и подтолкнуло меня на написание статьи, которая бы объяснила такому же новичку, как я, как написать и запустить более-менее осмысленного бота (с возможностью расширения функциональности).

Часть 1: Регистрация бота

Самая простая и описанная часть. Очень коротко: нужно найти бота @BotFather, написать ему /start, или /newbot, заполнить поля, которые он спросит (название бота и его короткое имя), и получить сообщение с токеном бота и ссылкой на документацию. Токен нужно сохранить, желательно надёжно, так как это единственный ключ для авторизации бота и взаимодействия с ним.

Часть 2: Подготовка к написанию кода

Как уже было сказано в заголовке, писать бота мы будем на Python’е. В данной статье будет описана работа с библиотекой PyTelegramBotAPI (Telebot). Если у вас не установлен Python, то сперва нужно сделать это: в терминале Linux нужно ввести

sudo apt-get install python python-pip

Если же вы пользуетесь Windows, то нужно скачать Python с официального сайта .

Читайте также:  Css cascading style sheets технологиях

После, в терминале Linux, или командной строке Windows вводим

pip install pytelegrambotapi

Теперь все готово для написания кода.

Часть 3: Получаем сообщения и говорим «Привет»

Небольшое отступление. Телеграмм умеет сообщать боту о действиях пользователя двумя способами: через ответ на запрос сервера (Long Poll), и через Webhook, когда сервер Телеграмма сам присылает сообщение о том, что кто-то написал боту. Второй способ явно выглядит лучше, но требует выделенного IP-адреса, и установленного SSL на сервере. В этой статье я хочу рассказать о написании бота, а не настройке сервера, поэтому пользоваться мы будем Long Poll’ом.

Открывайте ваш любимый текстовый редактор, и давайте писать код бота!

Первое, что нужно сделать это импортировать нашу библиотеку и подключить токен бота:

import telebot; bot = telebot.TeleBot('%ваш токен%');

Теперь объявим метод для получения текстовых сообщений:

@bot.message_handler(content_types=['text']) def get_text_messages(message):

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

@bot.message_handler(content_types=['text', 'document', 'audio'])

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

Теперь добавим в наш метод немного функционала: если пользователь напишет нам «Привет», то скажем ему «Привет, чем я могу помочь?», а если нам напишут команду «/help», то скажем пользователю написать «Привет»:

if message.text == "Привет": bot.send_message(message.from_user.id, "Привет, чем я могу тебе помочь?") elif message.text == "/help": bot.send_message(message.from_user.id, "Напиши привет") else: bot.send_message(message.from_user.id, "Я тебя не понимаю. Напиши /help.")

Данный участок кода не требует комментариев, как мне кажется. Теперь нужно добавить в наш код только одну строчку (вне всех методов).

bot.polling(none_stop=True, interval=0)

Теперь наш бот будет постоянно спрашивать у сервера Телеграмма «Мне кто-нибудь написал?», и если мы напишем нашему боту, то Телеграмм передаст ему наше сообщение. Сохраняем весь файл, и пишем в консоли

Где bot.py – имя нашего файла.

Теперь можно написать боту и посмотреть на результат:

image

Часть 4: Кнопки и ветки сообщений

Отправлять сообщения это несомненно весело, но ещё веселее вести с пользователем диалог: задавать ему вопросы и получать на них ответы. Допустим, теперь наш бот будет спрашивать у пользователя по очереди его имя, фамилию и возраст. Для этого мы будем использовать метод register_next_step_handler бота:

name = ''; surname = ''; age = 0; @bot.message_handler(content_types=['text']) def start(message): if message.text == '/reg': bot.send_message(message.from_user.id, "Как тебя зовут?"); bot.register_next_step_handler(message, get_name); #следующий шаг – функция get_name else: bot.send_message(message.from_user.id, 'Напиши /reg'); def get_name(message): #получаем фамилию global name; name = message.text; bot.send_message(message.from_user.id, 'Какая у тебя фамилия?'); bot.register_next_step_handler(message, get_surnme); def get_surname(message): global surname; surname = message.text; bot.send_message('Сколько тебе лет?'); bot.register_next_step_handler(message, get_age); def get_age(message): global age; while age == 0: #проверяем что возраст изменился try: age = int(message.text) #проверяем, что возраст введен корректно except Exception: bot.send_message(message.from_user.id, 'Цифрами, пожалуйста'); bot.send_message(message.from_user.id, 'Тебе '+str(age)+' лет, тебя зовут '+name+' '+surname+'?') 

И так, данные пользователя мы записали. В этом примере показан очень упрощённый пример, по хорошему, хранить промежуточные данные и состояния пользователя нужно в БД, но мы сегодня работаем с ботом, а не с базами данных. Последний штрих – запросим у пользователей подтверждение того, что все введено верно, да не просто так, а с кнопками! Для этого немного отредактируем код метода get_age

def get_age(message): global age; while age == 0: #проверяем что возраст изменился try: age = int(message.text) #проверяем, что возраст введен корректно except Exception: bot.send_message(message.from_user.id, 'Цифрами, пожалуйста'); keyboard = types.InlineKeyboardMarkup(); #наша клавиатура key_yes = types.InlineKeyboardButton(text='Да', callback_data='yes'); #кнопка «Да» keyboard.add(key_yes); #добавляем кнопку в клавиатуру key_no= types.InlineKeyboardButton(text='Нет', callback_data='no'); keyboard.add(key_no); question = 'Тебе '+str(age)+' лет, тебя зовут '+name+' '+surname+'?'; bot.send_message(message.from_user.id, text=question, reply_markup=keyboard) 

И теперь наш бот отправляет клавиатуру, но если на нее нажать, то ничего не произойдёт. Потому что мы не написали метод-обработчик. Давайте напишем:

@bot.callback_query_handler(func=lambda call: True) def callback_worker(call): if call.data == "yes": #call.data это callback_data, которую мы указали при объявлении кнопки . #код сохранения данных, или их обработки bot.send_message(call.message.chat.id, 'Запомню : )'); elif call.data == "no": . #переспрашиваем 

Остаётся только дописать в начало файла одну строку:

from telebot import types

Вот и всё, сохраняем и запускаем нашего бота:

Источник

6. Sending Messages

@botfather

You will also need to know your own telegram user ID, so the bot knows who to send messages to. Talk to @userinfobot to get this information. Once again, copy this information down somewhere.

@userinfobot

Finally, before we start writing code, we have to /start our bot. Open up a private message with your bot by searching its username, then hit the start button. Don’t worry, nothing’s supposed to happen.

Your bot

Sending a Message, Part 1

Now, let’s write our program. In the first few lines, we need to import the telegram library, and store our HTTP API and user ID in some variables.

import telegram api_key = '' user_id = '' 

Now, we need to store a representation of the telegram bot into a variable. After this, we will be able to use that variable to tell our bot what to do. Use the Bot method of the telegram library like so, passing the HTTP API api_key as argument 2 .

bot = telegram.Bot(token=api_key) 

Finally, we are ready to send a message from our bot. Use the send_message method, with appropriate arguments to tell the bot where to send the message to ( chat_id ), and what to say ( text ).

bot.send_message(chat_id=user_id, text='USP-Python has started up!') 

Save your file, and run the program.

Sent!

Don’t be intimidated by these methods! They work like functions do:

  • They have a name, such as telegram.Bot , or bot.send_message 3
  • They have rounded brackets right after their name.
  • and within these brackets are arguments such as chat_id=user_id

The only difference is that we must use the argument_name=argument_value notation. 4

Checkpoint

If your program doesn’t seem to work, check that it looks something like this:

import telegram api_key = '' user_id = '' bot = telegram.Bot(token=api_key) bot.send_message(chat_id=user_id, text='USP-Python has started up!') 

Take note of the error message, particularly which line the error originates from. Then, compare that line in your program to a matching line above. Are there any differences? If so, what are the differences exactly? Amend your program so the lines match. Did that fix the error? If it did, why?

If your program works, leave it as it is—it doesn’t have to be an exact match!

Questions & Exercises

  1. What is the type of api_key and user_id ?
    They are strings.
  2. Modify your program so that it sends a second message of your liking.
  3. Modify your program so that it sends a message to someone else.
  1. And keep it private! This is analogous to a password—anyone with this string of characters can access your bot. ↩
  2. Methods are similar to functions. We are in fact using the Bot method (function) to construct a Bot object, which we store in the variable bot . This Bot object further has methods which will allow us to do things like send messages, photos, videos. ↩
  3. Or, the Bot method of the module telegram , and send_message of the object bot , if you want to be technically precise. ↩
  4. We have been using positional arguments. These are keyword arguments. Read more?↩

Источник

Отправка сообщений в Telegram при помощи Python

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

Реализовать функцию отправки сообщения в Telegram при помощи Python довольно просто. План действий:

  1. Создать Telegram-бота с помощью BotFather от Telegram
  2. Получить идентификатор чата
  3. Послать сообщение Telegram с помощью Python

Создание Telegram-бота

  1. Откройте приложение Telegram и найдите BotFather. Это встроенный бот Telegram, который помогает создавать пользовательские боты.
  2. Введите /newbot , чтобы создать нового бота.
  3. Дайте своему боту имя и уникальный username
  4. Скопируйте токен вашего нового бота Telegram

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

Получение идентификатора чата

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

Отправьте своему Telegram-боту любое сообщение. После этого запустите скрипт Python, чтобы найти ID вашего чата:

import requests TOKEN = "Сюда вставьте свой токен" url = f"https://api.telegram.org/bot/getUpdates" print(requests.get(url).json())

Примечание редакции Pythonist: если у вас не установлена библиотека requests , нужно сперва ее установить:

$ python -m pip install requests

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

Примечание: если вы не отправите сообщение своему Telegram-боту, результаты могут быть пустыми.

Найдя идентификатор чата, скопируйте его.

Отправка сообщения Telegram с помощью Python

Скопируйте и вставьте в следующий скрипт Python токен вашего Telegram-бота и ID чата из предыдущих двух шагов. Также напишите собственное сообщение.

import requests TOKEN = "Сюда вставьте свой токен" chat_id = "Сюда вставьте ID чата" message = "Здесь напишите свое сообщение" url = f"https://api.telegram.org/bot/sendMessage?chat_id=&text=" print(requests.get(url).json()) # Эта строка отсылает сообщение

Запустите скрипт и проверьте свой Telegram!

Источник

Оцените статью