26 (2021-05-31 21:18:05 отредактировано Skyspirit)

Re: еще один telegram bot

toxa пишет:

похоже токен кривой


Другие боты из квика отправляют уведомления с этим же ключом. Может, ему принудительно Chat ID указать?

27 (2021-05-31 21:38:22 отредактировано toxa)

Re: еще один telegram bot

попробуйте на чистой конфигурации: зарегистрируйте новый бот и подставьте его токен...

28

Re: еще один telegram bot

toxa пишет:

попробуйте на чистой конфигурации: зарегистрируйте новый бот и подставьте его токен...

Спасибо. Перевыпустил токен, заработало.

QUIK: C:\QUIK_VTB_85 CONNECTED

Обработчики мы пакуем в этом файле: "quik_telegram_agent.lua"?

Могу попросить на примере требования по счету при подключении к сети интернет квика показать обработчик?

Или, в каком-то частном порядке с Вами ...

Затея, вообщем в том, чтобы:
1. При соединении, я бы понимал баланс в разрезе каждого счета, НРП1, НРП2, чтобы МК ко мне не пришёл.
2. Происходит покупка / продажа. Мне надо высчитать профит/ убыток сделки и баланс по счету.

29

Re: еще один telegram bot

Skyspirit пишет:

Обработчики мы пакуем в этом файле: "quik_telegram_agent.lua"?

не совсем понятно, что значит "пакуем", но, вероятно, ответ "да". обработчики пишутся там.

Skyspirit пишет:

Затея, вообщем в том, чтобы:
1. При соединении, я бы понимал баланс в разрезе каждого счета, НРП1, НРП2, чтобы МК ко мне не пришёл.
2. Происходит покупка / продажа. Мне надо высчитать профит/ убыток сделки и баланс по счету.

вешаете обработчик на изменение соответствующих таблиц и в нем пишите что-то вроде:

tsq["telegram_queue"] = {quik_id = current_quik_id, message = "баланс счета в виде строки"}

данное сообщение уйдет всем, кто ввел пароль в канале.

30

Re: еще один telegram bot

toxa пишет:
Skyspirit пишет:

Обработчики мы пакуем в этом файле: "quik_telegram_agent.lua"?

не совсем понятно, что значит "пакуем", но, вероятно, ответ "да". обработчики пишутся там.

Skyspirit пишет:

Затея, вообщем в том, чтобы:
1. При соединении, я бы понимал баланс в разрезе каждого счета, НРП1, НРП2, чтобы МК ко мне не пришёл.
2. Происходит покупка / продажа. Мне надо высчитать профит/ убыток сделки и баланс по счету.

вешаете обработчик на изменение соответствующих таблиц и в нем пишите что-то вроде:

tsq["telegram_queue"] = {quik_id = current_quik_id, message = "баланс счета в виде строки"}

данное сообщение уйдет всем, кто ввел пароль в канале.


if data ~= nil then
                            local command = data.message:lower()
                            if command == 'login' then
                                tsq["telegram_queue"] = {quik_id = current_quik_id, user_id = data.user_id, message = manage_quik_connection(true)}
                            elseif command == 'logout' then
                                tsq["telegram_queue"] = {quik_id = current_quik_id, user_id = data.user_id, message = manage_quik_connection(false)}
                            elseif command == 'news start' then
                                news_poll_enabled = true
                                tsq["telegram_queue"] = {quik_id = current_quik_id, user_id = data.user_id, message = "news polling started"}
                            elseif command == 'news stop' then
                                news_poll_enabled = false
                                tsq["telegram_queue"] = {quik_id = current_quik_id, user_id = data.user_id, message = "news polling stopped"}
                            else
                                -- reply message back to telegram user
                                tsq["telegram_queue"] = {quik_id = current_quik_id, quik_alive = true, user_id = data.user_id, message = "received: " .. tostring(data.message)}
                                -- dump message to messages table
                                message("user: " .. tostring(data.user_id) .. " message: " .. tostring(data.message), 1)
                            end
                        end
        until data == nil
        sleep(100)
    end

не туда код вставил?
Новости в телеграмм не летят.

31 (2021-06-01 23:25:56 отредактировано toxa)

Re: еще один telegram bot

ну, наверное, нужно не мой кусок, выдернутый из контекста, вставлять, а написать свой код который делает то, что вым нужно. новости в телеграм не летят, потому что не хватает кода, который эти новости из квика извлекает.

32 (2021-06-02 08:31:58 отредактировано Skyspirit)

Re: еще один telegram bot

toxa пишет:

ну, наверное, нужно не мой кусок, выдернутый из контекста, вставлять, а написать свой код который делает то, что вым нужно. новости в телеграм не летят, потому что не хватает кода, который эти новости из квика извлекает.

Вы про этот? Он вставлен, dll из поста подгружены. Скрипт запущен, не ругается.

Единственно, не могу понять, как вставить вызов функции

в main() я добавил вызов этой функции раз в 5 секунд, в блок условия, где комментарий "-- ping quik connection every 5 seconds..

-- ping quik connection
            tsq["telegram_queue"] = {quik_id = current_quik_id, quik_alive = true}        
            last_os_time = os.time()

, [2 июня 2021 г., 07:09:13]:
news start

Quik, [2 июня 2021 г., 07:09:19]:
received: news start

news polling started


ml = require "lua_multilist"
last_news_id = nil
function sendnews()
    if news_table_handle == nil then news_table_handle = ml.find_table('\205\238\226\238\241\242\232') end -- "Новости" window caption
    if news_table_handle ~= nil then
        local i = 1
        local id = nil
        repeat
            local row = ml.get_row(news_table_handle, i)
            if row ~= nil then
                if id == nil then id = row[5] end
                if last_news_id ~= row[5] then 
                    tsq["telegram_queue"] = {quik_id = current_quik_id, message = row[2] .. " " .. row[3] .. ": " .. row[4]}
                    if (i >= 15) then row = nil end
                else
                    row = nil                
                end
                i = i + 1
            end 
        until row == nil
        if id ~= nil then last_news_id = id end
    end
end

33

Re: еще один telegram bot

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

34 (2021-06-02 13:37:23 отредактировано Skyspirit)

Re: еще один telegram bot

toxa пишет:

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

https://i.ibb.co/GdmZt7n/05155-A50-134-B-4178-A805-C80454-B8-D484.jpg

35

Re: еще один telegram bot

"...В окне: 2299; Последняя: 02.06.20..." -- вот этого в заголовке окна быть не должно. В заголовке окна должно быть одно слово: "Новости", так как библиотека multilist ищет его по совпадению заголовка:

ml.find_table('\205\238\226\238\241\242\232')

параметр - строка "Новости" в кодировке win1251

36

Re: еще один telegram bot

toxa пишет:

"...В окне: 2299; Последняя: 02.06.20..." -- вот этого в заголовке окна быть не должно. В заголовке окна должно быть одно слово: "Новости", так как библиотека multilist ищет его по совпадению заголовка:

ml.find_table('\205\238\226\238\241\242\232')

параметр - строка "Новости" в кодировке win1251

https://i.ibb.co/W0TLmMf/08-FA9-BD4-D943-41-D2-8-B53-30-AC3115-D08-A.jpg

37 (2021-06-02 14:57:03 отредактировано toxa)

Re: еще один telegram bot

ну, ждите пока новые новости придут теперь, он старое содержимое не выдает, только то, что пришло после "news start"
должен выдать 15 последних. вы вызываете sendnews() из main периодически?
примерно так:

        if (os.time() - last_os_time >= 5) then
            if news_poll_enabled then sendnews() end
            -- ping quik connection every 5 seconds to re-register if ipc_telegram_bot is restarted
            tsq["telegram_queue"] = {quik_id = current_quik_id, quik_alive = true}        
            last_os_time = os.time()
        end

ну, я не знаю, поотлаживайте, посмотрите, находит ли таблицу "Новости", выцепляет ли из нее данные... добавьте логирование в окно сообщений...

к сожалению, советы - это все чем я погу помочь, у меня даже логина к квику нет чтобы попробовать самому. должно работать.

38 (2021-06-02 17:47:20 отредактировано Skyspirit)

Re: еще один telegram bot

Заработало с N попытки. Пришлось удалить всё и заново создать. Единственное - только заголовки отправляет новостей. Спасибо

39

Re: еще один telegram bot

так в чем проблема-то была?

40 (2021-06-02 18:04:43 отредактировано Skyspirit)

Re: еще один telegram bot

toxa пишет:

так в чем проблема-то была?

Я поместил код сюда и заработало. До этого пытался через else if запускать вместе с пингом квика

https://i.ibb.co/0KtPjbJ/2-EDFB996-D0-C4-46-CE-BF71-C603-B29-CDF36.png

41

Re: еще один telegram bot

toxa пишет:

так в чем проблема-то была?

Заголовки приходят только. Это кастомизируется?

https://i.ibb.co/D4RkTJK/12948-ACA-4-F46-4-A21-9-D2-C-FD7-B5-E560-F80.png

42

Re: еще один telegram bot

зачем? когда можно было оригинальный код взять. я думал вы в свой робот поддержку telegram вставляете.

43

Re: еще один telegram bot

Skyspirit пишет:

Заголовки приходят только. Это кастомизируется?

нет. потому что:
1. это просто пример, демонстрация работы библиотеки multilist (ну и телеграм бота)
2. если вы посмотрите на окно "новости" то увидите, что в таблице, которая и является окном класса multilist, есть только заголовки, соответственно, библиотека не может достать то, чего просто нет.
3. для того, чтобы достать тело новости, необходимо кликнуть по ней, дождаться, пока текст загрузится в окно просмотра (вроде это rich rext?, не помню) и только после этого его можно пытаться из него добыть. это нетривиальная логика, я не уверен, что можно сделать это без глюков и не мешая работе пользователя квика.

44

Re: еще один telegram bot

toxa пишет:

зачем? когда можно было оригинальный код взять. я думал вы в свой робот поддержку telegram вставляете.

«Из коробки» не работало.
Да я не силён в программировании, так, copy - past. Поэтому, уже с десяток разных скриптов, в том числе и отправляющих что-то в телеграмм, работающих на своих кодах.

45

Re: еще один telegram bot

почему демонстрация трансляции сделана именно из таблицы новости - потому, что из таблицы новости нельзя сделать никакой экспорт, она так же недоступна для qpile/lua. это сделано специально, чтобы не воровали новости и не транслировали их на свои сайты или куда там еще.

46

Re: еще один telegram bot

toxa пишет:

почему демонстрация трансляции сделана именно из таблицы новости - потому, что из таблицы новости нельзя сделать никакой экспорт, она так же недоступна для qpile/lua. это сделано специально, чтобы не воровали новости и не транслировали их на свои сайты или куда там еще.

Пытаюсь собрать отправку "Заявок"

Обработчик

-- Orders
function sendorders()
    if orders_table_handle == nil then news_table_handle = ml.find_table('Заявки') end -- "Заявки" window caption
    if orders_table_handle ~= nil then
        local i = 1
        local id = nil
        repeat
            local row = ml.get_row(orders_table_handle, i)
            if row ~= nil then
                if id == nil then id = row[5] end
                if last_orders_id ~= row[5] then 
                    tsq["telegram_queue"] = {quik_id = current_quik_id, message = row[2] .. " " .. row[3] .. ": " .. row[4]}
                    if (i >= 1) then row = nil end
                else
                    row = nil                
                end
                i = i + 1
            end 
        until row == nil
        if id ~= nil then last_orders_id = id end
    end
end

запуск функции

-- orders
            if (os.time() - last_os_time >= 5) then
            else if orders_poll_enabled then sendorders() 
            end 
            end

Подписка на завки

            if data ~= nil then
                            local command = data.message:lower()
                           if command == 'orders start' then
                                orders_poll_enabled = true
                                tsq["telegram_queue"] = {quik_id = current_quik_id, user_id = data.user_id, message = "orders polling started"}
                            
                            end
                        end
        until data == nil
        sleep(100)
    end

Почему не отправляет?

47

Re: еще один telegram bot

и ещё такой момент: если закрыть ipc_telegram_bot.exe , то слетают подписки, приходится опять hello, start news ...

48

Re: еще один telegram bot

Skyspirit пишет:

и ещё такой момент: если закрыть ipc_telegram_bot.exe , то слетают подписки, приходится опять hello, start news ...

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

49

Re: еще один telegram bot

Skyspirit пишет:
    if orders_table_handle == nil then news_table_handle = ml.find_table('Заявки') end -- "Заявки" window caption
    if orders_table_handle ~= nil then

Почему не отправляет?

ЗАЧЕМ? есть же штатный механизм получения заявок через колбэк.

50 (2021-06-04 13:51:34 отредактировано toxa)

Re: еще один telegram bot

function OnOrder(order)
    if orders_poll_enabled then
        tsq["telegram_queue"] = {quik_id = current_quik_id, message = "Order: " .. tostring(order.order_num)}
    end
end

ну, естественно, вместо "Order: " .. tostring(order.order_num) нужно преобразование в строку и конкатенация тех полей из таблицы "заявки", которые вас интересуют.

аналогично можно транслировать сделки, позы, все что доступно через lua-колбэки в квике.

ps: я догадываюсь, почему у вас не работает, но я не буду указывать на проблему, потому что гораздо лучше использовать те методы, которые для этого предназначены. о том, какие есть колбэки, кроме OnOrder и OnTrade, можно почитать в документации по quik lua, которая есть в дистрибутиве квика.
pps: нельзя же настолько бездумно копировать. что у вас в таблице заявки row[5]? вы уверены, что там номер заявки? к тому же, в отличие от таблицы "новости", в таблице "заявки" обновляются произвольные строки, а этот алгоритм будет работать только с таблицей, у которой новые строки добавляются в начало, а сами строки, будучи добавленными, остаются неизменны.