@z_v_r_k
Читаю учебник по Python

Как переслать фотографию ботом pyTelegramBotAPI?

Всем привет!

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

С текстовыми сообщениями проблем нет, но никак не получается сделать это с изображением. Ниже кусок кода:

def photo_found(message):
    photo_dog = message.photo[-1].file_id
    bot.send_photo(message.from_user.id, photo_dog, caption='Вот ваша картинка')
    bot.send_message(chat_id=[Тут мой ID в Telegram],  text='Пользователь хочет разместить следующее объявление: ')


Но как только я пытаюсь отправить себе картинку с помощью:

bot.send_photo(chat_id=[Тут мой ID в Telegram], photo_dog)


Так получаю ошибку "Positional argument after keyword argument". Интернет весь облазил решения найти не могу.

Пробовал сделать через bot.forward_message, но в этом случае теряется caption, который мне нужен и форвардится только картинка. Куда рыть? Спасибо!
  • Вопрос задан
  • 56 просмотров
Решения вопроса 1
SoreMix
@SoreMix
yellow
Positional argument after keyword argument

Перевод четко говорит в чем проблема.
В питоне у функции есть параметры позиционные (args) и параметры именованные (keyword args) (kwargs)

В ошибке и написано, что позиционный аргумент следует за именованные, что не есть правильно.
Всегда сначала должны идти позиционные аргументы (если такие есть, конечно) - затем уже именованные аргументы.

Так что делайте так, передавая оба аргумента без ключей
bot.send_photo([Тут мой ID в Telegram], photo_dog)

либо так, передавая оба аргумента с ключами
bot.send_photo(chat_id=[Тут мой ID в Telegram], photo=photo_dog)


либо так, передавая сначала аргументы без ключей, затем с ключами
bot.send_photo([Тут мой ID в Telegram], photo=photo_dog)


https://habr.com/ru/company/ruvds/blog/482464/
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы