Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

UoKit.com Форумы _ Плагины и доп. ПО _ Отправка в телеграм сообщения, файла

Автор: cirus 3.5.2022, 14:42

Прикрепленный файл  Telegram.zip ( 407,63 килобайт ) Кол-во скачиваний: 285

Архив распаковать рядом с exe пилота.

Создаём бота в телеграмм, получает токен и ид чата.
Пример использования:

Код
--lua
local ffi = require('ffi')
local telegramm = ffi.load('SendTelegram.dll')
log 'clear' log 'mode compact'

ffi.cdef[[
    int sendtelegrammessage(const char* token, const char* chat_id, const char* text, char* result);
    int sendtelegramphoto(const char* token, const char* chat_id, const char* path_to_photo, const char* caption, char* result);
    int sendtelegramdocument(const char* token, const char* chat_id, const char* path_to_photo, const char* caption, char* result);
    int gettelegrammessage(const char* token, const char* chat_id, char* result);
    int gettelegramdocument(const char* token, const char* chat_id, const char* path_to_document);
]]

local token="1234567890:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" -- token, указать свой
local chat_id="1234567890" -- id chat, указать свой. Здесь должны быть цифры. Формат @name более не поддерживается телеграмом.

telegramm.sendtelegrammessage(token, chat_id, "Текст сообщения", nil)   -- отправить сообщение

printscreen (0, 0, 0, 0, 0, [[C:\window.jpg]])  -- сохранить скрин экрана
telegramm.sendtelegramphoto(token, chat_id, [[C:\window.jpg]], "", nil)    -- отправить фото
telegramm.sendtelegramdocument(token, chat_id, [[C:\window.jpg]], "", nil) -- отправить файл

local response = ffi.new('char[9999]')
telegramm.sendtelegrammessage(token, chat_id, "Текст сообщения", response)   -- отправить сообщение и получить ответ в формате JSON
log(ffi.string(response))

Ожидание сообщения от бота:
Код
--lua
local ffi = require('ffi')
local telegram = ffi.load('SendTelegram.dll')
log 'clear' log 'mode compact'
ffi.cdef[[
    int gettelegrammessage(const char* token, const char* chat_id, char* result);
]]

local token="1234567890:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" -- token, указать свой
local chat_id="1234567890" -- id chat, указать свой. Здесь должны быть цифры. Формат @name более не поддерживается телеграмом.

local new_message, last_message = ffi.new('char[999]')
telegram.gettelegrammessage(token, chat_id, new_message)      -- получить последнее сообщение
log ('Последнее сообщение: ' .. ffi.string(new_message))
last_message = ffi.string(new_message)                        -- запомнить текст сообщения

log ('Ожидание нового сообщения')
while true do
    telegram.gettelegrammessage(token, chat_id, new_message)   -- получить последнее сообщение
    if ffi.string(new_message) ~= last_message then            -- если сообщение не совпадает с последним
        -- тут нужные действия в зависимости от текста сообщения
        log('Новое сообщение: ' .. ffi.string(new_message))
        break
    end
    wait (2000)
end

Автор: DarkMaster 3.5.2022, 16:40

В Н И М А Н И Е ! ! !
chat id - это цифры, а не название в формате @name_something. Узнать id можно добавив бота куда либо и выполнив запрос в браузер:
https://api.telegram.org/botВАШ_API_KEY/getUpdates
Либо воспозовашись услугами других ботов (в гугле находятся пачками).


Крут =) Реально полезно будет.

Думаю не помешало бы добавить пару ссылок куда чего и как.

Автор: Izatii 4.5.2022, 23:50

Крутая тема, встал вопрос, как вставить в сообщение переменную?
заранее в переменной каждый раз новое число и его нужно вставить

Автор: DarkMaster 5.5.2022, 0:11

Всмысле?

a = "вася"
b = a

Автор: Cockney 5.5.2022, 0:24

видимо нужно так

a = 10

text = 'msg ' + a + ' end'

Автор: cirus 5.5.2022, 1:44

Код
--lua
local ffi = require('ffi')
local telegramm = ffi.load('SendTelegram.dll')
ffi.cdef[[
    int sendtelegrammessage(const char* token, const char* chat_id, const char* text, char* result);
]]
local token="1234567890:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" -- token, указать свой
local chat_id="1234567890" -- id chat, указать свой

local x = 0
while true do
    local message = "X = " .. tostring(x)
    telegramm.sendtelegrammessage(token, chat_id, message, nil)   -- отправить сообщение
    x = x + 1  
    wait (2000)
end

Автор: Izatii 5.5.2022, 2:24

Спасибо!

Автор: cirus 7.5.2022, 13:36

Добавил в первый пост пример как ожидать сообщения от бота. Можно использовать для управления работы скрипта.

Автор: apaul 8.5.2022, 17:30

Интересная штука, спасибо.
А нельзя как-то пилоту сказать, чтобы искал библиотеки в ином месте, чтобы корень не загромождать?

Автор: DarkMaster 8.5.2022, 18:58

package.cpath
package.path

Это по сути обычные текстовые переменные с набором адресов где искать библиотеки, но будьте аккуратны они задаются паттернами.
https://www.lua.org/manual/5.1/manual.html#pdf-package.path

Автор: Madeus 13.5.2022, 22:16

В общем потестил сутки работало ок, теперь не понятное поведение.

Код
while true do
    telegram.gettelegrammessage(token, chat_id, new_message)   -- получить последнее сообщение
    if ffi.string(new_message) ~= last_message then            -- если сообщение не совпадает с последним
        -- тут в зависимости от сообщения запускает/останавливает скрипты в пилоте.
        last_message = ffi.string(new_message)                        -- запомнить текст сообщения
    end
    wait (2000)
end

Такая конструкция четко отработала +- сутки без проблем, теперь рандомно сама запускает скрипты.

Автор: NikitaRat 12.6.2022, 20:14

Работал пару месяцев, в один момент перестал работать(
// решилось сменой провайдера

Автор: Madeus 3.8.2022, 22:14

Я в итоге отказался от этого решения, пользуюсь своим работает без проблем. Руки не доходят оформить пост и выложить, да и не знаю как лучше сделать, выложить в эту тему или сделать новую.

Автор: DarkMaster 4.8.2022, 11:02

Лучше в новую. Прилеплю тему наверх, все дела.

Автор: apaul 8.8.2022, 12:38

Цитата(Madeus @ 3.8.2022, 22:14) *

пользуюсь своим работает без проблем. Руки не доходят оформить пост и выложить, да и не знаю как лучше сделать, выложить в эту тему или сделать новую.

Очень стало интересно. А то захотел прикрутить в дополнение с отчетам, еще и управление к скрипту, а оказалось что это решение у меня при отправке работает прекрасно, а вот с получением сообщений полная беда. Просто по
Код
telegram.gettelegrammessage(token, chat_id, new_message)
ничего не приходит sad.gif

Автор: Madeus 8.8.2022, 17:09

Цитата(apaul @ 8.8.2022, 12:38) *

Очень стало интересно. А то захотел прикрутить в дополнение с отчетам, еще и управление к скрипту, а оказалось что это решение у меня при отправке работает прекрасно, а вот с получением сообщений полная беда. Просто по
Код
telegram.gettelegrammessage(token, chat_id, new_message)
ничего не приходит sad.gif

Скоро выложу

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)