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