Всем привет, был заказ с отправкой фотки в ВК, поискал инфу на бластхаке и не нашел, решил заставить сделать @th3egdvach
Гайд:
Первым делом нам нужно подключить необходимые либы и ввести токен с айди юзера + рандомное число для ВК АПИ
Вводим константы + либы:
local requests = require("requests") -- самая крутая либа
local USER_ID = 010101010110 -- айди пользователя
local GROUP_TOKEN = "ПРИВАТКА" -- токен группы
Нужная функция для ВК АПИ, получаем рандомное число:
function randomInt() -- выдает рандомное число, чтобы сообщение отправилось ( требует вк апи )
math.randomseed(os.time() + os.clock())
return math.random(-2147483648, 2147483648)
end
Вызываем функцию отправления фотографии:
sendPhoto(getGameDirectory()..'/1.png')
function sendPhoto(path)
-- содержимое функции распишу ниже
end
Загрузка фотки на сервер:
local upResponse = requests.post(("https://api.vk.com/method/photos.getMessagesUploadServer?user_id=%d&access_token=%s&v=5.131"):format(USER_ID, GROUP_TOKEN)).json() -- отправляем запрос на метод вк, в котором получаем ссылочку для загрузки
local uploadedResponse = uploadPhoto(path, upResponse.response.upload_url) -- загружаем фото на ссылку
Загружаем фотографию по полученной ссылке:
function uploadPhoto(filename, uploadUrl)
local fileHandle = io.open(filename,"rb")
if (fileHandle) then
local fileContent = fileHandle:read( "*a" )
fileHandle:close()
local boundary = 'abcd'
local header_b = 'Content-Disposition: form-data; name="file"; filename="' .. filename .. '"\r\nContent-Type: image/png\r\n'
local fileContent = '--' ..boundary .. '\r\n' ..header_b ..'\r\n'.. fileContent .. '\r\n--' .. boundary ..'--\r\n'
local resp = requests.post(uploadUrl, {
headers = {
["Content-Length"] = fileContent:len(),
['Content-Type'] = 'multipart/form-data; boundary=' .. boundary
},
data = fileContent
})
return resp.json()
end
end
Получаем данные для прикрепления фотографии к сообщению:
local saveResponse = requests.post(("https://api.vk.com/method/photos.saveMessagesPhoto?server=%d&photo=%s&hash=%s&access_token=%s&v=5.131"):format(uploadedResponse.server,uploadedResponse.photo,uploadedResponse.hash, GROUP_TOKEN)).json()
local image = saveResponse.response[1]
local att_image = ("photo%d_%d_%s"):format(image.owner_id, image.id, image.access_key)
Отправляем сообщение с прикрепленной Фотографией:
return requests.post(("https://api.vk.com/method/messages.send?user_id=%d&attachment=%s&access_token=%s&random_id=%d&v=5.131"):format(USER_ID, att_image, GROUP_TOKEN, randomInt())) -- обычный способ отправки вк
Готовая функция sendPhoto:
function sendPhoto(path)
local upResponse = requests.post(("https://api.vk.com/method/photos.getMessagesUploadServer?user_id=%d&access_token=%s&v=5.131"):format(USER_ID, GROUP_TOKEN)).json()
local uploadedResponse = uploadPhoto(path, upResponse.response.upload_url)
local saveResponse = requests.post(("https://api.vk.com/method/photos.saveMessagesPhoto?server=%d&photo=%s&hash=%s&access_token=%s&v=5.131"):format(uploadedResponse.server,uploadedResponse.photo,uploadedResponse.hash, GROUP_TOKEN)).json()
local image = saveResponse.response[1]
local att_image = ("photo%d_%d_%s"):format(image.owner_id, image.id, image.access_key)
return requests.post(("https://api.vk.com/method/messages.send?user_id=%d&attachment=%s&access_token=%s&random_id=%d&v=5.131"):format(USER_ID, att_image, GROUP_TOKEN, randomInt()))
end
Готовый код прикреплю в файлике ниже 😊
Если есть вопросы, готов ответить на них в теме или лс группы вк
Если есть вопросы, готов ответить на них в теме или лс группы вк