lua-rtos-libs/libs/telegram.lua

98 lines
3.3 KiB
Lua

function createBot(token, onMessage, onDocument)
local cjson = require("cjson")
local api_url = "https://api.telegram.org/bot" .. token
local last_update_id = nil
local onMessage = onMessage or function() end
local onDocument = onDocument or function() end
local function apiRequest(method, parameters)
local url = api_url .. "/" .. method
local res, header, body
if not parameters or next(parameters) == nil then
res, header, body = net.curl.get(url)
else
res, header, body = net.curl.post(url, parameters)
end
if res then
return cjson.decode(body)
else
print(header, body)
end
end
local function sendMessage(chat_id, text)
apiRequest("sendMessage", { chat_id = chat_id, text = text })
end
local function getMe()
apiRequest("getMe")
end
local function sendDocument(chat_id, filename, documentPath, caption)
local parameters = {
chat_id = chat_id,
caption = caption,
--document = net.curl.form.file(documentPath),
}
--parameters['_FILE_'..filename] = documentPath
--apiRequest("sendDocument", parameters)
print("Not implemented yet!")
end
local function saveDocument(file_id, file_name)
local fileInfo = apiRequest("getFile", {file_id = file_id})
if fileInfo and fileInfo.result and fileInfo.result.file_path then
local file_path = fileInfo.result.file_path
local download_url = "https://api.telegram.org/file/bot" .. token .. "/" .. file_path
local res, header, body = net.curl.get(download_url, file_name)
return res or header
end
end
local function getUpdates()
local updates = apiRequest("getUpdates", { timeout = 100, offset = last_update_id and last_update_id + 1 or nil })
if updates and updates.result then
for i, update in ipairs(updates.result) do
if update.message then
if update.message.document then
onDocument(update.message.chat.id, update.message.document, sendMessage, saveDocument)
else
local chat_id = update.message.chat.id
local text = update.message.text
onMessage(chat_id, text, sendMessage, sendDocument)
end
last_update_id = update.update_id
end
end
end
end
return {
getMe = getMe,
getUpdates = getUpdates,
sendMessage = sendMessage,
sendDocument = sendDocument
}
end
return createBot
--[[
local bot = createBot(token,
function(chat_id, text, sendMessage, sendDocument)
-- input text
sendMessage(chat_id, "Вы сказали: " .. text)
--sendDocument(chat_id, 'autorun', '/romfs/autorun.lua', 'Report')
end,
function(chat_id, document, sendMessage, saveDocument)
-- input file
local res, msg = saveDocument(document.file_id, "/downloads/"..document.file_name)
sendMessage(chat_id, "Загрузка документа: " .. (res and "успешно" or msg))
end
)
while true do
bot.getUpdates()
thread.sleepms(200)
end
]]--