lib/cogbot.rb
require 'cinch'
require 'eventmachine'
require 'evma_httpserver'
require 'nokogiri'
require 'net/http'
require 'daemons'
require 'thor'
require 'yajl'
require 'lib/cogbot/utils'
require 'lib/cogbot/server'
# main cogbot module
module Cogbot
# cogbot cli parser and launcher
class Bot < Thor
desc 'start', 'start cogbot'
# manages the start cli command
def start
# prepare config
config = {}
begin
config = YAML::load_file(CONFIG_FILE)
rescue Exception => e
load 'lib/cogbot/setup.rb'
config['main'] = Cogbot::Setup.init
end
# prepare daemon
Daemons.daemonize(
:app_name => 'cogbot',
:dir_mode => :normal,
:log_dir => LOG_DIR,
:log_output => true,
:dir => CONFIG_DIR
)
# checkout plugins
plugins = []
config['main']['plugins'].each do |p|
if File.exists?(File.join(ROOT_DIR, 'plugins', "#{p}.rb"))
require File.join(ROOT_DIR, 'plugins', p)
plugins.push Cinch::Plugins.const_get(p.camelize)
end
end
# create bot
bot = Cinch::Bot.new do
configure do |c|
c.server = config['main']['server']
c.ssl.use = ( config['main']['ssl'] == 'true' )
c.nick = config['main']['nick']
c.user = config['main']['nick']
c.realname = config['main']['nick']
c.channels = config['main']['channels']
c.sasl.username = config['main']['sasl_user']
c.sasl.password = config['main']['sasl_pass']
c.options = { 'cogconf' => config }
c.plugins.prefix = config['main']['prefix']
c.plugins.plugins = plugins
end
on :message, 'hi' do |m|
m.reply "Hello, #{m.user.nick}"
end
end
bot.loggers.debug(plugins.inspect)
Signal.trap('TERM') { EM.stop }
EM.run do
EM.defer { bot.start }
if config['server']
EM.add_timer(3) do
EM.start_server(
config['server']['ip'],
config['server']['port'],
Server,
bot
)
end
end
end
bot.quit
end
desc 'stop', 'stop cogbot'
# manages the stop cli command
def stop
pid_file = File.join(CONFIG_DIR, 'cogbot.pid')
pid = File.read(pid_file).to_i if File.exist?(pid_file)
Process.kill('TERM', pid)
end
desc 'restart', 'restart cogbot'
# manages the restart cli command, just stopping and startinbg in sequence
def restart
stop
start
end
end
end