3

Andrew Templeton の「Bottie」コード ( https://github.com/andrew-templeton/bottie ) を使って、NLP 駆動のボットを作成してきました。

元のコードは Slack で動作するように作成されましたが、代わりに Discord クライアントに適応させたいと考えています。

私はいくつかの進歩を遂げましたが、「ears.js」ファイルの「.hear」関数部分で行き詰まっています (以下のコード スニペットに示すように、これはメッセージを受け入れて「NLP エンジンに送信するメイン ファイルです。 ')。ボットは、「ping」が送信された場合に応答しますが、他には何も起こりません (ボットは、冗談を言ったり、会話をしたりするために構築されています)。これが私のコードです:

//This is the 'ears.js' file. This allows the bot to log in and 'hear' messages.
"use strict";

var Discord = require('discord.js');
var BotKit = require('botkit');

module.exports = Ears;

var Bot = new Discord.Client({
//var Bot = BotKit.slackbot({
  debug: false,
  storage: undefined
});

function Ears(token) {
  this.scopes = [
    'direct_mention',
    'direct_message',
    'mention',
    'message'
  ];

  // if we haven't defined a token, get the token from the session variable.
  if (Bot.token == undefined) {
    this.token = '...insert token here...';
    }
}

Ears.prototype.listen = function() {
  console.log('TOKEN: ' + this.token);
  this.bot = Bot.login(this.token);

  Bot.on('message', (message) => {

    if(message.content == 'ping') {
      message.channel.sendMessage('pong');
    }

  });
  return this;
}

Ears.prototype.hear = function(pattern, callback) {
  Bot.hears(pattern, this.scopes, callback);
  return this;
};

以下は、メイン プログラムである「index.js」ファイルのコードです。

//This is the 'index.js' file - the main program.
"use strict";

var fs = require('fs');

var Train = require('./src/train');
var Brain = require('./src/brain');
var Ears = require('./src/ears');
var builtinPhrases = require('./builtins');

var Bottie = {
  Brain: new Brain(),
  Ears: new Ears(process.env.SLACK_TOKEN)
};

var customPhrasesText;
var customPhrases;
try {
  customPhrasesText = fs.readFileSync(__dirname + '/custom-phrases.json').toString();
} catch (err) {
  throw new Error('Uh oh, Bottie could not find the ' +
    'custom-phrases.json file, did you move it?');
}
try {
  customPhrases = JSON.parse(customPhrasesText);
} catch (err) {
  throw new Error('Uh oh, custom-phrases.json was ' +
    'not valid JSON! Fix it, please? :)');
}

console.log('Bottie is learning...');
Bottie.Teach = Bottie.Brain.teach.bind(Bottie.Brain);
eachKey(customPhrases, Bottie.Teach);
eachKey(builtinPhrases, Bottie.Teach);
Bottie.Brain.think();
console.log('Bottie finished learning, time to listen...');
Bottie.Ears
  .listen()
  .hear('TRAINING TIME!!!', function(speech, message) {
    console.log('Delegating to on-the-fly training module...');
    Train(Bottie.Brain, speech, message);
  })
  .hear('.*', function(speech, message) {
    var interpretation = Bottie.Brain.interpret(message.text);
    console.log('Bottie heard: ' + message.text);
    console.log('Bottie interpretation: ', interpretation);
    if (interpretation.guess) {
      console.log('Invoking skill: ' + interpretation.guess);
      Bottie.Brain.invoke(interpretation.guess, interpretation, speech, message);
    } else {
      speech.reply(message, 'Hmm... I don\'t have a response what you said... I\'ll save it and try to learn about it later.');
      // speech.reply(message, '```\n' + JSON.stringify(interpretation) + '\n```');

      // append.write [message.text] ---> to a file
      fs.appendFile('phrase-errors.txt', '\nChannel: ' + message.channel + ' User:'+ message.user + ' - ' + message.text, function (err) {
        console.log('\n\tBrain Err: Appending phrase for review\n\t\t' + message.text + '\n');
        });
    }
  });



function eachKey(object, callback) {
  Object.keys(object).forEach(function(key) {
    callback(key, object[key]);
  });
}

残念ながら、「Bottie」の作者は質問に答えていないので、ここに質問をコミュニティの残りの人に投稿します. 私は JavaScript にかなり慣れていないので、これについて何か助けていただければ幸いです。

4

0 に答える 0