Главная — Вопросы по программированию — Как я могу отправить сообщение телеграфному боту с помощью python?
Как я могу отправить сообщение телеграфному боту с помощью python?
- Post author: admin
- Запись опубликована: 17 января, 2022
- Post category: Вопросы по программированию
#python #telegram #telegram-bot
Вопрос:
Я ищу способ отправить сообщение боту с помощью другого бота. У меня есть API этих двух ботов. Библиотека, которую я использую, — это telebot, и с помощью приведенных ниже кодов я могу отправить сообщение на канал или любые учетные записи, но я не знаю, как я могу получить идентификатор чата бота.
bot = telebot.TeleBot(TOKEN) bot.send_message(yourID, ‘your_message’)
1. Если это одноразовое действие, перешлите одно из сообщений первого бота второму боту, сохраните идентификатор чата внутри второго бота (я думаю, что был способ сохранить идентификатор пересылаемых сообщений), и все готово.
2. спасибо, я получил свой идентификатор бота, но я не смог отправить бота боту, я получаю эту ошибку, telebot.apihelper. Исключение ApiTelegramException: Запрос к API Telegram не удался. Код ошибки: 403. Описание: Запрещено: бот не может отправлять сообщения ботам
Unblock Telegram Instantly with this C# Spambot Tutorial!
Ответ №1:
Похоже, что для этого нет конкретного способа, и telegram по некоторым причинам ограничивает взаимодействие между ботами. Однако вы можете использовать ловкий трюк.
Вы можете создать фиктивную учетную запись в качестве своего рода посредника для взаимодействия. Используя API Telegram (не путать с API бота), вы можете создать службу автоматической переадресации сообщений для фиктивного пользователя, чтобы просто переслать сообщение от бота А боту Б. Следовательно, вы создаете нужное соединение.
Одним из таких примеров TelegramAPI является телемарафон. Проверьте здесь пример использования API. Вы также можете ознакомиться здесь с документацией по телемарафону.
1. Миллион раз спасибо, не могли бы вы объяснить на примере?
2. Я отредактировал ответ и добавил пример TelegramAPI, который вы можете использовать.
Источник: programbox.ru
Я не могу отправлять сообщения пользователям ботов Telegram, кроме себя
Почему я не могу отправить сообщение своим пользователям-ботам?
filename = ‘a.png’ url = «https://api.telegram.org/botxxxxx:yyyyyyyyyyyyy/sendPhoto»; files = data = r = requests.post(url, files=files, data=data) print(r.status_code, r.reason, r.content) data = r = requests.post(url, files=files, data=data) print(r.status_code, r.reason, r.content) data = r = requests.post(url, files=files, data=data) print(r.status_code, r.reason, r.content)
Я пытаюсь отправить сообщение трем пользователям, первый — это я, владелец бота, и я могу получить сообщение. 2 других аккаунта уже отправили сообщение боту. но результаты такие:
Как включить своему телеграм-боту возможность писать сообщения в группу
(200, ‘OK’, ‘,»chat»:,»date»:1542626038,»photo»:[,,,]>>’) (400, ‘Bad Request’, ») (400, ‘Bad Request’, »)
19.11.2018 12:15
Оператор pass в Python — это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Python — самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science.
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
Перейти к ответу Данный вопрос помечен как решенный
Ответы 2
Ответ принят как подходящий
Вы открываете файл в четвертой строке с помощью
files =
Первый вызов request.post , вероятно, закрывает дескриптор файла, тем самым не делая его доступным для второго и третьего request.post .
Сообщение об ошибке, которое вы опубликовали, содержит необходимую информацию. Чтобы исправить это, просто повторно открывайте файл перед публикацией данных каждый раз.
Редактировать: Wombatz прав, requests.post читает до конца файла.
Вот как можно перейти к началу файла:
files[‘photo’].seek(0)
19.11.2018 12:22
Проблема в том, что requests.post читает файл, но не сбрасывает его в начальную позицию, как можно видеть здесь: В строке 159 происходит чтение.
Итак, ваш первый post работает, но все последующие запросы будут отправлять в Telegram файл пустой. На самом деле это именно то, что телеграмма сообщает вам с «Bad Request: file must be non-empty» : вы отправляете пустой файл.
Это означает, что для того, чтобы отправить один и тот же файл несколько раз, вы можете либо повторно открыть файл, либо перейти к его началу, либо — поскольку вы все равно читаете файл — передать содержимое файла непосредственно в requests (вероятно, лучший решение трех) вот так:
with open(filename, ‘rb’) as photo: files = # note that we actually read() the file here for user in all_the_users_you_want_to_send_the_file_to: requests.post(url, files=files, . )
Обратите внимание, что это работает, потому что requests также принимает строку вместо файлового объекта. Таким образом, файл читается только один раз, что может быть быстрее в зависимости от размера файла. (подробнее см. документация)
Также обратите внимание, что вы действительно должен должны использовать оператор with при чтении или записи файлов.
requests закрывает файл нет, когда это делается. В этом случае вы увидите сообщение об ошибке, например
ValueError: read of closed file
Источник: reddeveloper.ru
Я не могу отправлять сообщения пользователям ботов Telegram, кроме себя
Почему я не могу отправить сообщение пользователям моего бота?
filename = ‘a.png’ url = «https://api.telegram.org/botxxxxx:yyyyyyyyyyyyy/sendPhoto»; files = data = r = requests.post(url, files=files, data=data) print(r.status_code, r.reason, r.content) data = r = requests.post(url, files=files, data=data) print(r.status_code, r.reason, r.content) data = r = requests.post(url, files=files, data=data) print(r.status_code, r.reason, r.content)
Я пытаюсь отправить сообщение 3 пользователям, во-первых, я, владелец бота, и я могу получить сообщение. 2 других аккаунта уже отправили сообщение боту. но результаты таковы:
(200, ‘OK’, ‘,»chat»:,»date»:1542626038,»photo»:[,,,]>>’) (400, ‘Bad Request’, ») (400, ‘Bad Request’, »)
ehsan shirzadi 19 Ноя 2018 в 14:15
2 ответа
Лучший ответ
Вы открываете файл в четвертой строке
files =
Первый вызов request.post , вероятно, закрывает дескриптор файла, не делая его доступным для второго и третьего request.post .
Отправленное вами сообщение об ошибке содержит необходимую информацию. Чтобы это исправить, просто заново открывайте файл, прежде чем публиковать данные каждый раз.
Редактировать: Wombatz правильно requests.post читает в конец файла.
Вот как вы будете искать начало файла:
files[‘photo’].seek(0)
Ananth 19 Ноя 2018 в 20:20
Проблема в том, что requests.post читает файл, но не сбрасывает его в исходное положение, как видно на здесь: в строке 159 происходит чтение.
Итак, ваш первый post работает, но все последующие запросы будут отправлять в Telegram пустой файл. На самом деле это именно то, что телеграмма сообщает вам с помощью «Bad Request: file must be non-empty» : вы отправляете пустой файл.
Это означает, что для того, чтобы отправить один и тот же файл несколько раз, вы можете либо повторно открыть файл, либо перейти к его началу, либо — поскольку вы все равно читаете файл — передать содержимое файла непосредственно в requests (вероятно, лучшее решение из трех) вот так:
with open(filename, ‘rb’) as photo: files = # note that we actually read() the file here for user in all_the_users_you_want_to_send_the_file_to: requests.post(url, files=files, . )
Обратите внимание, что это работает, поскольку requests также принимает строку вместо файлового объекта. Таким образом, файл читается только один раз, что может быть быстрее в зависимости от размера файла. (см. документацию подробнее)
Также обратите внимание, что вам действительно следует использовать оператор with при чтении или записи файлов.
requests не закрывает файл по завершении. В этом случае вы увидите сообщение об ошибке, например
ValueError: чтение закрытого файла
Источник: question-it.com