You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lua脚本报attempt to call a nil value 按钮回调异常问题咨询

异常触发原因
  • 报错attempt to call a nil value的本质是代码尝试执行一个值为nil的不存在函数,问题根源在Http.PostAsync接口的调用不符合API要求。
  • 你当前使用的neverlose环境中,Http.PostAsync是异步非阻塞接口,签名要求传入3个核心参数:请求地址、请求体、请求完成后的回调函数。你的代码只传了前两个参数,缺失的回调参数默认值为nil。
  • 按下按钮时,Http.PostAsync会立刻在后台发起网络请求并马上返回,不会等待请求结果,后续的Cheat.AddNotify会同步执行弹出提示,所以初期看起来功能运行正常。等一段时间后后台网络请求完成,API内部逻辑会尝试调用你传入的回调函数处理结果,此时发现回调是nil,就会抛出错误,直接终止整个Lua脚本的运行。
  • 额外隐患:拼接POST请求体时没有对消息内容做URL编码,消息包含特殊字符时会导致Webhook请求失效,但该问题不会触发当前的调用空值报错。
修复方案

按以下三点调整代码即可解决问题:

  • 给Http.PostAsync补全第三个回调参数,哪怕不需要处理请求返回结果,也要传入一个空函数,避免API内部调用空值。
  • 增加Webhook地址非空判断,避免地址为空时发起无效请求。
  • 对POST参数做URL编码,兼容特殊字符场景,避免请求发送失败。

修复后的完整代码如下:

local webHookURL = Menu.TextBox("Webhook", "Webhook URL", 148, "", "Enter your webhook URL")
local message = "Hello!"

local function hook(msg)
    local reqUrl = webHookURL:GetString()
    if not reqUrl or reqUrl == "" then
        Cheat.AddNotify("neverlose.cc", "Please enter a valid webhook URL first!")
        return
    end

    Http.PostAsync(
        reqUrl,
        string.format("content=%s", Http.UrlEncode(msg)),
        -- 补全必填的回调参数,空实现即可
        function() end
    )
    Cheat.AddNotify("neverlose.cc", "Shared! Well done!")
end

button2:RegisterCallback(function()
    hook(message)   
end)

内容的提问来源于stack exchange,提问作者Luainjictor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 17:36:17