2017-02-07 12 views
1

Я хочу послать автоматические сообщения ответа в соответствии Телеграмма-CLI с использованием модифицированного скрипта Lua, как показано ниже:Отправить несколько ответных сообщений в телеграмме-кли (Lua скрипт)

function ok_cb(extra, success, result) 
end 

function wait(seconds) 
    local start = os.time() 
    repeat until os.time() > start + seconds 
end 

function on_msg_receive (msg) 
    if msg.out then 
     return 
    end 
    if (string.find(msg.text, 'Hi there!')) then 
     wait(1) 
     send_msg (msg.from.print_name, 'Hello', ok_cb, false) 
    else 
     --do nothing 
    end 
end 

Когда я побежал сценарий выше, если бы я получил сообщение «Привет!», сценарий будет ждать 1 секунду, затем он отправит ответ с сообщением «Привет».

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

function ok_cb(extra, success, result) 
end 

function wait(seconds) 
    local start = os.time() 
    repeat until os.time() > start + seconds 
end 

function on_msg_receive (msg) 
    if msg.out then 
     return 
    end 
    if (string.find(msg.text, 'Hi there!')) then 
     wait(1) 
     send_msg (msg.from.print_name, 'Hello', ok_cb, false) 
     wait(3)            --new command 
     send_msg (msg.from.print_name, 'World!', ok_cb, false) --new command 
    else 
     --do nothing 
    end 
end 

Что я ожидаю от модифицированного сценария, когда получил «Привет!» сообщение, сценарий будет ждать 1 секунду, а затем отправить сообщение «Привет», подождать еще 3 секунды, наконец, отправить «Мир!». сообщение.

Что действительно произошло, сценарий будет ждать 3 секунды, а затем отправить как «Привет», так и «Мир!». в то же время.

У кого-нибудь есть подсказки об этом? спасибо заранее

ответ

0

@wakhaiha

Вам нужно только отредактировать on_msg_receive функцию:

function on_msg_receive(msg) 
    if started == 0 then 
     return 
    end 
    if msg.out then 
     return 
    end 

    if msg.text then 
     mark_read(msg.from.print_name, ok_cb, false) 
    end 

    -- Optional: Only allow messages from one number 
    if msg.from.print_name ~= 'Prename_surname' then 
     os.execute('*path_to_your_send_script*' ..msg.from.print_name.." 'Not allowed'") 
     return 
    end 
    if (string.lower(msg.text) == 'uptime') then 
     local handle = io.popen("sudo python *path_to_your_python* uptime") 
     local res = handle:read("*a") 
     handle:close() 
     os.execute("*path_to_your_send_script* "..msg.from.print_name.." '"..res.."' ") 
     return 
    end 

Если вы получаете сообщение об ошибке из сценария Lua, говоря что-то вроде

namespace.lua:149: Typelib file for namespace 'Notify' (any version) not found 

Вы должны авторизоваться или удалять все в пределах Notification code{{{.

Вы можете расширить команды выше, просто отредактируйте файл Lua и файл питона (легко теперь ответить «Привет там», когда пользователи послали сообщение с «Привет», как содержание:

if (string.lower(msg.text) == 'hi there') then 
    os.execute('*path_to_your_send_script*' ..msg.from.print_name.." 'Hey, what's up?'") 
    return 
end 

). Источник: source

Кроме того, убедитесь, что вы добавили контакт с add_contact, чтобы получать от него сообщения. Вы можете начать Телеграмма-кли с помощью сценария Lua, набрав:

screen -dmS TelegramCLI ~/tg/bin/telegram-cli -s ~/tg/test.lua 

Установить экранный пакет раньше.