72 lines
1.7 KiB
Ruby
Executable file
72 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", [], scope).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!
|