open in new window — библиотеки для написания ботов Telegram.
open in new window нового бота в Telegram.
Затем устанавливаем библиотеку python-telegram-bot
pip install python-telegram-bot
Наш бот будет уметь только два действия: отвечать на команду /start и в ответ на любое сообщение, которое не является командой, отправлять текст присланного сообщения.
Командой считается сообщение которое начинается с символа «/». Команда /start отправляется автоматически боту при добавлении его в список контактов. Но ничего не мешает отправить её после этого вручную.
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
# токен полученный при регистрации бота
# start вызывается после команды /start
def start(bot, update): update.message.reply_text(‘Привет’)
# echo вызывается после любого текстового сообщения
def echo(bot, update): update.message.reply_text(update.message.text)
# создаём основной объект для управления ботом
# регистрируем процедуру start как обработчик команды start
# регистрируем процедуру echo как обработчик текстового сообщения
# запускаем бота
Запуск бота в консоли
Самый простой телеграм бот на Python. Подробно.
Для остановки бота нажмите ctrl+C
Источник: way23.ru
Создаем Telegram бота
Телеграм боты — это крутой способ взаимодействия с пользователем прямо в привычном ему мессенджере. Это гораздо быстрее и чаще удобнее, чем писать полноценное мобильное приложение. Сегодня мы с вами разберемся, как они работают, и создадим несколько собственных ботов.
Вспоминая функции
Функция — это часть кода программы, которую можно повторно использовать. У функции есть имя, список параметров и возвращаемое значение.
Возвращаемое значение — это результат работы функции. Рассмотрим простой пример:
def getTwo(): return 2 a = getTwo() print(a)
В данном примере мы определили функцию getTwo , она не принимает параметров и всегда возвращает ( return ) число 2. Написав a = getTwo() , мы вызвали функцию и результат ее работы попал в переменную a . На следующей строчке программа выведет 2 .
Список параметров (или аргументов) — это значения, которые необходимы функции для выполнения задачи. Рассмотрим второй пример:
def sum(a, b): return a + b print(sum(23, 5)) # выведет 28 print(sum(-3, 6)) # выведет 3
Здесь функция принимает два параметра и возвращает их сумму.
Внутри функций мы можем использовать любые переменные и операции с единственным ограничением:
- переменные внутри функции недоступны вне этой функции;
- переменные извне функции доступны только для чтения (если не испольуется ключевое слово global ).
Телеграм боты
Простой Telegram-бот на Python за 3 минут
Телеграм бот — это программа, которая запущена на вашем компьютере и общается с серверами телеграма через интернет. Можно представить, что при регистрации бота, телеграм выделяет нам почтовый ящик, через который мы можем получать сообщения от пользователей и отправлять их им.
Далее мы с вами научимся писать программы на питоне, которые, используя этот токен, смогут общаться с пользователями.
Устанавливаем библиотеки
Одно из ключевых преимуществ питона — наличие огромного количества встроенных и сторонних библиотек. Для того, чтобы сделать телеграм-бота, который будет присылать нам статьи из википедии по нашему запросу, нам потребуется установить сразу три библиотеки.
- pyTelegramBotApi — для создания бота.
Для установки сторонних библиотек вместе с питоном на компьютер устанавливается программа pip.exe , которая умеет автоматически находить и скачивать библиотеки по их названию. Единственный нюанс — она работает только через командную строку (терминал).
Чтобы установить библиотеки нам потребуется открыть командную строку и последовательно ввести три команды.
pip install pytelegrambotapi
PS. Если у вас установлен питон, но компьютер все равно не находит pip, путь к нему нужно добавить в системную переменную PATH.
PS. Если у вас потребуют права администратора, можно поставить библиотеки только для текущего пользователя.
pip install —user pytelegrambotapi
Бот-попугай
Давайте сделаем нашего первого бота — бота-попугая. На все сообщения он будет отвечать повторением.
Помимо текстовых сообщений, в телеграме есть команды, они начинаются со слэша, например, /start или /help . Их тоже можно обрабатывать.
Давайте добавим пояснение к нашему боту, которое объяснит пользователю, что он делает.
Стикеры
Еще пример: бот, которому можно прислать стикер и получить стикер в ответ (он запоминает ранее присланные стикеры от всех пользователей).
Что такое словарь?
Списки — это очень круто! Можно хранить много данных и не придумывать имя каждому элементу. Но.
Рассмотрим другую задачу: нам нужно сделать базу клиентов для магазина комиксов. Магазин хочет помнить имя, возраст и любимые комиксы каждого клиента. Мы можем попробовать складывать это в список, но получится примерно так:
clients = [«Петька», 23, [«Майор гром», «Супермен»], «Чапаев», 43, [«Бэтмен»]]
Получаются тройки элементов, где первый элемент это имя, второй — возраст, а дальше список любимых комиксов. Жить, конечно, можно. Но ведь явно должен быть способ лучше. Да, и это — словари.
Вспомним коридор отеля, в котором на дверях написаны номера. Можно провести модернизацию и повесить на двери имя жильца вместо номера. Такой номер будет называться ключем, а сам жилец — значением.
Более естественный пример — это обычный бумажный словарь. Это книга, в которой перечислены слова и их определения. Слова — это ключи, а определения — значения.
Словарь — множество пар ключ-значение.
В примере выше весь список клиентов — это и правда список, а вот отдельный клиент тянет на словарь.
Один клиент будет выглядеть так:
client = # это словарь
А весь список клиентов:
clients = [ , ] # это список словарей
Как работать со словарями?
Работа со словарями очень похожа на работу со списками, только вместо номера элемента используется его ключ (имя).
client = print(«Как зовут клиента?») print(client[«name»]) print(‘-‘ * 15) print(«Сколько ему лет?») print(client[«age»]) print(‘-‘ * 15) print(«А можно вывести всю информацию о нем?») print(client) # print(‘-‘ * 15) print(«А в столбик?») for key in client: print(«<> — <>».format(key, client[key])) # словарь это много пар ключ-значение. Чтобы посмотреть на все элементы надо перебрать все ключи print(‘-‘ * 15) print(«Он любит кошек или собак?») if «pet» in client: print(client[«pet»]) else: print(«Мы не знаем») # так можно проверить, есть ли ключ в словаре print(‘-‘ * 15) print(«Он любит кошек, запишите это!») client[«pets»] = «кошка» print(client) # так можно добавить в словарь новый элемент # print(‘-‘ * 15) print(«Возраст не нужен, удалите!») del client[«age»] print(client) # удаляем элемент и словаря # print(‘-‘ * 15) # кстати, можно вывести все ключи: print(list(client.keys())) # [‘name’, ‘favorites’, ‘pets’] print(‘-‘ * 15) # и отдельно все значения print(list(client.values())) # [‘Петька’, [‘Майор гром’, ‘Супермен’], ‘кошка’] print(‘-‘ * 15) # а еще из словаря можно сделать список пар, вот так: print(list(client.items())) # [(‘name’, ‘Петька’), (‘favorites’, [‘Майор гром’, ‘Супермен’]), (‘pets’, ‘кошка’)] print(‘-‘ * 15) print(«Ксати, он говорил, что бэтмен тоже ничего.») client[«favorites»].append(«Бэтмен») print(client) #
Привязка данных к пользователю
Предположим мы хотим сделать бота, которы будет запоминать какую-то фразу, а затем по просьбе пользователя напоминать ее ему. Чтобы решить эту задачу, нам понадобится где-то хранить последнее сообщение пользователя.
Если мы будем использовать переменную, то сможем сохранить сообщение только одного пользователя. Например, Вася попросил запомнить слово kitten . Мы положим эту строку в переменную note . А затем Петя, попросить запомнить слово puppy , и мы снова положим это переменную note . Когда Вася попросит нам напомнить его последнее сообщение, мы напишем ему puppy вместо kitten . Совершенно не годится!
Удобнее всего хранить все данные, которые привязаны к конкретному пользователю в словаре. Ключем в этом словаре будет id пользователя, а значением — произвольные данные.
Предположим, что наш словарь называется notes — заметки. Теперь, когда Вася (id88000) пришлет слово kitten мы положим его в notes[88000] , а слово puppy от Пети (id5300) — в notes[5300] . Посколько теперь мы используем разные переменные для хранения слова, сообщения от разных пользователей не будут путаться.
Реализация:
Запланированный ответ на конкретное сообщение
Иногда нам приходиться проводить пользователя через конкретную цепочку вопросов, и проще всего сделать это с помощью функции bot.register_next_step_handler . Она позволит нам создать сразу много функций (как и в обычном квесте) и в ответ на сообщения от пользователя последовательно вызывать нужную.
Попробуем с ее помощью провексти квест.
Получение фотографий
Следующий пример показывает, как скачать и сохранить картинку, которую прислал пользователь. Не забудьте создать папку images, в которую мы будем сохранять полученные картинки.
Отправка сообщений в произвольное время
Ваш телеграм бот может писать пользователю в произвольное время, если пользователь хоть раз с ним контактировал и вы запомнили id чата с ним.
В примере ниже после команды /spam бот будет отправлять пользователю сообщение каждые несколько секунд. Для этого используется многопоточность — в одном потоке осуществляется обновление сообщений с сервера телеграма, а во втором — отправка сообщений всем пользователям каждые несколько секунд.
Получаем аудиосообщения
Источник: codingprojects.ru
Создание Telegram-бота, взаимодействующего с API стороннего сервиса: Обзор библиотек Python
Telegram-боты — это небольшие программы, которые можно использовать для автоматизации набора задач внутри мессенджера Telegram. Они могут быть интегрированы с API сторонних сервисов для расширения своих функциональных возможностей. В этой статье мы обсудим, как создать такого рода бота с использованием Python и его библиотек.
Использование библиотеки python-telegram-bot
Библиотека python-telegram-bot представляет собой оболочку для API Telegram Bot, которая облегчает создание ботов. В качестве примера создадим простого бота, который использует OpenWeatherMap API для получения текущей погоды.
Установка библиотеки
pip install python-telegram-bot pip install requests
Пример кода
from telegram import Update from telegram.ext import Updater, CommandHandler, CallbackContext import requests def get_weather(city: str) -> str: response = requests.get(f»http://api.openweathermap.org/data/2.5/weather?q=) data = response.json() description = data[‘weather’][0][‘description’] temp = int(data[‘main’][‘temp’] — 273.15) # convert from Kelvin to Celsius return f»Weather in : , temperature: °C» def weather(update: Update, context: CallbackContext): city = ‘ ‘.join(context.args) update.message.reply_text(get_weather(city)) def main(): updater = Updater(«YOUR_TELEGRAM_BOT_TOKEN», use_context=True) dp = updater.dispatcher dp.add_handler(CommandHandler(«weather», weather)) updater.start_polling() updater.idle() if __name__ == ‘__main__’: main()
В этом примере функция get_weather отправляет HTTP GET запрос к API OpenWeatherMap и извлекает описание погоды и температуру для указанного города.
Использование библиотеки aiogram
Aiogram — это еще одна популярная асинхронная библиотека для создания Telegram-ботов на Python. Возьмем аналогичный пример с прогнозом погоды.
Установка библиотеки
pip install aiogram pip install requests
Пример кода
from aiogram import Bot, Dispatcher, types import requests import asyncio async def get_weather(city: str) -> str: response = requests.get(f»http://api.openweathermap.org/data/2.5/weather?q=) data = response.json() description = data[‘weather’][0][‘description’] temp = int(data[‘main’][‘temp’] — 273.15) # convert from Kelvin to Celsius return f»Weather in : , temperature: °C» async def weather(message: types.Message): city = message.text.split(‘/weather’, 1)[1].strip() await message.reply(await get_weather(city)) async def main(): bot = Bot(«YOUR_TELEGRAM_BOT_TOKEN») dp = Dispatcher(bot) dp.register_message_handler(weather, commands=[‘weather’]) await dp.start_polling() if __name__ == ‘__main__’: asyncio.run(main())
В обоих примерах вам необходимо заменить YOUR_TELEGRAM_BOT_TOKEN на токен своего бота, а YOUR_OPENWEATHERMAP_API_KEY — на свой ключ API OpenWeatherMap.
Пожалуйста, обратите внимание, что это базовые примеры и в реальном использовании вам потребуется обработка ошибок и валидация входных данных.
Создание бота Telegram, который взаимодействует с API стороннего сервиса, — это мощный способ расширить возможности вашего бота и сделать его еще более полезным для пользователей. Python и его библиотеки предоставляют простой и гибкий способ создания таких ботов.
Источник: devprac.ru