Не работает авто-репорт,хелп

senqa

Новичок
Автор темы
2
0
Версия MoonLoader
.027.0-preview
code:
 imgui.SetNextWindowPos(imgui.ImVec2(imgui.GetIO().DisplaySize.x / 2, imgui.GetIO().DisplaySize.y / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(537, 450), imgui.Cond.FirstUseEver)   
        imgui.Begin(u8'Авто-Репорт', tableOfNew.AutoReport, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse)
        imgui.BeginChild('##i_report', imgui.ImVec2(520, 30), true)       
        if #reports > 0 then
            imgui.PushTextWrapPos(500)
            imgui.TextUnformatted(u8(reports[1].nickname..'['..reports[1].id..']: '..reports[1].textP))
            imgui.PopTextWrapPos()
        end
        imgui.EndChild()
        imgui.Separator()
        imgui.PushItemWidth(520)
        imgui.InputText(u8'##answer_input_report', tableOfNew.answer_report)
        imgui.PopItemWidth()
        imgui.Text(u8'                                                          Введите ответ')
        imgui.Separator()
        if imgui.Button(u8'Работать по ID', imgui.ImVec2(100, 0)) then
            if #reports > 0 then
                if reports[1].textP:find('%d+') then
                    tableOfNew.AutoReport.v = false
                    imgui.ShowCursor = false
                    lua_thread.create(function()
                        local id = reports[1].textP:match('(%d+)')
                        sampSendChat('/pm '..reports[1].id..' Уважаемый игрок, начинаю работу по вашей жалобе!')
                        wait(1000)
                        sampSendChat('/re '..id)
                        refresh_current_report()
                    end)

еще code:
 if text:find('Репорт от (.*)%[(%d+)%]: %{FFCD00%}(.*)') then
        local Rnickname, Rid, RtextP = text:match('Репорт от (.*)%[(%d+)%]: %{FFCD00%}(.*)')
        reports[#reports + 1] = {nickname = Rnickname, id = Rid, textP = RtextP}
    end
    if #reports > 0 then
        if color == -6732289 then
            for k, v in pairs(reports) do
                if k == 1 then
                    if not tableOfNew.AutoReport.v then
                        if text:find('%[.%] (.*)%[(%d+)%] для '..reports[1].nickname..'%['..reports[1].id..'%]: (.*)') then
                            refresh_current_report()
                        end
                    end
                elseif #reports > 1 then
                    if text:find('%[.%] (.*)%[(%d+)%] для '..reports[k].nickname..'%['..reports[k].id..'%]: (.*)') then
                        table.remove(reports, k)
                    end
                end
            end
        end
    end
    if elements.checkbox.enableAutoReport.v then
        if text:find('Репорт от (.*)%[(%d+)%]: %{FFCD00%}'..u8:decode(elements.input.textFindAutoReport.v)) then
            if elements.input.textFindAutoReport.v ~= '' and elements.input.answerAutoReport.v ~= '' then
                local nickRep, idRep = text:match('Репорт от (%w+_?%w+)%[(%d+)%]: %{FFCD00%}'..u8:decode(elements.input.textFindAutoReport.v))
                answer_flets[#answer_flets + 1] = ('/pm '..idRep..' '..u8:decode(elements.input.answerAutoReport.v))
            else
                sampAddChatMessage('{FF0000}[Ошибка] {FF8C00}Вы не указали ответ/поисковой текст в авто-ответчике', stColor)
            end

не вижу смысла кидать фул код админтулса,но мне нужно что бы находило репорт от игроков,щас прикреплю чатлог

[17:34:32] Репорт от Kool_Aura[191]: {FFFFFF}Инвайты в гетто открыты?

[17:34:33] Репорт от Kristina_Demon[286]: {FFFFFF}прошу сп
 
Последнее редактирование:
  • Bug
Реакции: bruskin

z1qqurat

Участник
60
13
text:find('Репорт от (.*)%[(%d+)%]: %{FFCD00%}'..u8:decode(elements.input.textFindAutoReport.v))
Так у тебя по паттерну получается:
Репорт от Kool_Aura[191]: {FFCD00}Инвайты в гетто открыты?
вместо
Репорт от Kool_Aura[191]: {FFFFFF}Инвайты в гетто открыты?

Сделай как написано выше, а вообще можно и упустить эти цвета и без них строку читать
по типу:
"^ Репорт от (.+)%[(%d+)%]: (.+)"
 

Oleg Sleash

Участник
68
97
Lua:
if text:find('Репорт от (.-)%[(%d+)%]%: %{%w%w%w%w%w%w%}(.+)$') then
    local repNick, repID, repText = text:match('Репорт от (.-)%[(%d+)%]: %{%w%w%w%w%w%w%}(.+)$')
    print(repNick, tonumber(repID), repText)
end
Ввод:
Репорт от Kool_Aura[191]: {FFFFFF}Инвайты в гетто открыты?
Вывод:
Kool_Aura 191 Инвайты в гетто открыты?
 
  • Bug
Реакции: qdIbp

kyrtion

Известный
657
241
если работаешь с чатом, не в диалоге, то лучше создавать новый массив в начале main().
и затем в onServerMessage накапливать репорты.
чекать что там ответили неотвеченные репорты - проверять на этот отправитель репорта - отнимать массив.
а текущий, который ты смотришь - не нужно отнимать, а добавить что там стоит предупреждение [Отвечен].

Если несколько репорты, и в одном отправитель - добавить в массив reports[\i].messages[#reports[\i].messages+1] = 'тут текст'[/I][/I]
 

tfornik

Известный
309
222

Oleg Sleash

Участник
68
97
Если уж говорить о том, что "нахуя так много %w", то проще уже вот так:
Lua:
if text:find('Репорт от (.-)%[(%d+)%]%: %{(%w-)%}(.+)$') then
local repNick, repID, _, repText = text:match('Репорт от (.-)%[(%d+)%]: %{(%w-)%}(.+)$')
print(repNick, tonumber(repID), repText)
end
как по мне более надёжно указывать точное количество искомых символов, если это возможно
 

wojciech?

Известный
213
127
как по мне более надёжно указывать точное количество искомых символов, если это возможно
если уж на то пошло, то лучше указать {FFFFFF}, это статичная часть строки и смысла применять там шаблоны нет