Как сделать рассылку в телеграм боте python

Добавил пользователь Morpheus
Обновлено: 05.10.2024

Python отлично подходит для создания ботов Telegram, и чрезвычайно популярные Python Telegram Bot Framework делает это гораздо проще, позволяя вам по умолчанию создавать боты, которые проходят асинхронно, чтобы вы могли легко кодовые боты, которые могут общаться со многими пользователями одновременно.

Храните токен доступа где-то, поскольку нам понадобится, чтобы авторизовать наш бот.

Установка Python Telegram Bot Framework

Для создания бота мы будем использовать Python версию 3.7. Бота Python Telegram Bot совместима с Python 2.7 и выше.

Прежде чем мы доберемся до фактического кодирования, нам нужно будет установить бот Python Telegram Bot самый простой способ сделать это с:

Если вы предпочитаете использовать исходный код, вы можете найти проект на Github Отказ

Сейчас с установленной библиотекой Bot Bot Python Telegram.

Подключение бота к телеграмме

Первое, что вам нужно будет иметь, у него будет подключиться к боту и аутентифицироваться с API Telegram.

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

Поместите следующий код в файл Python и поместите ключ Bot Telegram, где указано в операторе обновления:

Если вы просто хотите попробовать его в своей онлайн-оболочке, используйте эту refl.it, я создал для вас. Это уже настроено, и все зависимости устанавливаются!

Упражнение : Получите свой токен API, загрузив телеграмму и следуя вышеуказанным простым инструкциям. Это займет вас 10 минут или меньше! 🙂 Затем запустите это своим собственным токеном API и общайтесь с собой!

Мы создали переменную Updater, и это будет держать обновленную для нашей телеграммы бота Telegram, которая помещается в глобальную переменную, чтобы мы могли легко получить доступ к нему позже от UI.

UPDATER обеспечивает легкий передний конец для работы с ботом и запустить наш новый бот с помощью Updater, нам просто нужно пройти в ключ аутентификации, и мы также передадим, чтобы избежать ошибок анонсов, поскольку контекстные обратные вызовы сейчас По умолчанию для Python Telegram Bot.

UPDATATER.START_POLLING () на самом деле запускает бот, и после этого будет пропущено в боте, начнут начать опрос телеграмму для любых обновлений чата по телеграмме. Бот начнет опрос в своих отдельных потоках, чтобы это не остановит ваш сценарий Python.

Мы используем команду UPDATER.IDLE () здесь, чтобы заблокировать скрипт, пока пользователь не отправит команду, чтобы вырваться из скрипта Python, такого как Ctrl-C в Windows.

Заставить бот понять команды

Давайте обновим сценарий и сделайте нашу функцию start_bot выглядеть так:

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

Обработчики команд требуют как обновление, так и параметр CallbackContext. Через обновление мы отправляем обновления в чате, здесь используя Update.message.reply_text автоматически добавляет ответ только на конкретный чат, где была отправлена команда/начала/начала.

Теперь при вводе в чате с ботом или набрав команду/начала, вы должны получить такой ответ:

Добавление более продвинутой команды, которая читает чат

Команда START выполняет функцию в нашем боте всякий раз, когда пользовательские типы/начала, но что, если мы хотим, чтобы наш бот читать и отвечать на чат, а не просто выполнять команду?

Ну, для этого мы используем другой тип обработчика, называемый MessageHandler.

Добавьте следующую строку в функцию start_bot под предыдущим утверждением add_handler:

Отказ от команды бота или на пользователя

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

К счастью, BOT Python Telegram позволяет нам хранить конкретные данные пользователя, используя контекст, который передается на наши функции обратного вызова. Давайте добавим еще один обработчик под обработчиком повторителя:

Теперь мы сначала изменим обработчик повторителя, чтобы проверить, следует ли повторять текст пользователя:

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

Теперь мы добавим в другую функцию, чтобы пользователь мог установить словарь ECHO с помощью команды echo в чате:

В этой функции обратного вызова мы собираем параметры дополнительных команд пользователей из контекста. Параметры пользователей содержатся с CONTEXT.ARGS, которые предоставляют массив на основе пробелов от пользователя, в этой функции мы проверяем первый параметр, передаваемый пользователем, ищем включение или выключение, и измените переменную user_data [echo].

Размещение данных из веб-сайтов и крепежных команд

Python Telegram Bot позволяет легко ответить с файлами из веб-сайта, таких как фотографии, видео и документы, вам просто нужно дать URL к указанному типу контента.

Мы будем использовать USCUBICK API, чтобы собрать бесплатное изображение на основе пользователей, предоставляемых условиями и опубликуйте его в чате, и мы также будем использовать фильтр, чтобы эта команда работает только для вашего имени пользователя.

Добавьте следующий код в функцию start_bot ():

Замените your_username с вашим именем пользователя.

Этот код будет выполнять функцию get_image, но только если имя пользователя соответствует вашим собственным. С помощью этого фильтра мы проходим только в 1 имени пользователя, но вы также можете пройти в список пользователей.

Теперь давайте создадим функцию Get_Image:

Как и в предыдущем примере, мы получаем термины, используя переменную args из контекста, но в этом случае мы объединяем условия вместе с A и преобразовываться в нижний регистр, потому что это то, что требуется от разбавления API.

Затем вы можете получить изображение в чате, используя/get_image и некоторые ключевые слова такие:

Добавление графического интерфейса

Во многих проектах на фрилансельных сайтах, таких как UPSCORK, клиент не заботится о том, какой язык используется для создания бота. Тем не менее, они часто хотят интерфейс для управления ботом, поэтому давайте создадим простой интерфейс, который позволяет владельцу бота начать и остановить бот.

Чтобы построить наш пользовательский интерфейс Мы будем использовать библиотеку Pysimplegui. С Pysimplegui вы можете создать перекрестную платформу GUI, которая работает на Windows, Mac и Linux без какого-либо исходного кода с легко читаемым синтаксисом и минимальным кодом для котла.

Чтобы начать добавление кода GUI Давайте сначала удалите строку UPDATER_IDLE () из нашей функции start_bot, поэтому функция start_bot читает так:

Сняв линию Updater.idle (), бот больше не приостанавливает скрипт после запуска и прогон в отдельной резьбе, пока не решили остановить бот или останавливаться основным потоком.

Теперь мы создадим графический интерфейс, этот графический интерфейс состоит из строки состояния, чтобы показать, включается ли бот в настоящее время вместе с началом и кнопкой остановки и название, как это:

Чтобы создать этот графический интерфейс, добавьте следующий код:

Теперь, чтобы запустить GUI Удалить оператор Start_bot () в нижней части нашего сценария и замените на GUI ():

В переменной макета вы можете видеть, что мы определили некоторые элементы текста и кнопки, и каждый элемент в списке отображается как строка в нашем интерфейсе UI. Наша первая строка состоит из 2 элементов, чтобы показать состояние (мы дали второй элемент ключ, чтобы мы могли легко обратиться к нему позже), а наша вторая строка состоит из трех кнопок.

Функция SG.Window – это то, где мы предоставляем наш заголовок и макет.

В то время как True: Loop – это стандартная петля событий Pysimplegui.

Функция Window.read () возвращает любые события GUI вместе с любыми значениями, передаваемыми вместе с событием (таким как текст ввода пользователя), мы не будем использовать какие-либо значения в нашей петле, поэтому мы передаем их в переменную, вы можете пройти Время ждать функции чтения Windows в миллисекундах, ничего не проезжая, поскольку мы сделаем, делает функцию ждать, пока событие не будет запущено.

Запуск и остановка бота из графического интерфейса

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

В нашем мероприятии начала мы запускаем бот, используя start_bot, если еще нет обновлений, в противном случае мы выполняем метод start_polling нашего Updater в виде повторного запуска обновлений таким образом, намного быстрее, чем использовать start_bot для инициализации бота.

Поворачивая кнопки графического интерфейса включения и выключения

Вы можете увидеть, что мы использовали метод findelement на кнопках здесь, а затем используя метод обновления, изменил переменную отключенную переменную, которая позволяет вам отключить кнопки.

Если вы начнете сейчас, вы увидите, что сначала обе кнопки включены, поэтому мы должны сделать небольшую модификацию на макет. Измените переменную макета к следующему:

Кнопки теперь должны включать и отключить соответствующим образом в графическом интерфейсе:

И там у нас есть, работающий графический интерфейс для нашей телеграммы бота.

Заключение

Мы узнали совсем немного в этом руководстве, и теперь вы можете иметь BOT Python Telegram, который отвечает командам, и даже представлены данные, показанные из Интернета.

Мы также создали простое интерфейс для запуска и остановки бота. С вашими новыми навыками вы теперь готовы ответить на эти потенциальные клиенты на фрилансских сайтах, которые ищут телеграмму бота.

об авторе

Johann – это фрилансер Python, специализирующийся на веб-ботах и веб-соскоб. Окончил с дипломом в компьютерных системах технологии 2009 года. Профиль на высоте.

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

Время переходить к делу и узнать наконец, как создавать ботов в Telegram.

Шаг №0: немного теории об API Telegram-ботов

Начать руководство стоит с простого вопроса: как создавать чат-ботов в Telegram?

Токен — уникальная строка из символов, которая нужна для того, чтобы установить подлинность бота в системе. Токен генерируется при создании бота. METHOD_NAME — это метод, например, getUpdates , sendMessage , getChat и так далее.

Токен выглядит приблизительно так:

Для выполнения запросов используются как GET, так и POST запросы. Многие методы требуют дополнительных параметров (методу sendMessage , например, нужно передать chat_id и текст). Эти параметры могут быть переданы как строка запроса URL, application/x-www-form-urlencoded и application-json (кроме загрузки файлов). Еще одно требование — кодировка UTF-8.

После отправки запроса к API, вы получаете ответ в формате JSON. Например, если извлечь данные с помощью метода getME , ответ будет такой:

Список всех типов данных и методов API Telegram-бота можно найти здесь (ENG) или с переводом здесь (ру) .

Есть два варианта.

Первый — вручную создавать запросы с помощью метода getUpdates . В качестве объекта вы получите массив объектов Update . Этот метод работает как технология длинных опросов (long polling), когда вы отправляете запрос, обрабатываете данные и начинаете повторяете процесс. Чтобы избежать повторной обработки одних и тех же данных рекомендуется использовать параметр offset .

Как выбрать оптимальный метод? Метод getUpdates лучше всего подходит, если:

Метод с Webhook лучше подойдет в таких случаях:

  1. Вы используете веб-языки (например, PHP).
  2. У бота низкая нагрузка, и нет смысла делать запросы вручную.
  3. Бот на постоянной основе интегрирован в веб-сервер.

В этом руководстве будет использоваться метод getUpdates .

Еще один вопрос: как создать зарегистрировать бота?

@BotFather используется для создания ботов в Telegram. Он также отвечает за базовую настройку (описание, фото профиля, встроенная поддержка и так далее).

Существует масса библиотек, которые облегчают процесс работы с API Telegram-бота. Вот некоторые из них:

По своей сути, все эти библиотеки — оболочки HTML-запросов. Большая часть из них написана с помощью принципов ООП. Типы данных Telegram Bot API представлены в виде классов.

В этом руководстве будет использоваться библиотека pyTelegramBotApi.

Шаг №1: реализовать запросы курсов валют

Весь код был проверен на версии Python==3.7 c использование библиотек:
pyTelegramBotAPI==3.6.6
pytz==2019.1
requests==2.7.0

Создадим файл pb.py со следующим кодом:

Были реализованы три метода:

  • load_exchange : загружает курсы валют по указанному URL-адресу и возвращает их в формате словаря(dict).
  • get_exchange : возвращает курсы валют по запрошенной валюте.
  • get_exchanges : возвращает список валют в соответствии с шаблоном (требуется для поиска валют во встроенных запросах).

Шаг №2: создать Telegram-бота с помощью @BotFather

Его нужно сразу настроить. Необходимо добавить описание и текст о боте (команды /setdescription и /setabouttext ), фото профиля ( /setuserpic ), включить встроенный режим ( /setinline ), добавить описания команд ( /setcommands ). Потребуется использовать две команды: /help и /exchange . Стоит описать их в /setcommands .

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

Шаг №3: настроить и запустить бота

Начнем с создания файла config.py для настройки:

Создадим файл bot.py . Нужно импортировать все необходимые библиотеки, файлы с настройками и предварительно созданный pb.py . Если каких-то библиотек не хватает, их можно установить с помощью pip .

Создадим бота с помощью библиотеки pyTelegramBotAPI. Для этого конструктору нужно передать токен:

Шаг №4: написать обработчик команды /start

Теперь чат-бот на Python работает и постоянно посылает запросы с помощью метода getUpdates . Параметр none_stop отвечает за то, чтобы запросы отправлялись, даже если API возвращает ошибку при выполнении метода.

Из переменной бота возможно вызывать любые методы API Telegram-бота.

Начнем с написания обработчика команды /start и добавим его перед строкой bot.polling(none_stop=True) :

Это было просто, не так ли?

Шаг №5: создать обработчик команды /help

Давайте оживим обработчик команды /help с помощью встроенной кнопки со ссылкой на ваш аккаунт в Telegram. Кнопку можно озаглавить “Message the developer”.

Как видно в примере выше, был использован дополнительный параметр ( reply_markup ) для метода send_message . Метод получил встроенную клавиатуру ( InlineKeyboardMarkup ) с одной кнопкой ( InlineKeyboardButton ) и следующим текстом: “Message the developer” и url='telegram.me/artiomtb' .

Код выше выглядит вот так:

обработчик команды /help

Шаг №6: добавить обработчик команды /exchange

Обработчик команды /exchange отображает меню выбора валюты и встроенную клавиатуру с 3 кнопками: USD, EUR и RUR (это валюты, поддерживаемые API банка).

Вот как работает InlineKeyboardButton . Когда пользователь нажимает на кнопку, вы получаете CallbackQuery (в параметре data содержится callback-data ) в getUpdates . Таким образом вы знаете, какую именно кнопку нажал пользователь, и как ее правильно обработать.

Вот как работает ответ /exchange:

обработчик команды /exchange

Шаг №7: написать обработчик для кнопок встроенной клавиатуры

В библиотеке pyTelegramBot Api есть декоратор @bot.callback_query_handler , который передает объект CallbackQuery во вложенную функцию.

Давайте реализуем метод get_ex_callback :

Все довольно просто.

Запишем в get_update_keyboard текущий курс валют в callback_data в форме JSON. JSON сжимается, потому что максимальный разрешенный размер файла равен 64 байтам.

Кнопка t значит тип, а e — обмен. Остальное выполнено по тому же принципу.

У кнопки Share есть параметр switch_inline_query . После нажатия кнопки пользователю будет предложено выбрать один из чатов, открыть этот чат и ввести имя бота и определенный запрос в поле ввода.

Методы serialize_ex и дополнительный serialize_exchange_diff нужны, чтобы показывать разницу между текущим и старыми курсами валют после нажатия кнопки Update .

Как видно, метод serialize_ex получает необязательный параметр diff . Ему будет передаваться разница между курсами обмена в формате . Это будет происходить во время сериализации после нажатия кнопки Update . Когда курсы валют отображаются первый раз, он нам не нужен.

Вот как будет выглядеть бот после нажатия кнопки USD:

отображение курса валют ботом

Шаг №8: реализовать обработчик кнопки обновления

Теперь можно создать обработчик кнопки Update . После дополнения метода iq_callback_method он будет выглядеть следующим образом:

Если данные обратного вызова начинаются с get- ( get-USD , get-EUR и так далее), тогда нужно вызывать get_ex_callback , как раньше. В противном случае стоит попробовать разобрать строку JSON и получить ее ключ t . Если его значение равно u , тогда нужно вызвать метод edit_message_callback . Реализуем это:

Как это работает? Очень просто:

Метод get_ex_from_iq_data разбирает JSON из callback_data :

Метод get_exchange_diff получает старое и текущее значение курсов валют и возвращает разницу в формате :

get_edited_signature генерирует текст “Updated…”:

отображение курса валют ботом

И вот так — если изменились:

обновление курса валют ботом

Шаг №9: реализовать встроенный режим

Реализация встроенного режима значит, что если пользователь введет @ + имя бота в любом чате, это активирует поиск введенного текста и выведет результаты. После нажатия на один из них бот отправит результат от вашего имени (с пометкой “via bot”).

Обработчик встроенных запросов реализован.

Библиотека передаст объект InlineQuery в функцию query_text . Внутри используется функция answer_line , которая должна получить inline_query_id и массив объектов (результаты поиска).

Используем get_exchanges для поиска нескольких валют, подходящих под запрос. Нужно передать этот массив методу get_iq_articles , который вернет массив из InlineQueryResultArticle :

Теперь при вводе “@exchangetestbost + пробел” вы увидите следующее:

инлайн режим бота

Попробуем набрать usd, и результат мгновенно отфильтруется:

инлайн режим бота: ввод параметра

Проверим предложенный результат:

инлайн режим бота: результат

Кнопка “Update” тоже работает:

инлайн режим бота: работа

Отличная работа! Вы реализовали встроенный режим!

Выводы

Имеется бот, в котором реализована форма регистрации и сохранения пользователей в БД(MySQL), есть user_id в котором сохраняется id пользователя. Задача в том, чтобы сделать рассылку всем пользователям бота. Не могу разобраться как это сделать. user_id == chat_id не работает или же не так что то сам сделал. Спасибо за Ваше внимание


Было бы неплохо увидеть код. Попробуйте для начала загрузить данные с базы в список потом пройдись циклом. в декораторе соединения поставьте свои данные

Попробуйте сохранить user_id в список. После чего пройтись по всем user_id и выполнить send_message


Постинг в канал telegram с помощью python или бот telegram в 3 строчки

Команды и оповещения @BotFather в Telegram.

Для создания нового бота необходимо использовать команду /newbot . @BotFather запросит имя бота и имя пользователя бота (логин), а затем сгенерирует токен авторизации для вашего нового бота.

Имя бота отображается в контактных данных и в других местах.

Имя пользователя бота — это логин бота и представляет из себя короткое имя, которое будет использоваться в упоминаниях и ссылках на t.me . Обратите внимание, что в дальнейшем имя пользователя изменить нельзя! Имена пользователей (логины) состоят из 5–32 символов и нечувствительны к регистру, и могут включать только латинские символы, числа и символы подчеркивания. Имя пользователя бота должно заканчиваться на bot , например tetris_bot или TetrisBot .

Токен представляет собой строку типа 110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw , которая требуется для авторизации бота и отправки запросов в API бота. Держите свой токен в безопасности и храните его, он может быть использован кем угодно для управления вашим ботом.

Пересоздание токена авторизации Telegram бота.

Если существующий токен скомпрометирован или был утерян по какой-либо причине, то используйте команду /token для создания нового.

Команды @BotFather

  • /mybots — возвращает список ваших ботов с удобными элементами управления для редактирования их настроек.
  • /mygames — делает то же самое для ваших игр
Команды редактирования Telegram бота:
Команды изменения настроек Telegram бота.
Команды управления играми.
  • /newgame — создать новую игру.
  • /listgames — получить список ваших игр.
  • /editgame — редактировать игру.
  • /deletegame — удалить существующую игру.

Обратите внимание, что изменения вступят в силу не сразу, а через несколько минут.

Ограничения и предупреждения о статусе Telegram бота.

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

Ответы на предупреждения.

По умолчанию вы будете получать только одно предупреждение на одного бота в час. Каждое предупреждение имеет следующие кнопки:

Отслеживаемые проблемы Telegram бота.

В настоящее время Telegram будет уведомлять о следующих проблемах:

Too few private messages are sent compared to previous weeks: .

Too few replies to incoming private messages. Conversion rate: .

Too few answers to inline queries. Conversion rate: .

Бот не отвечает на все встроенные запросы, которые ему посылаются, рассчитанные таким же образом, как и выше. Отвечайте на обновления inline_query , вызывая answerInlineQuery .

Too few answers to callback queries. Conversion rate: или Too few answers to callback game queries. Conversion rate: .

Обратите внимание, что функция оповещения о состоянии все еще тестируется и будет улучшена в будущем.


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

В этом уроке мы будем использовать Python 3, библиотеку python-telegram-bot и публичный API RandomDog.

В конце урока у вас будет свой бот для снятия стресса, который будет присылать вам милых пёсиков, когда захотите.

Перед тем как писать программу, нам нужно сгенерировать токен для нашего бота. Токен понадобится для доступа к API Telegram’а, и установки необходимых зависимостей.

1. Создаём нового бота в BotFather

Если вы задумали со з давать бота для Telegram, сначала его нужно зарегистрировать, перед тем как использовать. Когда вы регистрируете бота, вы получаете токен для доступа к API Telegram’а

2. Устанавливаем библиотеку

Команда для установки библиотеки:

Если всё прошло гладко, то можно двигаться дальше.

Наш бот должен возвращать изображение с пёсиком, когда мы отправляем команду /bop . Генерировать случайные изображения, нам поможет публичным API от RandomDog.

Рабочий процесс нашего бота очень прост:

1. Импорт библиотек

Для начала импортируем все нужные библиотеки.

2. Доступ к API и получение URL изображения

Давайте создадим функцию для получения URL. Используя библиотеку запросов, мы можем обратится к API и получить json данные.

Оформим этот код в виде функции get_url() .

3. Отправляем картинку

Получить URL изображения можно вызвав функцию get_url() .

Чтобы получить ID получателя, используйте этот код:

Оберните код в функцию bop и убедитесь, что код выглядит следующим образом:

4. Основная программа

И наконец, создайте ещё одну функцию с именем main , чтобы запускать программу. Не забудьте заменить YOUR_TOKEN на токен, который вы сгенерировали ранее.

В итоге, ваш код должен выглядеть вот так:

5. Запуск программы

Отлично! Мы почти закончили. Давайте проверим работу программы. Сохраните файл и назовите его main.py . Теперь её можно запускать, командой:


Отлично! Теперь у вас есть работающий бот.

Есть ещё кое-что. API RandomDog генерирует не только изображения, но ещё видео и гифки. Мы не сможем получить видео или GIF от API, потому что произойдёт ошибка.

Давайте это исправим, чтобы бот отправлял нам только изображения. Если нам попадётся видео или GIF, мы снова будем вызывать API, пока не получим изображение.

1. Проверяем расширение файла с помощью регулярного выражения

Чтобы решить эту проблемы, мы будем использовать регулярное выражение.

Отличить изображение от видео или GIF, можно по расширению файла. Нам понадобится последняя часть URL.

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

Затем использовать регулярное выражение, чтобы извлечь расширение файла из URL.

Создайте функцию get_image_url() , используя этот код. Она будет перебирать URL, пока вы не получите файл с подходящим расширением (jpg, jpeg, png).

2. Модифицируем код

Отлично! Теперь нам осталось заменить строку url = get_url() в функции bop() на url = get_image_url() . Ваш код должен выглядеть так:

Всё должно работать идеально. Этот код можно найти на моём GitHub.

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

Читайте также: