repost/run.rb

73 lines
1.7 KiB
Ruby
Executable File

#!env ruby
# encoding: utf-8
require 'rubygems'
require 'eventmachine'
require 'em-irc'
require 'logger'
require 'hiera'
require 'deep_merge'
require_relative 'repost'
hiera_configuration = {
backends: "yaml",
merge_behavior: "deeper",
yaml: {
datadir: File.join(File.dirname(__FILE__), "config"),
},
hierarchy: [
'%{network}/%{target}/%{person}',
'%{network}/%{person}',
'%{network}/%{target}',
'%{network}',
'common',
],
}
class ConfigSource < Hiera
def lookup key, default="", scope=nil, *stuff
super
end
end
Config = ConfigSource.new(config: hiera_configuration)
# Will have to change it to a normal EM loop if/when i'll want to make a usable
# local console for the bot.
Client = Repost.new do
scope = { "network" => "freenode" }
host Config.lookup("server::host", "", scope)
port Config.lookup("server::port", "", scope)
on :connect do
puts "connected! changing nick to #{Config.lookup("client::nick")}"
nick Config.lookup("client::nick")
end
on :nick do
Config.lookup("channels", []).each do |channel|
puts "joining #{channel}"
join channel
end
end
# The provided triggers/callbacks for actions are limited - there are no
# quit/part callbacks, for example - and we'd have to catch raw messages
# anyway. And since we're doing that, we can just go ahead and hook up to
# raw callbacks exclusively.
on :raw do |message|
self.dispatch_raw_message message
end
end
# Loading plugins here, because we need the Client object in scope to be able
# to do anything.
Client.load_plugins
Client.network = "freenode"
Client.run!