text:gsub не принимает много символов

Fasmin

Участник
Автор темы
175
6
Версия MoonLoader
.026-beta
такой код:
код:
if text:find("%[%d+%] .+ %| Уровень%: %d+ %| UID%: %d+ %| packetloss%: %d+%.%d+ %(.+%)") then
    text = text:gsub(
    "%[%d+%] .+ %| Уровень%: %d+ %| UID%: %d+ %| packetloss%: %d+%.%d+ %(.+%)",
    "[{591c87}"..ID.."{ffffff}] {591c87}"..nick.."{ffffff} | Уровень: {591c87}"..level.."{ffffff} | UID: {591c87}"..UID.."{ffffff} | packetloss: 0.00 ({FFFF00}фыв{ffffff})"
    )
    return {color, text}
end

ничего не появляется в чате, но если убрать допустим цвета после packetloss, то появляется сообщение в чат
То есть сделать так:
код:
if text:find("%[%d+%] .+ %| Уровень%: %d+ %| UID%: %d+ %| packetloss%: %d+%.%d+ %(.+%)") then
    text = text:gsub(
    "%[%d+%] .+ %| Уровень%: %d+ %| UID%: %d+ %| packetloss%: %d+%.%d+ %(.+%)",
    "[{591c87}"..ID.."{ffffff}] {591c87}"..nick.."{ffffff} | Уровень: {591c87}"..level.."{ffffff} | UID: {591c87}"..UID.."{ffffff} | packetloss: 0.00 (фыв)"
    )
    return {color, text}
end
Такое ощущение, что есть ограничение на кол-во символов в этой функции, как исправить?
 

kyrtion

Известный
1,145
414
так проще собрать через матча на регулярном выражении затем составить шаблон паттерна и вернуть в text
скинь чистая строка, которая сервер отправил в чате

ну допустим если я воспользуюсь у тебя regex, то:
Lua:
local textNoHex = text:gsub('{%x%x%x%x%x%x}', '')
local regexp = '^%[(%d+)%] (%S+) %| Уровень%: (%d+) %| UID%: (%d+) %| packetloss%: (%d+%.%d+) %(.-%)$'
local id, score, uid, pl, other = textNoHex:match(regexp)
print(id, score, uid, pl, other)

если не будешь проверять позиция символов(в начале ^ и в конце $), то это произойдет: https://t.me/forumnick/9979
 

Fasmin

Участник
Автор темы
175
6
так проще собрать через матча на регулярном выражении затем составить шаблон паттерна и вернуть в text
скинь чистая строка, которая сервер отправил в чате

ну допустим если я воспользуюсь у тебя regex, то:
Lua:
local textNoHex = text:gsub('{%x%x%x%x%x%x}', '')
local regexp = '^%[(%d+)%] (%S+) %| Уровень%: (%d+) %| UID%: (%d+) %| packetloss%: (%d+%.%d+) %(.-%)$'
local id, score, uid, pl, other = textNoHex:match(regexp)
print(id, score, uid, pl, other)

если не будешь проверять позиция символов(в начале ^ и в конце $), то это произойдет: https://t.me/forumnick/9979
Честно ниче не понял и что значит проверять в начале ^, а в конце доллар тож не понял
Да, забыл добавить строку с переменными:
код:
local ID, nick, level, UID, packetloss, launch = string.match(text, "%[(%d+)%] (.+) %| Уровень%: (%d+) %| UID%: (%d+) %| packetloss%: (.+) %((.+)%)")
 

kyrtion

Известный
1,145
414
что значит проверять в начале ^, а в конце доллар
позиция символов

в таком случае изучаешь регулярное выражение по полностью, ибо боты будут тупеть: https://t.me/forumnick/9979

символ в регекс ^: используется для проверки в самом начале символа, допустим, в начале строках нужно проверять на наличие совпадение в регулярном выражении.
без позиции буде криво работать, можно подставить боту по другому работать проверяя в чате, диалог, чат бубл (над головой) и тд

а символ $ проверяет регулярное выражение в самом конце строка
если воспользоваться ^ и $ то проверяется строка полностью с гарантией (98%) без неполадки и баги

дальше, для форматирование строка я воспользуюсь методом string.format,
иногда сокращаю вот так: sf для удобство, для этого нужно указать в начале скрипта: local sf = string.format

Lua:
local sf = string.format

...

local id, nickname, level, uid, packetloss, launch ...
local fmt = sf(
    '[{591c87}%s{ffffff}] {591c87}%s {ffffff}| Уровень: {591c87}%s {ffffff}| UID: {591c87}%s {ffffff}| packetloss: {591c87}%s {ffffff}(%s)',
    id, nickname, level, uid, packetloss, launch
)
print(fmt)

можешь проверять на сайте с компиляцией по луа https://onecompiler.com/lua
и тогда освоишь как работает регулярное выражение и почему стоило вставить ^ и $
 
Последнее редактирование:

Fasmin

Участник
Автор темы
175
6
в таком случае изучаешь регулярное выражение по полностью, ибо боты будут тупеть: https://t.me/forumnick/9979

символ в регекс ^: используется для проверки в самом начале символа, допустим, в начале строках нужно проверять на наличие совпадение в регулярном выражении.
без позиции буде криво работать, можно подставить боту по другому работать проверяя в чате, диалог, чат бубл (над головой) и тд

а символ $ проверяет регулярное выражение в самом конце строка
если воспользоваться ^ и $ то проверяется строка полностью с гарантией (98%) без неполадки и баги

дальше, для форматирование строка я воспользуюсь методом string.format,
иногда сокращаю вот так: sf для удобство, для этого нужно указать в начале скрипта: local sf = string.format

Lua:
local sf = string.format

...

local id, nickname, level, uid, packetloss, launch ...
local fmt = sf(
    '[{591c87}%s{ffffff}] {591c87}%s {ffffff}| Уровень: {591c87}%s {ffffff}| UID: {591c87}%s {ffffff}| packetloss: {591c87}%s {ffffff}(%s)',
    id, nickname, level, uid, packetloss, launch
)
print(fmt)

можешь проверять на сайте с компиляцией по луа https://onecompiler.com/lua
и тогда освоишь как работает регулярное выражение и почему стоило вставить ^ и $
хз почему так, но выходит ошибка - invalid option '%[' to 'format'
 

kyrtion

Известный
1,145
414

wojciech?

Известный
Проверенный
395
291
Такое ощущение, что есть ограничение на кол-во символов в этой функции, как исправить?
это не лимит функции gsub, ты не можешь отправить в чат строчку длиннее 144 символов

1726063526435.png
 

Fasmin

Участник
Автор темы
175
6

wojciech?

Известный
Проверенный
395
291
А как снять этот лимит? Мне нужно вот столько много цветов вставить в строку
Никак, под текст сообщения в структуре выделяется массив из 144 символов. Строчку либо не пропустит (как в твоем случае), либо она урежется до лимита

1726072680105.png
 
  • Нравится
Реакции: Fasmin