#!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!