ov3rwrite
-
Публикации
49 -
Зарегистрирован
-
Посещение
-
Победитель дней
5
Сообщения, опубликованные пользователем ov3rwrite
-
-
11 час назад, ECS сказал:О, это уже интересно. Наверняка json-либа при конвертации в луа-таблицу автоматом эскейпит символы, либо как-то по-своему обрезает экранированный результат от API. Если дело в ней, то сменить либу не будет проблемой. К примеру, с этой проблем не возникало
А черт его знает. Мб дело и правда в ней.
-
2 часа назад, ECS сказал:В том и проблема. Обычно подобные вещи экранируются редко встречающимися в повседневном общении комбинациями символов (по типу эмодзи 😀 у ВК). Тут вообще жесть какая-то. Мб у дискорда есть иные опции по экранированию юникода - эт уже вопрос к топикстартеру, ибо у него по ТЗ идет только uКод. Ну и ответ я дал соответственный
Нет, это вообще странно. Это не апи проблема, я с постмана чекал, там все ок. Это толи internet api чета крутит либо что то еще из OC.
-
11 час назад, ECS сказал:Так а чо, пройдись регуляркой по этой стринге, и всё:
str = "Meow u0422u0435" str = str:gsub("u(%d+)", function(code) return utf8.char(tonumber(code, 16)) end) -- Meow Te
Если дискордыч всегда выдаёт 4 знака после "u", то разумнее будет воспользоваться паттерном "u(%d%d%d%d)" для более корректного декодирования ситуаций, когда после экранируемой последовательности следует обычная цифра, не входящая в неё. Например, "Meow u042215" (где 15 - просто текст)
Спасибо огромное, буду использовать. И да, оно увы выдает не только 4 цифры, иногда бывают и 3, аля u043
-
Решил я вдруг написать дискорд-клиент на основе интернет карты, гуи библиотеки @Zer0Galaxy и json либы на гитхабе. Спустя долгое время разработки я понял, что совсем ничего не умею, а проблемы появились даже на стадии вывода. Вообщем я решил выложить сюда свои наработки, так как то, что уже написано работает нереально медленно и через раз, а сохранить и показать задумку хочется.
Вкратце - это дискорд клиент, работающий на реквестах и без веб-сокетов(что и стало основной причиной того, что я это забросил), который умеет авторизовываться, выводить сервера, каналы и криво-косо выводить последнее сообщение в них
Также возникла проблема с русскими символами, вместо них оно выводит Unicode Escape Sequence в виде "u0422u0435"
Ссылку оставляю тут, делайте что хотите, надеюсь кто-нибудь поддержит задумку и я возьмусь за написание веб-сокетов
Использовалось:
-
1
-
1
-
1
-
-
8 минут назад, Zer0Galaxy сказал:Порылся в коде и обнаружил, что событие onChange принимает три параметра: 1)выбранная строка списка(string), 2)элемент, соответствующий этой строке(любой lua-тип) и 3)имя пользователя, выполнившего клик(string). Поэтому элемент можно достать, например, так:
function onListChange(line,item,user) local selectedItem = item end List1=Form1:addList(left,top,onListChange)Кроме того, выбранный элемент списка всегда (не только из onChange) доступен как List1.items[List1.index]
Спасибо за помощь, уже пытался в аргументы совать)
-
Некропостинг, но можно как то из onChange объекта List достать элемент, который был выбран?
-
В 31.08.2020 в 08:41, Taruu сказал:В коде OpenOS Есть вообще упоротый парсер для аргументов :/
function internet.request(url, data, headers, method) checkArg(1, url, "string") checkArg(2, data, "string", "table", "nil") checkArg(3, headers, "table", "nil") checkArg(4, method, "string", "nil") if not component.isAvailable("internet") then error("no primary internet card found", 2) end local inet = component.internet local post if type(data) == "string" then post = data elseif type(data) == "table" then for k, v in pairs(data) do post = post and (post .. "&") or "" post = post .. tostring(k) .. "=" .. tostring(v) end end local request, reason = inet.request(url, post, headers, method) if not request then error(reason, 2) end return setmetatable( { ["()"] = "function():string -- Tries to read data from the socket stream and return the read byte array.", close = setmetatable({}, { __call = request.close, __tostring = function() return "function() -- closes the connection" end }) }, { __call = function() while true do local data, reason = request.read() if not data then request.close() if reason then error(reason, 2) else return nil -- eof end elseif #data > 0 then return data end -- else: no data, block os.sleep(0) end end, __index = request, }) end
Но Headers вообще никто не трогает ...
Так то еще есть выбор метода вот может его нужно и указать.
выбор метода стоит, post
-
И как же вы проверяли?Лично у меня возник код 400(Bad Request) при отправке запроса, и я ТОЧНО знаю что дело именно в Content-Type.Тем более, я отправлял одни и те же данные с программы на Python и на Lua, где питон возвращал все корректно, а луа опять же возвращал 400(проверял на ocelot desktop).
инфа из непроверенных источников:
Скрытый текст
-
При отправке POST запроса столкнулся с тем что internet.request() либо что-то еще вырезает значение Content-Type из таблицы headers(об этом мне рассказал друг когда я столкнулся с кодом 400) которая отправляется и запрос просылается дальше.Можно ли этого как-то избежать и с чем это связано?
-
Если честно то не выглядит как что-то перспективное.Просто сгребание всевозможных библиотек в одну кучу.
-
Вообщем залил я все это дело на гитхаб, если кому это вообще понадобится
-
1
-
-
Ой-ой-ой,вы не видели сам код майноси на гитхабе)Я в году так 2018 смотрел,там были переменные по типу pizda, pizdaLength
-
8 минут назад, BrightYC сказал:https://discord.com/developers/docs/reference
Т.е, если я не ошибаюсь, можно сделать клиент без вебсокетов. Но придется каждый раз запрашивать вручную на предмет новых сообщений, да.
P.S так же: All HTTP-layer services and protocols (e.g. HTTP, WebSocket) within the Discord API are using TLS 1.2. Это значит, что используя библиотеку Fingercomp (Который не хочет писать TLS 1.3) и написав вебсокеты, можно сделать даже сделать реалтайм клиент.Вполне вероятно)Если честно я очень поверхнстно разбираюсь в discord api,поэтому не стал заморачиваться
-
25 минут назад, Asior сказал:Тоесть выходит, что это просто программа дистанционного доступа к ОС компу. А нельзя было сделать аналогично но без использованием внешнего сервера? (не разбирался как работает дискорд)
И код лучше всего выложить не скрином а именно кодом, так как скрины могут пропадать.
И как же вы предлагаете без внешнего сервера?)Куда подключаться?И да,без проблем можно реализовать мост между чатами.Вы говорите так,как-будто эта программа должна делать что-то большее
-
50 минут назад, Taruu сказал:Необычное решение. Могу дать совет почитать лучше discord.py так как там есть готовые обработчики команды а не через on_message.
Так же вопрос как подключатся если ты играешь на сервере?Ну просто безопасности никакой нет. А если и есть свой хост с белым ip то хотя бы пароль (думаю там и ключи можно но хз как они в компах робят). по хорошему еще прием сообщений через сокет делать асинхронным что бы бот не блокировался весь и можно получать к примеру множество сообщений... ТАК же очень не советую юзать глобальные переменные, ихмо если код будет большим лучше сделать класс (есть шанс запутаться). По коду на lua не шарю но вроде норм для такого варианта.
Угу,я знаю,декоратор client.command и prefix.Класс уже пробовал,не получилось,знаю что global лучше не юзать.Не стал делать асинхронность(хотя желательно) ибо это было расчитано на 1 клиента.Опять же поскольку было расчитано на 1 клиента и об этом никто не знал,о безопасности речи и быть не может ибо зачем.Скоро все пофикшу
И да,если ты не понял то демонстрация клиента происходила на стороннем сервере майна а сервер программы запускался на моем компе)0.0.0.0 в сервере - весь инет,а то что в клиенте - айпи(не локальный) так что вот так
-
А вот и пример использования:
Скрытый текстНа фоне звуки от майнкрафта, это не шум микрофона)
-
Вдруг решил я написать программу для управления компом через дискорд, но поскольку на Lua это не реализовано(по крайней мере здесь ничего подобного не было),я решил использоовать Python, да и тем более мне не взлюбился Lua,да и знаю я его слабо.Обращаю внимание на то,что код на стороне Lua это дичайший франкенштейн из разных гайдов и функций в интернете!Да и сторона питона то вообщем не славится отсутствием костылей)
Код на Lua:
Скрытый текст
Код на Python:
Внимание!
В client.run находится токен бота.
global использовать было нежелательно,но это самое быстрое решение которое я нашел
Перед использованием необходимо открыть порт(в данном случае 1337)
В internet.open первым аргументом указываете свой айпи(там не мой айпи,пробить не пытайтесь)
Инструкция по использованию:
1.Запустить код на Python(сервер)
2.Запустить код на Lua(клиент)
В консоли где вы запускали питоновский код,должно появится сообщение "<адрес> connected"
3.В дискорд сервере куда вы пригласили бота написать /execute_lua <команда> и он выполнит команду на OpenOS и вернет вам то,что вывела эта команда
(эта команда выполнится на компе OpenComputers)
Скоро появятся новые фичи по типу выполнения кода на луа и видео с примером использования.
-
1
-
1
-
1
-
1
-
-
А,нет, оказывается только первую букву заглавной в нике надо писать.
-
Не,не робит,вписал вместе с мобами ник,не прокатило
-
Можно как-то моблист переделать в плеер-лист?Т.е. перебор ников по строкам,и если ник совпадает,выводить редстоун сигнал,не?
-
Можно ли сделать так, чтобы и была не мигающим сигналом,а полноценным?
-
Решил я значит такой сделать систему безопасности, основанную на редстоуне и Sentry Turret ах,но мне понадобился детектор игрока, который по обнаружении в определенном радиусе блоков определенного(не любого) игрока выдавал редстоун сигнал.Так вот, у меня появился вопрос как это сделать.Если сможете помочь,отпишите внизу.

Мои наработки дискорд-клиента
в Сетевые технологии
Опубликовано:
Нет, все таки с чем то еще беды.