在node.js中build立一个懒散的机器人,抛出一个我无法理解的错误。 有没有人见过这个?

我试图build立一个懒散的机器人,我遇到了一个我无法理解的错误。

这是错误的:

/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) 

我也会和你分享我的代码,因为这应该有助于更好地理解发生的事情。

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; 

您的bot用户和/或令牌可能不正确。 尝试重新创build您的机器人,并确保您使用的应用程序的有效令牌。