Sto cercando di creare un bot lento, e ho trovato un errore che non riesco a dare un senso.Costruire un bot lento in node.js, generando un errore che non riesco a capire. Qualcuno ha visto questo prima?
Questo è l'errore:
/Users/maecapozzi/Desktop/maebot/node_modules/vow/lib/vow.js:104
throw e;
^
Error: [Slack Bot Error] undefined
at assert (/Users/maecapozzi/Desktop/maebot/node_modules/slackbots/libs/utils.js:15:15)
at /Users/maecapozzi/Desktop/maebot/node_modules/slackbots/index.js:42:9
at Array.<anonymous> (/Users/maecapozzi/Desktop/maebot/node_modules/vow/lib/vow.js:712:56)
at Immediate.callFns [as _onImmediate] (/Users/maecapozzi/Desktop/maebot/node_modules/vow/lib/vow.js:23:35)
at tryOnImmediate (timers.js:534:15)
at processImmediate [as _immediateCallback] (timers.js:514:5)
io condividere il mio codice con voi e, dal momento che dovrebbe contribuire a rendere più senso di quello che è successo.
bot.js:
'use strict';
var MaeBot = require('../lib/maebot');
var token = process.env.BOT_API_KEY;
var dbPath = process.env.BOT_DB_PATH;
var name = process.env.BOT_NAME;
var maebot = new MaeBot({
token: token,
dbPath: dbPath,
name: name
});
maebot.run();
database.js:
var pg = require('pg');
var connectionString = process.env.DATABASE_URL || 'postgres://localhost:5432/maebot';
var client = new pg.Client(connectionString);
client.connect();
var query = client.query('CREATE TABLE dacts(id SERIAL PRIMARY KEY, text VARCHAR(40) not null)');
query.on('end', function() { client.end(); });
maebot.js:
'use strict';
var util = require('util');
var path = require('path');
var fs = require('fs');
var PostGres = require('postgresql');
var Bot = require('slackbots');
var MaeBot = function Constructor(settings) {
this.settings = settings;
this.settings.name = this.settings.name || 'maebot';
this.dbPath = settings.dbPath || path.resolve(process.cwd(), 'data', 'database.js');
this.user = null;
this.db = null;
};
MaeBot.prototype.run = function() {
MaeBot.super_.call(this, this.settings);
this.on('start', this._onStart);
this.on('message', this._onMessage);
};
MaeBot.prototype._onStart = function() {
this._loadBotUser();
this._connectDB();
};
MaeBot.prototype._loadBotUser = function() {
var self = this;
this.user = this.users.filter (function (user) {
return user.name === self.name;
})[0];
};
MaeBot.prototype._connectDB = function() {
if (!fs.existsSync(this.dbPath)) {
console.error('Database path ' + '"' + this.dbPath + '" does not exists or it\'s not readable."')
process.exit(1);
}
this.db = new PostGres.Database(this.dbPath);
};
MaeBot.prototype._welcomeMessage = function() {
this.postMessageToChannel(this.channels[0].name, 'Hi! Maebot here.' +
'\n I can tell you about my creator, Mae. Just say `Hi, maebot` or `' + this.name + '` to invoke me!',
{as_user: true});
};
MaeBot.prototype._onMessage = function (message) {
if (this._isChatMessage(message) &&
this._isChannelConversation(message) &&
!this._isFromMaeBot(message) &&
this._isMentioningMaeBot(message)
) {
this._replyWithRandomFact(message);
}
};
MaeBot.prototype._isChatMessage = function (message) {
return message.type === 'message' && Boolean(message.text);
};
MaeBot.prototype._isChannelConversation = function (message) {
return typeof message.channel === 'string' &&
message.channel[0] === 'C';
};
MaeBot.prototype._isFromMaeBot = function (message) {
return message.user === this.user.id;
};
MaeBot.prototype._isMentioningMaeBot = function (message) {
return message.text.toLowerCase().indexOf('maebot') > -1 ||
message.text.toLowerCase().indexOf(this.name) > -1;
};
MaeBot.prototype._replyWithRandomFact = function (originalMessage) {
var self = this;
self.db.get('SELECT id, fact FROM facts ORDER BY used ASC, RANDOM() LIMIT 1', function (err, record) {
if (err) {
return console.error('DATABASE ERROR:', err);
}
var channel = self._getChannelById(originalMessage.channel);
self.postMessageToChannel(channel.name, record.fact, {as_user: true});
self.db.run('UPDATE facts SET used = used + 1 WHERE id = ?', record.id);
});
};
MaeBot.prototype._getChannelById = function (channelId) {
return this.channels.filter(function (item) {
return item.id === channelId;
})[0];
};
util.inherits(MaeBot, Bot);
module.exports = MaeBot;
un'affermazione sta fallendo sulla linea 15 della /Users/maecapozzi/Desktop/maebot/node_modules/slackbots/libs/utils.js:15:15 Scommetto che se si controlla ciò che è stato fatto asserzione che vi darà ulteriori informazioni sul motivo per cui questo errore potrebbe verificarsi. –
La funzione in questione (utils.js) funzione assert (condizione, errore) { if (condizione) { tiro nuovo errore ('[Slack Bot Errore]' + errore); } } –
seguendo le stesse esercitazioni, sto ricevendo lo stesso errore. Sembra che l'errore provenga dalla connessione all'API. –