Lua [arz] VK Punish Notifer and PayDay Notifer

abbv

Потрачен
Автор темы
120
40
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Версия SA-MP
  1. 0.3.7-R4
Всем привет!
Переделал скрипт Discord Punisher
Добавил хук на пейдей, и чуть улучшил скрипт
Нужно добавить user_id и token на 19 и 20 строках

Команды:
/pdnotf - включает уведомление о ПейДеях. Включена по дефолту.
1653856879042.png


/punisher - включает уведомление о наказаниях. Выключена по дефолту
1653856901489.png

(в скрипт включены все возможные типы НАКАЗАНИЙ кроме банов от антибота и антикладмена)
 

Вложения

  • vk punish and payday.lua
    7.6 KB · Просмотры: 56
  • Нравится
Реакции: Ottosm и xionerme

Yondime

кавайчик
Проверенный
307
513

1-59666-128

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

Траблы с табуляцией конечно присутствуют, но это не особо большая причина для доеба.​

1653914560631.png

Немного смутило, что сначала ты ищешь строчки без использования переменных, а потом их зачем-то задаешь..​

1653914713542.png

1653914670019.png

Так же хотел поинтересоваться, нахуя ты создаешь переменные и подгружаешь библиотеки которые нигде не юзаешь😂​

1653915053106.png

1653915079250.png

Ну и самое тупое смешное, что ты делаешь проверки на текст без цвета строчки)) Любой бичик подойдет к юзеру твоего скрипта и зафлудит ему чат сообщениями​

Администратор Rab_Sistemi[123] кикнул игрока Vasya_Puplin[321]. Причина: создатель еблан

А бедный игрок аризоны будет смотреть как ему идут сообщения не имеющие смысл..​

Забыл только сказать​

1653915147068.gif


1-57631-128
 

abbv

Потрачен
Автор темы
120
40
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.

1-59666-128

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

Траблы с табуляцией конечно присутствуют, но это не особо большая причина для доеба.​

Посмотреть вложение 150177

Немного смутило, что сначала ты ищешь строчки без использования переменных, а потом их зачем-то задаешь..​

Посмотреть вложение 150180
Посмотреть вложение 150179

Так же хотел поинтересоваться, нахуя ты создаешь переменные и подгружаешь библиотеки которые нигде не юзаешь😂​

Посмотреть вложение 150186
Посмотреть вложение 150187

Ну и самое тупое смешное, что ты делаешь проверки на текст без цвета строчки)) Любой бичик подойдет к юзеру твоего скрипта и зафлудит ему чат сообщениями​

Администратор Rab_Sistemi[123] кикнул игрока Vasya_Puplin[321]. Причина: создатель еблан

А бедный игрок аризоны будет смотреть как ему идут сообщения не имеющие смысл..​

Забыл только сказать​

Посмотреть вложение 150188

1-57631-128
спасибо за критику, в след раз учту)
кстати, по поводу библиотеки - я тестировал с эффилом, но не работало, по этому попробовал лейнс, и забыл убрать эффил
 

meowprd

Тот самый Котовский
Проверенный
1,280
712
Теперь мой черед докопаться до реализации

1653919183069.png

Lua:
sampRegisterChatCommand('pdnotf', function()
    sampAddChatMessage("Payday Notifer "..(pdnotf and "activated" or "deactivated"), 0x01FFD5)
    -- или еще лучше
    -- sampAddChatMessage(string.format("Payday Notifer %s", (pdnotf and "activated" or "deactivated")), 0x01FFD5)
end)

-- аналогично и со второй командой

1653919292454.png

почему бы не сделать получение этой инфы внутри функции отправки?
вдруг я перезашел через реконнект на другой сервер или сменил ник, а в сообщении будет старая инфа
перезагружать скрипт? ну такое себе

1653919360505.png

как ты сам сказал выше, ты используешь lanes, который не может похвастаться стабильностью)
разобрался бы лучше с effil или сделал бы на обычном request
зачем срать в лог и консоль юзеру? для отладки еще куда ни шло, но юзеру эта информация не нужна совсем

плюс ко всему, почему устаревшая версия VK API?
ты используешь 5.81, хотя актуальная на сегодня 5.131

1653919435265.png

почему бы было не сделать без зависимости от samp.events?
в наше время у всех стоит SAMPFUNCS и можно было заюзать onReceiveRpc

1653919495733.png

почему не локальные переменные? к ним обращение быстрее, чем к глобальным
зачем поток? можно было писать инфу в таблицу и обрабатывать внутри основного бесконечного цикла (тот что в main), ведь если в одну секунду произойдет любое другое действие, которое ты хукаешь и попытаешься отправить информацию вк отправит только одно сообщение, потому что значение в math.random у тебя будут одинаковые, так как ты задаешь math.randomseed(os.clock())
почему бы не использовать string.format, а не конкатенацию строк? если у тебя не будет хотя бы одного значения (или будет равно nil, что равно пустое значение) и ты попробуешь сделать конкатенацию - скрипт скажет до свидания, а string.format выведет вместе переменной - "nil"

1653919710258.png

1653919715792.png

и подобные переменные лучше вынести в таблицу и обращаться потом к ней (или в обычные переменные), главное чтобы вне функции, ведь таким образом ты засоряешь сборщик мусора lua, который и так не особо часто запускается

1653920100228.png

что за функция isNameInList, которая нигде не объявляется и не несет никакого смысла?)
ровно как и переменная checkName, тоже не несет никакого смысла)

все остальное не особо привлекло мое внимание (или легко удаляется при учтении выше описанного)
 

abbv

Потрачен
Автор темы
120
40
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
спасибо за критику)
я как бы новичек в луа, стараюсь что то изучать на практике, учту всё то, что написали выше в след раз

кстати,насчёт лейнс - у меня просто не выходило сделать через эффил, запрос почему то не проходил
 

kizn

О КУ)))
Всефорумный модератор
2,405
2,057
Теперь мой черед докопаться до реализации

Посмотреть вложение 150201
Lua:
sampRegisterChatCommand('pdnotf', function()
    sampAddChatMessage("Payday Notifer "..(pdnotf and "activated" or "deactivated"), 0x01FFD5)
    -- или еще лучше
    -- sampAddChatMessage(string.format("Payday Notifer %s", (pdnotf and "activated" or "deactivated")), 0x01FFD5)
end)

-- аналогично и со второй командой

Посмотреть вложение 150202
почему бы не сделать получение этой инфы внутри функции отправки?
вдруг я перезашел через реконнект на другой сервер или сменил ник, а в сообщении будет старая инфа
перезагружать скрипт? ну такое себе

Посмотреть вложение 150205
как ты сам сказал выше, ты используешь lanes, который не может похвастаться стабильностью)
разобрался бы лучше с effil или сделал бы на обычном request
зачем срать в лог и консоль юзеру? для отладки еще куда ни шло, но юзеру эта информация не нужна совсем

плюс ко всему, почему устаревшая версия VK API?
ты используешь 5.81, хотя актуальная на сегодня 5.131

Посмотреть вложение 150206
почему бы было не сделать без зависимости от samp.events?
в наше время у всех стоит SAMPFUNCS и можно было заюзать onReceiveRpc

Посмотреть вложение 150207
почему не локальные переменные? к ним обращение быстрее, чем к глобальным
зачем поток? можно было писать инфу в таблицу и обрабатывать внутри основного бесконечного цикла (тот что в main), ведь если в одну секунду произойдет любое другое действие, которое ты хукаешь и попытаешься отправить информацию вк отправит только одно сообщение, потому что значение в math.random у тебя будут одинаковые, так как ты задаешь math.randomseed(os.clock())
почему бы не использовать string.format, а не конкатенацию строк? если у тебя не будет хотя бы одного значения (или будет равно nil, что равно пустое значение) и ты попробуешь сделать конкатенацию - скрипт скажет до свидания, а string.format выведет вместе переменной - "nil"

Посмотреть вложение 150208
Посмотреть вложение 150209
и подобные переменные лучше вынести в таблицу и обращаться потом к ней (или в обычные переменные), главное чтобы вне функции, ведь таким образом ты засоряешь сборщик мусора lua, который и так не особо часто запускается

Посмотреть вложение 150212
что за функция isNameInList, которая нигде не объявляется и не несет никакого смысла?)
ровно как и переменная checkName, тоже не несет никакого смысла)

все остальное не особо привлекло мое внимание (или легко удаляется при учтении выше описанного)
а еще кста в randomId вк можно всегда передавать 0
 
  • Нравится
Реакции: meowprd и Yondime

abbv

Потрачен
Автор темы
120
40
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Lua:
require 'lib.moonloader'
local encoding = require("encoding")
local sampev = require("samp.events")

encoding.default = 'CP1251'
u8 = encoding.UTF8

local pdnotf = true
local punishnotf = true
local host = ''
local acc = ''

local lanes = require('lanes').configure()

user_id = ''
token = ''

local msg = ''

local punish = {
    {ban = 'Администратор (.+)%[(%d+)%] забанил игрока (.+)%[(%d+)%] на (%d+) дней. Причина: (.+)'},
    {kick = 'Администратор (.+)%[(%d+)%] кикнул игрока (.+)%[(%d+)%]. Причина: (.+)'},
    {jail = 'Администратор (.+)%[(%d+)%] посадил игрока (.+)%[(%d+)%] в деморган на (%d+) минут. Причина: (.+)'},
    {pd = 'В данный момент у вас (%d+)%-%й уровень и (%d+)/(%d+) респектов'},
    {warn = 'Администратор (.+)%[(%d+)%] выдал предупреждение игроку (.+)%[(%d+)%] [(%d+)/3] Причина: (.+)'},
    {mute = 'Администратор (.+)%[(%d+)%] заглушил игрока (.+)%[(%d+)%] на (%d+) минут. Причина: (.+)'}
}


function main()
    while not isSampAvailable() do wait(100) end


    sampRegisterChatCommand('pdnotf', function()
        -- print(v.ban)
    sampAddChatMessage("Payday Notifer "..(pdnotf and "activated" or "deactivated"), 0x01FFD5)
end)
    sampRegisterChatCommand('punisher', function()
        sampAddChatMessage("Punish Notifer"..(punishnotf and "activated" or "deactivated"), 0x01FFD5)
    end)
    wait(-1)
end

function sendvknotf(msg, host)
    local host = sampGetCurrentServerName()
    local acc = sampGetPlayerNickname(select(2,sampGetPlayerIdByCharHandle(playerPed))) .. '['..select(2,sampGetPlayerIdByCharHandle(playerPed))..']'
        math.randomseed(os.clock())
        local randomid = math.random(1, 10000000)
    -- print('https://api.vk.com/method/messages.send?user_id=' .. user_id .. '&message=' .. msg .. '&access_token=' .. token .. '&random_id=' .. randomid .. '&v=5.81')
    async_http_request('GET', 'https://api.vk.com/method/messages.send?user_id=' ..user_id..'&message='..msg..'&access_token=' ..token.. '&random_id=' .. randomid .. '&v=5.131', nil --[[параметры запроса]],
        function(response) -- вызовется при успешном выполнении и получении ответа
            print(response.text) -- response.text - текст ответа. ещё есть response.status_code и response.headers
        end,
        function(err) -- вызовется при ошибке, err - текст ошибки. эту функцию можно не указывать
            print(err)
        end)   
end


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 sampev.onServerMessage(color, text)
    for k, v in ipairs(punish) do
    if text:find('Вы купили ларец') then
        msg = '[Concept Car Luxury]\n !!! Вы купили Ларец "Concept Car Luxury" !!!'
        msg = u8(msg)
        msg = url_encode(msg)
        sendvknotf(msg)
    end
    if text:find(tostring(v.pd)) then
        if pdnotf then
        lvl, exp1, exp2 = text:match(tostring(v.pd))
        msg = '[ PayDay Notifer ]\n !!! Получен ПейДей !!! \n | Аккаунт: '..acc..' | \n | Сервер: '..host..' | \n | Уровень: ' .. lvl .. ' | \n | Респектов:  ' .. exp1 .. ' из ' .. exp2 .. ' | '
        msg = u8(msg)
        msg = url_encode(msg)
        -- sampAddChatMessage('PayDay hooked! LVL = ' .. lvl .. ' EXP = ' .. exp1 .. ' из ' .. exp2 , -1)
        sendvknotf(msg)
        end
    end
    if text:find(tostring(v.mute)) then
        local adminName, adminId, playerName, playerId, time, reason = text:match(tostring(v.mute))
            if punishnotf then
            msg = '[ Punish Notifer ] \n [ Новое наказание ] \n | Наказание: Мут | \n | Администратор: ' .. adminName .. '['.. adminId ..  '] | \n | Игрок: ' .. playerName .. '[' .. playerId .. '] | \n | Время наказания: ' .. time .. ' минут | \n | Причина: ' .. reason .. ' |'
            msg = u8(msg)
            msg = url_encode(msg)
            sendvknotf(msg)
            end
    end
    if text:find(tostring(v.kick)) then
        local adminName, adminId, playerName, playerId, reason = text:match(tostring(v.kick))
            if punishnotf then
            msg = '[ Punish Notifer ] \n [ Новое наказание ] \n | Наказание: Кик | \n | Администратор: ' .. adminName .. '['.. adminId ..  '] | \n | Игрок: ' .. playerName .. '[' .. playerId .. '] | \n | Причина: ' .. reason .. ' |'
            msg = u8(msg)
            msg = url_encode(msg)
            sendvknotf(msg)
            end
    end
    if text:find(tostring(v.warn)) then
        local adminName, adminId, playerName, playerId, warn, reason = text:match(tostring(v.warn))
            if punishnotf then
            msg = '[ Punish Notifer ] \n [ Новое наказание ] \n | Наказание: Варн | \n | Администратор: ' .. adminName .. '['.. adminId ..  '] | \n | Игрок: ' .. playerName .. '[' .. playerId .. '] | \n | Текущее количество варнов: ' .. warn .. '/3 | \n | Причина: ' .. reason .. ' |'
            msg = u8(msg)
            msg = url_encode(msg)
            sendvknotf(msg)
            end
    end
    if text:find(tostring(v.jail)) then
        local adminName, adminId, playerName, playerId, time, reason = text:match(tostring(v.jail))
            if punishnotf then
            msg = '[ Punish Notifer ] \n [ Новое наказание ] \n | Наказание: Деморган | \n | Администратор: ' .. adminName .. '['.. adminId ..  '] | \n | Игрок: ' .. playerName .. '[' .. playerId .. '] | \n | Время наказания: ' .. time .. ' минут | \n | Причина: ' .. reason .. ' |'
            msg = u8(msg)
            msg = url_encode(msg)
            end
    end
    if text:find(tostring(v.ban)) then
        local adminName, adminId, playerName, playerId, time, reason = text:match(tosting(v.ban))
            if punishnotf then
            msg = '[ Punish Notifer ] \n [ Новое наказание ] \n | Наказание: Бан | \n | Администратор: ' .. adminName .. '['.. adminId ..  '] | \n | Игрок: ' .. playerName .. '[' .. playerId .. '] | \n | Время наказания: ' .. time .. ' дней | \n | Причина: ' .. reason .. ' |'
            msg = u8(msg)
            msg = url_encode(msg)
            end
        end
    end
end

function async_http_request(method, url, args, resolve, reject)
    local request_lane = lanes.gen('*', {package = {path = package.path, cpath = package.cpath}}, function()
        local requests = require 'requests'
        local ok, result = pcall(requests.request, method, url, args)
        if ok then
            result.json, result.xml = nil, nil -- cannot be passed through a lane
            return true, result
        else
            return false, result -- return error
        end
    end)
    if not reject then reject = function() end end
    lua_thread.create(function()
        local lh = request_lane()
        while true do
            local status = lh.status
            if status == 'done' then
                local ok, result = lh[1], lh[2]
                if ok then resolve(result) else reject(result) end
                return
            elseif status == 'error' then
                return reject(lh[1])
            elseif status == 'killed' or status == 'cancelled' then
                return reject(status)
            end
            wait(0)
        end
    end)
end

так я думаю лучше
правда я так и не разобрался с библиотекой effil, оставлю её на завтра

кстати, я вспомнил почему я не ставил функцию в sendvknotify, потому что мл выдаёт ошибку [ML] (error) vk punish and payday.lua: C:\new white gta\moonloader\vk punish and payday.lua:79: attempt to concatenate global 'host' (a nil value), но не понял почему она возникает
 
Последнее редактирование:

meowprd

Тот самый Котовский
Проверенный
1,280
712
кстати, я вспомнил почему я не ставил функцию в sendvknotify, потому что мл выдаёт ошибку [ML] (error) vk punish and payday.lua: C:\new white gta\moonloader\vk punish and payday.lua:79: attempt to concatenate global 'host' (a nil value), но не понял почему она возникает
потому что ты пытаешься сделать конкатенацию строки с переменной, которая равна nil (пустоте), я об этом тебе писал
 

abbv

Потрачен
Автор темы
120
40
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
потому что ты пытаешься сделать конкатенацию строки с переменной, которая равна nil (пустоте), я об этом тебе писал
прости, я немного не понимаю что такое контактенация) мне нужно перевести переменную в строку?
 

abbv

Потрачен
Автор темы
120
40
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.

abbv

Потрачен
Автор темы
120
40
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
со string.format я разобрался, теперь вопрос в другом, почему в переменную нил уходит?
я же задаю параметры переменной
 

Hamer228

Новичок
21
12
Пиздеееец вы пацана задушили. Теперь у меня фобия выкладывать что-либо на форум XD
 
  • Грустно
Реакции: Bikuta_Hirasawa

abbv

Потрачен
Автор темы
120
40
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Пиздеееец вы пацана задушили. Теперь у меня фобия выкладывать что-либо на форум XD
да нет, почему задушили? мне сказали как сделать код красивее и лучше, и мне новый код -
Lua:
require 'lib.moonloader'
local encoding = require("encoding")
local sampev = require("samp.events")

encoding.default = 'CP1251'
u8 = encoding.UTF8

local pdnotf = true
local punishnotf = true
local host = ''
local acc = ''

local lanes = require('lanes').configure()

user_id = ''
token = ''

local msg = ''

local punish = {
    {ban = 'Администратор (.+)%[(%d+)%] забанил игрока (.+)%[(%d+)%] на (%d+) дней. Причина: (.+)'},
    {kick = 'Администратор (.+)%[(%d+)%] кикнул игрока (.+)%[(%d+)%]. Причина: (.+)'},
    {jail = 'Администратор (.+)%[(%d+)%] посадил игрока (.+)%[(%d+)%] в деморган на (%d+) минут. Причина: (.+)'},
    {pd = 'В данный момент у вас (%d+)%-%й уровень и (%d+)/(%d+) респектов'},
    {warn = 'Администратор (.+)%[(%d+)%] выдал предупреждение игроку (.+)%[(%d+)%] [(%d+)/3] Причина: (.+)'},
    {mute = 'Администратор (.+)%[(%d+)%] заглушил игрока (.+)%[(%d+)%] на (%d+) минут. Причина: (.+)'}
}


function main()
    while not isSampAvailable() do wait(100) end


    sampRegisterChatCommand('pdnotf', function()
        -- print(v.ban)
    sampAddChatMessage("Payday Notifer "..(pdnotf and "activated" or "deactivated"), 0x01FFD5)
end)
    sampRegisterChatCommand('punisher', function()
        sampAddChatMessage("Punish Notifer"..(punishnotf and "activated" or "deactivated"), 0x01FFD5)
    end)
    wait(-1)
end

function sendvknotf(msg, host)
    local host = sampGetCurrentServerName()
    local acc = sampGetPlayerNickname(select(2,sampGetPlayerIdByCharHandle(playerPed))) .. '['..select(2,sampGetPlayerIdByCharHandle(playerPed))..']'
        math.randomseed(os.clock())
        local randomid = math.random(1, 10000000)
    -- print('https://api.vk.com/method/messages.send?user_id=' .. user_id .. '&message=' .. msg .. '&access_token=' .. token .. '&random_id=' .. randomid .. '&v=5.81')
    async_http_request('GET', 'https://api.vk.com/method/messages.send?user_id=' ..user_id..'&message='..msg..'&access_token=' ..token.. '&random_id=' .. randomid .. '&v=5.131', nil --[[параметры запроса]],
        function(response) -- вызовется при успешном выполнении и получении ответа
            print(response.text) -- response.text - текст ответа. ещё есть response.status_code и response.headers
        end,
        function(err) -- вызовется при ошибке, err - текст ошибки. эту функцию можно не указывать
            print(err)
        end)  
end


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 sampev.onServerMessage(color, text)
    for k, v in ipairs(punish) do
    if text:find('Вы купили ларец') then
        msg = '[Concept Car Luxury]\n !!! Вы купили Ларец "Concept Car Luxury" !!!'
        msg = u8(msg)
        msg = url_encode(msg)
        sendvknotf(msg)
    end
    if text:find(tostring(v.pd)) then
        if pdnotf then
        lvl, exp1, exp2 = text:match(tostring(v.pd))
        msg = '[ PayDay Notifer ]\n !!! Получен ПейДей !!! \n | Аккаунт: '..acc..' | \n | Сервер: '..host..' | \n | Уровень: ' .. lvl .. ' | \n | Респектов:  ' .. exp1 .. ' из ' .. exp2 .. ' | '
        msg = u8(msg)
        msg = url_encode(msg)
        -- sampAddChatMessage('PayDay hooked! LVL = ' .. lvl .. ' EXP = ' .. exp1 .. ' из ' .. exp2 , -1)
        sendvknotf(msg)
        end
    end
    if text:find(tostring(v.mute)) then
        local adminName, adminId, playerName, playerId, time, reason = text:match(tostring(v.mute))
            if punishnotf then
            msg = '[ Punish Notifer ] \n [ Новое наказание ] \n | Наказание: Мут | \n | Администратор: ' .. adminName .. '['.. adminId ..  '] | \n | Игрок: ' .. playerName .. '[' .. playerId .. '] | \n | Время наказания: ' .. time .. ' минут | \n | Причина: ' .. reason .. ' |'
            msg = u8(msg)
            msg = url_encode(msg)
            sendvknotf(msg)
            end
    end
    if text:find(tostring(v.kick)) then
        local adminName, adminId, playerName, playerId, reason = text:match(tostring(v.kick))
            if punishnotf then
            msg = '[ Punish Notifer ] \n [ Новое наказание ] \n | Наказание: Кик | \n | Администратор: ' .. adminName .. '['.. adminId ..  '] | \n | Игрок: ' .. playerName .. '[' .. playerId .. '] | \n | Причина: ' .. reason .. ' |'
            msg = u8(msg)
            msg = url_encode(msg)
            sendvknotf(msg)
            end
    end
    if text:find(tostring(v.warn)) then
        local adminName, adminId, playerName, playerId, warn, reason = text:match(tostring(v.warn))
            if punishnotf then
            msg = '[ Punish Notifer ] \n [ Новое наказание ] \n | Наказание: Варн | \n | Администратор: ' .. adminName .. '['.. adminId ..  '] | \n | Игрок: ' .. playerName .. '[' .. playerId .. '] | \n | Текущее количество варнов: ' .. warn .. '/3 | \n | Причина: ' .. reason .. ' |'
            msg = u8(msg)
            msg = url_encode(msg)
            sendvknotf(msg)
            end
    end
    if text:find(tostring(v.jail)) then
        local adminName, adminId, playerName, playerId, time, reason = text:match(tostring(v.jail))
            if punishnotf then
            msg = '[ Punish Notifer ] \n [ Новое наказание ] \n | Наказание: Деморган | \n | Администратор: ' .. adminName .. '['.. adminId ..  '] | \n | Игрок: ' .. playerName .. '[' .. playerId .. '] | \n | Время наказания: ' .. time .. ' минут | \n | Причина: ' .. reason .. ' |'
            msg = u8(msg)
            msg = url_encode(msg)
            end
    end
    if text:find(tostring(v.ban)) then
        local adminName, adminId, playerName, playerId, time, reason = text:match(tosting(v.ban))
            if punishnotf then
            msg = '[ Punish Notifer ] \n [ Новое наказание ] \n | Наказание: Бан | \n | Администратор: ' .. adminName .. '['.. adminId ..  '] | \n | Игрок: ' .. playerName .. '[' .. playerId .. '] | \n | Время наказания: ' .. time .. ' дней | \n | Причина: ' .. reason .. ' |'
            msg = u8(msg)
            msg = url_encode(msg)
            end
        end
    end
end

function async_http_request(method, url, args, resolve, reject)
    local request_lane = lanes.gen('*', {package = {path = package.path, cpath = package.cpath}}, function()
        local requests = require 'requests'
        local ok, result = pcall(requests.request, method, url, args)
        if ok then
            result.json, result.xml = nil, nil -- cannot be passed through a lane
            return true, result
        else
            return false, result -- return error
        end
    end)
    if not reject then reject = function() end end
    lua_thread.create(function()
        local lh = request_lane()
        while true do
            local status = lh.status
            if status == 'done' then
                local ok, result = lh[1], lh[2]
                if ok then resolve(result) else reject(result) end
                return
            elseif status == 'error' then
                return reject(lh[1])
            elseif status == 'killed' or status == 'cancelled' then
                return reject(status)
            end
            wait(0)
        end
    end)
end

так я думаю лучше
правда я так и не разобрался с библиотекой effil, оставлю её на завтра
нравится намного больше чем старый
 
  • Нравится
Реакции: Hamer228