Адаптация боткита к Discord
Я играл с кодом Эндрю Темплтона "Ботти" ( https://github.com/andrew-templeton/bottie), чтобы создавать ботов, управляемых НЛП.
Оригинальный код был создан для работы со Slack, но я хочу адаптировать его для клиента Discord.
Я добился некоторого прогресса, но застрял в функциональной части ".hear" файла "ear.js" (как показано в фрагменте кода ниже, это основной файл, который принимает сообщения и отправляет их в механизм NLP "). Бот отвечает, если ему отправляется "пинг", но больше ничего не происходит (бот был создан для того, чтобы рассказывать анекдоты, разговаривать и т. Д.). Вот мой код:
//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]);
});
}
К сожалению, автор "Ботти" не ответил на запросы, поэтому я размещаю этот вопрос здесь для остальной части сообщества. Я довольно новичок в JavaScript и был бы признателен за любую помощь в этом.