сообщение в Telegram - это просто

Страницы: 1
RSS
сообщение в Telegram - это просто
 
Код
token="......"  --робот в telegram
chat_id="....." --ваш в telegram
curl="C:/Windows/System32/curl.exe --silent --output null "..'"'.."https://api.telegram.org/bot"..token.."/sendMessage?chat_id="..chat_id.."&text="
------------------------------
mes="привет!!"   --сообщение
os.execute(curl..mes..'"');  --отправляем
 
Жаль здесь нет реакций, поставил бы лайк за хорошую идею
 
Аккуратно обрабатываем спецсимволы:
Код
function tgmsg(text)
  local curl = 'curl.exe'
  local token = '.....'
  local chatid = '....'

  text = string.gsub(text, '[^0-9a-zA-Z\x80-\xff._~-]', function(chr) return string.format("%%%02x", string.byte(chr)) end)
  local h, e, c = io.popen(curl .. ' -X POST --data-raw text="' .. text .. '" https://api.telegram.org/bot' .. token .. '/sendMessage?chat_id=' .. chatid)
  if h then
      local a = h:read('a')
      return a, h:close()
  else
      return false, e, c
  end
end

 
Люди добрые, а кто может объяснить более подробно, где взять эти значния?
token="......"  --робот в telegram
chat_id="....." --ваш в telegram

Для тех, кто с ботам телеграмма не имел дела
 
Открываете в телеграмм https://telegram.me/BotFather
 
Пишите botFather /start
потом /newbot
придумываете имя, получаете токен
 
Потом подключаетесь к своему боту, пишите ему что-нибудь, дергаете api (можно прямо в браузере открыть) и ищите там chat id.
Изменено: Yaroslav Grebennikov - 24.07.2024 14:18:04
 
Цитата
paluke написал:
Потом подключаетесь к своему боту, пишите ему что-нибудь, дергаете api (можно прямо в браузере открыть) и ищите там chat id.
можно не писать, а сразу спрашивать.
Изменено: Yaroslav Grebennikov - 24.07.2024 12:23:09
 
Цитата
paluke написал:
Аккуратно обрабатываем спецсимволы:
Код
   function   tgmsg (text)
   local  curl  =   'curl.exe' 
   local  token  =   '.....' 
   local  chatid  =   '....' 

  text  =   string.gsub (text,  '[^0-9a-zA-Z\x80-\xff._~-]' ,  function (chr)  return   string.format ( "%%%02x" ,  string.byte (chr))  end )
   local  h, e, c  =   io.popen (curl  ..   ' -X POST --data-raw text="'   ..  text  ..   '" https://api.telegram.org/bot'   ..  token  ..   '/sendMessage?chat_id='   ..  chatid)
   if  h  then 
       local  a  =  h:read( 'a' )
       return  a, h:close()
   else 
       return   false , e, c
   end 
 end 

  
Код у вас не работает. Не выполняется io.popen, при этом ошибок нет. Если поменять на execute, то все работает  
 
Цитата
nikolz написал:
Код
  token =  "......"    --робот в telegram 
chat_id =  "....."   --ваш в telegram 
curl =  "C:/Windows/System32/curl.exe --silent --output null "  .. '"' .. "https://api.telegram.org/bot" .. token .. "/sendMessage?chat_id =  "..chat_id.."  & text =  "
------------------------------
mes=" привет !  ! "    --сообщение 
 os.execute (curl .. mes .. '"');   --отправляем   
А как бы решить проблему с кодировкой? В телгу прилетает абракадабра :(
 
У меня нет проблем с кодировкой.
 
напишите подробнее что и куда и приведите пример.
 
Цитата
nikolz написал:
напишите подробнее что и куда и приведите пример.
Разобрался. Файл LUA правил в редакторе Sublime на Mac OS и забыл сменить кодировку. Пересахронил файл с 1251 вместо UTF-8 и  все стало прекрасно!

Осталось понять почему io.popen не работает. Очень бы хотелось статус отправки видеть.
У меня на Win11 не работает.  
 
Цитата
Андрей написал:
os.execute (curl .. mes .. '"');   --отправляем  
Что именно хотите увидеть?
можете сделать так:
Код
file="D:/bot.log"
curl="C:/Windows/System32/curl.exe --silent --output "..file..'"'.."https://api.telegram.org/bot"..token.."/sendMessage?chat_id="..chat_id.."&text="
В file будет записан ответ робота.
 
Цитата
nikolz написал:
Цитата
Андрей написал:
os.execute (curl .. mes .. '"');   --отправляем  
Что именно хотите увидеть?
можете сделать так:
Код
  file =  "D:/bot.log" 
curl =  "C:/Windows/System32/curl.exe --silent --output "  .. file .. '"' .. "https://api.telegram.org/bot" .. token .. "/sendMessage?chat_id =  "..chat_id.."  & text = "  
В file будет записан ответ робота.
Благодарю за помощь!

Я бы хотел иметь возможность в LUA видеть статус отправки сообщений в Телегу и если сообщения перестали уходить, то получить какой-то message,
Версия с  io.popen  это позволяла бы сделать, как в приведённом выше примере, но он не работает :(.
Ваш вариант отличный, но он позволит только постфактум узнать о проблемах. Но все равно, Вам огромное спасибо за идею в принципе! Это просто прекрасное решение почти всех моих запросов!  
 
Цитата
Андрей написал:
Цитата
nikolz написал:
 
Цитата
Андрей  написал:
os.execute (curl .. mes .. '"');   --отправляем  
 Что именно хотите увидеть?
можете сделать так:  
Код
    file  =   "D:/bot.log" 
curl  =   "C:/Windows/System32/curl.exe  --silent --output "  .. file .. '"' .. "https://api.telegram.org/bot" .. token .. "/sendMessage?chat_id =  "..chat_id.."  & text = "     
 В file будет записан ответ робота.
Благодарю за помощь!

Я бы хотел иметь возможность в LUA видеть статус отправки сообщений в Телегу и если сообщения перестали уходить, то получить какой-то message,
Версия с  io.popen  это позволяла бы сделать, как в приведённом выше примере, но он не работает :(.
Ваш вариант отличный, но он позволит только постфактум узнать о проблемах. Но все равно, Вам огромное спасибо за идею в принципе! Это просто прекрасное решение почти всех моих запросов!  
Отправьте по аналогии как я написал запрос /update и получите все сообщения. Можно запросить только последнее.
Но как Вы собираетесь определить что сообщения перестали приходить ?
----------------
Возможно я не понял, но о каких проблемах Вы хотите узнать?
О проблемах с bot в Telegram или о проблемах в QUIK или о проблемах с ПК или о проблемах со связью с биржей?
 
Цитата
Андрей написал:
Цитата
nikolz написал:
 
Цитата
Андрей  написал:
os.execute (curl .. mes .. '"');   --отправляем  
 Что именно хотите увидеть?
можете сделать так:  
Код
    file  =   "D:/bot.log" 
curl  =   "C:/Windows/System32/curl.exe  --silent --output "  .. file .. '"' .. "https://api.telegram.org/bot" .. token .. "/sendMessage?chat_id =  "..chat_id.."  & text = "     
 В file будет записан ответ робота.
Благодарю за помощь!

Я бы хотел иметь возможность в LUA видеть статус отправки сообщений в Телегу и если сообщения перестали уходить, то получить какой-то message,
Версия с  io.popen  это позволяла бы сделать, как в приведённом выше примере, но он не работает :(.
Ваш вариант отличный, но он позволит только постфактум узнать о проблемах. Но все равно, Вам огромное спасибо за идею в принципе! Это просто прекрасное решение почти всех моих запросов!  
Не знаю, что у вас не так, у меня io.popen работает, и ответ от curl я получаю. Может, дело в версии curl
 
Цитата
paluke написал:
Цитата
Андрей написал:
 
Цитата
nikolz  написал:
 
Цитата
 Андрей   написал:
os.execute (curl .. mes .. '"');   --отправляем  
  Что именно хотите увидеть?
можете сделать так:  
Код
      file   =     "D:/bot.log"  
curl   =     "C:/Windows/System32/curl.exe  --silent --output "    ..  file  ..   '"'   ..   "https://api.telegram.org/bot"   ..  token  ..   "/sendMessage?chat_id =  "  .. chat_id .. "   &  text  =  "       
  В file будет записан ответ робота.
 Благодарю за помощь!

Я бы хотел иметь возможность в LUA видеть статус отправки сообщений в Телегу и если сообщения перестали уходить, то получить какой-то message,
Версия с  io.popen  это позволяла бы сделать, как в приведённом выше примере, но он не работает :(.
Ваш вариант отличный, но он позволит только постфактум узнать о проблемах. Но все равно, Вам огромное спасибо за идею в принципе! Это просто прекрасное решение почти всех моих запросов!  
Не знаю, что у вас не так, у меня io.popen работает, и ответ от curl я получаю. Может, дело в версии curl
у меня io.popen вообще ничего не возвращает и команду не выполняет. Я пробовал просто dir отправить. У вас windows какой версии?
 
Цитата
nikolz написал:
Цитата
Андрей написал:
 
Цитата
nikolz  написал:
 
Цитата
 Андрей   написал:
os.execute (curl .. mes .. '"');   --отправляем  
  Что именно хотите увидеть?
можете сделать так:  
Код
      file   =     "D:/bot.log"  
curl   =     "C:/Windows/System32/curl.exe  --silent --output "    ..  file  ..   '"'   ..   "https://api.telegram.org/bot"   ..  token  ..   "/sendMessage?chat_id =  "  .. chat_id .. "   &  text  =  "       
  В file будет записан ответ робота.
 Благодарю за помощь!

Я бы хотел иметь возможность в LUA видеть статус отправки сообщений в Телегу и если сообщения перестали уходить, то получить какой-то message,
Версия с  io.popen  это позволяла бы сделать, как в приведённом выше примере, но он не работает :(.
Ваш вариант отличный, но он позволит только постфактум узнать о проблемах. Но все равно, Вам огромное спасибо за идею в принципе! Это просто прекрасное решение почти всех моих запросов!  
Отправьте по аналогии как я написал запрос /update и получите все сообщения. Можно запросить только последнее.
Но как Вы собираетесь определить что сообщения перестали приходить ?
----------------
Возможно я не понял, но о каких проблемах Вы хотите узнать?
О проблемах с bot в Telegram или о проблемах в QUIK или о проблемах с ПК или о проблемах со связью с биржей?
Я хочу в QUIK увидеть статус отправки сообщения в  Telegram. И вовремя увидеть, что статус сделок перестал улетать в телеграмм. Чтобы было понятно, я делюсь сделками, которые совершаю руками в QUIK с коллегами и хочу вовремя увидеть, что они перестали их получать, если что-то отвалилось в телеге.  
 
Цитата
Андрей написал:
Цитата
Я хочу в QUIK увидеть статус отправки сообщения в  Telegram. И вовремя увидеть, что статус сделок перестал улетать в телеграмм. Чтобы было понятно, я делюсь сделками, которые совершаю руками в QUIK с коллегами и хочу вовремя увидеть, что они перестали их получать, если что-то отвалилось в телеге.
такой вариант устроит:
Код
token="......"  --робот в telegram
chat_id="....." --ваш в telegram
local mes="hello"
local serv= "https://api.telegram.org/bot"..token
local pref= serv.."/sendMessage?chat_id="..chat_id.."&text="
local cur_="curl -s "..'"'..pref
local f=io.popen(cur_..mes); s=f:read('*all'); f:close(); print("s="..s);
 
Цитата
Андрей написал:
Цитата
paluke написал:
 
Цитата
Андрей  написал:
 
Цитата
  Благодарю за помощь!

Я бы хотел иметь возможность в LUA видеть статус отправки сообщений в Телегу и если сообщения перестали уходить, то получить какой-то message,
Версия с  io.popen  это позволяла бы сделать, как в приведённом выше примере, но он не работает :(.
Ваш вариант отличный, но он позволит только постфактум узнать о проблемах. Но все равно, Вам огромное спасибо за идею в принципе! Это просто прекрасное решение почти всех моих запросов!  
 Не знаю, что у вас не так, у меня io.popen работает, и ответ от curl я получаю. Может, дело в версии curl
у меня io.popen вообще ничего не возвращает и команду не выполняет. Я пробовал просто dir отправить. У вас windows какой версии?
У меня в win10 работает. И под wine в линуксе тоже работает.
Просто dir работать не будет, надо "cmd /c dir"
Можно попробовать добавить в начало "cmd /c 2>&1 " перед curl - получите вывод сообщений об ошибках.
Ну или в файл ошибки отправлять "cmd /c 2>errorfile.txt "
 
Интересная тема!

В ботах также возможно добавить кнопки (в том числе динамические) и управлять скриптом прямо из приложения.
Однако, встает вопрос на сколько это все безопасно, как никак речь идет про деньги.

И еще интересно, какие уведомления вы используете в своих скриптах, например, сделки и так отображаются в приложении брокера и более информативны чем просто текст.
 
Цитата
Станислав написал:
И еще интересно, какие уведомления вы используете в своих скриптах, например, сделки и так отображаются в приложении брокера и более информативны чем просто текст.

Мой робот полностью сопровождает сделку и информирует о результатах, а со зверушкой веселее. Часто даже на буквы не смотрю, картинка все объясняет.
 
Код
-------------------------------------------------------------------------------------------------------------
--------------------------------------отправка сообщений в telegram------------------------------------------
-------------------------------------------------------------------------------------------------------------
function telegram_msg(tmsg,chat)
  if TELEGRAM_ON then
    if tmsg~=nil and tmsg~="" and chat~=nil and chat~="" then
      local hour = tonumber(os.date("%H"))
      local tURL="https://api.telegram.org"
      --local tmsg = AnsiToUtf8(tmsg)
      local dis_not = (hour>=tHourStart and hour<=tHourEnd) and "false" or "true" -- отключение звука сообщения согласно настроек config файла
      local str = string.format("curl -X GET \"%s/bot%s/sendChatAction?chat_id=%s&action=typing",tURL,tToken,chat) -- бот печатает
      local msg = os.execute('start /MIN '..str)
      sleep(1500) -- время набора текста ботом
      local str = "curl -X GET \""..tURL.."/bot"..tToken.."/sendMessage?disable_notification="..dis_not.."\" -d \"&parse_mode=html&chat_id="..chat.."&text="..tmsg.."\""
      local msg = os.execute('start /MIN '..str)
    else
      mes(string.format("%s - %s - Сообщение [%s] не отправлено в чат %s", ScriptName, sec_code,tostring(tmsg),tostring(chat)),3)
    end
  end
end

-------------------------------------------------------------------------------------------------------------
--------------------------------------отправка стикера в telegram--------------------------------------------
-------------------------------------------------------------------------------------------------------------
function telegram_stick(tstick,chat)
  LastTelPost=Timer
  if TELEGRAM_ON and STICK_ON then
    if tstick~=nil and tstick~="" and chat~=nil and chat~="" then
      local hour=tonumber(os.date("%H"))
      local tURL="https://api.telegram.org"
      local dis_not = (hour>=tHourStart and hour<=tHourEnd) and "false" or "true"
      local str = string.format("curl -X GET \"%s/bot%s/sendSticker?disable_notification=%s&parse_mode=html&chat_id=%s&sticker=%s",tURL,tToken,dis_not,chat,tstick)
      local msg = os.execute('start /MIN '..str)
    else
      mes(string.format("%s - %s - Стикер %s не отправлен в чат %s", ScriptName, sec_code,tostring(tstick),tostring(chat)),3)
    end
  end
end
 
Вопрос только в том, как убрать мелькание командного окна.
 
Цитата
VargoR написал:
Вопрос только в том, как убрать мелькание командного окна.
Не использовать curl из командной строки, а написать библиотеку, клиента, реализующую обмен и передачу информации прямо через http запрос.
 
Цитата
VargoR написал:
Вопрос только в том, как убрать мелькание командного окна.
попробуйте так:
Код
local token=""
local chat_id=""
local serv= "https://api.telegram.org/bot"..token
local pref= serv.."/sendMessage?chat_id="..chat_id.."&text="
local cur1="curl -s "..'"'..pref
local mes="Привет"
local f=io.popen(cur1..mes); f:close(); 
 
io.popen в окружении терминала все равно поднимает окно.
 
Цитата
Nikolay написал:
io.popen в окружении терминала все равно поднимает окно.
тогда придется использовать API C for Lua
и написать такую функцию для отправки сообщений:
Код
static int shell(lua_State* L){  ShellExecuteA(0,"open", (char*)lua_tostring(L, 1),(char*)lua_tostring(L,2),0,0);return 0; }
 
Цитата
nikolz написал:
Цитата
Nikolay написал:
io.popen в окружении терминала все равно поднимает окно.
тогда придется использовать API C for Lua
и написать такую функцию для отправки сообщений:
Код
  static int shell(lua_State *  L){  ShellExecuteA( 0 ,"open", (char * )lua_tostring(L,  1 ),(char * )lua_tostring(L, 2 ), 0 , 0 ); return   0 ; }
  
А где можно взять C++DLL для отправки http запросов из Lua?
 
Можно делать запросы через библиотеку socket

require "socket"

http = require 'socket.http'
local url = 'https://api.telegram.org/бла-бла/'
http.request(url)
 
Цитата
Станислав написал:
Можно делать запросы через библиотеку socket

require "socket"

http = require 'socket.http'
local url = ' https://api.telegram.org/ бла-бла/'
http.request(url)
Только не забудьте, что протокол https, т.е. требуется поддержка TSL.
Страницы: 1
Читают тему
Наверх