Парсинг диалога бана

alex.morozov

Участник
Автор темы
104
9
Версия MoonLoader
.026-beta
Добрый вечер уважаемые знатоки Lua, можете пожалуйста помочь с регулярными вырожениями, не получается у меня спарсить определенный текст, а именно: Ник Администратора, Причина, Дата выдачи, Дата разбана, Время до разбана и сумма залога, пытаюсь как на скрине но выдает весь текст, буду очень благодарен вам
 

Вложения

  • Screenshot_690.png
    Screenshot_690.png
    107.5 KB · Просмотры: 70
  • Screenshot_691.png
    Screenshot_691.png
    26.4 KB · Просмотры: 70

plalkeo

Известный
809
320
Добрый вечер уважаемые знатоки Lua, можете пожалуйста помочь с регулярными вырожениями, не получается у меня спарсить определенный текст, а именно: Ник Администратора, Причина, Дата выдачи, Дата разбана, Время до разбана и сумма залога, пытаюсь как на скрине но выдает весь текст, буду очень благодарен вам
скинь сюда полностью текст (можешь заменить ники на My_Name, Admin_Name)
 

alex.morozov

Участник
Автор темы
104
9
скинь сюда полностью текст (можешь заменить ники на My_Name, Admin_Name)
Администратор: Sam_Mason
Причина: жбадм123123
Дата блокировки: 2024-07-10 17:08:32
Дата разблокировки: 2024-07-25 17:08:31
До разблокировки еще 14 дня(ей).


Если вы не согласны c блокировкой аккаунта,
вы можете подать заявку на разблокировку на форуме: arizona-rp.com

Ваши друзья или Вы сами можете разбанить данный аккаунт,
внеся залог за разбан в размере $855000000
Для внесения залога используйте команду /pledge
 

kyrtion

Известный
1,107
401
Lua:
local text = [[
Администратор: Sam_Mason
Причина: жб адм / 123123
Дата блокировки: 2024-07-10 17:08:32
Дата разблокировки: 2024-07-25 17:08:31
До разблокировки еще 14 дня(ей).


Если вы не согласны c блокировкой аккаунта,
вы можете подать заявку на разблокировку на форуме: arizona-rp.com

Ваши друзья или Вы сами можете разбанить данный аккаунт,
внеся залог за разбан в размере $855000000
Для внесения залога используйте команду /pledge
]]

text = text
  :gsub('{%x%x%x%x%x%x}', '')
  :gsub('\t', '')

local ban = {
  admin   = '',
  reason  = '',
  start   = '',
  expired = '',
  days    = ''
}

local regExpBan = {
  admin = '^Администратор: (%S+)$',
  reason = '^Причина: (.*)$',
  start = '^Дата блокировки: (.*)$',
  expired = '^Дата разблокировки: (.*)$',
  days = '^До разблокировки еще (%d+) дня%(ей%)%.$'
}

for line in text:gmatch('[^\n]+') do
  if line:find(regExpBan.admin) then
    ban.admin = line:match(regExpBan.admin)
  -- elseif ... then
    -- ...
  end
end

print(ban.admin) -- Result: "Sam_Mason"
 
  • Нравится
Реакции: Mamashin

alex.morozov

Участник
Автор темы
104
9
Lua:
local text = [[
Администратор: Sam_Mason
Причина: жб адм / 123123
Дата блокировки: 2024-07-10 17:08:32
Дата разблокировки: 2024-07-25 17:08:31
До разблокировки еще 14 дня(ей).


Если вы не согласны c блокировкой аккаунта,
вы можете подать заявку на разблокировку на форуме: arizona-rp.com

Ваши друзья или Вы сами можете разбанить данный аккаунт,
внеся залог за разбан в размере $855000000
Для внесения залога используйте команду /pledge
]]

text = text
  :gsub('{%x%x%x%x%x%x}', '')
  :gsub('\t', '')

local ban = {
  admin   = '',
  reason  = '',
  start   = '',
  expired = '',
  days    = ''
}

local regExpBan = {
  admin = '^Администратор: (%S+)$',
  reason = '^Причина: (.*)$',
  start = '^Дата блокировки: (.*)$',
  expired = '^Дата разблокировки: (.*)$',
  days = '^До разблокировки еще (%d+) дня%(ей%)%.$'
}

for line in text:gmatch('[^\n]+') do
  if line:find(regExpBan.admin) then
    ban.admin = line:match(regExpBan.admin)
  -- elseif ... then
    -- ...
  end
end

print(ban.admin) -- Result: "Sam_Mason"
а вместо text нужно указывать dialogText?

Lua:
local text = [[
Администратор: Sam_Mason
Причина: жб адм / 123123
Дата блокировки: 2024-07-10 17:08:32
Дата разблокировки: 2024-07-25 17:08:31
До разблокировки еще 14 дня(ей).


Если вы не согласны c блокировкой аккаунта,
вы можете подать заявку на разблокировку на форуме: arizona-rp.com

Ваши друзья или Вы сами можете разбанить данный аккаунт,
внеся залог за разбан в размере $855000000
Для внесения залога используйте команду /pledge
]]

text = text
  :gsub('{%x%x%x%x%x%x}', '')
  :gsub('\t', '')

local ban = {
  admin   = '',
  reason  = '',
  start   = '',
  expired = '',
  days    = ''
}

local regExpBan = {
  admin = '^Администратор: (%S+)$',
  reason = '^Причина: (.*)$',
  start = '^Дата блокировки: (.*)$',
  expired = '^Дата разблокировки: (.*)$',
  days = '^До разблокировки еще (%d+) дня%(ей%)%.$'
}

for line in text:gmatch('[^\n]+') do
  if line:find(regExpBan.admin) then
    ban.admin = line:match(regExpBan.admin)
  -- elseif ... then
    -- ...
  end
end

print(ban.admin) -- Result: "Sam_Mason"
не работает почему то, вот код:
code:
if dialogTitle:find('Этот аккаунт заблокирован!') then
        for line in dialogText:gmatch('[^\n]+') do
            if line:find(regExpBan.admin) then
                ban.admin = line:match(regExpBan.admin)
                print(ban.admin)
                sendTelegram('Аккаунт заблокирован!%E2%9D%97%EF%B8%8F\n\nАккаунт: '..getBotNick()..'\nСервер: '..servername..'\nАдминистратор: '..ban.admin)
            end
        end
    end
не добавил только text, вместе него поставил dialogText
 
Последнее редактирование:

kyrtion

Известный
1,107
401
не добавил только text, вместе него поставил dialogText
А ты попробуй протестировать, у тебя в скриптах regExpBan.admin возвращается строковое значение? Я оставил метод чтобы в диалоге проверяло по каждой строке. Если не будет совпадать либо ты ищешь на nil, ничего не изменится.

Советую полностью вставить и рефакторить. Ведь твои навыки нужны для программирования. Вот допустим у тебя будет большой проект и просишь как это сделать? Вставляешь только цикл да поменяв на dialogText. А что остальное, ничего? Ваши проблемы

А чем проблемы связаны? О том что ты не внимательно читаешь код, что там будет вызвать неправильный/проигнорит метод, и так далее.
 
Последнее редактирование:

alex.morozov

Участник
Автор темы
104
9
А ты попробуй протестировать, у тебя в скриптах regExpBan.admin возвращается строковое значение? Я оставил метод чтобы в диалоге проверяло по каждой строке. Если не будет совпадать либо ты ищешь на nil, ничего не изменится.

Советую полностью вставить и рефакторить. Ведь твои навыки нужны для программирования. Вот допустим у тебя будет большой проект и просишь как это сделать? Вставляешь только цикл да поменяв на dialogText. А что остальное, ничего? Ваши проблемы

А чем проблемы связаны? О том что ты не внимательно читаешь код, что там будет вызвать неправильный/проигнорит метод, и так далее.
бро, у меня все работает без ошибок но почему то не отправляет в тг и не принтит
 

kyrtion

Известный
1,107
401
бро, у меня все работает без ошибок но почему то не отправляет в тг и не принтит
Скинь полностью исходник диалога в код на TXT.
После
dialogText = dialogText
:gsub('{%x%x%x%x%x%x}', '')
:gsub('\t', '')

Добавить print(dialogText)
(кст копировать только в moonloader.log, в сампфункс не выводится с табом)
 

alex.morozov

Участник
Автор темы
104
9
Скинь полностью исходник диалога в код на TXT.
После
dialogText = dialogText
:gsub('{%x%x%x%x%x%x}', '')
:gsub('\t', '')

Добавить print(dialogText)
(кст копировать только в moonloader.log, в сампфункс не выводится с табом)
у меня не для сампа, у меня раксамп