botpress-discord
Version:
A Botpress module using Eris to interact with Discord.
526 lines (417 loc) • 13.7 kB
JavaScript
module.exports =
/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId])
/******/ return installedModules[moduleId].exports;
/******/
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ exports: {},
/******/ id: moduleId,
/******/ loaded: false
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.loaded = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "/home/paul/doc/dev/NodeJS/botpress-discord";
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ function(module, exports, __webpack_require__) {
module.exports = __webpack_require__(1);
/***/ },
/* 1 */
/***/ function(module, exports, __webpack_require__) {
"use strict";
var _config = __webpack_require__(2);
var _config2 = _interopRequireDefault(_config);
var _lodash = __webpack_require__(3);
var _lodash2 = _interopRequireDefault(_lodash);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var checkVersion = __webpack_require__(7);
var Eris = __webpack_require__(8);
var outgoing = __webpack_require__(9);
var incoming = __webpack_require__(11);
var actions = __webpack_require__(12);
var Promise = __webpack_require__(14);
var eris = null;
var outgoingPending = outgoing.pending;
var outgoingMiddleware = function outgoingMiddleware(event, next) {
if (event.platform !== "discord") {
return next();
}
if (!outgoing[event.type]) {
return next("Unsupported event type: " + event.type);
}
outgoing[event.type](event, next, eris);
};
module.exports = {
init: function init(bp) {
checkVersion(bp, __dirname);
bp.middlewares.register({
name: "discord.sendMessages",
type: "outgoing",
order: 100,
handler: outgoingMiddleware,
module: "botpress-discord",
description: "Sends out messages that targets platform = slack." + " This middleware should be placed at the end as it swallows events once sent."
});
bp.discord = {};
_lodash2.default.forIn(actions, function (action, name) {
bp.discord[name] = action;
var sendName = name.replace(/^create/, "send");
//console.log("Created action " + sendName)
bp.discord[sendName] = Promise.method(function () {
var msg = action.apply(this, arguments);
msg.__id = new Date().toISOString() + Math.random();
var resolver = { event: msg };
var promise = new Promise(function (resolve, reject) {
resolver.resolve = resolve;
resolver.reject = reject;
});
outgoingPending[msg.__id] = resolver;
bp.middlewares.sendOutgoing(msg);
return promise;
});
});
bp.discord.isSelf = function (id) {
return id === eris.user.id;
};
bp.discord.isPrivate = function (msg) {
return msg.channel.guild === undefined;
};
},
ready: function ready(bp) {
var config = (0, _config2.default)(bp);
eris = new Eris.Client(config.botToken.get());
bp.discord.raw = eris;
eris.connect();
incoming(bp, eris, config);
}
};
/***/ },
/* 2 */
/***/ function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var _lodash = __webpack_require__(3);
var _lodash2 = _interopRequireDefault(_lodash);
var _storage = __webpack_require__(4);
var _storage2 = _interopRequireDefault(_storage);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
exports.default = function (bp) {
var configKeys = ["botToken", "useSelf"];
var configDefaults = {
botToken: null,
useSelf: false
};
var configStorage = (0, _storage2.default)(bp, configDefaults);
var config = configStorage.load();
var createConfigAccessMethods = function createConfigAccessMethods(key) {
return {
get: function get() {
return config[key];
},
set: function set(value) {
config[key] = value;
configStorage.save(config);
}
};
};
var accessMethods = _lodash2.default.reduce(configKeys, function (acc, key) {
return _extends({}, acc, _defineProperty({}, key, createConfigAccessMethods(key)));
}, {});
var extraMethods = {
getAll: function getAll() {
return config;
},
setAll: function setAll(newConfig) {
return _lodash2.default.forEach(configKeys, function (key) {
accessMethods[key].set(newConfig[key]);
});
}
};
return _extends({}, accessMethods, extraMethods);
};
/***/ },
/* 3 */
/***/ function(module, exports) {
module.exports = require("lodash");
/***/ },
/* 4 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _lodash = __webpack_require__(3);
var _lodash2 = _interopRequireDefault(_lodash);
var _path = __webpack_require__(5);
var _path2 = _interopRequireDefault(_path);
var _fs = __webpack_require__(6);
var _fs2 = _interopRequireDefault(_fs);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var getFilePath = function getFilePath(bp, name) {
var projectLocation = bp.projectLocation,
modulesConfigDir = bp.botfile.modulesConfigDir;
var fileName = name ? 'botpress-discord-' + name + '.json' : 'botpress-discord.json';
return _path2.default.join(projectLocation, modulesConfigDir, fileName);
};
var writeJsonFile = function writeJsonFile(filePath, data) {
return _fs2.default.writeFileSync(filePath, JSON.stringify(data));
};
var readJsonFile = _lodash2.default.flow([_fs2.default.readFileSync, JSON.parse]);
var createSaveFn = function createSaveFn(filePath) {
return function (data) {
return writeJsonFile(filePath, data);
};
};
var createLoadFn = function createLoadFn(filePath, defaultData) {
return function () {
if (!_fs2.default.existsSync(filePath)) {
createSaveFn(filePath)(defaultData);
return defaultData;
}
return readJsonFile(filePath);
};
};
exports.default = function (bp, defaultData, name) {
var filePath = getFilePath(bp, name);
return {
save: createSaveFn(filePath),
load: createLoadFn(filePath, defaultData)
};
};
/***/ },
/* 5 */
/***/ function(module, exports) {
module.exports = require("path");
/***/ },
/* 6 */
/***/ function(module, exports) {
module.exports = require("fs");
/***/ },
/* 7 */
/***/ function(module, exports) {
module.exports = require("botpress-version-manager");
/***/ },
/* 8 */
/***/ function(module, exports) {
module.exports = require("eris");
/***/ },
/* 9 */
/***/ function(module, exports, __webpack_require__) {
"use strict";
var rp = __webpack_require__(10);
var handlePromise = function handlePromise(next, promise) {
return promise.then(function (res) {
next();
return res;
}).catch(function (err) {
next(err);
throw err;
});
};
var handleText = function handleText(event, next, discord) {
if (event.platform !== "discord" || event.type !== "text") {
return next();
}
var channelId = event.raw.channelId;
var text = event.text;
var raw = typeof event.raw !== "string" ? event.raw : {};
return handlePromise(next, discord.createMessage(channelId, { "content": text, "embed": raw }));
};
var handleAttachment = function handleAttachment(event, next, discord) {
if (event.platform !== "discord" || event.type !== "attachment") {
return next();
}
var channelId = event.raw.channelId;
var description = event.text;
var filename = event.raw.filename;
var uri = event.raw.uri;
var pr = new Promise(function (resolve, reject) {
rp(uri).then(function (str) {
resolve(discord.createMessage(channelId, description, { name: filename, file: Buffer.from(str) }));
}).catch(function (err) {
reject(err);
});
});
return handlePromise(next, pr);
};
var handleImage = function handleImage(event, next, discord) {
if (event.platform !== "discord" || event.type !== "image") {
return next();
}
var channelId = event.raw.channelId;
var uri = event.raw.uri;
var filetype = event.raw.type || "png";
var filename = Date.now() + "." + filetype;
var pr = new Promise(function (resolve, reject) {
rp({ uri: uri, encoding: null }).then(function (buff) {
resolve(discord.createMessage(channelId, "", { name: filename, file: Buffer.from(buff) }));
}).catch(function (err) {
reject(err);
});
});
return handlePromise(next, pr);
};
var handleTextUpdate = function handleTextUpdate(event, next, discord) {
if (event.platform !== "discord" || event.type !== "textUpdate") {
return next();
}
var channelId = event.raw.channelId;
var msgId = event.raw.msgId;
var text = event.raw.msg;
return handlePromise(next, discord.editMessage(channelId, msgId, text));
};
module.exports = {
"text": handleText,
"attachment": handleAttachment,
"image": handleImage,
"textUpdate": handleTextUpdate,
pending: {}
};
/***/ },
/* 10 */
/***/ function(module, exports) {
module.exports = require("request-promise");
/***/ },
/* 11 */
/***/ function(module, exports, __webpack_require__) {
"use strict";
var _outgoing = __webpack_require__(9);
var _outgoing2 = _interopRequireDefault(_outgoing);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
module.exports = function (bp, discord, config) {
discord.on("messageCreate", function (msg) {
if (config.useSelf.get() === true) {
if (bp.discord.isSelf(msg.author.id)) {
bp.middlewares.sendIncoming({
platform: "discord",
type: "message",
user: msg.author,
text: msg.content,
channel: msg.channel,
raw: msg
});
}
} else {
if (!bp.discord.isSelf(msg.author.id)) {
bp.middlewares.sendIncoming({
platform: "discord",
type: "message",
user: msg.author,
text: msg.content,
channel: msg.channel,
raw: msg
});
}
}
});
discord.on("ready", function () {
console.log("Discord ready");
});
};
/***/ },
/* 12 */
/***/ function(module, exports, __webpack_require__) {
"use strict";
var _lodash = __webpack_require__(3);
var _lodash2 = _interopRequireDefault(_lodash);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var embeds = __webpack_require__(13);
var createText = function createText(chId, txt) {
return {
platform: "discord",
type: "text",
text: typeof txt === "string" ? txt : "",
raw: {
channelId: chId,
message: txt
}
};
};
var createAttachment = function createAttachment(chId, description, uri) {
var filename = uri.split('/').pop().split('#')[0].split('?')[0];
return {
platform: "discord",
type: "attachment",
text: description,
raw: {
filename: filename,
uri: uri,
channelId: chId
}
};
};
var createImage = function createImage(chId, uri, filetype) {
return {
platform: "discord",
type: "image",
text: "",
raw: {
uri: uri,
channelId: chId,
type: filetype || "png"
}
};
};
var createTextUpdate = function createTextUpdate(chId, msgId, content) {
return {
platform: "discord",
type: "textUpdate",
text: "",
raw: {
channelId: chId,
msgId: msgId,
msg: content
}
};
};
module.exports = {
createText: createText,
createAttachment: createAttachment,
createImage: createImage,
createTextUpdate: createTextUpdate
};
/***/ },
/* 13 */
/***/ function(module, exports) {
"use strict";
/***/ },
/* 14 */
/***/ function(module, exports) {
module.exports = require("bluebird");
/***/ }
/******/ ]);
//# sourceMappingURL=node.bundle.js.map