1

Тема: Отправка в Telegram из QUIK

Подскажите кто знает что не так почему не уходит сообщение

function telegram_group2(token,chat_id,message)
  local chat_id = "-460430831"
       local token = "1665286310:AAGa6lViJ8NDjybSvMIPGYYCDDcmTIAUdhU"
       local message1 = "Hello Lua" 
  if token and chat_id and message then 
     str='C:\\curl-7.60.0-win64-mingw-master\\bin\\curl.exe --connect-timeout 10 -k -s '
    str=str.."https://api.telegram.org/bot"..token.."/sendMessage?chat_id="..chat_id.."&text="..message1

    
    local msg = os.execute(str)
        if msg then 
            return true
         else 
            message("error telegram")
           return false
         end 
    end 
end

2

Re: Отправка в Telegram из QUIK

Отбой использую метод от сюда [url]https://quik2dde.ru/viewtopic.php?pid=3066#p3066[/url]

3

Re: Отправка в Telegram из QUIK

Вот рабочий вариант отправки в телеграм через cmd curl

Установит curl если нет, создать бота и группу или канал узнать id
[url]https://betacode.net/11617/install-curl-on-windows[/url]

function tel_group()
  str = "curl --connect-timeout 10 -k -s "
  str = str .. "\"https://api.telegram.org/bot1665286370:AAEEVkD-_VRQtUanptwjn4TlkWdn8xMSu0sc/sendMessage?chat_id=-460430831&text="
  str = str .. "Hello Lua" 
  local msg = os.execute("start /MIN "..str)  
  if msg then 
    return true
  else 
    message("error telegram")
    return false
  end 
end

4

Re: Отправка в Telegram из QUIK

Спасибо, что делитесь готовыми решениями!! wink

5

Re: Отправка в Telegram из QUIK

Правда есть одна неприятная особенность, мелькает окно cmd и кажеться основной поток занимает пока висит, а может и зависнуть

6

Re: Отправка в Telegram из QUIK

iforts пишет:

Вот рабочий вариант отправки в телеграм
[url]https://betacode.net/11617/install-curl-on-windows[/url]

Ммм, не выдает ничего для Windows64...((
Ну, и в целом вопрос, как отправить себе сообщение из скрипта?

7

Re: Отправка в Telegram из QUIK

iforts пишет:

Вот рабочий вариант отправки в телеграм через cmd curl

Установит curl если нет, создать бота и группу или канал узнать id
[url]https://betacode.net/11617/install-curl-on-windows[/url]

function tel_group()
  str = "curl --connect-timeout 10 -k -s "
  str = str .. "\"https://api.telegram.org/bot1665286370:AAEEVkD-_VRQtUanptwjn4TlkWdn8xMSu0sc/sendMessage?chat_id=-460430831&text="
  str = str .. "Hello Lua" 
  local msg = os.execute("start /MIN "..str)  
  if msg then 
    return true
  else 
    message("error telegram")
    return false
  end 
end

Что то непонятно ? У меня win7 все уходит нормально.

8 (2023-05-06 20:30:30 отредактировано dima.v.blank)

Re: Отправка в Telegram из QUIK

доброго дня.
немного темку UPну

и так рабочий вариант работает smile (WIN7 32 & WIN10 64)

function telegram(message,num)
str = "curl -X POST \"https://api.telegram.org/bot--TOKEN--/sendMessage\" -d \"chat_id=--CHAT--&text="..message.."\""
local msg = os.execute("start /MIN "..str)  
    if msg then 
        return true
    else
        message("ERROR TELEGRAM", 3)
        return false
    end 
end

но работает невсегда! Я что-то прям зависаю уже.

РАБОТАЕТ:

STRATEGY = INSTRUMENT..TF

function OnInit()
    telegram(STRATEGY.." Loading ...", 2)

дальше в main() НЕ РАБОТАЕТ (но работает если выводить например LAST по инструменту. прям спамит в чат нормально )

function main()
    while IsRun do
...
    --=== CONNECTED ?
    if isConnected() == 0 then
        telegram(STRATEGY.." нет соединения", 3)
        slp = 5000
    end

дальше РАБОТАЕТ (только & нужно экранировать - все что после - не видно в сообщении)

            
--== ПОЛУЧАЕМ ДАННЫЕ по ИНСТРУМЕНТУ
PRICEMAX = math.floor(getParamEx(CLASSCODE, INSTRUMENT, "PRICEMAX").param_value + 0)    -- максимально возможная цена
PRICEMIN = math.floor(getParamEx(CLASSCODE, INSTRUMENT, "PRICEMIN").param_value + 0)    -- минимально возможная цена
LAST = math.floor(getParamEx(CLASSCODE, INSTRUMENT, "LAST").param_value + 0)              -- последняя цена
--== КОНТРОЛЬ ДАННЫХ ПО ИНСТРУМЕНТУ (PRICEMAX / PRICEMIN)
    if PRICEMAX == 0 or PRICEMIN == 0 or LAST == 0 then
        telegram(STRATEGY.." ... loading PRICEMAX & PRICEMIN & LAST", 2)
        slp = 5000
        break
    end

в функции OnStop - отказывается работать

function OnStop()
    IsRun = false
    telegram(STRATEGY.." Остановили торговлю. Закрыли таблицу.", 2)

собственно  если поменять с функции telegram на просто message() - никаких нареканий, или рядом поставить дублирующую строку message()

и да, окно cmd выходит (появляется) когда нужно, но сообщений нет. Как бы посмотреть какая ошибка?

если есть мысли куда копать, буду признателен

9 (2022-10-27 13:50:36 отредактировано dima.v.blank)

Re: Отправка в Telegram из QUIK

это очень странно... но оказывается не отправляются сообщения на кирилице!
Как только я "перевел" все сообщения - все отлично работает.

нашел код ошибки:

"{"ok":false,"error_code":400,"description":"Bad Request: strings must be encoded in UTF-8"}"

а все скрипты же у меня на CP1251

Буду капать в этом направлении.

10

Re: Отправка в Telegram из QUIK

Значит такое требование интерфейса телеграмма.
Осталось найти чем конвертировать CP1251 -> UTF-8
Похоже есть смысл добавить в w32 библиотеку, например, такую функцию.

11

Re: Отправка в Telegram из QUIK

и так РЕШЕНИЕ!!! smile

функция перекодировки Ansi => Utf8

local ansi_decode={
[128]='\208\130',[129]='\208\131',[130]='\226\128\154',[131]='\209\147',[132]='\226\128\158',[133]='\226\128\166',
[134]='\226\128\160',[135]='\226\128\161',[136]='\226\130\172',[137]='\226\128\176',[138]='\208\137',[139]='\226\128\185',
[140]='\208\138',[141]='\208\140',[142]='\208\139',[143]='\208\143',[144]='\209\146',[145]='\226\128\152',
[146]='\226\128\153',[147]='\226\128\156',[148]='\226\128\157',[149]='\226\128\162',[150]='\226\128\147',[151]='\226\128\148',
[152]='\194\152',[153]='\226\132\162',[154]='\209\153',[155]='\226\128\186',[156]='\209\154',[157]='\209\156',
[158]='\209\155',[159]='\209\159',[160]='\194\160',[161]='\209\142',[162]='\209\158',[163]='\208\136',
[164]='\194\164',[165]='\210\144',[166]='\194\166',[167]='\194\167',[168]='\208\129',[169]='\194\169',
[170]='\208\132',[171]='\194\171',[172]='\194\172',[173]='\194\173',[174]='\194\174',[175]='\208\135',
[176]='\194\176',[177]='\194\177',[178]='\208\134',[179]='\209\150',[180]='\210\145',[181]='\194\181',
[182]='\194\182',[183]='\194\183',[184]='\209\145',[185]='\226\132\150',[186]='\209\148',[187]='\194\187',
[188]='\209\152',[189]='\208\133',[190]='\209\149',[191]='\209\151'
}
local utf8_decode={
[128]={[147]='\150',[148]='\151',[152]='\145',[153]='\146',[154]='\130',[156]='\147',[157]='\148',[158]='\132',[160]='\134',[161]='\135',[162]='\149',[166]='\133',[176]='\137',[185]='\139',[186]='\155'},
[130]={[172]='\136'},
[132]={[150]='\185',[162]='\153'},
[194]={[152]='\152',[160]='\160',[164]='\164',[166]='\166',[167]='\167',[169]='\169',[171]='\171',[172]='\172',[173]='\173',[174]='\174',[176]='\176',[177]='\177',[181]='\181',[182]='\182',[183]='\183',[187]='\187'},
[208]={[129]='\168',[130]='\128',[131]='\129',[132]='\170',[133]='\189',[134]='\178',[135]='\175',[136]='\163',[137]='\138',[138]='\140',[139]='\142',[140]='\141',[143]='\143',[144]='\192',[145]='\193',[146]='\194',[147]='\195',[148]='\196',
[149]='\197',[150]='\198',[151]='\199',[152]='\200',[153]='\201',[154]='\202',[155]='\203',[156]='\204',[157]='\205',[158]='\206',[159]='\207',[160]='\208',[161]='\209',[162]='\210',[163]='\211',[164]='\212',[165]='\213',[166]='\214',
[167]='\215',[168]='\216',[169]='\217',[170]='\218',[171]='\219',[172]='\220',[173]='\221',[174]='\222',[175]='\223',[176]='\224',[177]='\225',[178]='\226',[179]='\227',[180]='\228',[181]='\229',[182]='\230',[183]='\231',[184]='\232',
[185]='\233',[186]='\234',[187]='\235',[188]='\236',[189]='\237',[190]='\238',[191]='\239'},
[209]={[128]='\240',[129]='\241',[130]='\242',[131]='\243',[132]='\244',[133]='\245',[134]='\246',[135]='\247',[136]='\248',[137]='\249',[138]='\250',[139]='\251',[140]='\252',[141]='\253',[142]='\254',[143]='\255',[144]='\161',[145]='\184',
[146]='\144',[147]='\131',[148]='\186',[149]='\190',[150]='\179',[151]='\191',[152]='\188',[153]='\154',[154]='\156',[155]='\158',[156]='\157',[158]='\162',[159]='\159'},[210]={[144]='\165',[145]='\180'}
}

local nmdc = {
[36] = '$',
[124] = '|'
}

function AnsiToUtf8(s)
    local r, b = ''
    for i = 1, s and s:len() or 0 do
        b = s:byte(i)
        if b < 128 then
            r = r..string.char(b)
        else
            if b > 239 then
                r = r..'\209'..string.char(b - 112)
            
            elseif b > 191 then
                r = r..'\208'..string.char(b - 48)
            elseif ansi_decode[b] then
                r = r..ansi_decode[b]
            else
                r = r..'_'
            end
        end
    end
    return r
end

ну и сам Telegram:

function telegram(message,num)
message = AnsiToUtf8(message)
str = "curl -X GET \"https://api.telegram.org/bot--TOKEN--/sendMessage\" -d \"chat_id=--CHAT_ID--&text="..message.."\""
local msg = os.execute("start /MIN "..str)  
    if msg then 
        return true
    else
        message("ERROR TELEGRAM", 3)
        return false
    end 
end

12 (2022-10-27 13:57:39 отредактировано swerg)

Re: Отправка в Telegram из QUIK

dima.v.blank https://smailik.top/gif/funi01018.gif

13

Re: Отправка в Telegram из QUIK

добавил чутка смайлов, на основании параметров message

function telegram(message,num)
if num == 1 or num == nil then num = "%F0%9F%98%8F "
elseif num == 2 then num = "%F0%9F%98%9C "
elseif num == 3 then num ="%F0%9F%98%A1 "
end
message = AnsiToUtf8(message)
str = "curl -X GET \"https://api.telegram.org/bot--BOT API--/sendMessage\" -d \"chat_id=--CHAT ID--&text="..num..message.."\""
local msg = os.execute("start /MIN "..str)  
    if msg then 
        return true
    else
        message("ERROR TELEGRAM", 3)
        return false
    end 
end

14 (2022-10-27 14:27:47 отредактировано dima.v.blank)

Re: Отправка в Telegram из QUIK

добавил чутка смайлов

смайлики брать тут:
[url]https://apps.timwhitlock.info/emoji/tables/unicode[/url]

символы \х менять на %

15 (2023-05-06 20:34:24 отредактировано dima.v.blank)

Re: Отправка в Telegram из QUIK

WIN10 64
Функцию AnsiToUtf8 убрал. Работает штатно без нее
Странно конечно, но если у кого будет работать без нее норм, если нет - добавляйте

function telegram(message,num)
-- message = AnsiToUtf8(message)
str = "curl -X GET \"https://api.telegram.org/bot--TOKEN--/sendMessage\" -d \"chat_id=--CHAT_ID--&text="..message.."\""
local msg = os.execute("start /MIN "..str)  
    if msg then 
        return true
    else
        message("ERROR TELEGRAM", 3)
        return false
    end 
end
dima.v.blank пишет:

и так РЕШЕНИЕ!!! smile

функция перекодировки Ansi => Utf8

local ansi_decode={
[128]='\208\130',[129]='\208\131',[130]='\226\128\154',[131]='\209\147',[132]='\226\128\158',[133]='\226\128\166',
[134]='\226\128\160',[135]='\226\128\161',[136]='\226\130\172',[137]='\226\128\176',[138]='\208\137',[139]='\226\128\185',
[140]='\208\138',[141]='\208\140',[142]='\208\139',[143]='\208\143',[144]='\209\146',[145]='\226\128\152',
[146]='\226\128\153',[147]='\226\128\156',[148]='\226\128\157',[149]='\226\128\162',[150]='\226\128\147',[151]='\226\128\148',
[152]='\194\152',[153]='\226\132\162',[154]='\209\153',[155]='\226\128\186',[156]='\209\154',[157]='\209\156',
[158]='\209\155',[159]='\209\159',[160]='\194\160',[161]='\209\142',[162]='\209\158',[163]='\208\136',
[164]='\194\164',[165]='\210\144',[166]='\194\166',[167]='\194\167',[168]='\208\129',[169]='\194\169',
[170]='\208\132',[171]='\194\171',[172]='\194\172',[173]='\194\173',[174]='\194\174',[175]='\208\135',
[176]='\194\176',[177]='\194\177',[178]='\208\134',[179]='\209\150',[180]='\210\145',[181]='\194\181',
[182]='\194\182',[183]='\194\183',[184]='\209\145',[185]='\226\132\150',[186]='\209\148',[187]='\194\187',
[188]='\209\152',[189]='\208\133',[190]='\209\149',[191]='\209\151'
}
local utf8_decode={
[128]={[147]='\150',[148]='\151',[152]='\145',[153]='\146',[154]='\130',[156]='\147',[157]='\148',[158]='\132',[160]='\134',[161]='\135',[162]='\149',[166]='\133',[176]='\137',[185]='\139',[186]='\155'},
[130]={[172]='\136'},
[132]={[150]='\185',[162]='\153'},
[194]={[152]='\152',[160]='\160',[164]='\164',[166]='\166',[167]='\167',[169]='\169',[171]='\171',[172]='\172',[173]='\173',[174]='\174',[176]='\176',[177]='\177',[181]='\181',[182]='\182',[183]='\183',[187]='\187'},
[208]={[129]='\168',[130]='\128',[131]='\129',[132]='\170',[133]='\189',[134]='\178',[135]='\175',[136]='\163',[137]='\138',[138]='\140',[139]='\142',[140]='\141',[143]='\143',[144]='\192',[145]='\193',[146]='\194',[147]='\195',[148]='\196',
[149]='\197',[150]='\198',[151]='\199',[152]='\200',[153]='\201',[154]='\202',[155]='\203',[156]='\204',[157]='\205',[158]='\206',[159]='\207',[160]='\208',[161]='\209',[162]='\210',[163]='\211',[164]='\212',[165]='\213',[166]='\214',
[167]='\215',[168]='\216',[169]='\217',[170]='\218',[171]='\219',[172]='\220',[173]='\221',[174]='\222',[175]='\223',[176]='\224',[177]='\225',[178]='\226',[179]='\227',[180]='\228',[181]='\229',[182]='\230',[183]='\231',[184]='\232',
[185]='\233',[186]='\234',[187]='\235',[188]='\236',[189]='\237',[190]='\238',[191]='\239'},
[209]={[128]='\240',[129]='\241',[130]='\242',[131]='\243',[132]='\244',[133]='\245',[134]='\246',[135]='\247',[136]='\248',[137]='\249',[138]='\250',[139]='\251',[140]='\252',[141]='\253',[142]='\254',[143]='\255',[144]='\161',[145]='\184',
[146]='\144',[147]='\131',[148]='\186',[149]='\190',[150]='\179',[151]='\191',[152]='\188',[153]='\154',[154]='\156',[155]='\158',[156]='\157',[158]='\162',[159]='\159'},[210]={[144]='\165',[145]='\180'}
}

local nmdc = {
[36] = '$',
[124] = '|'
}

function AnsiToUtf8(s)
    local r, b = ''
    for i = 1, s and s:len() or 0 do
        b = s:byte(i)
        if b < 128 then
            r = r..string.char(b)
        else
            if b > 239 then
                r = r..'\209'..string.char(b - 112)
            
            elseif b > 191 then
                r = r..'\208'..string.char(b - 48)
            elseif ansi_decode[b] then
                r = r..ansi_decode[b]
            else
                r = r..'_'
            end
        end
    end
    return r
end

ну и сам Telegram:

function telegram(message,num)
message = AnsiToUtf8(message)
str = "curl -X GET \"https://api.telegram.org/bot--TOKEN--/sendMessage\" -d \"chat_id=--CHAT_ID--&text="..message.."\""
local msg = os.execute("start /MIN "..str)  
    if msg then 
        return true
    else
        message("ERROR TELEGRAM", 3)
        return false
    end 
end