Ищу аналог или билд effil/lanes for MonetLoader

Орк

Известный
Автор темы
223
139
Версия MoonLoader
Другое
Ищу аналог или билд effil/lanes for MonetLoader
Есть такой? Именно интересует многопоточность.
Для адаптации https://www.blast.hk/threads/33250/
requests имеется в комплекте, но пролаг и нельзя использовать в цикле для получения ответа

Прилагаю простейший код, который работает на MonetLoader
Lua:
local sampev = require 'lib.samp.events'

local requests = require("requests")
local encoding = require('encoding')
encoding.default = 'CP1251'
u8 = encoding.UTF8

local USER_ID =  -- айди пользователя
local GROUP_ID =  -- айди пользователя
local GROUP_TOKEN = "" -- токен группы

function char_to_hex(str)
    return string.format("%%%02X", string.byte(str))
  end
 
  function url_encode(str)
    local str = string.gsub(str, "\\", "\\")
    local str = string.gsub(str, "([^%w])", char_to_hex)
    return str
  end

function vk_request(msg)
    local msg = msg:gsub('{......}', '')
    local msg = url_encode(msg)
    local messages_send = requests.post(("https://api.vk.com/method/messages.send?user_id=%d&random_id=0&message=%s&access_token=%s&v=5.131"):format(USER_ID, msg, GROUP_TOKEN)).json()
end

-- local server, ts, key
-- function longpollGetKey()
--     local GetKey = requests.post(("https://api.vk.com/method/groups.getLongPollServer?group_id=%d&access_token=%s&v=5.131"):format(GROUP_ID, GROUP_TOKEN))
--     -- async_http_request('https://api.vk.com/method/groups.getLongPollServer?group_id=' .. ini.main.group .. '&access_token=' .. ini.main.token .. '&v=5.131', '', function (result)
--     local t = decodeJson(GetKey['text'])
--     if t.error then
--         print(t.error.error_msg)
--     else
--         server = t.response.server
--         ts = t.response.ts
--         key = t.response.key
--     end
-- end

function main()
    if not isSampLoaded() then script.this:unload() end
    while not isSampAvailable() do wait(0) end

    -- vk_request('f')
    -- if not isSampLoaded() or not isSampfuncsLoaded() then return end
    -- while not isSampAvailable() do wait(100) end
    wait(-1)
end

function randomInt() -- выдает рандомное число, чтобы сообщение отправилось ( требует вк апи )
    math.randomseed(os.time() + os.clock())
    return math.random(-2147483648, 2147483648)
  end

-- 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
 
  payday = ''
--   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

  function sampev.onServerMessage(col, msg)
    
    if string.find(msg, u8:decode'^Вам был добавлен предмет') then

        vk_request(u8(msg))
    end
    if string.match(msg, '______________________________Банковский чек______________________________') then
        payday = ''
        end
        
        if string.match(msg, u8:decode'Текущая сумма в банке:%s(%$.+)%s{33AA33}%((.+)%)$') then
            local bank, plus_bank = string.match(msg, u8:decode'^Текущая сумма в банке:%s(%$.+)%s{33AA33}%((.+)%)$')
            payday = string.format('Time: %s%s \n Bank: %s (%s)', os.date('%d:%m:%Y %H:%M:%S'), payday, bank, plus_bank)
        end
        if string.match(msg, u8:decode'^Текущая сумма на депозите:%s(%$.+)%s{33AA33}%((.+)%)%s{ffffff}%(из них ушло в бюджет семьи:%s(.+)%)$') then
            local deposit, plus_deposit, minus_deposit = string.match(msg, u8:decode'^Текущая сумма на депозите:%s(%$.+)%s{33AA33}%((.+)%)%s{ffffff}%(из них ушло в бюджет семьи:%s(.+)%)$')
            payday = string.format('%s \n Deposit: %s (%s, -%s)', payday, deposit, plus_deposit, minus_deposit)
        end
        if string.match(msg, u8:decode'^В данный момент у вас (%d+)%-й уровень и (%d+/%d+) респектов {33AA33}%((%+.+)%)$') then
            local lvl, exp_lvl, plus_exp = string.match(msg, u8:decode'^В данный момент у вас (%d+)%-й уровень и (%d+/%d+) респектов {33AA33}%((%+.+) EXP%)$')
            payday = string.format('%s \n LVL: %s (%s, %s)', payday, lvl, exp_lvl, plus_exp)
    
        end
        if string.match(msg, u8:decode'^Баланс на донат%-счет: (.+) AZ {ff6666}%((%+.+) AZ%)$') then
            local az, plus_az = string.match(msg, u8:decode'^Баланс на донат%-счет: (.+) AZ {ff6666}%((%+.+) AZ%)$')
            payday = string.format('%s \n AZ: %s (%s)', payday, az, plus_az)
    
        end
        
        if string.match(msg, '__________________________________________________________________________') then
            
            vk_request(separator(u8(payday)))
        payday = ''
    
        -- return false
        end

  end

-- function sampev.onSetPlayerAttachedObject(playerId, index, created, data)
--     if playerId ~= select(2, sampGetPlayerIdByCharHandle(PLAYER_PED)) then return false end
-- end

-- function sampev.onCreateObject(objectId, data)
--     if data.attachToVehicleId ~= 65535 then
--         return false
--     end
-- end

function comma_value(n) -- by vrld
    return n:reverse():gsub("(%d%d%d)", "%1%."):reverse():gsub("^%.?", "")
end

function separator(text)
    if text:find("%$%d+") then
        for S in string.gmatch(text, "%$%d+") do
            S = string.sub(S, 2, #S)
            text = text.gsub(text, S, comma_value(S))
        end
    end
    if text:find("%d+%$") then
        for S in string.gmatch(text, "%d+%$") do
            S = string.sub(S, 0, #S-1)
            text = text.gsub(text, S, comma_value(S))
        end
    end
    return text
end