Не могу отправить фото исполькуя pyrogram (telegram, python)
Есть программа, которая должна отправлять картинку по запросу в telegram чат:
from pyrogram import Client, filters
import test
app = Client('my_user_bot')
@app.on_message(filters.command("meme", prefixes=".") & filters.me)
def type(app, message):
print(message['chat'])
text = message.text.split(".meme ", maxsplit=1)[1]
test.make_img(text)
message.delete()
app.send_photo(int(message['chat']['id']), 'img.png')
print('da')
app.run()
По какой-то причине фото не отправляется, программа не выдает никаких ошибок.
Также строчка print('da) не выполняется,
то есть программа попросту останавливается на предыдущей строке.
Ответы (2 шт):
Автор решения: Фрэнк Фрэнкович
→ Ссылка
Лучше используйте библиотеку PyTelegramBotApi
import telebot
from requests import get
bot = telebot.TeleBot("TOKEN")
@bot.message_handler(commands=["meme"])
def start(message):
photo = open('/tmp/photo.png', 'rb')
bot.send_message(message.chat.id, "ТЕСТ")
bot.send_photo(message.chat.id, photo)
bot.polling()
Автор решения: SyberiaK
→ Ссылка
filters.me обозначает самого бота, а не вас. Проще говоря, бот ждёт команды от самого себя.
- Узнайте ID своего аккаунта в Telegram (проще всего через @userinfobot)
- Используйте
filters.user(<ваш ID>)
from pyrogram import Client, filters
import test
app = Client('my_user_bot')
@app.on_message(filters.command("meme", prefixes=".") & filters.user(123456789))
def type(app, message):
print(message.chat)
text = message.text.split(".meme ", maxsplit=1)[1]
test.make_img(text)
message.delete()
app.send_photo(message.chat.id, 'img.png')
print('da')
app.run()
Также можно сделать свой отдельный фильтр:
from pyrogram import Client, filters
import test
def func(_, __, message):
return message.from_user.id == 123456789 # возвращает True, если именно вы
# отправили сообщение
is_author = filters.create(func) # создание фильтра
app = Client('my_user_bot')
@app.on_message(filters.command("meme", prefixes=".") & is_author) # использование
def type(app, message):
print(message.chat)
text = message.text.split(".meme ", maxsplit=1)[1]
test.make_img(text)
message.delete()
app.send_photo(message.chat.id, 'img.png')
print('da')
app.run()