Отправка сообщений из Квик

[ скрипт  lua  qlua  квик  quik  ]

Из терминала Квик можно отправлять оповещения на почту и в Телеграм. Для этого используется решение telegramQuik. Также можно получать сообщения из телеграм.

Частично данный скрипт был описан скрипте transactionPocket

Для отправки сообщений в Телеграм используется telegram bot api. Поэтому необходимо иметь зарегистрированный бот в Телеграм.

Важно: для корректной работы в Windows 7 необходимо:

Допустим, файлы размещены в каталоге telegramServer. В нем размещены файлы запуска и настройки сервера отправки сообщений. Запуск сервера отправки сообщений происходит, посредством вызова файла startTeleServer.bat, расположенного в каталоге telegramServer. После запуска сервера отправки сообщений появится консольное окно, сигнализирующее о его готовности.

Одновременный запуск нескольких экземпляров сервера отправки сообщений MessagesQServer.exe с одинаковыми именами каналов (Pipes) нежелателен, т.к. они будут конфликтовать друг с другом. Поэтому ручной старт сервера желательно производить через файл startTeleServer.bat. При этом будет проверен есть ли уже запущенный процесс MessagesQServer.exe и, если есть, то второй экземпляр уже не будет запущен.

Небольшое видео работы

Настройки

Перед запуском необходимо провести настройку сервера отправки сообщений. Это производится через редактирование файла settings.ini в каталоге сервера отправки.

Видео с описанием регистрации бота и настроек

Содержимое данного файла:
[TELEGRAM]
START_TELEGRAM = ON
TELEGRAM_PIPENAME = telegram_pipe
TOKEN = Your TOKEN
USE_ENCODING = windows-1251
[EMAIL]
START_EMAIL = ON
EMAIL_PIPENAME = email_pipe
SENDER = sender
RECIPIENT = recipient
COPY =
EMAIL_SUBJECT = Message from Quik
SMTPSERVER = smtp
SERVERPORT = 587
LOGIN = login
PASSWORD = pass

Раздел [TELEGRAM] - раздел настройки отправки сообщений в Телеграм. Если необходима отправка сообщений в Телеграм, то необходимо установить настройку START_TELEGRAM = ON, иначе OFF. Сообщения в Телеграм отправляются в зарегистрированный бот. О регистрации ботов в Телеграм можно найти подробную инструкцию на сайте сервиса Телеграм или воспользоваться поиском.

Раздел [EMAIL] - раздел настройки отправки сообщений на электронную почту. Если необходима отправка почтовых сообщений, то необходимо установить START_EMAIL = ON, иначе OFF.

Файл luaPipeTest.lua - это тест для библиотеки, пример использования отправки и приема сообщений.
Файл ansi2utf8.lua - Библиотека конвертации ansi(win1251)<->utf8. На данный момент не используется, т.к. сам сервер отправки производит конвертацию сообщения в utf8.

Для подключения необходимо в свои скрипты подключить библиотеку luaPipe.dll через require(‘luaPipe’).

Методы

Пример запуска сервера отправки
os.execute(‘start cmd /c call “’..path..’\telegramServer\startTeleServer.bat’..’”’)

SendMessage

Вызов

где

GetIncomeMessages

Вызов

local str = luaPipe.GetIncomeMessages(‘telegram_pipe’)

где

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

local t = assert(load(‘return ‘..str))()

Полученные сообщения будут сохранены в массиве t[1], t[2] т.д.

Использование без библиотеки luaPipe

Язык Lua позволяет открывать именованные каналы через команду io.open. Поэтому возможна отправка используя такой синтаксис

local function SendTeleMessage(msg, pipe_name)
    local tele_pipe = io.open("\\\\.\\PIPE\\"..pipe_name, "w+b") -- открываем именованный канал
    if not tele_pipe then
        return false
    end
    tele_pipe:write(msg) -- записываем сообщение в канал
    tele_pipe:close() -- закрываем канал
end

А чтение из канала таким образом:

-- Аналогично прошлому примеру записываем в канал команду GetTeleMessage, чтобы сервер отправки вернул нам накопленные сообщения
local function GetTeleMessage(pipe_name)
    local tele_pipe = io.open("\\\\.\\PIPE\\"..pipe_name, "w+b")
    if not tele_pipe then
        return false
    end
    tele_pipe:write('GetIncomeMessages()') -- записываем команду в канал

    local rd = ''
    local ct = os.time()
    -- Т.к. время ожидания ответа может быть не мгновенным, то ожидаем 2 секунды, читая из канала ответ.
    while os.time() - ct < 2 and rd == '' do
        rd = tele_pipe:read('*a')
    end
    tele_pipe:close() -- закрываем канал

    --Формат возврата - сериализованная таблица сообщений в виде строки
    if type(rd) == 'string' then
        local t = assert(loadstring('return '..rd))() -- загружаем в таблицу
        if type(t) == 'table' then
            return t
        end
    end
end

Сборка

Если вы хотите сами собрать библиотеки, то чтобы собрать MessagesQServer необходимо установить через NuGet в проект пакет Telegram.Bot.
Для сборки luaPipe достаточно ее выполнить VS.