Лайфхаки

Маленькие, полезные хитрости

Телеграм бот на python с использованием только requests. Как насчет создания первого Telegram бота?

06.07.2023 в 04:11

Телеграм бот на python с использованием только requests. Как насчет создания первого Telegram бота?

Прежде всего, зарегистрируйтесь. Рекомендую использовать. Откройте кроссплатформенный мессенджер, найдите @BotFather и запустите чат. Отправьте в сообщении /newbot и следуйте инструкциям. После завершения начальных шагов вы получите:

На момент создания бот 100% пассивен. Вам нужно инициализировать разговор. Для этого откройте поиск и введите имя своего бота, а после начните разговор, нажав /start . Введите что-то вроде «Hello». Это сообщение важно, поскольку это первое обновление, которое получит ваш бот.

Creating Your First Telegram Bot with Python using only requests

Before we dive into the code, you need to register your bot. I recommend using the official Telegram bot, @BotFather. Open a cross-platform messenger, find @BotFather, and start a chat. Send the message `/newbot` and follow the instructions. After completing the initial setup, you will receive:

On moment of creation, your bot is 100% passive. You need to initialize the conversation.

Open the search and type in the name of your bot, and then start the conversation by typing `/start`. Enter something like "Hello". This message is important, as it will be the first update your bot receives.

Now, let's move on to the Python code. We will use the `requests` library to interact with the Telegram API.

import requests TOKEN = 'YOUR_BOT_TOKEN' def send_message(chat_id, text): url = f'https://api.telegram.org/bot{TOKEN}/sendMessage' data = {'chat_id': chat_id, 'text': text} response = requests.post(url, json=data) return response.json() def main(): chat_id = 'YOUR_CHAT_ID' text = 'Hello, world!' send_message(chat_id, text) if __name__ == '__main__': main()

Replace `YOUR_BOT_TOKEN` with your bot's token, and `YOUR_CHAT_ID` with the chat ID where you want to send the message. Run the code, and your bot will send the message to the specified chat.

Telegram bot отправка файлов python. Отправка файлов ¶

Помимо обычных текстовых сообщений Telegram позволяет обмениваться медиафайлами различных типов: фото, file_idиfile_unique_id. Первый можно использовать для повторной отправки одного и того же файла много раз, причём отправка будет мгновенной, т.к. сам файл уже лежит на серверах Telegram. Это самый предпочтительный способ.
К примеру, следующий код заставит бота моментально ответить пользователю той же гифкой, что была прислана:

Всегда используйте правильные file_id!

Бот должен использовать для отправки только теfile_id, которые получил напрямую сам, например, в личке от пользователя или «увидев» медиафайл в группе/канале. При этом, если попытаться использоватьfile_idот другого бота, то это , но через какое-то время вы получите ошибку . Поэтому — только свои!

В отличие отfile_id, идентификаторfile_unique_idнельзя использовать для повторной отправки или скачивания медиафайла, но зато он одинаковый у всех ботов для конкретного медиа. Нуженfile_unique_idобычно тогда, когда нескольким ботам требуется знать, что их собственныеодносятся к одному и тому же файлу.

Если файл ещё не существует на сервере Telegram, бот может загрузить его тремя различными способами: как файл в файловой системе, по ссылке и напрямую набор байтов. Для ускорения отправки и в целом для более бережного отношения к серверам мессенджера, загрузку (upload) файлов Telegram правильнее производить один раз, а в дальнейшем использоватьfile_id, который будет доступен после первой загрузки медиа.

В aiogram 3.x присутствуют 3 класса для отправки изображений -FSInputFile,,, с ними можно ознакомится в .

Готовый чат-бот на python. Поиск ближайших соседей


В предыдущих разделах мы закачали в python корпус диалогов, векторизовали его, и сократили размерность, а теперь хотим наконец научиться искать в нашем 300-мерном пространстве ближайших соседей и наконец-то осмысленно отвечать на вопросы.Поскольку научились отображать вопросы в Евклидово пространство не очень высокой размерности, поиск соседей в нём можно осуществлять довольно быстро. Мы воспользуемся уже готовым алгоритмом поиска соседей. Но мы напишем свою модель-обёртку, которая выбирала бы одного из k ближайших соседей, причём чем ближе сосед, тем выше вероятность его выбора. Ибо брать всегда одного самого близкого соседа — скучно, но не завязываться на сходство совсем — опасно.Поэтому мы хотим превратить найденные расстояния от запроса до текстов-эталонов в вероятности выбора этих текстов. Для этого можно использовать функцию softmax, которая ещё часто стоит на выходе из нейросетей. Она превращает свои аргументы в набор неотрицательных чисел, сумма которых равна 1 — как раз то, что нам нужно. Дальше полученные «вероятности» мы можем использовать для случайного выбора ответа.Фразы, которые будет вводить пользователь, надо пропускать через все три алгоритма — векторизатор, метод главных компонент, и алгоритм выбора ответа. Чтобы писать меньше кода, можно связать их в единую цепочку (pipeline), применяющую алгоритмы последовательно.В результате мы получили алгоритм, который по вопросу пользователя способен найти похожий на него вопрос и выдать ответ на него. И иногда это ответы даже звучат почти осмысленно.

Python-telegram bot get photo. Как получить фото от пользователя через pyTelegramBotAPI?

Здравствуйте.
Пытаюсь добиться такой логики от бота Телеграм (использую десктоп версию клиента):

  1. Бот пишет просьбу отправить фото
  2. Пользователь отправляет фото (как с группировкой, так и без группировки)
  3. Бот получает все фото, отправленные пользователем
  4. Только после принятия всех фото, бот отправляет сообщение об успешной операции и передаёт управление следующей функции.
Мой код:

import telebot bot_token = '1279****77:AAHJDPFJ************KJfLbiI' bot = telebot.TeleBot(bot_token, parse_mode='html') photo_list = @bot.message_handler(commands=) def send_welcome(message): send = bot.send_message(message.from_user.id, 'Send your pics…') bot.register_next_step_handler(send, get_user_pics) return @bot.message_handler(content_types=) def get_user_pics(message): if message.photo.file_id not in photo_list: photo_list.append(message.photo.file_id) if len(photo_list) == 1: send = bot.send_message(message.from_user.id, "Photos received…") bot.register_next_step_handler(send, process_messages()) return def process_messages(): print(photo_list) return bot.polling()

Сейчас, логика работает только если юзер отравляет картинки с группировкой.

Python-telegram bot примеры. Самый простой бот


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

# -*- coding: utf-8 -*- from telegram.ext import Updater # пакет называется python-telegram-bot, но Python- from telegram.ext import CommandHandler # модуль почему-то просто telegram ¯\_(ツ)_/¯ def start(bot, update): # подробнее об объекте update: https://core.telegram.org/bots/api#update bot.sendMessage(chat_id=update.message.chat_id, text="Здравствуйте.") updater = Updater(token='TOKEN') # тут токен, который выдал вам Ботский Отец! start_handler = CommandHandler('start', start) # этот обработчик реагирует # только на команду /start updater.dispatcher.add_handler(start_handler) # регистрируем в госреестре обработчиков updater.start_polling() # поехали!

создаёт бота, который сухо отвечает «Здравствуйте.» при нажатии на кнопку Start (или ручном вводе команды/start) и многозначительно молчит при любых последующих действиях с вашей стороны.Соответственно, если мы захотим повесить обработчики любых текстовых сообщений или любых команд, нам нужно будет написать

from telegram.ext import Filters, MessageHandler def handle_text(bot, update): # … def handle_command(bot, update): # … # MessageHandler -- более универсальный обработчик, который берёт на вход фильтр text_handler = MessageHandler(Filters.text, self.handle_text) command_handler = MessageHandler(Filters.command, self.handle_command) # регистрируем свеженькие обработчики в диспетчере updater.dispatcher.add_handler(text_handler) # без регистрации будет работать, updater.dispatcher.add_handler(command_handler) # но не больше трёх месяцев (шутка)

(За дальнейшими подробностями с чистой совестью отсылаю к.)Нагруженные этим теоретическим минимумом, мы можем наконец подумать, как нам писать своего нетривиального бота. Для начала давайте вернёмся к постановке задачи. Под диалоговым ботом я подразумеваю бота, который главным образом ведёт обычный текстовый диалог с пользователем — с вопросами, ответами, нелинейным сюжетом, разочаровывающими концовками и всем в таком духе (играли в «»?) Напротив, не попадают в сферу наших текущих интересов боты, разным образом расширяющие функционал Telegram (вроде); соответственно, мы опустим добавление всяких плюшек вроде,,и всего такого прочего.Проблема сложных диалоговых ботов в том, что нетривиальный диалог требует хранения состояния. Работа асинхронных диалогов требует постоянных прерываний на ожидание сообщения от пользователя; состояние нужно сохранять, потом восстанавливать, прыгать к коду, ответственному за обработку очередного сообщения, и так далее; в общем, организация кода становится проблемой довольно угнетающей. Прервать, продолжить… ничего не напоминает? Что ж, посмотрим, как обозначенную проблему можно изящнейше обойти с помощью магииyield.