Подскажите как отправлять инфу из QUIK в телеграм?

Страницы: 1
RSS
Подскажите как отправлять инфу из QUIK в телеграм?
 
Подскажите как отправлять инфу из QUIK в телеграм?
Встроенными средствами это сделать нельзя.

Не понятно каким путем двигаться, с чего начать. Делать вывоз по DDE и забирать данные из оперативной памяти? Или можно проще?
Может кто то уже делал и может "на пальцах" объяснить ?

СПАСИБО
 
Alex, добрый день!

Штатного функционала для выполнения подобных задач не предусмотрено.
Как вариант, Вы можете при помощи собственного скрипта, написанного на Lua, получать данные из терминала и отправлять их куда Вам нужно.
 
Поиск по форуму дает ответ.

Вот одно из решений
https://nick-nh.github.io/2021-03-14/teleMessage
 
Я делаю так.

Начни с конца.
1.в телеграм получи свой chat id
2.создай telegram bot и получи его token
3.возьми язык, который знаешь,(c++, c#, java ...) разберись как послать строку в телеграмм своему боту по token, который по твоему chat id пошлет тебе эту строку в виде сообщения
4.в lua напиши скрипт, который собирает нужную тебе инфо и передает(есть разные варианты) в программу, написанную на см.п.3.
5.(не обязательно) напиши красивую оболочку на языке, который знаешь, в которой ты делаешь выбор(ставишь галочки), какую именно информацию(большой список) тебе необходимо передавать из квик в телеграмм.  
 
Цитата
Nikolay написал:
Поиск по форуму дает ответ.

Вот одно из решений
https://nick-nh.github.io/2021-03-14/teleMessage
Спасибо изучу
 
Цитата
Игорь Б написал:
Я делаю так.

Начни с конца.
1.в телеграм получи свой chat id
2.создай telegram bot и получи его token
3.возьми язык, который знаешь,(c++, c#, java ...) разберись как послать строку в телеграмм своему боту по token, который по твоему chat id пошлет тебе эту строку в виде сообщения
4.в lua напиши скрипт, который собирает нужную тебе инфо и передает(есть разные варианты) в программу, написанную на см.п.3.
5.(не обязательно) напиши красивую оболочку на языке, который знаешь, в которой ты делаешь выбор(ставишь галочки), какую именно информацию(большой список) тебе необходимо передавать из квик в телеграмм.  
1. Готово
2. Готово
3. Знаю только ПИТОН. ,(c++, c#, java) НЕ знаю
4. Вот это основная проблема! Читал кучу инфы но так и не допёр как сделать
5. С начала надо разобраться с пунктом 4 ))  
 
В гугле забанили? тьма ж ссылок разных
Вот, например: https://quik2dde.ru/viewtopic.php?id=307
 
Alex,
Цитата
1. Готово
2. Готово
3. Знаю только ПИТОН. ,(c++, c#, java) НЕ знаю
4. Вот это основная проблема! Читал кучу инфы но так и не допёр как сделать
5. С начала надо разобраться с пунктом 4 ))  
3.Если знаете ПИТОН, то пишите на ПИТОНе. Разницы нет. В инете есть примеры.
4.Т.е. Вы не знаете Lua(qlua)? Начните с его изучения. Этот форум как раз этому посвящен.
 
Еще один вариант, самый простой на мой взгляд. Lua --> Telegram.  
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Цитата
s_mike@rambler.ru написал:
Еще один вариант, самый простой на мой взгляд.  Lua --> Telegram .  
Да это простой вариант.
У меня сейчас отправка сообщений в телегу реализована через os.execute
Но есть проблема - постоянно выскакивают окна CMD  !!
 
Цитата
Игорь Б написал:
Alex,  
Цитата
1. Готово
2. Готово
3. Знаю только ПИТОН. ,(c++, c#, java) НЕ знаю
4. Вот это основная проблема! Читал кучу инфы но так и не допёр как сделать
5. С начала надо разобраться с пунктом 4 ))  
3.Если знаете ПИТОН, то пишите на ПИТОНе. Разницы нет. В инете есть примеры.
4.Т.е. Вы не знаете Lua(qlua)? Начните с его изучения. Этот форум как раз этому посвящен.
Qlua я знаю.
Не могу разобраться как отправить инфу из Quik на внешний скрипт на Питоне.
 
Начните с самого простого варианта - через файл.txt. Дальше разберетесь по мере развития схемы.
 
Цитата
Qlua я знаю.
Не могу разобраться как отправить инфу из Quik на внешний скрипт на Питоне.
Все уже придумано до вас

https://github.com/Enfernuz/quik-lua-rpc
 
Цитата
Игорь Б написал:
Начните с самого простого варианта - через файл.txt. Дальше разберетесь по мере развития схемы
Думаю это оптимальный вариант для начала
У вас есть примеры как это сделать ? ))
Возникает вопрос как сообщить скрипту на Питоне что файл изменился. (как сигнал на отправку сообщения с текстом из файла)  
 
Чаще всего в таком режиме общения либо дописывают строки в файл.


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

Либо создавать новый файл обмена. После обработки скрипт на Питоне удалит его, давая тем самым ответ, что обработка закончена.
 
Цитата
Nikolay написал:
Чаще всего в таком режиме общения либо дописывают строки в файл.


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

Либо создавать новый файл обмена. После обработки скрипт на Питоне удалит его, давая тем самым ответ, что обработка закончена.
Все сделал. QUIK генерит файл с текстом, Питон его открывает и пуляет в телегу.

Но это конечно же костыль))
Идеально дергать инфу не из файла а из оперативки.
Есть идеи как это сделать ? ))
Спс
 
либо socket - можно использовать библиотеку luasocket (собственно ссылка на qlua-rpc примерно про это)

либо named pipes - надо написать(найти) dll обмена на стороне lua
 
Цитата
Nikolay написал:
либо named pipes - надо написать(найти) dll обмена на стороне lua
Код
io.open("\\\\.\\PIPE\\MySuperPuperServer", "wb")
Тока flush не забывать после записи.
 
Alex, Я думаю, это вечный костыль. Идея-то стандартная, ещё из прошлого тысячелетия, называется ОЗУДД (ОЗУ двойного доступа). Например, повесить какую-нить функцию на какой-нить вектор и программным прерыванием по этому вектору делай, что хошь. Но современные операционки уже настолько изуродованы, что кроме как через файл вряд ли что получится.
 
Цитата
Владимир написал:
Alex, Я думаю, это вечный костыль. Идея-то стандартная, ещё из прошлого тысячелетия, называется ОЗУДД (ОЗУ двойного доступа). Например, повесить какую-нить функцию на какой-нить вектор и программным прерыванием по этому вектору делай, что хошь. Но современные операционки уже настолько изуродованы, что кроме как через файл вряд ли что получится.
Через файл все работает супер, спасибо

Проблема только с записью русских букв в файл.
io.wriite пишет в файл только латиницу , а кириллицу не пишет!!!
 
Цитата
Anton написал:
 
Код
   io.open ( "\\\\.\\PIPE\\MySuperPuperServer" ,  "wb" )
  
Тока flush не забывать после записи.
В принципе да, т.к. это как бы "файл в памяти".

Квик воспринимает только win1251, поэтому файл должен быть в этой кодировке. Либо используйте перекодировку в UTF.
 
Цитата
Anton написал:
Цитата
Nikolay написал:
либо named pipes - надо написать(найти) dll обмена на стороне lua
Код
   io.open ( "\\\\.\\PIPE\\MySuperPuperServer" ,  "wb" )
  

\\.\PIPE\MySuperPuperServer: No such file or directory

В чём прикол?
 
Цитата
Александр написал:
В чём прикол?
Дык сервер еще написать надо, который этот пайп создаст и будет его слушать. Речь о том, что на стороне луа особой поддержки не надо, она есть и так.
 
Цитата
Владимир написал:
Alex, Я думаю, это вечный костыль. Идея-то стандартная, ещё из прошлого тысячелетия, называется ОЗУДД (ОЗУ двойного доступа). Например, повесить какую-нить функцию на какой-нить вектор и программным прерыванием по этому вектору делай, что хошь. Но современные операционки уже настолько изуродованы, что кроме как через файл вряд ли что получится.
А как сделать обмен в обратном направлении? Из Питона в Квик
Квик -> Питон все просто. watсhdog python отслеживает изменение файла. В qlua нет функции отслеживания изменения файла.
Спс
 
Alex, А почему ко мне вопрос? Я в жизни на Питоне не программировал. :smile: А здесь пишу на чистейшем Lua, без всяких обменов с кем бы то ни было.
 
Цитата
А как сделать обмен в обратном направлении? Из Питона в Квик
Квик -> Питон все просто. watсhdog python отслеживает изменение файла. В qlua нет функции отслеживания изменения файла.
Спс
Ничего сложного. Открываете файл в режиме чтения и читаете его.

Все зависит от методики обмена, как Вы будете записывать информацию. Одна строка, несколько строк. Возможно надо написать свой итератор перебора строк.

Для примера, можно просто читать последнюю строку файла через:
Код
file:seek("end")
last_line   = file:read('*l')
Если появится новая строка, то и при чтении она считается, т.к. директива *l - Reads the line from the current file position, and moves file position to next line.
 
Цитата
Nikolay написал:
Цитата
А как сделать обмен в обратном направлении? Из Питона в Квик
Квик -> Питон все просто. watсhdog python отслеживает изменение файла. В qlua нет функции отслеживания изменения файла.
Спс
Ничего сложного. Открываете файл в режиме чтения и читаете его.

Все зависит от методики обмена, как Вы будете записывать информацию. Одна строка, несколько строк. Возможно надо написать свой итератор перебора строк.

Для примера, можно просто читать последнюю строку файла через:
Код
  file:seek( "end" )
last_line    =  file:read( '*l' )  
Если появится новая строка, то и при чтении она считается, т.к. директива *l - Reads the line from the current file position, and moves file position to next line.
Николай спасибо, попробую реализовать..
Остается вопрос как дать понять скрипту lua что в файл добавлена новая строка.
Получается надо делать бесконечный цикл который постоянно читает файл и ищет в нем новую строку ?  
 
В принципе да. Но проще всего это сделать через замыкание, тогда проще вызывать. Можно даже сделать таймер, чтобы не читать слишком часто.
 
Nikolay, Таймер и так сделан: почти в любом скрипте стоит этот цикл со sleep.
 
Цитата
Nikolay написал:
В принципе да. Но проще всего это сделать через замыкание, тогда проще вызывать. Можно даже сделать таймер, чтобы не читать слишком часто
Николай можно поподробнее про "замыкание"
Спасибо
 
Цитата
Alex написал:
Николай можно поподробнее про "замыкание"
Спасибо
Если Вы не знакомы с замыканиями, то советую ознакомиться с теорией https://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%BC%D1%8B%D0%BA%D0%B0%D0%BD%D0%B8%D0­%B5_(%D0%BF%D1%80%D...

Если простыми словами - то это функция объект с своей областью видимости. Что дает возможность создавать разные экземпляры функции с своими переменными.

Таймер на любую функцию можно сделать так (пример на чистом lua):
Код
local timer_processor = function(delay)

    delay = delay or 0
    local last_time = 0

    return function(func, ...)
        local cur_time = os.time()
        if cur_time - last_time >= delay then
            last_time = cur_time
            return func(...)
        end
        return ...
    end
end

local some_func = function(x)
    x = x + 1
    print(x)
    return x
end

local timer = timer_processor(2)

local a = 1

while a < 5 do
    a = timer(some_func, a)
end

Функция some_func вызывается постоянно, но исполняется только каждые 2 секунды - параметр delay. При этом можно создавать несколько таймеров на разные задержки, используя один и тот же конструктор.


Можно также просто сделать некую функцию, в Вашем случае читающую файл, внутри замыкания, а не передавать ее как аргумент.
 
Цитата
Nikolay написал:
Если простыми словами - то это функция объект с своей областью видимости. Что дает возможность создавать разные экземпляры функции с своими переменными.
 А если совсем по-простому, то это модуль, сохраняющий свое состояние (историю своего запуска) между своими запусками на исполнение.
 
Заинтриговали, глянул в Вики, чо там за "замыкания" нарисовались. Господи, какая же чушь!
Цитата
Замыкание (англ. closure) в программировании — функция первого класса (!), в теле которой присутствуют ссылки на переменные, объявленные вне тела этой функции в окружающем коде и не являющиеся её параметрами. Говоря другим языком, замыкание — функция, которая ссылается на свободные переменные в своей области видимости.
И "видимостью" своей затрахали - даже несчастный goto теперь ни хрена не видит.
Цитата
Замыкание — это особый вид функции. Она определена в теле другой функции и создаётся каждый раз во время её выполнения (!!!).
Лексические переменные замыкания отличаются от глобальных переменных тем, что они не занимают глобальное пространство имён. От переменных в объектах они отличаются тем, что привязаны к функциям, а не объектам.
Читал и ржал. Ещё лет 20 назад я говорил, что "указатель на структуру покрывает все "классовые" потуги Страуструпа как бык овцу". Надо же умудриться на ровном месте наковырять себе столько проблем! Причём ВЕЧНЫХ проблем!
 
Кстати, о птичках: функция - это ТОЖЕ объект. И метод вовсе не обязательно функция.
 
вот есть такое решение для телеграм-бота: https://quik2dde.ru/viewtopic.php?id=307 в основном, весь его код на lua.
 
Цитата
Alex написал:
Знаю только ПИТОН
См. "5. Использование функции PrintDbgStr() на практике" в документе "Использование Lua в Рабочем месте QUIK.pdf"

Цитата
Anton написал:
Дык сервер еще написать надо, который этот пайп создаст и будет его слушать.
А можно как-то через io.input() / io.output() между скриптами обмениваться?
 
Цитата
Александр написал:
io.input() / io.output()
Они же просто переопределяют стандартный ввод и вывод. Как минимум надо иметь уже открытый хэндл, на который переопределять, что сводится к задаче где его взять, которая в общем тут и обсуждается.
 
Нашел еще решение через командную строку http://www.neo-techno.ru/os/windows/autoit/telegrambot/
 
Вроде, кучу способов уже накидали )
Я для себя избрал самый ленивый способ - через curl.
Код
CURL = "D:\\curl\\curl.exe"
TELEGRAM_TOKEN = "токен бота"
‎TELEGRAM_CHAT_ID = "id чата"

<...>

function sendTelegramMessage(text)
    local cmd = string.format(
        "start /b %s -s -o nul -X POST https://api.telegram.org/bot%s"..
        "/SendMessage?chat_id=%s -d text=\"%s\" ",
        CURL, TELEGRAM_TOKEN, TELEGRAM_CHAT_ID, text
    )
    os.execute(cmd)
end
Страницы: 1
Читают тему
Наверх