Извлечение информации из текста (onServerMessage) помощь

saradaken

Участник
Автор темы
43
6
Версия MoonLoader
Другое
Привет, я пытаюсь получить баланс или другие значения в сообщении payday, но я не могу получить зарплату и azcoin. Я думаю, что я правильно ввел текст в text:find, но он возвращает 0. помощь

1726998134253.png
1726998173712.png


Lua:
function sampev.onServerMessage(color, text)
    local host = sampGetCurrentServerName()
    local acc = sampGetPlayerNickname(select(2, sampGetPlayerIdByCharHandle(playerPed))) .. '[' .. select(2, sampGetPlayerIdByCharHandle(playerPed)) .. ']'
    

    if text:find('Текущая сумма в банке: %$%d+') then
        bankAmount = text:match('Текущая сумма в банке: %$(%d+)')
    end

    if text:find('Текущая сумма на депозите: %$%d+') then
        depositAmount = text:match('Текущая сумма на депозите: %$(%d+)')
    end
    
    if text:find('Общая заработная плата: %$%d+') then
        salary = text:match('Общая заработная плата: %$(%d+)')
    end
    
    if text:find('Баланс на донат-счет: %d+') then
        azcoin = text:match('Баланс на донат-счет: (%d+)')
    end
    

    if text:find('В данный момент у вас (%d+)%-%й уровень и (%d+)/(%d+) респектов') then
        if pdnotf then
            lua_thread.create(function()
                local lvl, exp1, exp2 = text:match('В данный момент у вас (%d+)%-%й уровень и (%d+)/(%d+) респектов')
                msg = string.format([[
                {
                    "content": null,
                    "embeds": [
                      {
                        "title": "PayDay Notifier",
                        "description": "!!! Получен ПейДей !!!\nАккаунт: %s\nСервер: %s\nУровень: %d\nРеспектов: %d/%d\nТекущая сумма в банке: $%d\nТекущая сумма на депозите: $%d\nОбщая заработная плата: $%d\nБаланс на донат-счет: %d",
                        "color": 16711757
                      }
                    ],
                    "attachments": []
                }
                ]], acc, host, lvl, exp1, exp2, tonumber(bankAmount) or 0, tonumber(depositAmount) or 0, tonumber(salary) or 0, tonumber(azcoin) or 0)

                sendDiscordWebhook('https://discord.com/api/webhooks/sdsssssssssssssss', msg)
            end)
        end
    end
    
    


end
 

makson4ck Pauza

Участник
36
14
Я не понимаю, почему он не находит значение, но можно использовать bankAmount и depositAmount или другие переменные, только salary возвращает 0.

Lua:
    if text:find('Общая заработная плата: %$%d+')then
        salary = text:match('Общая заработная плата: %$(%d+)')
    end

Lua:
function sampev.onServerMessage(color, text)

    local host = sampGetCurrentServerName()
    local acc = sampGetPlayerNickname(select(2, sampGetPlayerIdByCharHandle(playerPed))) .. '[' .. select(2, sampGetPlayerIdByCharHandle(playerPed)) .. ']'
   

    if text:find('Текущая сумма в банке: %$%d+') then --succeed
        bankAmount = text:match('Текущая сумма в банке: %$(%d+)')
    end

    if text:find('Текущая сумма на депозите: %$%d+') then --succeed
        depositAmount = text:match('Текущая сумма на депозите: %$(%d+)')
    end
   
    if text:find('Общая заработная плата: %$%d+')then
        salary = text:match('Общая заработная плата: %$(%d+)')
    end
   

    if text:find('В данный момент у вас (%d+)%-%й уровень и (%d+)/(%d+) респектов') then
        if pdnotf then
            lua_thread.create(function()
                local lvl, exp1, exp2 = text:match('В данный момент у вас (%d+)%-%й уровень и (%d+)/(%d+) респектов')
                msg = string.format([[
                {
                    "content": null,
                    "embeds": [
                      {
                        "title": "PayDay Notifier",
                        "description": "!!! Получен ПейДей !!!\nАккаунт: %s\nСервер: %s\nУровень: %d\nРеспектов: %d/%d\nТекущая сумма в банке: $%d\nТекущая сумма на депозите: $%d\nОбщая заработная плата: $%d",
                        "color": 16711757
                      }
                    ],
                    "attachments": []
                }
                ]], acc, host, lvl, exp1, exp2, tonumber(bankAmount) or 0, tonumber(depositAmount) or 0, tonumber(salary) or 0)

                sendDiscordWebhook('url', msg)
            end)
        end
    end
   
   


end
Попробуй:
Lua:
if text:find('Общая заработная плата: (.+)') then
        salary = text:match('Общая заработная плата: (.+)')
    end
    
    if text:find('Баланс на донат-счет: (.+)') then
        azcoin = text:match('Баланс на донат-счет: (.+)')
    end
Если не получится то значит что-то с текстом который ищется, возможно не правильно написал текст который должен искаться, если получится то так и оставь)
 
  • Нравится
Реакции: saradaken

Lance_Sterling

Известный
992
354
А зачем кучу регулярок делать? Конечная, и начальная строка есть, все работает
Lua:
local getPayday = false
local listPayday = {}

function sampev.onServerMessage(color, text)
    -->> payday
    if color == 1941201407 and text:find('^_+Банковский чек_+$') then
        getPayday = true
    end

    if getPayday then
        local cleanText = text:gsub('_+', ''):gsub('{.-}', '')
        table.insert(listPayday, cleanText)
    end

    if color == 1941201407 and text:find('^_+$') then
        local message = table.concat(listPayday, '\\n')
        local webhookPayload = string.format([[
        {
            "content": null,
            "embeds": [
              {
                "title": "PayDay Notification",
                "description": "%s",
                "color": 16711757
              }
            ],
            "attachments": []
        }
        ]], message)

        SendWebhook('url', webhookPayload)

        getPayday = false
        listPayday = {}
    end
    -->> payday
end
Посмотреть вложение 252471
Зачем делать такую херню? При любом лаге сервера у тебя все пойдет по пизде. Ну например лагучее говно под названием аризона решит резко залагать на 2 сек под видом пейдея (такое может быть). И в этот момент какой то чудик например напишет в чат какое то сообщение, и скрипт любезно всосет его

Попробуй:
Lua:
if text:find('Общая заработная плата: (.+)') then
        salary = text:match('Общая заработная плата: (.+)')
    end
   
    if text:find('Баланс на донат-счет: (.+)') then
        azcoin = text:match('Баланс на донат-счет: (.+)')
    end
Если не получится то значит что-то с текстом который ищется, возможно не правильно написал текст который должен искаться, если получится то так и оставь)
Ебаный в рот «-» экранируемый символ. К тому же такой подход может быть херовым. Ну вот вспомните как боты на ферме танцевали, потому что автор еблан и не вписал все сообщение с чата в регулярное выражение.
 

saradaken

Участник
Автор темы
43
6
Попробуй:
Lua:
if text:find('Общая заработная плата: (.+)') then
        salary = text:match('Общая заработная плата: (.+)')
    end
   
    if text:find('Баланс на донат-счет: (.+)') then
        azcoin = text:match('Баланс на донат-счет: (.+)')
    end
Если не получится то значит что-то с текстом который ищется, возможно не правильно написал текст который должен искаться, если получится то так и оставь)

Нет, не работает.Я думаю, что я ввел правильно.

1727082383474.png
 

Lance_Sterling

Известный
992
354
Нет, не работает.Я думаю, что я ввел правильно.

Посмотреть вложение 252531
Выше я написал почему
Ебаный в рот «-» экранируемый символ. К тому же такой подход может быть херовым. Ну вот вспомните как боты на ферме танцевали, потому что автор еблан и не вписал все сообщение с чата в регулярное выражение.
 

Albertio

Attention! Thanks for your attention.
887
717
Полностью рабочий код, сам тестировал
Lua:
local patternTable = {
    'Текущая сумма в банке: %$(%d+) {33AA33}%(%+%$%d+%)',
    'Текущая сумма на депозите: %$(%d+) {33AA33}%(%+%$%d+%)',
    'В данный момент у вас (%d+)-й уровень и (%d+)/(%d+) респектов {33AA33}%(%+%d+ EXP%)',
    'Общая заработная плата: %$(%d+)',
    'Баланс на донат%-счет: (%d+) AZ {ff6666}%(%+%d+ AZ%)'
}

function sampev.onServerMessage(color, text)
    if text:find(u8:decode(patternTable[1])) then bankAmt = text:match(u8:decode(patternTable[1])) end
    if text:find(u8:decode(patternTable[2])) then depAmt = text:match(u8:decode(patternTable[2])) end
    if text:find(u8:decode(patternTable[3])) then lvl, exp1, exp2 = text:match(u8:decode(patternTable[3])) end
    if text:find(u8:decode(patternTable[4])) then salary = text:match(u8:decode(patternTable[4])) end
    if text:find(u8:decode(patternTable[5])) then azcoin = text:match(u8:decode(patternTable[5])) end

    if azcoin then
        local host = sampGetCurrentServerName()
        local _, pID = sampGetPlayerIdByCharHandle(PLAYER_PED)
        local acc = sampGetPlayerNickname(pID) .. '[' .. pID .. ']'

        if pdnotf then
            lua_thread.create(function()
                msg = string.format([[
                {
                    "content": null,
                    "embeds": [
                      {
                        "title": "PayDay Notifier",
                        "description": "!!! Получен ПейДей !!!\nАккаунт: %s\nСервер: %s\nУровень: %s\nРеспектов: %s/%s\nТекущая сумма в банке: $%s\nТекущая сумма на депозите: $%s\nОбщая заработная плата: $%s\nБаланс на донат-счет: %s",
                        "color": 16711757
                      }
                    ],
                    "attachments": []
                }
                ]], acc, host, lvl, exp1, exp2, bankAmt, depAmt, salary, azcoin)

                sendDiscordWebhook('https://discord.com/api/webhooks/sdsssssssssssssss', msg)
            end)
        end

        azcoin = nil
    end
end