Неактуально Запросы

Daniel_Govnocode

Активный
Автор темы
300
41
Версия MoonLoader
Другое
Драсте, в чем может быть ошибка?

Lua:
local copas = require 'copas'
local http = require 'copas.http'

--Запросы
function httpRequest(request, body, handler)
    if not copas.running then
        copas.running = true
        lua_thread.create(function()
            wait(0)
            while not copas.finished() do
                local ok, err = copas.step(0)
                if ok == nil then error(err) end
                wait(0)
            end
            copas.running = false
        end)
    end
    -- do request
    if handler then
        return copas.addthread(function(r, b, h)
            copas.setErrorHandler(function(err) h(nil, err) end)
            h(http.request(r, b))
        end, request, body, handler)
    else
        local results
        local thread = copas.addthread(function(r, b)
            copas.setErrorHandler(function(err) results = {nil, err} end)
            results = table.pack(http.request(r, b))
        end, request, body)
        while coroutine.status(thread) ~= 'dead' do wait(0) end
        return table.unpack(results)
    end
end

function sendMessage(message, token)
    local data = {
        message = message,
        api_key = token
    }
    local headers = {['Content-Type'] = 'application/json'} -- application/json - тот свмый тип запроса

    local response = httpRequest('POST',{'https://ask.chadgpt.ru/api/public/gpt-4o-mini',headers = headers, data = data})
    print(response)
    return response
end
--Это в окно моем
if imgui.Button(u8"Спросить как дела") then
    sendMessage("Как дела?", "токен мой")
end
if response then
    imgui.Text(u8(response))
    sampAddChatMessage(response, -1)
end

Выводит nil
Слова вычитаются, т.е. ошибка гдето в обработке
 
  • Эм
Реакции: AnWu

SigmaUnited

Участник
85
34
Чтобы использовать u8, мимгуи. Надо в начале их чекнуть:
Lua:
local imgui = require 'mimgui'
local encoding = require 'encoding'
encoding.default = 'CP1251'
local u8 = encoding.UTF8
local new = imgui.new
local WinState = new.bool()
local inputGuess = new.char[256]()
local hintRequested = new.bool()

Чёт по исправлял:


Lua:
local imgui = require 'mimgui'
local encoding = require 'encoding'
encoding.default = 'CP1251'
local u8 = encoding.UTF8
local new = imgui.new
local WinState = new.bool()
local inputGuess = new.char[256]()
local hintRequested = new.bool()
local copas = require 'copas'
local http = require 'copas.http'

-- Запросы
function httpRequest(method, url, body, headers, handler)
    if not copas.running then
        copas.running = true
        lua_thread.create(function()
            wait(0)
            while not copas.finished() do
                local ok, err = copas.step(0)
                if ok == nil then error(err) end
                wait(0)
            end
            copas.running = false
        end)
    end

    if handler then
        return copas.addthread(function()
            copas.setErrorHandler(function(err) handler(nil, err) end)
            handler(http.request {
                url = url,
                method = method,
                source = ltn12.source.string(body),
                headers = headers
            })
        end)
    else
        local results
        local thread = copas.addthread(function()
            copas.setErrorHandler(function(err) results = {nil, err} end)
            results = table.pack(http.request {
                url = url,
                method = method,
                source = ltn12.source.string(body),
                headers = headers
            })
        end)
        while coroutine.status(thread) ~= 'dead' do wait(0) end
        return table.unpack(results)
    end
end

function sendMessage(message, token)
    local data = '{"message": "' .. message .. '", "api_key": "' .. token .. '"}'
    local headers = {['Content-Type'] = 'application/json'}

    local response, err = httpRequest('POST', 'https://ask.chadgpt.ru/api/public/gpt-4o-mini', data, headers)
    if err then
        print("Error:", err)
    else
        print("Response:", response)
    end
    return response
end

-- Пример использования
if imgui.Button(u8"Спросить как дела") then
    response = sendMessage("Как дела?", "токен мой")
end
if response then
    imgui.Text(u8(response))
    sampAddChatMessage(response, -1)
end
Ну тут ошибок много, чекни работает или не
 

Daniel_Govnocode

Активный
Автор темы
300
41
[ML] (error) GPT.lua: ...na\Arizona Games Launcher\bin\arizona\moonloader\GPT.lua:43: attempt to yield across C-call boundary
stack traceback:
[C]: in function 'wait'
...na\Arizona Games Launcher\bin\arizona\moonloader\GPT.lua:43: in function 'httpRequest'
...na\Arizona Games Launcher\bin\arizona\moonloader\GPT.lua:52: in function 'sendMessage'
...na\Arizona Games Launcher\bin\arizona\moonloader\GPT.lua:84: in function '_draw'
...ames Launcher\bin\arizona\moonloader\lib\mimgui\init.lua:107: in function <...ames Launcher\bin\arizona\moonloader\lib\mimgui\init.lua:91>
[ML] (error) GPT.lua: Script died due to an error. (15D7EE6C)

Это строчка while coroutine.status(thread) ~= 'dead' do wait(0) end
 

Daniel_Govnocode

Активный
Автор темы
300
41
мб попробуй засунуть строчку в lua_thread
Lua:
lua_thread.create(function()
    while coroutine.status(thread) ~= 'dead' do wait(0) end
    return true
end)
Пробовал, игра виснет где-то на минуту, затем в логи просто пишется пустая строчка
 

Hideme Flow

Известный
573
199
Пробовал, игра виснет где-то на минуту, затем в логи просто пишется пустая строчка
попробуй эту тему
 

Daniel_Govnocode

Активный
Автор темы
300
41
попробуй эту тему
Сомневаюсь, что это поможет. Прикол в том, что мне ничего не выводит.

Короче чуть чуть переделал, теперь игра не виснет, но теперь в чат выводит две пустые строчки просто


Lua:
function asyncHttpRequest(method, url, args, resolve, reject)
    local request_thread = effil.thread(function (method, url, args)
        local requests = require 'requests'
        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

function sendMessage(message, token)
    asyncHttpRequest('POST', 'https://ask.chadgpt.ru/api/public/gpt-4o', {
            headers = {
                ['Authorization'] = 'Bearer ' .. 'ВАШ API CHATGPT',
                ['Content-Type'] = 'application/json'
            },
            data = u8(encodeJson({
                ["message"] = message,
                ["api_key"] = token
            }))
        },
        function(response)
            if response.status_code == 200 then
                sampAddChatMessage(response, -1)
                if response.is_success then
                    local text = response.response
                    if text ~= nil then
                        text = u8:decode(text)
                        sampAddChatMessage("Ответ: " .. text, -1)
                    else
                        sampAddChatMessage("Ошибка: текст ответа равен nil", -1)
                        sampAddChatMessage(response.used_words_count, -1)
                    end
                else
                    sampAddChatMessage(response.error_message, -1)
                end
            else
                sampAddChatMessage("Ошибка: HTTP код: " .. response.status_code, -1)
                sampAddChatMessage("Текст ошибки: " .. response.text, -1)
            end
        end,
        function(err)
            sampAddChatMessage("Ошибка: " .. err)
        end
    )
end

Вот ссылка на API:

UPD: Заюзал реквесты, все норм.
 
Последнее редактирование: