Как отправить стикер в Телеграмме бот python

Содержание

В разделе рассмотрены примеры сниппетов, для работы с файлами, медиа и URL-адресами при создании Telegram бота с помощью пакета python-telegram-bot .

Внимание! Пакеты python-telegram-bot версии 13.x будут придерживаться многопоточной парадигмы программирования (*на данный момент актуальна версия 13.15). Пакеты версий 20.x и новее предоставляют чистый асинхронный Python интерфейс для Telegram Bot API. Дополнительно смотрите основные изменения в пакете python-telegram-bot версии 20.x.

Здесь рассматривается методы экземпляра bot = telegram.Bot() . Если при создании бота используется пакет расширения telegram.ext , то методы объекта bot будут доступны через:

  • updater.bot — это экземпляр telegram.Bot , связанный с экземпляром Updater , который присылает и отправляет все сообщения;
  • в функции обратного вызова через контекст context.bot — это telegram.Bot связанный с контекстом обработанного сообщения.

from telegram.ext import Updater, CommandHandler TOKEN = ‘Замените строку на Ваш token’ updater = Updater(token=TOKEN) dispatcher = updater.dispatcher # экземпляр `telegram.Bot`, связанный с экземпляром `Updater` updater.bot.send_photo(. ) # методы `telegram.Bot` доступны через `context` def call_back(update, context): . # `telegram.Bot` связанный с контекстом # обработанного сообщения context.bot.send_photo(. ) . dispatcher.add_handler(CommandHandler(«you_command», call_back))

Публикация файлов, media и URL-адресов в Telegram.

Если нужно отправить файл, например, отправить фото, то для этого есть три метода:

ОТПРАВКА СТИКЕРОВ И ИХ ID # Урок 5 — AIOGRAM (для чайников) — ПРОГРАММИРОВАНИЕ ПО ПЛЕЙЛИСТАМ

  • Загрузить файл в Telegram.
  • Отправить HTTP-ссылку, ведущую к файлу
  • Отправить file_id уже отправленного файла.

Обратите внимание, что не каждый метод поддерживается везде (например, для thumbnails нельзя передать file_id ).

Смотрим, как можно отправить документ.

  1. Загрузка файла в Telegram:

bot.send_document(chat_id=chat_id, document=open(‘tests/test.png’, ‘rb’))
bot.send_document(chat_id=chat_id, document=’https://site.ru/static/test.gif’))
bot.send_document(chat_id=chat_id, document=file_id))

  • У каждого бота есть свои собственные идентификаторы файлов, т.е. вы не можете использовать идентификатор файла от другого бота для отправки фотографии
  • Как получить fileid фотографии, которую вы отправили? Прочтите его из возвращаемого значения bot.senddocument (или любого другого объекта Message, который вы получите):

message = bot.send_document(. ) file_id = message.document.file_id

Примечание. Метод bot.send_document используется для отправки файлов любого типа. В настоящее время боты могут отправлять файлы любого типа размером до 50 МБ, это ограничение может быть изменено в будущем. Аргументом document может быть либо file_id , либо URL-адрес, либо файл с диска открытый как open(file_name, ‘rb’) . Отправка по URL в настоящее время работает только с файлами GIF, PDF и ZIP.

Создание Telegram бота с нуля Урок 4 Кнопки, Стикеры, Смайлики

Это почти так же работает для всех других методов send_media_type , таких как bot.send_photo() , bot.send_video() и т. д.

Далее рассматриваются другие распространенные примеры кода. Обратите внимание на то, что подход к публикации файлов почти одинаков, НО методы экземпляра bot разные!

Опубликовать файл изображения с диска в Telegram.

bot.send_photo(chat_id=chat_id, photo=open(‘tests/test.png’, ‘rb’))

Опубликовать фото с URL-адреса в Telegram.

bot.send_photo(chat_id=chat_id, photo=’https://telegram.org/img/t_logo.png’)

Опубликовать голосовой файл с диска в Telegram.

bot.send_voice(chat_id=chat_id, voice=open(‘tests/telegram.ogg’, ‘rb’))

Опубликовать аудио файл с диска в Telegram.

bot.send_audio(chat_id=chat_id, audio=open(‘tests/test.mp3’, ‘rb’))

Опубликовать документ или архив с диска в Telegram.

bot.send_document(chat_id=chat_id, document=open(‘tests/test.zip’, ‘rb’))

Опубликовать гифку в Telegram.

Используйте этот метод для отправки файлов анимации (видео в формате GIF или H.264/MPEG-4 AVC без звука). В настоящее время боты могут отправлять файлы анимации размером до 50 МБ, это ограничение может быть изменено в будущем.

Еще по теме:  Как открыть заблокированный Телеграмм канал на iPhone

bot.send_animation(chat_id=chat_id, document=open(‘tests/animation.gif’, ‘rb’))

Опубликовать медиа-группу из фото, расположенных в URL-адресах:

Используйте этот метод для отправки группы фотографий или видео в виде альбома.

from telegram import InputMediaPhoto list_of_urls = [ ‘https://example.org/commons/foto1.jpg’, ‘https://example.org/commons/foto2.jpg’, ‘https://example.org/commons/foto3.jpg’ ] # список мультимедиа media_group = [] for number, url in enumerate(list_of_urls): media_group.append(InputMediaPhoto(media=url, caption=»Фотография №» + number)) bot.send_media_group(chat_id=chat_id, media=media_group)

Примечание Элементы в списке мультимедиа media_group обязательно должны быть экземплярами InputMediaAudio , InputMediaDocument , InputMediaPhoto или InputMediaVideo .

Редактирование файла, отправленного в Telegram.

Если файл отправлен, то можно его отредактировать. Это работает аналогично send_media_group , т. е. медиаданные должны быть заключены в объект InputMedia . Опять же, с документом в качестве примера:

bot.edit_message_media(chat_id=chat_id, message_id=message_id, media=InputMediaDocument(media=open(‘tests/test.png’), . ))

Ознакомьтесь с ограничениями на редактирование мультимедиа в документах send_media_group .

Выложить изображение прочитанное в оперативную память:

В этом примере изображение является объектом изображения модуля Pillow , но оно работает одинаково со всеми типами мультимедиа.

from io import BytesIO bio = BytesIO() bio.name = ‘image.jpeg’ image.save(bio, ‘JPEG’) bio.seek(0) bot.send_photo(chat_id, photo=bio)

Получить изображение с размерами, максимально приближенными к желаемому размеру:

Где photos — это список объектов PhotoSize , а desired_size — кортеж, содержащий нужный размер.

def get_closest(photos, desired_size): def diff(p): return p.width — desired_size[0], p.height — desired_size[1] def norm(t): return abs(t[0] + t[1] * 1j) return min(photos, key=lambda p: norm(diff(p)))

Загрузка файлов из Telegram сообщений.

Примечание. При загрузке фотографий имейте в виду, что update.message.photo — это массив фотографий разных размеров (упорядоченный от самого малого к большому).

Используйте update.message.photo[-1] , чтобы получить самый большой размер.

file_id = message.voice.file_id newFile = bot.get_file(file_id) newFile.download(‘voice.ogg’)

Кроме того, приведенный выше фрагмент можно сократить, используя встроенные ссылки:

newFile = message.effective_attachment.get_file() newFile.download(‘file_name’)

message.efficient_attachment автоматически содержит любое мультимедийное вложение, которое есть в сообщении — в случае фотографии снова придется использовать, например: message.efficient_attachment[-1].get_file() .

Источник: docs-python.ru

Делаем простого бота в Telegram на Python. Интеграция с Excel

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

Краткое описание бота

Наш бот будет создан на тематику Белого движения в гражданской войне в России (1917-1922) /сегодня разговор не о политике. Это просто пример/

  • По команде /start бот будет приветствие и посылать стикер;
  • После приветствия появится клавиатура под строкой набора сообщений с двумя кнопками «Вывести случайную цитату белогвардейца» и «Литература»
  • Нажатие на первую кнопку выведет рандомную цитату из excel файла (такое извращение нужно для подготовки к будущему проекту)
  • Нажатие на кнопку «Литература» выдаст инлайновую клавиатуру (далее будет прояснение, для тех кто не понял что это) с названиями произведений белогвардейских авторов или о белогвардейцах.После нажатия клавиатура пропадёт (просто этим навыком, думаю, необходимо обладать), начнётся загрузка pdf файла и появится оповещение «Приятного чтения!»

Вот такой простенький бот у нас по выйдет.

Начало. Создание бота и добавление библиотек.

Для начала добавим библиотеку pyTelegramBotAPI обычным пипом в cmd.

pip install pyTelegramBotAPI
pip install xlrd

Время импортировать все необходимые библиотеки.

import telebot #импорт pyTelegramBotAPI from telebot import types #также достанем типы import random #рандом обязательно import xlrd #библиотка чтения экселевских файлов

Далее нужно создать самого бота в телеграме. Для этого пройдёмся по следующим шагам:

После этих шагов батя пришлёт нам ссылку на нашёго бота и его API.

Еще по теме:  В чем фишка Telegram

Нужно скопировать всю строку, которая на скрине закрыта красным прямоугольником

Если коротко, то API — это контракт, который предоставляет программа. «Ко мне можно обращаться так и так, я обязуюсь делать то и это».
(Более подробная инфа тут API)

Кодим

Раз библиотеки уже добавили, значит создаём переменную, определяющую бота с помощью API.

bot = telebot.TeleBot(«TOKEN»)

В начале, при написании команды /start, бот у нас выдаст приветствие. Соответственно, вставляем декоратор обработчика сообщений.

Если кто не знает что такое декораторы, то есть достаточно подробная статья, рекомендую ознакомиться.

Коротко: Декораторы — это, по сути, просто своеобразные «обёртки», которые дают нам возможность делать что-либо до и после того, что сделает декорируемая функция, не изменяя её.

Теперь наш бот понимает команду /start, но ещё ничего не делает. Создаём функцию приветственного сообщения.

Пробежимся по коду

Строкой stic = open(‘stic/welcome.webp’, ‘rb’) мы записываем в переменную путь к нашему стикеру в формате .webp (скачать его можно из сообщений телеграма правой кнопкой мыши, «сохранить как»)

Ниже происходит создание клавиатуры
markup = types.ReplyKeyboardMarkup(resize_keyboard=True) , а точнее запись в переменную подстрочной клавиатуры. Параметр resize_keyboard=True подгоняет кнопки по высоте до возможного минимума. Также создаём две кнопочки и добавляем в клавиатуру:

but1 = types.KeyboardButton(«Вывести случайную цитату белогвардейца») but2 = types.KeyboardButton(«Литература») markup.add(but1, but2)

Клавиатура готова, но пока не используется. Пока оставим её и переключимся на сообщение. Одной строкой мы указываем боту отправить сообщение с текстом, именем отправителя ( , а вытягивает его он из .format(message.from_user) мы можем дописать .format(message.from_user, bot.get_me()) и вызвать имя бота, добавив в текст ), правилом оформления parse_mode=’html’ ( также можно выбрать ‘markdown’) и определением клавиатуры, которую создали выше.

bot.reply_to(message, «Здравствуй, nСмотрю, ты за Единую, Великую и Недилимую».format(message.from_user) ,parse_mode=’html’,reply_markup=markup)

Последней строкой отправляем стикер bot.send_sticker(message.chat.id,stic)

Приветственное сообщение и клавиатура

Время дать возможность боту коммуницировать

Букв много, но сейчас всё раскидаем. Берём знакомый декоратор и делаем проверку лямбдой сообщение. Если не в курсе что такое лямбда-функция, то сюда. Бот у нас работает через личные сообщения, поэтому пропишем if message.chat.type == ‘private’: , если требуется, то можете указать условия для “group”, “supergroup” или “channel” , но нам это не нужно.

Далее идёт строка с текстом. ВАЖНО текст должен совпадать с названием кнопки клавиатуры, которую указывали выше.

Далее определяем диапазон заполненных строк в листе и записываем их количество в rownum . Используем эту переменную как верхнюю границу до которой может сгенерироваться случайное число rand = int(random.randint(0,rownum)) . Получив ячейку, вытаскиваем из неё значение row = sheet.row_values(rand) отправляем его bot.send_message(message.chat.id, row) .

Вышло как-то так

Для литературы будем использовать инлайновую клавиатуру.

elif message.text == «Литература»: #инлайновая клавиатура inMurkup = types.InlineKeyboardMarkup(row_width=1) but1 = types.InlineKeyboardButton(«И.Ф. Плотников — Александр Васильевич Колчак. Исследователь, адмирал, Верховный правитель России», callback_data=’book1′) but2 = types.InlineKeyboardButton(«А.В. Туркул — Дроздовцы в огне», callback_data=’book2′) but3 = types.InlineKeyboardButton(«П.Н. Врангель — Записки», callback_data=’book3′) but4 = types.InlineKeyboardButton(«М.Г.

Дроздовский — Дневник», callback_data=’book4′) inMurkup.add(but1, but2, but3, but4) bot.send_message(message.chat.id, «Книги на любой вкус», reply_markup=inMurkup)

Определяем клавиатуру inMurkup = types.InlineKeyboardMarkup(row_width=1) параметр row_width=1 говорит о том, что на одной строке будет одна кнопка. Принцип кнопок создания такой же как и у обычной клавиатуры, но появляется параметр callback_data значения которого примет бот после нажатия на кнопку и поймёт что нужно сделать (далле это всё опишем).

Последней строкой отправляем сообщение и цепляем к нему инлайновую клавиатуру.

Работа с callback_data

мы создаём переменную doc в которую «суём» pdf файл, который сохранили в папку «boo» заранее.

Теперь строкой bot.send_document(call.message.chat.id, doc) отправляем файл в чат.

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

Вызываем функцию bot.edit_message_text По тексту определяется сообщение и
в параметр, который мы использовали для добавления клавиатуры — reply_markup вносим значение None .

Еще по теме:  Как в Телеграмм сделать звуковое оповещение сообщений

Уведомление призывается заклинанием

Параметр show_alert отвечает за вид оповещения (False — простое временное уведомление, True — уведомление с кнопкой «Ок»)

1 — False, 2 — True

Завершаем эту ступень кода конструкцией проверки исключений (ошибок).

except Exception as e: print(repr(e))
bot.polling(none_stop=True)

Именно этой командой и закончим наш код. Теперь бот постоянно проверяет не написал ли ему кто.

В итоге получился такой код:

Пара слов от автора

Если есть желание показать друзьям что наворотили, то запускайте код и всё будет работать, но если код остановить или выключить комп, то бот ничего выдавать не будет. Из этого выходит, что для полноценного бота просто необходим хостинг, что, как правило, платно.

Больше функций, параметров и всего прочего находится в документации. Справочник на русском. Библиотеки pyTelegramBotAPI и xlrd.

Огромное спасибо за прочтение статьи! Надеюсь она оказалась полезной. А если понравилась, то поднимай статью в рейтинге и оставляй комменты)

Приглашаю прочесть мои статьи:

Автор обитает тут: ВК, Инстаграм

Источник: habr.com

Пишем telegram-бота на python с помощью библиотеки telebot часть 1

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

Установка и настройка

Для начала давайте скачаем сам python. Сделать это можно на официальном сайте . Не забудьте поставить галочку add to PATH во время установки! После установки python’a нам понадобится хороший редактор кода. На помощь приходит компания JetBrains со своим бесплатным PyCharm . Мы уже близко, осталось скачать библиотеку telebot. Для этого заходим в командную строку и пишем:

Если всё прошло успешно, мы можем продолжать!

VPN

Думаю все знают о блокировки telegram в России и единственным решением как всегда остаётся vpn. Лично я рекомендую Windscribe , т.к. вам дают 2 гб. трафика совершенно бесплатно!

Bot Father

В поиске telegram находим Bot Farher’a и создаем своего бота с помощью команды /newbot. Затем вводим имя и юзернейм. Обратите внимание, что юзернейм должен оканчиваться на bot!

Как вы видите нам выдали специальный api токен, с помощью которого вы сможете управлять своим ботом (в моём случае это: 776550937:AAELEr0c3H6dM-9QnlDD-0Q0Fcd65pPyAiM ). Свой токен Вы можете запомнить, но я рекомендую его записать.

Код

Настал момент, которого ждали все. Открываем PyCharm и создаем новый проект.

Тут рекомендую поставить всё как у меня (название, конечно можно изменить). После создания проекта, давайте создадим файл, в котором будет наш код. Кликните правой кнопкой по папке с вашем проектом, затем New → Python File. Отлично, начнем писать код. Импортируем библиотеку telebot, с помощью:

import telebot

Теперь нужно создать переменную bot. На самом деле имя переменной может быть каким угодно, но я привык писать bot.

bot = telebot.TeleBot(‘ваш токен’)

Напишем декоратор bot .message_handler(), с помощью которого наш бот будет реагировать на команду /start. Для этого в круглых скобках пишем commands=[‘start’]. В итоге у нас должно получиться это:

Если Вы попробуете запустить своего бота (ПКМ->Run), то у вас ничего не выйдет. Во первых в конце кода мы должны прописать bot.polling(). Это нужно для того, чтобы бот не выключился сразу, а работал и проверял, нет ли на сервере нового сообщения. А во вторых наш бот если уж и будет проверять наличие сообщений, то всё равно ничего ответить не сможет. Пора это исправлять!

После нашего декоратора создаем функцию start_message, которая будет принимать параметр message (название функции может быть любым). Далее давайте реализуем отправку сообщения от самого бота. В функции пропишем bot.send_message(message.chat.id, ‘Привет, ты написал мне /start’). Смотрите, что у Вас должно получиться:

bot = telebot.TeleBot(‘776550937:AAELEr0c3H6dM-9QnlDD-0Q0Fcd65pPyAiM’)

Источник: dzen.ru

Рейтинг
( Пока оценок нет )
Загрузка ...