@alksey998

Python. VK API. Как отправить аудиозапись?

import vk_api
from vk_api.longpoll import VkLongPoll, VkEventType, VkChatEventType
import random
import requests
import time
import json
from flask import Flask
from gtts import gTTS

#отправка сообщений
def write_text_message(user_id, message):
    vk.method('messages.send', {'user_id': user_id, 'message': message, "random_id": random.randint(1, 2147483647)})

def send_photo(user_id, path, message):
    a = vk.method("photos.getMessagesUploadServer")
    b = requests.post(a['upload_url'], files={'photo': open(path, 'rb')}).json()
    c = vk.method('photos.saveMessagesPhoto', {'photo': b['photo'], 'server': b['server'], 'hash': b['hash']})[0]
    vk.method("messages.send", {"peer_id": user_id, "message": message, "attachment": f'photo{c["owner_id"]}_{c["id"]}', "random_id": random.randint(1, 2147483647)})

def send_audio(user_id):
    tts = gTTS(text='hello', lang="ru", lang_check=True)
    name = "D:\Бот с домашкой\Audio\Audiovoice.mp3"
    tts.save(name) 
    
    # Загрузка файла на сервер
    a = vk.method("docs.getMessagesUploadServer", {"type": "audio_message", "peer_id": user_id})
    b = requests.post(a['upload_url'], files={'file': open(name, 'rb')}).json()
    c = vk.method("docs.save", {"file": b["file"]})[0]
    d = 'doc{}_{}'.format(c['owner_id'], c['id'])
    vk.method('messages.send', {'peer_id': user_id, 'attachment': d, "random_id": random.randint(1, 2147483647)})


    print('Successfully') # Удачно 
    
def sending_a_greeting(user_id):
    greetings = ['Привет', 'Дароу', 'Хай', 'Дратути', 'Салют', 'Дарова', 'Ку', 'Здравствуй']
    write_text_message(user_id, random.choice(greetings))
        
def new_message(user_id, message): 
    if (message == 'привет'):
        sending_a_greeting(user_id)
    elif message == "пока":
        write_text_message(user_id, "Пока((")
    elif (message == 'help') or (message == 'помощь') or (message == 'f1'):
        write_text_message(user_id, 'Вот все, что я могу:')
    elif message == 'аудио':
        send_audio(user_id)
    else:
        write_text_message(user_id, 'Извини, не понял, что ты сказал. Чтобы узнать все команды - напиши: help, или помощь, или F1')

# API-ключ созданный ранее
token = ""
# Авторизуемся как сообщество
vk = vk_api.VkApi(token=token)
# Работа с сообщениями
longpoll = VkLongPoll(vk)

# Основной цикл
for event in longpoll.listen():
    # Если пришло новое сообщение
    if event.type == VkEventType.MESSAGE_NEW:    
        # Если оно имеет метку для меня бота
        if event.to_me:
            # текст сообщения от пользователя 
            new_message(event.user_id, event.text.lower())
    elif event.type == VkEventType.USER_RECORDING_VOICE:
        write_text_message(event.user_id, 'Я не могу отвечать на голосовые((')


Пытался отправить аудиозапись с помощью этого кода. Но он не работает. Подскажите, пожалуйста, что не так.
(Одна из ошибок - c = vk.method("docs.save", {"file": b["file"]}), KeyError: )
  • Вопрос задан
  • 782 просмотра
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы