local sampev = require('samp.events')
local sf = string.format
local vipChat = {}
local banWords = { 'купл', 'прод', 'сда', 'sell', 'buy', 'бмен' }
local rateMessage = 10 -- sec
local function toLowerCase(str)
return select(1, string.gsub(str, '([A-ZА-ЯЁ])', function(c)
return string.char(string.byte(c) + (c == 'ё' and 16 or 32))
end))
end
local function removeOldMessages()
local clock = os.clock()
for i, chat in ipairs(vipChat) do
local timer = clock - chat.clock
if timer >= rateMessage then
table.remove(vipChat, i)
break
end
end
end
local function addToVipChat(typeVip, nickname, id, message)
local tabl = {
type = typeVip,
nickname = nickname,
id = id,
message = message,
clock = os.clock()
}
table.insert(vipChat, tabl)
end
local function isBypassAdInVipChat(typeVip, content)
local lowContect = toLowerCase(content)
if typeVip == 'PREMIUM' or typeVip == 'VIP' or typeVip == 'FOREVER' then
for _, word in ipairs(banWords) do
if lowContect:find(word) then
return true -- использование return то цикл прерывается и вернет функцию значение
end
end
end
return false
end
function sampev.onServerMessage(color, text)
-- заменяет любой цветной hex в формате {FFFFFF} на пустое
-- советую, это очень удобно для парсинга данных
text = text:gsub('{%x%x%x%x%x%x}', '')
if text:find('^%[.-%] %S-%[%d+%]: .*$') then
local typeVip, playerNickname, playerId, content = text:match('^%[(.-)%] (%S-)%[(%d+)%]: (.*)$')
if isBypassAdInVipChat(typeVip, content) then
-- если является просто сообщение в /vr и похоже на реклама
addToVipChat(typeVip, playerNickname, playerId, content)
local time = os.date('%H:%M:%S', os.time())
local message = sf(
'[%s] [%s] %s (%s): %s', -- [23:32:21] [PREMIUM] Nick_Name (228): Продам дом
time, typeVip, playerNickname, playerId, content
)
local command = sf('/mute %s 120 обход рекламы vr', playerNickname)
-- в команде /mute разве можно указать никнейм? неожиданно
lua_thread.create(function()
wait(1)
print(message)
sampSendChat(command)
wait(1000)
setVirtualKeyDown(0x77, true)
setVirtualKeyDown(0x77, false)
end)
end
end
end
function main()
repeat wait(0) until isSampAvailable() end
while true do
wait(300) -- ограничим на 300мс
removeOldMessages()
end
end