02.02.2023, 18:08
How to send message from Telegram app to LM.
1. Fallow instruction in first post how to create bot and your TOKEN
2. Create user library tgupdates and paste this code
3. Create resident script with 0 interval and use this code. Change TOKEN. Write to your chat in telegram and your message will be in logs.
Modify the function to run your actions based on revived text. UserID is a unique number which can be used for authorization/restrictions. username is not a unique as it is just name in your telegram account. It can be duplicated.
1. Fallow instruction in first post how to create bot and your TOKEN
2. Create user library tgupdates and paste this code
Code:
return function(token, callback)
local json = require('json')
local socket = require('socket')
local ssl = require('ssl')
local host = 'api.telegram.org'
local tgupdateid = storage.get('tg_update_id')
local uri = '/bot' .. token .. '/getUpdates'
local sock = socket.tcp()
sock:settimeout(5)
local res, err = sock:connect(host, 443)
if not res then
sock:close()
log('connect failed', err)
os.sleep(5)
return
end
sock = ssl.wrap(sock, { mode = 'client' })
sock:settimeout(60)
sock:sni(host)
res, err = sock:dohandshake()
if not res then
sock:close()
log('dohandshake failed', err)
os.sleep(5)
return
end
local function sendreq()
local args = 'timeout=50'
local crlf = '\r\n'
if tgupdateid then
args = args .. '&offset=' .. tgupdateid
end
sock:send(
'POST ' .. uri .. ' HTTP/1.1' .. crlf ..
'Host: ' .. host .. crlf ..
'Content-Type: application/x-www-form-urlencoded' .. crlf ..
'Content-Length: ' .. #args .. crlf .. crlf ..
args
)
end
local function parse(resp)
resp = json.pdecode(resp)
if type(resp) ~= 'table' or not resp.ok then
log('invalid response', resp)
end
local update_id = 0
for _, item in ipairs(resp.result) do
update_id = math.max(update_id, item.update_id)
local message = item.message
local text = message.text
local userid = message.from.id
local username = message.from.first_name
callback(text, userid, username)
end
if update_id > 0 then
tgupdateid = update_id + 1
storage.set('tg_update_id', update_id + 1)
end
end
sendreq()
local pat, len = nil, nil
while true do
res, err = sock:receive(pat)
if err then
sock:close()
log('receive error', err)
break
end
if type(pat) == 'number' then
pcall(parse, res)
sendreq()
pat, len = nil, nil
elseif #res == 0 then
pat = len
elseif not len then
len = res:match('Content%-Length: (%d+)')
len = tonumber(len)
end
end
end
Code:
function callback(text, userid, username)
log(text, userid, username)
end
token = 'YOUR TOKEN HERE'
require('user.tgupdates')(token, callback)
Modify the function to run your actions based on revived text. UserID is a unique number which can be used for authorization/restrictions. username is not a unique as it is just name in your telegram account. It can be duplicated.
------------------------------
Ctrl+F5
Ctrl+F5