Dika
Кстати, я поставил 2 пробела подряд в тексте, и интерпретатор луа намертво завис
Dika
При чем я даже не могу его закрыть с помощью Ctrl+C
Dika
Dika
Насколько я понял, тут только поиск последнего слова не работает
Dika
Почему не сможешь? string.sub(message.text, 1, 80)
Dika
utf8.sub вместо string.sub в твоем случае
Dika
if utf8.len(message.text) > 80 then message.text = utf8.sub(message.text, 1, 80) .. "..." end
Dika
Как-то так
Dika
Очень странно. Я отправил длинное сообщение, которое поделилось на два, и бот нормально ответил. А если отправить еще длиннее (оно поделится на 3+ сообщений), будут баги.
Dika
Может, дело в том, что сообщения отправляются очень быстро?
a=pwgen 4096 1; bin/telegram-cli -W -e "msg @HohotachBot $a"
Я в
в
Перестал отвечать.
Dika
Да
Кажется, снова не работает.
Оба раза перестал отвечать после отправки сообщения из 4075 символов.
Ну, ты просил ломать.
Dika
Snusmumriken
https://github.com/starwing/luautf8 Работа посимвольно: function(str) msg = {} for code in utf8.codes(str) do msg[#msg + 1] = utf8.char(code) end return table.concat(msg) end
Snusmumriken
На 5.3?
Snusmumriken
👍🏿
MrSmith
https://hastebin.com/acuzosaqoq.lua
MrSmith
Цепочка функций, получается чето типо а()()()
MrSmith
Не знаю зачем
MrSmith
Но выглядит смешно
MrSmith
Я еще пару итераторов написал и систему клаасов пилю
MrSmith
function reversIter(a) local function iter(a, i) i=i-1 local v=a[i] if v then return i, v end end return iter, a, #a+1 end
MrSmith
Ну что-то типо
MrSmith
Не могу пока допилить массивы
MrSmith
local function createMassive(...) local argsTable = {...} local table1 = {} local table2 ={} for _,v in reversIter(argsTable) do print(v) for i=1,v do table.insert(table1,table2) end table2=table1 table1={} end return table2 end
MrSmith
Не фантан конечно
MrSmith
Я просто сел писать крестики нолики и не нашел половину привычных функций
MrSmith
Пришлось изврашаться
Snusmumriken
Форматируй апострофами. Три апострофа в начале и в конце делают гораздо читабельнее. function ripairs(t) local i = #t + 1 return function() i = i - 1 return i, t[i], nil end end
Snusmumriken
И да, у меня есть крошечная либа ООП. Глянь что как устроено. https://pastebin.com/K1yRyE1T
Snusmumriken
Апостроф - там где буква "ё"
MrSmith
Я проблему с типами решил перегрузкой type
MrSmith
Если тип таблица и есть поле type то вернет тип из это переменной а не таблицу
MrSmith
Ща чекну твое решение ООП
MrSmith
Или ты подглядел где-то
MrSmith
Я из автора брал + смекалочка
MrSmith
type(v) == t and v or nil меня вот такие конструкции убивают не могу привыкнуть си стаил заставляет меня приводить к false и прочее
MrSmith
conditions ? action1 : action2 хотя вроде эквивалентно
MrSmith
Но я такую штуку как и switch почти не юзаю
Snusmumriken
Не перегруэай типы, потому что хрен знает как их перегрузят в следующий раз. И дополняй сообщение, если после тебя никто не написал. Ну, знаешь? Вместо большой портянки - редактирование ))) Пока никто не написал после тебя - норм.
Snusmumriken
А вот это ты тем более зря.
MrSmith
Нет, попытка приведет к выделению нового состояния
Snusmumriken
Не, я к тому, что зря перегрузил функцию type.
MrSmith
Почему?
MrSmith
Для встроенных типов разницы нет, разница есть, только если присутсвует поле _type
MrSmith
А оно понятно дело может быть только у таблиц, ну и причем оно должно быть в корне
Snusmumriken
Ну, стандартные вещи перегружают только в конкретных либах
MrSmith
{_type="some",{_type="soska"}} Для второй таблицы получишь some:soska
MrSmith
Существующий код работает, новый имееть плюшки
MrSmith
Нет я рили спрашиваю, может не так чет сделал
MrSmith
Щас думаю над протоколами
MrSmith
Хотя может запили модуль перегрузки для начала, но это не точно
Snusmumriken
Не забывай что каждая плюшка - замедление процесса.
MrSmith
Не забывай что каждая плюшка - замедление процесса.
Да ну брось, ну в крайности получу питон
MrSmith
Ну другой же идеи как получить классы у тебя нет?
MrSmith
Вот и у меня нет
MrSmith
table.find() не завезли
MrSmith
Ну это даже не смешно
MrSmith
Библиотека никакая
Snusmumriken
А ты что хотел
MrSmith
newType = function (arg) if type(arg) == "table" then print("logging") else return type(arg) end end type, newType = newType, nil
MrSmith
Чет стэк переполнил
MrSmith
А ты что хотел
Как минимум функцию find
Snusmumriken
Как минимум функцию find
Ты чудовище. Карочи, пока ты мало писал по жизни в принципе: 1. Изоляция - это хорошо. Чем меньше херни оставляет или модифицирует подключаемый модуль - тем лучше. Иначе это вводит запутанности и прочую трудно отлаживаемую херню. 2. В луа, хороший модуль - чистый модуль. Не объявляет ничего глобального, возвращает функцию/таблицу с функциями. Все вещи, которые нужны модулю - объявляются локальными в модуле (в том числе, всякая херня которую надо require'ить). 3. Ещё раз: засирать глобальное пространство и даже модификации стандартной библиотеки - гроб-гроб-кладбище-пидор. 4. Если ты работаешь с объектами, то модуль, производящий объекты - возвращает фабрику. 5. Все методы объектов должны содержаться в них самих. Если ты используешь один объект в другом - другой не лезет во внутренности первого, а дёргает методы. Иначе сложно отлаживать/модифицировать первый: появляются ошибки типа "починил что-то в одном месте - сломалось в десяти других". 6. Стандартные функции должны быть стандартными функциями. Люди рассчитывают что они работают именно так а не иначе, что у них совершенно конкретная скорость и конкретное применение. Ты их можешь переопределять только в своём конкретном проекте, иначе ты - пидр, ибо ломаешь установки в головах людей. Представь себе, что ты реквайрнул либу, и ВСЁ ИЗМЕНИЛОСЬ. table.insert неожиданно начинает работать по десять секунд (ибо перерывает все таблицы, например), появилась всякая непонятная ересь. А ещё, знаешь что прям вообще выбешивает? Тебе нужна либа ради трёх функций, но она использует модифицкации синтаксиса, предоставленные другой либой! Которая весит пару мегабайт и превращает всё вокруг в непонятное дерьмо!
MrSmith
Ты чудовище. Карочи, пока ты мало писал по жизни в принципе: 1. Изоляция - это хорошо. Чем меньше херни оставляет или модифицирует подключаемый модуль - тем лучше. Иначе это вводит запутанности и прочую трудно отлаживаемую херню. 2. В луа, хороший модуль - чистый модуль. Не объявляет ничего глобального, возвращает функцию/таблицу с функциями. Все вещи, которые нужны модулю - объявляются локальными в модуле (в том числе, всякая херня которую надо require'ить). 3. Ещё раз: засирать глобальное пространство и даже модификации стандартной библиотеки - гроб-гроб-кладбище-пидор. 4. Если ты работаешь с объектами, то модуль, производящий объекты - возвращает фабрику. 5. Все методы объектов должны содержаться в них самих. Если ты используешь один объект в другом - другой не лезет во внутренности первого, а дёргает методы. Иначе сложно отлаживать/модифицировать первый: появляются ошибки типа "починил что-то в одном месте - сломалось в десяти других". 6. Стандартные функции должны быть стандартными функциями. Люди рассчитывают что они работают именно так а не иначе, что у них совершенно конкретная скорость и конкретное применение. Ты их можешь переопределять только в своём конкретном проекте, иначе ты - пидр, ибо ломаешь установки в головах людей. Представь себе, что ты реквайрнул либу, и ВСЁ ИЗМЕНИЛОСЬ. table.insert неожиданно начинает работать по десять секунд (ибо перерывает все таблицы, например), появилась всякая непонятная ересь. А ещё, знаешь что прям вообще выбешивает? Тебе нужна либа ради трёх функций, но она использует модифицкации синтаксиса, предоставленные другой либой! Которая весит пару мегабайт и превращает всё вокруг в непонятное дерьмо!
Так и не понял чем мой код плох, я кстати поправил и теперь один вызов
MrSmith
Ну тоесть я бы конечно мог изолировать в пределах своего модуля окружение но я пока не доконца допер как это лучше делать
Snusmumriken
Карочи, мой тебе совет. Если ты плодишь новую фигню - ебош под неё класс. Допустим, смотри класс массивов: https://pastebin.com/6K7VWaxZ Там даже тест есть. Но ничего глобального, это просто массивы с набором методов.
Snusmumriken
Ах да, на тему table.find. Что ты собрался искать? На моей практике, в 99.9% случаев - содержимое таблиц-массивов - другие таблицы, а всякие числа/строки там под строковыми ключами (ибо объекты). Как именно там искать? Как функция table.find должна магически понять, что искать в таблице и по какому адресу? Да, конечно, можно сделать вот так: t = { {key = 'value1'}, {key = 'value2'}, {key = 'value3'}, } table.find(t, 'key', function(v) return v == 'value2' end) Но это уже подразумевает, что таблица наполнена другими таблицами, у которых есть ключ 'key'. Для того чтобы было нормально - надо перегружать как не в себя.
MrSmith
Я лучше окружение выделю