### Home Classes Methods

### In Files

- lib/plugins/irc_gw.rb

### Parent

Net::IRC::Server::Session

### Methods

- ::new
- #call
- #execute_command
- #friends_ids
- #join_members
- #log
- #main_channel
- #on_message
- #on_privmsg
- #on_user
- #server_name
- #server_version
- #sync_commands
- #sync_friends

### Files

- ChangeLog
- README.rdoc

### Class/Module Index

Quicksearch

- Termtter
- Termtter::API
- Termtter::ActiveRubytter
- Termtter::Client
- Termtter::Client::DirectMessage
- Termtter::Client::Jakigan
- Termtter::Client::SearchEvent
- Termtter::Client::UserSearchEvent
- Termtter::Command
- Termtter::CommandCanceled
- Termtter::CommandLine
- Termtter::CommandNotFound
- Termtter::Config
- Termtter::ConfigSetup
- Termtter::Crypt
- Termtter::English
- Termtter::Event
- Termtter::HTTPpool
- Termtter::Hook
- Termtter::HookCanceled
- Termtter::Hookable
- Termtter::JSONError
- Termtter::MemoryCache
- Termtter::MemoryCache::MemCacheMock
- Termtter::OptParser
- Termtter::Plugin
- Termtter::Plugin::Screen
- Termtter::Plugins
- Termtter::Plugins::Haml
- Termtter::Plugins::ListSwitch
- Termtter::RubytterProxy
- Termtter::RubytterProxy::FrequentAccessError
- Termtter::RubytterProxy::LimitManager
- Termtter::Status
- Termtter::StdOut
- Termtter::Storage
- Termtter::Storage::SQLite3
- Termtter::Storage::Status
- Termtter::Task
- Termtter::TaskManager
- Termtter::TypableIdGenerator
- Termtter::UserStreamReceiver
- Yharian
- Yharian::Alex
- Yharian::Jenifer
- Yharian::Remark
- Yharian::Speaker
- Yharian::Vicki
- Yharian::Yhara
- HatenaKeywordHaiku
- HatenaKeywordHaiku::Word
- OAuth
- OAuth::AccessToken
- Readline
- Readline::LIBREADLINE
- AAMaker
- Array
- BrowserNotFound
- Growl
- IRB
- Object
- Status
- String
- Symbol
- TermColor
- TermtterIrcGateway
- User

No matching classes.

# TermtterIrcGateway

### Public Class Methods

new(*args) click to toggle source

    # File lib/plugins/irc_gw.rb, line 71
    def initialize(*args)
      super
      @@listners << self
      @members = Set.new
      @commands = []

      Termtter::Client.register_hook(:collect_user_names_for_irc_gw, :point => :pre_filter) do |statuses, event|
        new_users = []
        statuses.each do |s|
          screen_name = s.user.screen_name
          next if screen_name == config.user_name
          next unless friends_ids.include? s.user.id
          next if @members.include? screen_name
          @members << screen_name
          new_users << screen_name
        end
        join_members(new_users)
      end

      Termtter::Client.register_command(
        :name => :collect_friends,
        :help => 'Collect friends for IRC.',
        :exec => lambda {|arg|
          sync_friends
        })

      Termtter::Client.register_hook(:collect_commands_for_irc_gw, :point => :post_command) do |text|
        sync_commands if text =~ /plug/
      end
    end

### Public Instance Methods

call(statuses, event, indent = 0) click to toggle source

    # File lib/plugins/irc_gw.rb, line 102
    def call(statuses, event, indent = 0)
      if event == :update_friends_timeline
        msg_type = PRIVMSG
      else
        time_format = Termtter::Client.time_format_for statuses
        msg_type = NOTICE
      end
      statuses.each do |s|
        typable_id = Termtter::Client.data_to_typable_id(s.id)
        time = Time.parse(s.created_at).strftime(time_format) if time_format
        reply_to_status_id_str =
          if s.in_reply_to_status_id
            "(reply to #{Termtter::Client.data_to_typable_id(s.in_reply_to_status_id)})"
          else
            nil
          end

        padding = indent > 0 ? '→' : nil

        post s.user.screen_name, msg_type, main_channel, [time, padding, CGI.unescapeHTML(s.text), typable_id, reply_to_status_id_str].compact.join(' ')
        if config.plugins.stdout.show_reply_chain && s.in_reply_to_status_id && indent < config.plugins.stdout.max_indent_level
          begin
            if reply = Termtter::API.twitter.cached_status(s.in_reply_to_status_id)
              call([reply], event, indent+1)
            end
          rescue Rubytter::APIError
          end
        end
      end
    end

execute_command(command) click to toggle source

    # File lib/plugins/irc_gw.rb, line 173
    def execute_command(command)
      command.encode!('utf-8', 'utf-8') if command.respond_to? :encode!
      original_confirm = config.confirm
      config.confirm = false
      post '#termtter', NOTICE, main_channel, '> ' + command
      Termtter::Client.execute(command)
    ensure
      config.confirm = original_confirm
    end

friends_ids() click to toggle source

    # File lib/plugins/irc_gw.rb, line 222
    def friends_ids
      if !@friends_ids || !@friends_ids_expire ||@friends_ids_expire < Time.now
        @friends_ids = Termtter::API.twitter.friends_ids(config.user_name)
        @friends_ids_expire = Time.now + 3600
      end
      @friends_ids
    end

join_members(members) click to toggle source

    # File lib/plugins/irc_gw.rb, line 206
    def join_members(members)
      params = []
      max_params_count = 3
      members.each do |member|
        prefix = Prefix.new("#{member}!#{member}@localhost")
        next if prefix.extract.empty?
        post prefix, JOIN, main_channel
        params << prefix.nick
        next if params.size < max_params_count

        post server_name, MODE, main_channel, "+#{"v" * params.size}", *params
        params = []
      end
      post server_name, MODE, main_channel, "+#{"v" * params.size}", *params unless params.empty?
    end

log(str) click to toggle source

    # File lib/plugins/irc_gw.rb, line 183
    def log(str)
      str.each_line do |line|
        post server_name, NOTICE, main_channel, line
      end
    end

main_channel() click to toggle source

    # File lib/plugins/irc_gw.rb, line 69
    def main_channel; '#termtter' end

on_message(m) click to toggle source

    # File lib/plugins/irc_gw.rb, line 133
    def on_message(m)
      termtter_command = m.command.downcase + ' ' + m.params.join(' ')
      return unless Termtter::Client.find_command(termtter_command)
      execute_command(termtter_command)
    rescue Exception => e
      Termtter::Client.handle_error(e)
    end

on_privmsg(m) click to toggle source

    # File lib/plugins/irc_gw.rb, line 150
    def on_privmsg(m)
      target, message = *m.params
      if message =~ / +\//
        termtter_command = message.gsub(/ +\//, '')
        return unless Termtter::Client.find_command(termtter_command)
        execute_command(termtter_command)
        return
      end
      config.plugins.irc_gw.command_regexps and
      config.plugins.irc_gw.command_regexps.each do |rule|
        if message =~ rule
          command = message.scan(rule).first.join(' ')
          next unless Termtter::Client.find_command(command)
          execute_command(command)
          return
        end
      end
      execute_command('update ' + message)
      post @prefix, TOPIC, main_channel, message
    rescue Exception => e
      Termtter::Client.handle_error(e)
    end

on_user(m) click to toggle source

    # File lib/plugins/irc_gw.rb, line 141
    def on_user(m)
      super
      @user = m.params.first
      post @prefix, JOIN, main_channel
      post server_name, MODE, main_channel, "+o", @prefix.nick
      sync_commands
      self.call(@@last_statuses || [], :update_friends_timeline)
    end

server_name() click to toggle source

    # File lib/plugins/irc_gw.rb, line 67
    def server_name; 'termtter' end

server_version() click to toggle source

    # File lib/plugins/irc_gw.rb, line 68
    def server_version; '0.0.0' end

sync_commands() click to toggle source

    # File lib/plugins/irc_gw.rb, line 197
    def sync_commands
      previous_commands = @commands
      new_commands = (
        Termtter::Client.commands.keys + Termtter::Client.commands.values.map(&:aliases)
        ).flatten.uniq.compact
      join_members(new_commands - previous_commands)
      @commands = new_commands
    end

sync_friends() click to toggle source

    # File lib/plugins/irc_gw.rb, line 189
    def sync_friends
      previous_friends = @members
      new_friends = Termtter::Client.following_friends
      diff = new_friends - previous_friends
      join_members(diff)
      @members += diff
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.