Skip to content

Instantly share code, notes, and snippets.

@copygirl
Last active April 10, 2016 05:12
Show Gist options
  • Save copygirl/8480e707cdb9e491a63afceab7337f10 to your computer and use it in GitHub Desktop.
Save copygirl/8480e707cdb9e491a63afceab7337f10 to your computer and use it in GitHub Desktop.
{
"irc": {
"server": "irc.esper.net",
"serverName": "Esper.NET",
"nick": "cordy",
"userName": "cordy",
"realName": "#obsidian Research Bot",
"channels": [ "#cordy" ]
},
"discord": {
"email": "[email protected]",
"password": "****"
}
}
{
"Logging": {
"enabled": true,
"format": "[$service] $message"
},
"Bridge": {
"enabled": true,
"debug": true,
"ignore": [ "irc:Ruby" ],
"bridges": [
{ "channels": [ "irc:#obsidian", "discord:#107923656885157888" ], "enabled": false },
{ "channels": [ "irc:#sapphire", "discord:#107960814694068224" ], "enabled": false },
{ "channels": [ "irc:#cordy", "discord:#162192835980820481" ] }
]
}
}
"use strict";
let auth = require("./auth");
let config = require("./config");
let ServiceIRC = require("./services/IRC");
let ServiceDiscord = require("./services/Discord");
let { EventEmitter } = require("events");
let { implement } = require("./utility");
let services = {
irc: ServiceIRC,
discord: ServiceDiscord
};
module.exports = implement(class cord {
constructor(services) {
EventEmitter.call(this);
this.services = services;
this.config = config;
this.plugins = { };
}
// on("connected", (service, self) => ...)
// on("disconnected", (service, reason) => ...)
// on("newUser", (user) => ...)
// on("newChannel", (channel) => ...)
// on("message", (message) => ...)
resolve(resolveStr) {
let [ serviceName, str ] = resolveStr.split(":", 2);
let service = this.services[serviceName];
return ((service != null) ? service.resolve(str) : null);
}
run() {
// Initialize services.
for (let name in this.services) {
let service = new this.services[name](auth[name]);
this.services[name] = service;
service.on("connected", (self) => this.emit("connected", service, self));
service.on("disconnected", (reason) => this.emit("disconnected", service, reason));
service.on("newUser", (user) => this.emit("newUser", user));
service.on("newChannel", (channel) => this.emit("newChannel", channel));
service.on("message", (message) => this.emit("message", message));
}
// Load plugins.
for (let name in this.config) {
let pluginConfig = this.config[name];
if (!pluginConfig.enabled) continue;
let PluginClass = require("./plugins/" + name);
let plugin = new PluginClass(pluginConfig);
this.plugins[name] = plugin;
}
// Activate plugins.
for (let name in this.plugins)
plugins[name].activate(this);
// Connect to services.
for (let name in this.services)
services[name].connect();
}
}, EventEmitter);
new cord(services).run();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment