Представляю Вашему вниманию практические примеры по теме, как создать Telegram бот на Python3 с использованием библиотеки pyTelegramBotAPI. Тут я не вижу смысла рассказывать о том, как использовать Bot Father, так как, скорее всего это знают все, либо инфы в инете полно. Минимум что будет из банальных примеров — это обработка таких команд, как «/start» и «/help» либо любой бот начинается именно с этого + это будет полезно, для тех кто только начинает свой путь в создании ботов Telegram.
План действий в рамках этой статьи такой. Но она будет дополнятся, так как данную статью я буду использовать для себя в качестве справки… По этому можете добавить страницу в закладки.
- Подготовка — Создаём config.py и используем Proxy.
- Обработка команд «/start» и «/help».
- Обработка простых сообщений. Отправка и получение.
- Как скачать и отправить стикер пользователю из бота.
- Как отправить и получить документ, аудио, видео и.т.д
- Разбираемся с Emoji, как получить код смайла для отправки в сообщении.
- Получаем информацию о пользователе, который запустил бота.
Подготовка — Создаём config.py и используем Proxy.
Файл config.py понадобится нам для хранения Токена бота и proxy (Если используете). Сложного тут нет ничего, обычный файл с двумя переменными, которые мы будет использовать в основном файле проекта.
Get ID From Telegram Bot
token = ‘Token’
Так просто выглядит файл config.py который нужно импортировать в основном файле проекта, созданием которого мы сейчас займемся. Я его так и назову «telegram_bot.py»
import telebot
from telebot import apihelper # Нужно для работы Proxy
import config # Импорт config.py
import urllib . request # request нужен для загрузки файлов от пользователя
bot = telebot . TeleBot ( config . token ) # Передаём токен из файла config.py
apihelper . proxy = < ‘http’ : config . proxy ># Передаём Proxy из файла config.py
bot . polling ( ) # запускаем бота
Практически Telegram бот на Python уже готов к работе и его можно запустить, если нет ошибок то бот работает. Но есть одна проблема. Бот работает через прокси, а библиотека request, которая нам нужна для загрузки файлов от пользователя, в данном случаи не использует прокси, по этому скачивать файлы не получиться… Это дело можно исправить, но лучше использовать VPN а от proxy отказаться.
В дальнейшем будем считать, что у нас настроен VPN ну или бот пишется непосредственно на сервере))) Теперь когда с подключением разобрались, пришло время научить бота совершать какие либо действия.
Обработка команд «/start» и «/help».
Библиотека «pyTelegramBotAPI» использует декораторы, это очень удобно и практично. Посмотрим как это работает на примере обработки команд «/start» и «/help».
def welcome ( message ) :
pass # Тут можно обработать одну из команд start или help
Если пользователь Вашего бота отправить одну из команд start или help то сработает функция «welcome()» (Название функции может быть произвольным) главное что бы она принимала обязательный параметр «message» в котором содержится много полезной информации.
А вот пример как работают декораторы. Мы можем обработать команды в разных функциях.
# Тут работаем с командой start
def welcome_start ( message ) :
bot . send_message ( message . chat . id , ‘Приветствую тебя user’ )
# Тут работаем с командой help
def welcome_help ( message ) :
bot . send_message ( message . chat . id , ‘Чем я могу тебе помочь’ )
Все получается аккуратно и логично, запутаться что и где уже стало сложнее, а значит разработка бота сводится не к рутине а к удовольствию =)
Обработка простых сообщений. Отправка и получение.
До этого момента мы работали только с командами, теперь нам предстоит работа с различным типом сообщений от пользователя. Сложного в этом ничего нет, все так же просто, как и с командами. Просто нам нужно указать тип ожидаемого сообщения от пользователя.
Типов сообщений в pyTelegramBotAPI достаточно. Некоторые из них для примера «text, audio, document» и.т.д. Рассмотрим пример
def content_text ( message ) :
print ( ‘Боту отправили обычный текст’ )
def content_document ( message ) :
print ( ‘Боту отправили документ’ )
Как получить простое сообщение от пользователя.
Ранее я уже сказал что в «message» много интересного. Там же и находится сообщение которое напечатал пользователь боту. Прочитать его можно так.
def text ( message ) :
print ( message . text )
В консоль будет выведено сообщение от пользователя.
Как отправить простое сообщение пользователю.
Теперь разберёмся с тем, как отправить сообщение пользователю. Даже не смотря на то, что выше Вы уже видели, как это делается.
def text ( message ) :
if message . text == ‘hello’ :
bot . send_message ( message . chat . id , ‘И тебе hello’ )
Вызываем метод «send_message» и передаём ему собственно ID и текст сообщение. В данном примере происходит следующие: Если пользователь напишет «hello» то бот ему ответит «И тебе hello»
Как скачать и отправить стикер пользователю из Telegram бота
Как отправить Стикер
def text ( message ) :
if message . text == ‘sticker’ :
bot . send_sticker ( message . chat . id , ‘CAADAgADsQADWQMDAAEJK1niI56hlhYE’ )
Если пользователь боту пришлёт слово «sticker» то в ответ мы отправим ему свой стикер. За место send_message вызывается метод send_sticker также передаётся id и за место текста отправляется ID стикера. Все просто — стикер отправлен))
Как получить Стикер (Скачать на локальную машину)
Давайте скачаем на локальную машину файл стикера, который прислал пользователь боту.
def handle_docs_audio ( message ) :
# Получим ID Стикера
sticker_id = message . sticker . file _ id
# Нужно получить путь, где лежит файл стикера на Сервере Телеграмма
file_info = bot . get_file ( sticker_id )
# Теперь формируем ссылку и скачивам файл
urllib . request . urlretrieve ( f ‘http://api.telegram.org/file/bot/’ , file_info . file_path )
Собственно опять «message»! Пользователь отправляет нам стикер. Находим ID Стикера и отдаём его методу «get_file» что бы получить путь до файла на сервере телеграмма. А дальше скачаем файл в папку «stickers» которую нужно создать в том каталоге, где находится весь проект бота.
Как отправить и получить документ, аудио, видео, фото и.т.д
Продолжаем пилить telegram бот на python3 и на простом примере разберёмся, как отправлять файлы пользователям telegram бота.
Как отправить файл пользователю бота
Отправляем пользователю фотографию
def text ( message ) :
if message . text == ‘photo’ :
file = open ( ‘photo.png’ , ‘rb’ )
bot . send_photo ( message . chat . id , file )
За это отвечает метод «send_photo» Аналогично поступим и с другими типами файлов. Например нам нужно отправить документ «file.txt»
Отправляем пользователю документ
def text ( message ) :
if message . text == ‘document’ :
file = open ( ‘file.txt’ , ‘rb’ )
bot . send_document ( message . chat . id , file )
Тут мы уже используем метод «send_document» аналогично поступаем с другими типами файлов аудио, видео и прочие.
Как получить файл от пользователя
Все также как и со стикерами. В этом примере получим документ от пользователя и скачаем его себе на локалку.
def handle_docs_audio ( message ) :
file_info = bot . get_file ( document_id )
urllib . request . urlretrieve ( f ‘http://api.telegram.org/file/bot/’ , file_info . file_path )
Получим от пользователя музыку
def handle_docs_document ( message ) :
audio_id = message . audio . file_id
file_info = bot . get_file ( audio_id )
urllib . request . urlretrieve ( f ‘http://api.telegram.org/file/bot/’ , file_info . file_path )
Точно таким-же способом можно получить любой тип файла от пользователей и создать Telegram бот на Python для конвертации файлов или у кого на что фантазии хватает))
Время чтение: 6 минут 2020-08-31
- Instabot — модуль для Python, который реализует обертку над API Instagram
- Python-Cptchnet — Модуль для работы с API сервиса Cptch.net
- pyTelegramBotAPI Библиотека для создание Ботов Telegram
- ip2geotools модуль для определения местоположение по IP
- VK-API Библиотека для создания скриптов для социальной сети Вконтакте
- ТОПовый генератор паролей на Python 3
Помощь проекту
Если есть возможность — поддержать нас: будем очень признательны. Денежные средства пойдут на дальнейшее развитие проекта!
Источник: snippcode.ru
Документация к ptbot
ptbot — модуль для создания Telegram-ботов. Он умеет отправлять сообщения, редактировать ранее отправленные и реагировать на входящие сообщения от пользователя.
Основан на библиотеке python-telegram-bot , но это урезанная версия для того чтобы начать писать ботов не вникая в сложные концепции. Хорошо подойдёт для начала.
Как начать пользоваться?
Установите библиотеки
Вам понадобится библиотека python-telegram-bot . Установите её в Repl или на своё компьютер, смотря где вы программируете.
Скачайте код
Создайте файл с названием ptbot.py и положите рядом со своей программой.
Затем скопируйте в него этот код.
Создайте бота
Для запуска библиотеки нужно достать пару ключей доступа.
Прежде всего вам нужен API ключ от Telegram-бота. Его можно получить у Отца ботов. Введите команду /newbot в чате с ним и следуйте инструкциям.
Свяжитесь с ботом. Найдите его в Telegram и отправьте ему любое сообщение. Telegram требует, чтобы пользователь написал боту первым, чтобы боты не могли рассылать спам всем подряд.
Узнайте свой id в Telegram
Его вам скажет Бот-справочник. Он нужен чтобы подсказать боту как вас найти.
Отправьте первое сообщение
Скопируйте код и поменяйте значения TOKEN и CHAT_ID , запустите программу.
import ptbot TG_TOKEN = ‘958423683:AAEAtJ5Lde5YYfu8GldVhSGCAsxAYbzUIYg’ # подставьте свой ключ API TG_CHAT_ID = ‘228593533’ # подставьте свой ID bot = ptbot.Bot(TG_TOKEN) bot.send_message(TG_CHAT_ID, «Бот запущен»)
От бота в Telegram придёт сообщение:
Проблемы с установкой
При запуске кода вы можете столкнуться с проблемой NewConnectionError. Failed to establish a new connection . В консоли она выглядит так:
WARNING:telegram.vendor.ptb_urllib3.urllib3.connectionpool:Retrying (Retry(total=2, connect=None, read=None, redirect=None)) after connection broken by ‘NewConnectionError(‘: Failed to establish a new connection: [Errno 101] Network is unreachable’)’: /bot. /sendMessage
Такое случается если сервера Telegram заблокированы провайдером. Решается включением VPN. Браузерный VPN здесь не поможет, включите VPN сразу на всю операционную систему. Вот подборка из 10 лучших бесплатных VPN-сервисов.
Что умеет библиотека
Ниже описание всех методов бота. Не обязательно читать сверху вниз, пользуйтесь панелью навигации справа сверху.
Отправка сообщения
Вот как можно отправить пользователю сообщение с текстом “Моё сообщение”:
import ptbot bot = ptbot.Bot(«Мой токен») # подставьте свой ключ API bot.send_message(«Мой id чата», «Моё сообщение»)
Не забудьте заменить Мой токен и Мой id чата на свои, подробнее см. Отправьте первое сообщение.
Редактирование сообщения
Метод send_message возвращает id сообщения, только что отправленного пользователю. Зная id сообщения вы можете его редактировать. Как получить id :
message_id = bot.send_message(«Мой id чата», «Моё сообщение») print(‘ID сообщения’, message_id)
И вот как редактировать:
bot.update_message(«Мой id чата», message_id, «Новое сообщение»)
Запуск бота
Метод run_bot нужен для трёх других методов:
- Создание таймера
- Создание периодического таймера
- Ожидание сообщения пользователя
Метод run_bot ничего не возвращает. Он никогда не завершает своей работы. Метод вводит программу в “режим ожидания сообщений” и может работать вечно:
bot = ptbot.Bot(«Мой токен») bot.run_bot() print(«Эта строка кода никогда не запустится»)
Последняя строчка кода никогда не выведет на экран сообщение из-за этого “режима ожидания”.
Всегда вызывайте run_bot в конце своей программы.
Создание таймера
Метод create_timer() создаёт таймер, на несколько секунд. Этот метод не работает без метода run_bot.
Метод требует два аргумента:
- Сколько секунд ждать
- Функция-коллбэк, которая запустится через это количество секунд.
Самый простой вариант использования:
import ptbot def notify(): print(«Функция запустилась, но через 5 секунд!») bot = ptbot.Bot(«Мой токен») bot.create_timer(5, notify) bot.run_bot()
Когда вы запустите этот код, создастся таймер. Он подождёт 5 секунд и после этого запустит функцию notify : в консоль выведется “Функция запустилась!”.
Создание периодического таймера
Метод create_countdown() ведёт обратный отсчёт, каждую секунду запуская функцию-коллбэк. Этот метод не работает без метода run_bot.
Метод требует 2 аргумента:
- Сколько секунд повторять задачу
- Функция-коллбэк, которая будет запускаться каждую секунду, пока не выйдет время.
Функция-коллбэк должна принимать позиционный аргумент secs_left . В него передается число с количеством секунд, что осталось до конца отсчёта.
import ptbot def notify_progress(secs_left): print(«Осталось секунд:», secs_left) bot = ptbot.Bot(«Мой токен») bot.create_countdown(5, notify_progress) bot.run_bot()
Этот код каждую секунду будет печатать Осталось секунд: 5 в течение 5 секунд:
Ожидание сообщения пользователя
Метод reply_on_message() умеет отвечать на сообщения пользователей. Этот метод не работает без метода run_bot.
Просто передайте ему функцию и он будет вызывать её каждый раз, когда боту что-нибудь написали. Первым аргументом он передаст функции chat_id пользователя, который ему написал. Второй аргумент – текст сообщения от пользователя.
Благодаря chat_id вы можете писать сообщения не только себе, но и любому другому человеку, который напишет боту.
import ptbot def reply(chat_id, text): print(«Привет! Пользователь с ID <> написал мне: <>».format(chat_id, text)) bot = ptbot.Bot(«Мой токен») bot.reply_on_message(reply) bot.run_bot()
Если пользователь напишет боту Ты ждешь? , то тот выведет в треминал Привет! Ты написал мне: Ты ждешь? .
Внутри функции def reply(text): можно свободно дописывать любой код. Название у функции тоже можно менять. Вот несколько примеров:
def log_all_messages(chat_id, text): print(«Получил сообщение от пользователя <>: <>».format(chat_id, text)) bot = ptbot.Bot(«Мой токен») bot.reply_on_message(log_all_messages) bot.run_bot()
def say_hello(chat_id, text): message_id = bot.send_message(chat_id, «Привет! Я здесь, я работаю!») print(‘Я отправил сообщение #’, message_id) bot = ptbot.Bot(«Мой токен») bot.reply_on_message(say_hello) bot.run_bot()
Общение между методами
Методы могут передавать данные между собой. Например, вы хотите вывести сообщение пользователя в функции notify :
import ptbot def reply(chat_id, text): bot.create_timer(5, notify) def notify(): bot.send_message(chat_id, «Прошло 5 секунд!») bot = ptbot.Bot(TOKEN) bot.reply_on_message(reply) bot.run_bot()
Этот код выдаст ошибку, т.к. функция notify не может “украсть” переменную chat_id у функции reply . Но в ptbot есть решение для такого:
import ptbot def reply(chat_id, text): bot.create_timer(5, notify, chat_id=chat_id) def notify(chat_id): bot.send_message(chat_id, «Прошло 5 секунд!») bot = ptbot.Bot(TOKEN) bot.reply_on_message(reply) bot.run_bot()
Изменения произошли в двух местах:
-
Функция notify теперь требует аргумент chat_id :
def notify(chat_id):
bot.create_timer(5, notify, chat_id=chat_id)
Так же может делать и другой метод, create_countdown :
import ptbot def reply(chat_id, text): bot.create_countdown(5, notify, chat_id=chat_id) def notify(secs_left, chat_id): bot.send_message(chat_id, «Осталось <> секунд!».format(secs_left)) bot = ptbot.Bot(TOKEN) bot.reply_on_message(reply) bot.run_bot()
Попробуйте бесплатные уроки по Python
Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.
Переходите на страницу учебных модулей «Девмана» и выбирайте тему.
Источник: dvmn.org
Помощь
На данной странице мы собрали для Вас наиболее часто возникающие вопросы. Прочитали справку, но вопрос всё равно не решён? Обратитесь в нашу техподдержку или через форму обратной связи на сайте.
Общая справка
Подробнее
Наш бот позволяет находить информацию о том, в каких группах состоит пользователь. Поиск ведётся по собственным базам и может быть не полным. Не путайте группы с каналами.
Порядок пользования ботом:
Каждому новому пользователю даётся по умолчанию 3 запроса.
Чтобы найти информацию о пользователе, просто отправьте его ID, username, ссылку на сообщение в открытой группе, контакт или просто перешлите сообщение от него. Бот попытается найти их в своей базе и предложит вам выполнить поиск.
Вы можете заработать запросы. Для этого вы должны отправить боту ссылку на любую группу. Если группы всё ещё нету в нашей базе и в ней более 20 участников, вы получите 3 запроса.
Не нужно искать через бота пользователей по имени. Если у вас есть такая необходимость — пишите https://t.me/TeleSINT_help_bot.
Бот не осуществляет поиск по номеру телефона. Бот может лишь показать номер телефона пользователя, если он есть в нашей базе. Обратный поиск по номеру телефона работать не будет.
❓ Добавленные вами группы будут позже обрабатываться в ручном режиме.
❓ Если кого-то не находит, значит его пока что нету в нашей базе.
Чат — https://t.me/TeleSINT_chat
Техподдержка https://t.me/TeleSINT_help_bot
По всем вопросам писать https://t.me/TeleSINT_help_bot
О группах, каналах
Что такое группы?
Каналы в Telegram выступают в роли площадок для общения администратора с аудиторией. Каналы чаще всего используются для разещения новостных платформ. Подписчики в каналах не могут видеть других подписчиков. Пример канала — https://t.me/osint_club.
Что такое каналы?
Каналы в Telegram выступают в роли площадок для общения администратора с аудиторией. Каналы чаще всего используются для разещения новостных платформ. Подписчики в каналах не могут видеть других подписчиков. Пример канала — https://t.me/osint_club.
Что такое id пользователя?
Каждый пользователь при регистрации получает свой уникальный ID. Обычные пользователи по ID получить ничего не могут. Он нужен администраторам каналов, групп, ботов для взаимодействия со своими пользователями. ID пользователя постоянен и его нельзя поменять, сменив username, номер телефона или даже удалив аккаунт.
Как получить id?
Штатными средствами Telegram, увы, получить ID нельзя. Но это умеют делать некоторые боты, например, наш бот https://t.me/TeleSINT_bot. Он умеет работать со всеми типами данных пользователя Telegram. Кроме того, данной функцией обладают сторонние клиенты Telegram, такие как Bgram или Graph Messenger.
Что такое username?
Что такое URL сообщения?
Многие пользователи запрещают показывать инофрмацию о себе при пересылке сообщений. Чтобы узнать id пользователя, который оставил сообщение в ОТКРЫТОЙ группе, необходимо получить URL данного сообщения. Для этого нажмите на сообщение и выберите «Копировать ссылку». В результате вы получите ссылку формата «https://t.me/TeleSINT_chat/1.
‼️Обратите внимание, что после «t.me/» идёт URL группы. Ссылки формата «https://t.me/c/123/456», где после «t.me/» идёт «с/» приниматься НЕ БУДУТ!
Что такое «Контакты»?
Telegram имеет собестенную адресную книгу, которая заполняется либо вручную, либо путём импорта телефонных номеров из вашей адресной книги. При добавлении аккаунта в Telegram вы либо получите уведомление о том, что пользователь не присутствует в Telegram, либо вам откроется его реальный профиль в Telegram.
Что такое «Пересланное сообщение»?
Telegram позволяет пересылать сообщения от других пользователей/групп/каналов/ботов другим пользователям/группам/ботам. Такие сообщения несут в себе как текст сообщения, так и другую служебную информацию, которая содержит:
— Непосредственно текст сообщения.
— Информацию о пользователе(id, username, имя пользователя).
❗️Обратите внимание❗️
Пользователь может скрыть отображение части данных от других пользователей, тогда при переслыке сообщения другие пользователи не смогут перейти на аккаунт отправителя, а боты не смогут получить из сообщения никакую информацию, кроме имени отправителя и текста сообщения.
✅ Lifehack ✅
У этой функции есть полезное применение. Пересланное сообщение сохраняется «как есть» и в случае, если отправитель изменит или удалит оригинальное сообщение, пересланное останется нетронутым вне зависимости от того, имеются ли там вложения или нет. Рекомендуем всегда пересылать сообщения, когда существует вероятность его последующего изменения или удаления.
Запросы, премиум
Как получить запросы?
Если вы желаете получить запросы, воспользуйтесь соответствующим меню в нашем боте, после чего отправьте ему ссылку на открытую группу. Что такое группы вы можете ознакомиться в справке.
— Если группа, добавленная вами, имеет больше 20 пользователей и её всё еще нету в нашей базе, то вы получите 3 запроса.
— Чтобы не получить ошибку, сперва проверьте вашу ссылку. Не отправляйте боту ссылку на каналы, он их не примет.
Что даёт премиум?
Премиум-пользователи получают следующие функции:
— Полный безлимит на количество поисков пользователей в сутки!
— Поиск похожих групп;
— Режим невидимки с оповещением, если вас кто-то ищет;
— История смены имени и username;
— Отображение предполагаемого языка пользователя на основе его групп;
— Выгрузка групп в excel. Если участники скрыты — будут отображены архивные данные;
— Расширенная выгрузка групп с подробной информацией о каждом пользователе из нашей базы;
— Ваши запросы не записываются в нашу базу;
— Просмотр истории пробивов Вашего аккаунта. Вы сможете увидеть, кто и когда вас искал. Доступно для премиум-пользователей.
— Другие функции, недоступные обычным пользователям.
Это основной функционал, который может дополняться.
Как получить премиум?
Свежие записи
- Условия пользования сервисом
- Дорогие друзья, приветствуем всех!
Источник: telesint.xyz