Re: еще один telegram bot
похоже токен кривой
Другие боты из квика отправляют уведомления с этим же ключом. Может, ему принудительно Chat ID указать?
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
QUIK -> DDE → Lua: готовые внешние библиотеки → еще один telegram bot
похоже токен кривой
Другие боты из квика отправляют уведомления с этим же ключом. Может, ему принудительно Chat ID указать?
попробуйте на чистой конфигурации: зарегистрируйте новый бот и подставьте его токен...
попробуйте на чистой конфигурации: зарегистрируйте новый бот и подставьте его токен...
Спасибо. Перевыпустил токен, заработало.
QUIK: C:\QUIK_VTB_85 CONNECTED
Обработчики мы пакуем в этом файле: "quik_telegram_agent.lua"?
Могу попросить на примере требования по счету при подключении к сети интернет квика показать обработчик?
Или, в каком-то частном порядке с Вами ...
Затея, вообщем в том, чтобы:
1. При соединении, я бы понимал баланс в разрезе каждого счета, НРП1, НРП2, чтобы МК ко мне не пришёл.
2. Происходит покупка / продажа. Мне надо высчитать профит/ убыток сделки и баланс по счету.
Обработчики мы пакуем в этом файле: "quik_telegram_agent.lua"?
не совсем понятно, что значит "пакуем", но, вероятно, ответ "да". обработчики пишутся там.
Затея, вообщем в том, чтобы:
1. При соединении, я бы понимал баланс в разрезе каждого счета, НРП1, НРП2, чтобы МК ко мне не пришёл.
2. Происходит покупка / продажа. Мне надо высчитать профит/ убыток сделки и баланс по счету.
вешаете обработчик на изменение соответствующих таблиц и в нем пишите что-то вроде:
tsq["telegram_queue"] = {quik_id = current_quik_id, message = "баланс счета в виде строки"}
данное сообщение уйдет всем, кто ввел пароль в канале.
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
не туда код вставил?
Новости в телеграмм не летят.
ну, наверное, нужно не мой кусок, выдернутый из контекста, вставлять, а написать свой код который делает то, что вым нужно. новости в телеграм не летят, потому что не хватает кода, который эти новости из квика извлекает.
ну, наверное, нужно не мой кусок, выдернутый из контекста, вставлять, а написать свой код который делает то, что вым нужно. новости в телеграм не летят, потому что не хватает кода, который эти новости из квика извлекает.
Вы про этот? Он вставлен, 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
вы таблицу с новостями открыли? она должна называться "Новости" и все галки в настройках таблицы "Новости" должны быть сняты: "показывать статистику" и прочее.
вы таблицу с новостями открыли? она должна называться "Новости" и все галки в настройках таблицы "Новости" должны быть сняты: "показывать статистику" и прочее.
"...В окне: 2299; Последняя: 02.06.20..." -- вот этого в заголовке окна быть не должно. В заголовке окна должно быть одно слово: "Новости", так как библиотека multilist ищет его по совпадению заголовка:
ml.find_table('\205\238\226\238\241\242\232')
параметр - строка "Новости" в кодировке win1251
"...В окне: 2299; Последняя: 02.06.20..." -- вот этого в заголовке окна быть не должно. В заголовке окна должно быть одно слово: "Новости", так как библиотека multilist ищет его по совпадению заголовка:
ml.find_table('\205\238\226\238\241\242\232')
параметр - строка "Новости" в кодировке win1251
[s]ну, ждите пока новые новости придут теперь, он старое содержимое не выдает, только то, что пришло после "news start"[/s]
должен выдать 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
ну, я не знаю, поотлаживайте, посмотрите, находит ли таблицу "Новости", выцепляет ли из нее данные... добавьте логирование в окно сообщений...
к сожалению, советы - это все чем я погу помочь, у меня даже логина к квику нет чтобы попробовать самому. должно работать.
Заработало с N попытки. Пришлось удалить всё и заново создать. Единственное - только заголовки отправляет новостей. Спасибо
так в чем проблема-то была?
так в чем проблема-то была?
Я поместил код сюда и заработало. До этого пытался через else if запускать вместе с пингом квика
так в чем проблема-то была?
Заголовки приходят только. Это кастомизируется?
зачем? когда можно было оригинальный код взять. я думал вы в свой робот поддержку telegram вставляете.
Заголовки приходят только. Это кастомизируется?
нет. потому что:
1. это просто пример, демонстрация работы библиотеки multilist (ну и телеграм бота)
2. если вы посмотрите на окно "новости" то увидите, что в таблице, которая и является окном класса multilist, есть только заголовки, соответственно, библиотека не может достать то, чего просто нет.
3. для того, чтобы достать тело новости, необходимо кликнуть по ней, дождаться, пока текст загрузится в окно просмотра (вроде это rich rext?, не помню) и только после этого его можно пытаться из него добыть. это нетривиальная логика, я не уверен, что можно сделать это без глюков и не мешая работе пользователя квика.
зачем? когда можно было оригинальный код взять. я думал вы в свой робот поддержку telegram вставляете.
«Из коробки» не работало.
Да я не силён в программировании, так, copy - past. Поэтому, уже с десяток разных скриптов, в том числе и отправляющих что-то в телеграмм, работающих на своих кодах.
почему демонстрация трансляции сделана именно из таблицы новости - потому, что из таблицы новости нельзя сделать никакой экспорт, она так же недоступна для qpile/lua. это сделано специально, чтобы не воровали новости и не транслировали их на свои сайты или куда там еще.
почему демонстрация трансляции сделана именно из таблицы новости - потому, что из таблицы новости нельзя сделать никакой экспорт, она так же недоступна для 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
Почему не отправляет?
и ещё такой момент: если закрыть ipc_telegram_bot.exe , то слетают подписки, приходится опять hello, start news ...
и ещё такой момент: если закрыть ipc_telegram_bot.exe , то слетают подписки, приходится опять hello, start news ...
да, естественно, они же в этом процессе хранятся. можно использовать permanent хранилище, а можно просто никогда его не выключать - он ресурсов вообще нисколько не требует.
if orders_table_handle == nil then news_table_handle = ml.find_table('Заявки') end -- "Заявки" window caption if orders_table_handle ~= nil then
Почему не отправляет?
ЗАЧЕМ? есть же штатный механизм получения заявок через колбэк.
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]? вы уверены, что там номер заявки? к тому же, в отличие от таблицы "новости", в таблице "заявки" обновляются произвольные строки, а этот алгоритм будет работать только с таблицей, у которой новые строки добавляются в начало, а сами строки, будучи добавленными, остаются неизменны.
QUIK -> DDE → Lua: готовые внешние библиотеки → еще один telegram bot
Форум работает на PunBB, при поддержке Informer Technologies, Inc