- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在构建一个聊天机器人,它将管理聊天并响应用户在聊天中发送的命令。
我还尝试在快速服务器中进行设置,以便我可以启动和停止机器人以及在网络应用程序中管理命令等,这样我就不必从我的终端运行机器人时间。
我的文件设置类似于express-generator
,如下
node_modules
routes
- api
- bot.js
api.js
server.js
在 server.js 中
...
var api = require('./routes/api');
app.use('/api/v'+apiVersion, api);
...
在routes/api.js
var express = require('express');
var router = express.Router();
// API's
var bot = require('./api/bot');
// Endpoints
router.route('/bot')
.post(function(req,res) { bot.startBot(req,res) })
.delete(function(req,res) { bot.stopBot(req,res) });
module.exports = router;
在routes/api/bot.js
var config = require('../../config');
var irc = require('tmi.js');
var chatBotOptions = {
options: {
debug: true,
},
identity: {
username: config.username,
password: config.password
},
channels: config.channels
};
var chatBot = new irc.client(chatBotOptions);
module.exports.startBot = function(req,res){
// Connect chatBot
chatBot.connect();
chatBot.on('join', function(channel, username){
chatBot.say(channel, 'Hello there!');
res.json({action:'joined'});
});
};
module.exports.stopBot = function(req,res){
// Disconnect chatBot
chatBot.say(config.channels[0],"I'm out!");
chatBot.disconnect();
res.json({action:'disconnecting'});
};
chatBot.on('chat', function(channel, user, message, self){
chatBot.say(channel, "Kappa");
});
在我的前端,我使用正确的 http 动词对这些端点进行 ajax 调用来启动和停止机器人。当 startBot
端点被击中,然后再次调用 stopBot
和 startBot
时,就会出现问题,机器人连接到 irc channel ,但是我想当发送 res.json
消息时我会收到此错误。我正在阅读这与某种回调有关,但我只是不确定那会在哪里,因为 res.json
仅发送到一个地方,我什至不确定这是否是问题出在哪里。
这是错误堆栈
_http_outgoing.js:335
throw new Error('Can\'t set headers after they are sent.');
^
Error: Can't set headers after they are sent.
at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:335:11)
at ServerResponse.header (/Users/jordanriser/workspace/twitch_bot/node_modules/express/lib/response.js:718:10)
at ServerResponse.send (/Users/jordanriser/workspace/twitch_bot/node_modules/express/lib/response.js:163:12)
at ServerResponse.json (/Users/jordanriser/workspace/twitch_bot/node_modules/express/lib/response.js:249:15)
at client.<anonymous> (/Users/jordanriser/workspace/twitch_bot/routes/api/bot.js:25:9)
at client.emit (events.js:129:20)
at client.handleMessage (/Users/jordanriser/workspace/twitch_bot/node_modules/tmi.js/lib/client.js:362:30)
at /Users/jordanriser/workspace/twitch_bot/node_modules/tmi.js/lib/client.js:602:18
at Array.forEach (native)
at client._onMessage (/Users/jordanriser/workspace/twitch_bot/node_modules/tmi.js/lib/client.js:600:11)
17 Aug 13:39:05 - [nodemon] app crashed - waiting for file changes before starting...
最佳答案
问题与您添加的事件处理程序有关,该事件处理程序在同一个 EventEmitter 实例上执行多次。
所以这个:
chatBot.on('join', function(channel, username){
chatBot.say(channel, 'Hello there!');
res.json({action:'joined'});
});
应该是这样的:
// .once() instead of .on()
chatBot.once('join', function(channel, username){
chatBot.say(channel, 'Hello there!');
res.json({action:'joined'});
});
但是,如果发出请求的客户端在发出 join
事件之前提前关闭连接,这仍然可能会导致错误。为了解决这个问题,您可以在调用 res.json()
之前检查请求的套接字是否仍然可写:
chatBot.once('join', function(channel, username){
chatBot.say(channel, 'Hello there!');
if (req.socket.writable)
res.json({action:'joined'});
});
关于javascript - 在 Express 中使用聊天 irc 机器人发送后无法设置 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32056574/
基于浏览器的 irc 客户端是否可以在不使用任何网关的情况下工作,即直接与 irc 服务器通信? 最佳答案 HTML5 WebSocket 无法连接到非 WebSocket 服务器。使用 WebSoc
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭11 年前。 Improve th
在我的 IRC Bot 中,有一些命令我希望只能由我使用,并且我想检查以确保使用我的名字的任何人都被识别为 nickserv (idented)。但是,我无法找到一种简单的方法来确定这一点,这就是我在
我想在我的网站上实现聊天服务,想知道如何从头开始创建一个简单的基于浏览器的 IRC 客户端? 我有一个 linux box,可以在上面安装任何我想要的东西。 Google 找到了关于如何设置 IRC
我希望能够在不加入 IRC channel 的情况下从 IRC channel 获取用户列表及其详细信息,从而增加其用户数量。 所以不要发出 JOIN #chan然后 NAMES #chan要获取用户
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 8年前关闭。 Improve this q
我正在尝试编写我自己的 IRC 服务器。我引用的是 IRC RFC,但它让我有点困惑。如果我严格遵守 RFC,我认为任何流行的客户端都不会与我的服务器一起工作,比如 mIRC。例如,RFC 规定服务器
我正在使用标准库中的 TcpStream 开发一个 IRC 机器人。 我能够阅读输入的所有行,但 IRC 服务器似乎没有响应我的身份请求。我以为我发送请求的时间太早了,所以我尝试在发送 IDENT 之
我想连接到 ExIrc 中的两台服务器使用 Elixir ,我找不到一个简单的解决方案。我对 elixir 还很陌生,我能做的就是使用“伞”来运行两个应用程序并使它们相互连接? (我想用一个应用程序连
这个数字不是 RFC 1459 的一部分,但我希望能够使用它以便在 IRC 机器人中正确堆叠和取消堆叠模式。有没有不发送这个的主流 IRC 服务器? 最佳答案 这是规范的可选建议,这意味着编写客户端的
我对此进行了广泛的搜索,只找到了特定于机器人的客户端。我知道它们基本相同,但是对于我想做的事情,我就是想不通。 我正在尝试编写一个 python 客户端,它表面上是纯粹而简单的。例如,当从命令行运行时
我正在使用 net.Socket 模块连接到 EFNET 并测试我的代码,以便向我的机器人添加重新连接事件。 我可以通过哪些方式来模拟机器人断开连接?问题是 2-3 周后就会断开连接 - 我添加了事件
require "socket" server = "irc.rizon.net" port = "6667" nick = "Ruby IRC Bot" channel = "#0x40" s =
我正在尝试编写一个函数,使用 Twisted Python 将 IRC channel 中的昵称列表打印到该 channel 。我该怎么做呢?我已经阅读了 API 文档,并且在该站点上只看到一个与我的
我有一个命令,我想将其限制在某些级别。我正在使用 unreal3.2.6 IRC。 我读到这个: 但我仍然不确定我可以做些什么来检查用户排名。 我想看看用户是否是“语音”或更高级别。什么可以查找用户,
我正在计划建立一个 IRC 网络并一直在探索各种选择。我打算使用Inspircd IRC Server 。以及运行 meteor 的网络服务器。是否可以使用 websockets 构建一个 Web I
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 8年前关闭。 Improve this qu
如何获得 Weechat 配置变量?例如,我可以设置配置: /set irc.servers.freenode.ssl on 如何检索我设置的值? 最佳答案 要检查配置变量的值,您可以这样做: /se
有没有办法告诉irssi我要自动加入当前打开的所有 channel ? 我想要类似的东西: /channel add -auto /save 最佳答案 我找到了答案here: /alias adda
我整天都在搜寻Google,并且正在寻找一种方法来编写具有不同颜色的文本,就像我在其他IRC channel 上经常看到的那样。我想通过基于CLI的irssi实现此目的。我发现了多种无法正常工作的方法
我是一名优秀的程序员,十分优秀!