@iris_duty_2020

Как прикрепить файл из папки в сообщение вк?

Я хочу чтобы бот выбирал из папки "citati" рандомный файл (фото), и прикреплял его к сообщению. Но, вместо этого, при отправке команды - он пишет следующее:

Команда:
!м рандом цитата

Ответ питона, а точнее вывод команды:

Рандомная Цитата:
<_io.TextIOWrapper name='citati/cb5cee35d576980a28e7128d1be6c616.jpg' mode='r' encoding='cp1251'>


Вот код:

async def cit(delay, peer_id, command):
    await asyncio.sleep(delay)
    if "!м рандом цитата" in command:
        try:   
        
            P_time = datetime.now().timestamp()
            requests = get(f'https://api.vk.com/method/messages.getConversations?count=20?filter=all?v=5.89&access_token=dba88f4f906b28feee2728472f4')
            DIR = 'citati/'
            F = open(os.path.join(DIR, random.choice(os.listdir(DIR))))
            msg_1 = f"""
            Рандомная Цитата: \n {F}
            """.replace('    ', '')

            messages.write_msg(peer_id, msg_1)

            #time.sleep(3)
        except Exception as Errpeng:
            print(f"Ошибка цитаты: {Errpeng}")


И да, токен я специально неправильный поставил. "os" уже поставил, как и "random".

Я начинающий питонист, так что без критики пожалуйста)
  • Вопрос задан
  • 83 просмотра
Решения вопроса 1
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
Вы слишком начинающий питонист, чтобы решать такие задачи интуитивно. Вам нужно подучиться.

F = open(os.path.join(DIR, random.choice(os.listdir(DIR))))

В переменной F у вас созраняется не картинка, не файл, и не его содержимое, а специальный объект, который позволяет получить содержимое файла с диска.
У этого объекта есть техническое строковое представление, но оно никак не связано с содержимым файла.
И вы это техническое название объекта, предназначенного для доступа к файлу подставляете в текст сообщения для отправки. Соответствующий результат и получаете.
Даже если бы вы подставили в текст сообщения не техническое название объекта для доступа к файлу, а само содержимое файла, вам бы это все равно не помогло. Файл картинки - это бинарный файл. Там байты, которые не прочитать глазами. Вы неправильно пользуетесь библиотекой, не понимаете различия между файлом, его содержимым, его форматом и представлением.
В комментариях к вашему вопросу вам сказали как загружать картинки чреез API контакта.
Видимо содержимое файла нужно отправить http post-запросом на специальный сервис для ее хранения, а уж ее идентификатор прикрепить специальным образом в состав сообщения.

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

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

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

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