我正在使用此代码:
if (msg[0] == '!web')
{
var result = '\x032[\x02status\x02]\x03 Web: ';
checkPortTCP('127.0.0.1', 80, function() {
result += JSON.stringify(this).slice(1, -1);
});
bot.say(channel, result);
}
当我在我的频道中键入!web时,结果是:
[status] Web:
没有实际输出。
checkPortTCP:
function checkPortTCP(host, port, cb)
{
net.createConnection(port, host).on("connect", function(e) {
cb.call("online");
}).on("error", function(e) {
cb.call("offline");
});
}
我正在为IRC制作一个状态机器人。最终结果应该是...... Web:在线/离线
result += JSON.stringify(this).slice(1, -1);
应该连接结果变量,然后将其写入我的频道。但由于某种原因,它不会连接字符串。
谢谢!
答案 0 :(得分:2)
问题出现是因为checkPortTCP
回调现在不执行,但是在一些延迟中,所以在您的示例bot.say(channel, result);
执行之前 result += ...
< / p>
尝试在bot.say(channel, result);
回调中粘贴checkPortTCP
。所以它将是:
var result = '\x032[\x02status\x02]\x03 Web: ';
checkPortTCP('127.0.0.1', 80, function() {
result += JSON.stringify(this).slice(1, -1);
bot.say(channel, result);
});
<强>更新强>
如果您想检查多项服务,可以写下以下内容:
checkPortTCP('127.0.0.1', 80, function() {
result += JSON.stringify(this).slice(1, -1);
checkPortTCP('127.0.0.1', 81, function() {
result += JSON.stringify(this).slice(1, -1);
bot.say(channel, result);
});
});
有两项服务检查,但您可以拥有更多服务。您只需将一个检查嵌套到另一个检查中,并在最后一个回调调用bot.say
方法