Building a slack bot in node.js, throwing an error I can't make sense of. Has anyone seen this before?

隐身守侯 提交于 2020-08-27 07:39:05

问题


I am trying to build a slack bot, and I have come across an error I can't make sense of.

This is the error:

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

I'll share my code with you as well, since that should help to make more sense of what has happened.

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;

回答1:


Your bot user and/or token is likely incorrect. Try re-creating your bot and ensure that you're using a valid token for your app.



来源:https://stackoverflow.com/questions/37356972/building-a-slack-bot-in-node-js-throwing-an-error-i-cant-make-sense-of-has-an

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!