1

我想使用修改后的 lua 脚本在 Telegram-CLI 中发送自动回复消息,如下所示:

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 秒,然后发送“Hello”消息,再等待 3 秒,最后发送“World!” 信息。

实际发生的是脚本将等待 3 秒,然后发送“Hello”和“World!”。同时。

有人对此有任何线索吗?提前致谢

4

2 回答 2

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 文件和 python 文件(当用户发送带有“Hi”作为内容的消息时,现在很容易回复“Hi there”:

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

)。来源:来源

此外,请确保您使用 add_contact 添加了联系人,以便接收来自它的消息。您可以通过键入以下命令使用 Lua 脚本启动 telegram-cli:

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

先安装screen包。

于 2017-08-13T09:31:47.060 回答
0

问题是命令 send_msg 是在函数 on_msg_receive 中收集的。要解决这个问题,请使用布尔变量和函数 cron。send_msg使用布尔变量在 cron 函数中添加秒数。

function on_msg_receive (msg)
.
.
blnSendMsgdMsg = true
.
.  

function cron()
.
.
If blnSendMsgdMsg then
  send_msg .,
blnSendMsgdMsg = false
end 
于 2021-02-20T02:39:03.557 回答