2016-05-20 7 views
5

Ich versuche einen Slack-Bot zu bauen, und ich bin auf einen Fehler gestoßen, den ich nicht verstehen kann.Erstellen Sie einen Slack-Bot in node.js und werfen Sie einen Fehler, den ich nicht verstehen kann. Hat das jemand schon mal gesehen?

Dies ist der Fehler:

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

Ich werde meinen Code auch mit Ihnen teilen, da diese mehr Sinn für helfen sollen machen, was passiert ist.

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; 
+0

eine Behauptung versagt auf Linie 15 von /Users/maecapozzi/Desktop/maebot/node_modules/slackbots/libs/utils.js:15:15 Ich wette, wenn Sie prüfen, was Behauptung gemacht wird es euch geben wird, weiterer Einblick, warum dieser Fehler auftreten könnte. –

+0

Die betreffende Funktion (utils.js) Funktion assert (Zustand, Fehler) { if (Bedingung!) { throw new Error ('[Slack Bot Fehler]' + Fehler); } } –

+0

nach den gleichen Tutorials, bekomme ich den gleichen Fehler. Sieht so aus, als käme der Fehler von der Verbindung zur API. –

Antwort

0

Ihr Bot Benutzer und/oder Token ist wahrscheinlich falsch. Versuchen Sie, Ihren Bot neu zu erstellen, und stellen Sie sicher, dass Sie ein gültiges Token für Ihre App verwenden.