ChatMessage Blocker (for lua developers).

65raz

Новичок
Автор темы
10
2
Нашел скрипт который блокирует сообщения в чате, он раньше работал, но теперь он почему-то не работает. Потому-что при скачивании скрипта он сам написал что он не работает, но исходный код оставил. Помогите сделать его рабочим.
1:
script_name("ChatMessage Blocker")
script_author("Serhiy_Rubin")
local sampev = require 'lib.samp.events'
local log = ""
local adress = "moonloader\\config\\ChatMessage Blocker.ini"
if not doesDirectoryExist("moonloader\\config") then createDirectory("moonloader\\config") end
if not doesFileExist(adress) then
    file = io.open(adress, "a")
    file:write("Объявление: (.+). Прислал: (.+). Тел: (.+) | <[OFF]>\nОтредактировал сотрудник News (.+): (.+) | <[OFF]>\nПроверку произвел сотрудник News (.+): (.+) | <[OFF]>\n-----------=== Государственные Новости ===----------- | <[OFF]>\nНовости: (.+): (.+) | <[OFF]>\nАдминистратор: (.+) выдал warn (.+). Причина: (.+) | <[OFF]>\nАдминистратор: (.+) забанил (.+). Причина: (.+) | <[OFF]>\nАдминистратор: (.+) кикнул (.+). Причина: (.+) | <[OFF]>\n(.+) получил бан чата от администратора (.+). Причина: (.+) | <[OFF]>\nАдминистратор (.+) снял бан чата у (.+) | <[OFF]>\n(.+) одобрил заявку на смену ника: (.+) » (.+) | <[OFF]>\n")
    file:flush()
    io.close(file)
end

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end
    ReadText()
    while true do
        wait(0)
        if sampIsDialogActive() and sampGetDialogCaption() == "ChatMessage Blocker {FFFFFF}Автор: Serhiy_Rubin" then
            if wasKeyPressed(112) then -- F1
                local S1, S2 = string.match(dialogLine[DialogList], "(.+) | %<%[(.+)%]%>")
                local S3 = (S2 == "OFF" and "ON" or "OFF")
                OnOff = (S3 == "OFF" and "{f01616}СООБЩЕНИЕ В ЧАТЕ НЕ СКРЫВАЕТСЯ" or "{42eb00}СООБЩЕНИЕ В ЧАТЕ СКРЫВАЕТСЯ")
                local S4 = string.format("%s | <[%s]>", S1, S3)
                local file = io.open(adress, "r")
                local fileText = ""
                MSG = {}
                if file ~= nil then
                    for line in file:lines() do
                        if line == dialogLine[DialogList] then
                            dialogLine[DialogList] = S4
                            line = S4
                        end
                        if #line > 0 and string.find(line, "(.+) | %<%[(.+)%]%>") then
                            local S5, S6 = string.match(line, "(.+) | %<%[(.+)%]%>")
                            if S6 == "ON" then
                                MSG[#MSG + 1] = S5
                            end
                        end
                        fileText = fileText..line.."\n"
                    end   
                    io.close(file)
                end
                file = io.open(adress, "w")
                file:write(fileText)
                file:flush()
                io.close(file)
                Dialog(2)
            end
            if wasKeyPressed(113) then -- F2
                local file = io.open(adress, "r")
                local fileText = ""
                if file ~= nil then
                    for line in file:lines() do
                        if line ~= dialogLine[DialogList] then
                            fileText = fileText..line.."\n"
                        end
                    end   
                    io.close(file)
                end
                file = io.open(adress, "w")
                file:write(fileText)
                file:flush()
                io.close(file)
                Dialog(0)
            end
        end
    end
end

function ReadText()
    local file = io.open(adress, "r")
    MSG = {}
    if file ~= nil then
        for string in file:lines() do
            if #string > 0 and string.find(string, "(.+) | %<%[(.+)%]%>") then
                local S1, S2 = string.match(string, "(.+) | %<%[(.+)%]%>")
                if S2 == "ON" then
                    MSG[#MSG + 1] = S1
                end
            end
        end
        io.close(file)
    end
end

function sampev.onServerMessage(color, text)
    for i = 1, #MSG do
        if string.find(text, MSG[i]) then
            log = "["..os.date("%X",os.time()).."] "..text.."\n"..log
            return false
        end
    end
end

function sampev.onSendCommand(cmd)
    if cmd:lower() == "/blocker" then
        lua_thread.create(function() Dialog(0) end)
        return false
    end
    if cmd:lower() == "/blocker list" then
        lua_thread.create(function()
            sampShowDialog(0, "Заблокированные сообщения", log, "Закрыть", "", 4)
        end)
        return false
    end
end

function Dialog(int)
    if int == 0 then
        ReadText()
        stopThread = true
        dialogLine = {}
        DialogText = "{f01616}Скрытие отключено. {FFFFFF}| {42eb00}Скрытие включено.\n{59fc30}Добавить новую строку для блокировки\n"
        local file = io.open(adress, "r")
        MSG = {}
        if file ~= nil then
            for string in file:lines() do
                if #string > 0 and string.find(string, "(.+) | %<%[(.+)%]%>") then
                    local S1, S2 = string.match(string, "(.+) | %<%[(.+)%]%>")
                    if S2 == "ON" then
                        MSG[#MSG + 1] = S1
                    end
                    dialogLine[#dialogLine + 1] = string
                    DialogText = DialogText..(S2 == "OFF" and "{f01616}" or "{42eb00}")..S1.."\n"
                end
            end
            io.close(file)
        end
        sampShowDialog(5837, "ChatMessage Blocker  {FFFFFF}Автор: Serhiy_Rubin", DialogText, "Выбрать", "Закрыть", 5)
        lua_thread.create(function()
            wait(100)
            stopThread = false
            repeat
                wait(0)
                local result, button, list, input = sampHasDialogRespond(5837)
                if result then
                    if button == 1 and sampGetDialogCaption(  ) == "ChatMessage Blocker  {FFFFFF}Автор: Serhiy_Rubin" then
                        if list == 0 then
                            style = 1
                            Dialog(1)
                        else
                            style = 1
                            DialogList = list
                            local S1, S2 = string.match(dialogLine[DialogList], "(.+) | %<%[(.+)%]%>")
                            OnOff = (S2 == "OFF" and "{f01616}СООБЩЕНИЕ В ЧАТЕ НЕ СКРЫВАЕТСЯ" or "{42eb00}СООБЩЕНИЕ В ЧАТЕ СКРЫВАЕТСЯ")
                            Dialog(2)
                        end
                    end
                end
            until not sampIsDialogActive() or stopThread
        end)
    else
        stopThread = true
        if int == 1 or int == 2 then DialogText = "\n\t{FFFFFF}В строке должны быть неизменные фразы/символы.\n\tСимволы которые изменяются от начала и до конца заменяйте на (.+)\n\n     Пример\n\tСтрока в чате: {59fc30}Объявление: Куплю дом. Прислал: Serhiy_Rubin. Тел: 22222\n\t{FFFFFF}Строка для блокировки: {59fc30}Объявление: (.+). Прислал: (.+). Тел: (.+)" end
        if int == 2 then DialogText = DialogText.."\n\n\n\t\t\t"..OnOff.."\n\t\t\t{FFFFFF}НАЖМИТЕ {59fc30}F1{FFFFFF} ЧТОБЫ СМЕНИТЬ РЕЖИМ\n\t\t\t{FFFFFF}НАЖМИТЕ {59fc30}F2{FFFFFF} ЧТОБЫ УДАЛИТЬ" end
        sampShowDialog(5838, "ChatMessage Blocker {FFFFFF}Автор: Serhiy_Rubin", DialogText, "Выбрать", "Закрыть", style)
        if int == 2 then
            repeat wait(0) until sampIsDialogActive(  )
            sampSetCurrentDialogEditboxText(string.match(dialogLine[DialogList], "(.+) | %<%[.+%]%>"))
        end
        lua_thread.create(function()
            wait(100)
            stopThread = false
            repeat
                wait(0)
                local result, button, list, input = sampHasDialogRespond(5838)
                if result then
                    if button == 1 and sampGetDialogCaption(  ) == "ChatMessage Blocker {FFFFFF}Автор: Serhiy_Rubin" then
                        if int == 1 and #input > 0 then
                            local file = io.open(adress, "a")   
                            file:write(input.." | <[ON]>\n")
                            file:flush()
                            io.close(file)
                            Dialog(0)
                        end
                        if int == 2 and #input > 0 then
                            local file = io.open(adress, "r")
                            local fileText = ""
                            if file ~= nil then
                                for line in file:lines() do
                                    if line == dialogLine[DialogList] then
                                        local S1, S2 = string.match(dialogLine[DialogList], "(.+) | %<%[(.+)%]%>")
                                        line = input.." | <["..S2.."]>"
                                    end
                                    fileText = fileText..line.."\n"
                                end   
                                io.close(file)
                            end
                            file = io.open(adress, "w")
                            file:write(fileText)
                            file:flush()
                            io.close(file)
                            Dialog(0)
                        end
                    else
                        Dialog(0)
                    end
                end
            until not sampIsDialogActive() or stopThread
        end)
    end
end