Перейти к содержимому

ov3rwrite

Пользователи
  • Публикации

    49
  • Зарегистрирован

  • Посещение

  • Победитель дней

    5

Сообщения, опубликованные пользователем ov3rwrite


  1. В 21.11.2020 в 02:01, ECS сказал:

    О, это уже интересно. Наверняка json-либа при конвертации в луа-таблицу автоматом эскейпит символы, либо как-то по-своему обрезает экранированный результат от API. Если дело в ней, то сменить либу не будет проблемой. К примеру, с этой проблем не возникало

    Нет, все таки с чем то еще беды.

    Dreamfinity64_2xYMe8dZVU.png.e30b787cb42c51e2bc67d3c8aa8d1f01.png

     

    Dreamfinity64_XfEsMZIAiJ.png.999d9244c92f38e95281995f6be81d79.png


  2. 11 час назад, ECS сказал:

    О, это уже интересно. Наверняка json-либа при конвертации в луа-таблицу автоматом эскейпит символы, либо как-то по-своему обрезает экранированный результат от API. Если дело в ней, то сменить либу не будет проблемой. К примеру, с этой проблем не возникало

    А черт его знает. Мб дело и правда в ней.


  3. 2 часа назад, ECS сказал:

    В том и проблема. Обычно подобные вещи экранируются редко встречающимися в повседневном общении комбинациями символов (по типу эмодзи 😀 у ВК). Тут вообще жесть какая-то. Мб у дискорда есть иные опции по экранированию юникода - эт уже вопрос к топикстартеру, ибо у него по ТЗ идет только uКод. Ну и ответ я дал соответственный

    Нет, это вообще странно. Это не апи проблема, я с постмана чекал, там все ок. Это толи internet api чета крутит либо что то еще из OC.


  4. 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


  5. Решил я вдруг написать дискорд-клиент на основе интернет карты, гуи библиотеки @Zer0Galaxy и json либы на гитхабе. Спустя долгое время разработки я понял, что совсем ничего не умею, а проблемы появились даже на стадии вывода. Вообщем я решил выложить сюда свои наработки, так как то, что уже написано работает нереально медленно и через раз, а сохранить и показать задумку хочется.

     

    Вкратце - это дискорд клиент, работающий на реквестах и без веб-сокетов(что и стало основной причиной того, что я это забросил), который умеет авторизовываться, выводить сервера, каналы и криво-косо выводить последнее сообщение в них

     

    Также возникла проблема с русскими символами, вместо них оно выводит Unicode Escape Sequence в виде "u0422u0435"

     

    Ссылку оставляю тут, делайте что хотите, надеюсь кто-нибудь поддержит задумку и я возьмусь за написание веб-сокетов :)

     

    https://pastebin.com/Zfn7YCqT

     

    Использовалось:

    https://gist.github.com/tylerneylon/59f4bcf316be525b30ab

    • Нравится 1
    • Одобряю 1
    • Спасибо 1

  6. 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]

    Спасибо за помощь, уже пытался в аргументы совать)


  7. В 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


  8. И как же вы проверяли?Лично у меня возник код 400(Bad Request) при отправке запроса, и я ТОЧНО знаю что дело именно в Content-Type.Тем более, я отправлял одни и те же данные с программы на Python и на Lua, где питон возвращал все корректно, а луа опять же возвращал 400(проверял на ocelot desktop).

     

    инфа из непроверенных источников:

    Скрытый текст

    image.png.c6071f07a9ec1d9885e65131f4e55d59.png

     


  9. При отправке POST запроса столкнулся с тем что internet.request() либо что-то еще вырезает значение Content-Type из таблицы headers(об этом мне рассказал друг когда я столкнулся с кодом 400) которая отправляется и запрос просылается дальше.Можно ли этого как-то избежать и с чем это связано?


  10. 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,поэтому не стал заморачиваться


  11. 25 минут назад, Asior сказал:

    Тоесть выходит, что это просто программа дистанционного доступа к ОС компу. А нельзя было сделать аналогично но без использованием внешнего сервера? (не разбирался как работает дискорд)

    И код лучше всего выложить не скрином а именно кодом, так как скрины могут пропадать.

     

    И как же вы предлагаете без внешнего сервера?)Куда подключаться?И да,без проблем можно реализовать мост между чатами.Вы говорите так,как-будто эта программа должна делать что-то большее


  12. 50 минут назад, Taruu сказал:

    Необычное решение. Могу дать совет почитать лучше discord.py так как там есть готовые обработчики команды а не через on_message.
    Так же вопрос как подключатся если ты играешь на сервере?

    Ну просто безопасности никакой нет. А если и есть свой хост с белым ip то хотя бы пароль (думаю там и ключи можно но хз как они в компах робят). по хорошему еще прием сообщений через сокет делать асинхронным что бы бот не блокировался весь и можно получать к примеру множество сообщений... ТАК же очень не советую юзать глобальные переменные, ихмо если код будет большим лучше сделать класс (есть шанс запутаться). По коду на lua не шарю но вроде норм для такого варианта.

    Угу,я знаю,декоратор client.command и prefix.Класс уже пробовал,не получилось,знаю что global лучше не юзать.Не стал делать асинхронность(хотя желательно) ибо это было расчитано на 1 клиента.Опять же поскольку было расчитано на 1 клиента и об этом никто не знал,о безопасности речи и быть не может ибо зачем.Скоро все пофикшу

     

    И да,если ты не понял то демонстрация клиента происходила на стороннем сервере майна а сервер программы запускался на моем компе)0.0.0.0 в сервере - весь инет,а то что в клиенте - айпи(не локальный) так что вот так


  13. Вдруг решил я написать программу для управления компом через дискорд, но поскольку на Lua это не реализовано(по крайней мере здесь ничего подобного не было),я решил использоовать Python, да и тем более мне не взлюбился Lua,да и знаю я его слабо.Обращаю внимание на то,что код на стороне Lua это дичайший франкенштейн из разных гайдов и функций в интернете!Да и сторона питона то вообщем не славится отсутствием костылей)

    Код на Lua:

    Скрытый текст

    Cvmw5r1LN2.png.3dbd1e912bd215734511a5aba7fa5642.png

    Код на Python:

    Скрытый текст

    nI89OVpkFI.thumb.png.d2eab9fb6da6abe4ee7fcb08725521e1.png

    Внимание!

    В client.run находится токен бота.

    global использовать было нежелательно,но это самое быстрое решение которое я нашел

    Перед использованием необходимо открыть порт(в данном случае 1337)

    В internet.open первым аргументом указываете свой айпи(там не мой айпи,пробить не пытайтесь)

    Инструкция по использованию:

    1.Запустить код на Python(сервер)

    2.Запустить код на Lua(клиент)

    В консоли где вы запускали питоновский код,должно появится сообщение "<адрес> connected"

    3.В дискорд сервере куда вы пригласили бота написать /execute_lua <команда> и он выполнит команду на OpenOS и вернет вам то,что вывела эта команда

    (эта команда выполнится на компе OpenComputers)

    Скоро появятся новые фичи по типу выполнения кода на луа и видео с примером использования.

    • Нравится 1
    • Одобряю 1
    • Спасибо 1
    • В шоке 1

  14. Решил я значит такой сделать систему безопасности, основанную на редстоуне и Sentry Turret ах,но мне понадобился детектор игрока, который по обнаружении в определенном радиусе блоков определенного(не любого) игрока выдавал редстоун сигнал.Так вот, у меня появился вопрос как это сделать.Если сможете помочь,отпишите внизу.

×
×
  • Создать...