Нужна помощь с функцией асинхронных запросов

leekyrave

Известный
Автор темы
419
226
Версия MoonLoader
.027.0-preview
Приветствую всех.

Код:
function asyncHttpRequest(method, url, args, resolve, reject)
    local request_thread = effil.thread(function (method, url, args)
      
       local result, response = pcall(requests.request, method, url, args)
       if result then
          response.json, response.xml = nil, nil
          return true, response
       else
          return false, response
       end
    end)(method, url, args)
    -- Если запрос без функций обработки ответа и ошибок.
    if not resolve then resolve = function() end end
    if not reject then reject = function() end end
    -- Проверка выполнения потока
    lua_thread.create(function()
       local runner = request_thread
       while true do
          local status, err = runner:status()
          if not err then
             if status == 'completed' then
                local result, response = runner:get()
                if result then
                   resolve(response)
                else
                   reject(response)
                end
                return
             elseif status == 'canceled' then
                return reject(status)
             end
          else
             return reject(err)
          end
          wait(0)
       end
    end)
 end

Вызываю ассинхрон запрос



Lua:
sampRegisterChatCommand("test", function() asyncHttpRequest('POST', 'https://api.vk.com/method/messages.send',[[?peer_id=2000000021&message=123&access_token=спрятан&v=5.81]],
    function(response)
       print(response)
    end,
    function(err)
       print(err)
    end)
    end)

В итоге проверки получаю ошибку - ...ты и т.д\Сборки\Новая сборка\moonloader\lib\requests.lua:72: attempt to index local 'request' (a string value)

иду смотреть в файл реквестов

Lua:
if type(url) == "table" then
    request = url
  else
    request = args or {}
    request.url = url -- 72 строка
  end


Вопрос - как починить?
 
Решение
Приветствую всех.

Код:
function asyncHttpRequest(method, url, args, resolve, reject)
    local request_thread = effil.thread(function (method, url, args)

       local result, response = pcall(requests.request, method, url, args)
       if result then
          response.json, response.xml = nil, nil
          return true, response
       else
          return false, response
       end
    end)(method, url, args)
    -- Если запрос без функций обработки ответа и ошибок.
    if not resolve then resolve = function() end end
    if not reject then reject = function() end end
    -- Проверка выполнения потока
    lua_thread.create(function()
       local runner = request_thread
       while true do
          local status, err =...

MrBidloKoder

Известный
423
249
Lua:
sampRegisterChatCommand("test", function() asyncHttpRequest('GET', 'https://api.vk.com/method/messages.send?peer_id=2000000021&message=123&access_token=спрятан&v=5.81', nil,
    function(response)
       print(response)
    end,
    function(err)
       print(err)
    end)
    end)

попробуй не указывать эту хуету как параметр, а вшить сразу в запрос.
 

leekyrave

Известный
Автор темы
419
226
Lua:
sampRegisterChatCommand("test", function() asyncHttpRequest('GET', 'https://api.vk.com/method/messages.send?peer_id=2000000021&message=123&access_token=спрятан&v=5.81', nil,
    function(response)
       print(response)
    end,
    function(err)
       print(err)
    end)
    end)

попробуй не указывать эту хуету как параметр, а вшить сразу в запрос.
вшил как ты сказал,даже эрроры не пишет
 

Tema05

Известный
1,471
435
Приветствую всех.

Код:
function asyncHttpRequest(method, url, args, resolve, reject)
    local request_thread = effil.thread(function (method, url, args)

       local result, response = pcall(requests.request, method, url, args)
       if result then
          response.json, response.xml = nil, nil
          return true, response
       else
          return false, response
       end
    end)(method, url, args)
    -- Если запрос без функций обработки ответа и ошибок.
    if not resolve then resolve = function() end end
    if not reject then reject = function() end end
    -- Проверка выполнения потока
    lua_thread.create(function()
       local runner = request_thread
       while true do
          local status, err = runner:status()
          if not err then
             if status == 'completed' then
                local result, response = runner:get()
                if result then
                   resolve(response)
                else
                   reject(response)
                end
                return
             elseif status == 'canceled' then
                return reject(status)
             end
          else
             return reject(err)
          end
          wait(0)
       end
    end)
end

Вызываю ассинхрон запрос



Lua:
sampRegisterChatCommand("test", function() asyncHttpRequest('POST', 'https://api.vk.com/method/messages.send',[[?peer_id=2000000021&message=123&access_token=спрятан&v=5.81]],
    function(response)
       print(response)
    end,
    function(err)
       print(err)
    end)
    end)

В итоге проверки получаю ошибку - ...ты и т.д\Сборки\Новая сборка\moonloader\lib\requests.lua:72: attempt to index local 'request' (a string value)

иду смотреть в файл реквестов

Lua:
if type(url) == "table" then
    request = url
  else
    request = args or {}
    request.url = url -- 72 строка
  end


Вопрос - как починить?
Какого хрена ты аргументы с скобки закинул? Мне кажется в этом и проблема, он строку ищет а ты в двойные квадратные скобки почему-то запихал. И знак вопроса перед аргументами в Post запросе указывать не нужно.

2 вариант это то что ты неправильно составил запрос для vk api. При отправке сообщения нужно указывать рандомный ID. Иди в доки смотреть что это

Попробуй вот так
Lua:
sampRegisterChatCommand("test", function()
    math.randomseed(os.clock()) --ОБЯЗАТЕЛЬНО ПЕРЕД ЗАПРОСОМ!!!
    asyncHttpRequest('POST', 'https://api.vk.com/method/messages.send', 'peer_id=2000000021&message=123&random_id=' .. math.random(0, 999999999) .. '&access_token=спрятан&v=5.81',
        function(response)
            print(response)
        end,
        function(err)
            print(err)
        end
    )
end)

Также не советую использовать эту либу. Есть альтернатива в виде copas. Для её работу не нужно штук 50 файлов в lib, она стабильнее на практике и не уступает в функциональности.

Токен тоже не стоит пихать в скрипт если ты хочешь разместить его в открытом доступе. Токен на изи достанут и сломают тебе всё. Используй свой vds в качестве посредника для запросов.
 
Последнее редактирование:
  • Нравится
Реакции: leekyrave

leekyrave

Известный
Автор темы
419
226
Какого хрена ты аргументы с скобки закинул? Мне кажется в этом и проблема, он строку ищет а ты в двойные квадратные скобки почему-то запихал. И знак вопроса перед аргументами в Post запросе указывать не нужно.

2 вариант это то что ты неправильно составил запрос для vk api. При отправке сообщения нужно указывать рандомный ID. Иди в доки смотреть что это

Попробуй вот так
Lua:
sampRegisterChatCommand("test", function()
    math.randomseed(os.clock()) --ОБЯЗАТЕЛЬНО ПЕРЕД ЗАПРОСОМ!!!
    asyncHttpRequest('POST', 'https://api.vk.com/method/messages.send', 'peer_id=2000000021&message=123&random_id=' .. math.random(0, 999999999) .. '&access_token=спрятан&v=5.81',
        function(response)
            print(response)
        end,
        function(err)
            print(err)
        end
    )
end)

Также не советую использовать эту либу. Есть альтернатива в виде copas. Для её работу не нужно штук 50 файлов в lib, она стабильнее на практике и не уступает в функциональности.

Токен тоже не стоит пихать в скрипт если ты хочешь разместить его в открытом доступе. Токен на изи достанут и сломают тебе всё. Используй свой vds в качестве посредника для запросов.
не помогло,попробую либу копас,можешь помочь в написании первого запроса(эту функцию на копас),не совсем понял как с функцией с копасом работать
 

Tema05

Известный
1,471
435

Tema05

Известный
1,471
435
1) что за заполнение POST запроса?
2) ВК АПИ разве не на GET запросах работает?
1) О чём ты?
2) Нет, я пока не перешёл на POST куча всего не работало. На GET тоже можно но это геморойнее )
 

Quasper

Известный
835
354
Немного не так выразился. На GET тоже можно но не всё будет работать.
Ну как это не всё будет работать, все VK API методы описанные в документации отлично работают на GET запросах