Project

yaic

0.0
No release in over 3 years
Yet another irc client
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies
 Project Readme

Yaic

Yet Another IRC Client - A Ruby IRC client library.

Installation

Add to your Gemfile:

gem "yaic"

Or install directly:

gem install yaic

Quick Start

require "yaic"

client = Yaic::Client.new(
  server: "irc.libera.chat",
  port: 6697,
  ssl: true,
  nickname: "mynick",
  username: "myuser",
  realname: "My Real Name"
)

client.on(:message) { |event| puts "#{event.source.nick}: #{event.text}" }

client.connect
client.join("#ruby")
client.privmsg("#ruby", "Hello!")
client.quit

Events

Subscribe to events with on:

client.on(:message) { |event| ... }
client.on(:join) { |event| ... }

Unsubscribe with off:

client.off(:message)
Event Attributes
:raw message - Raw IRC message
:connect server - Server name
:disconnect -
:message source, target, text
:notice source, target, text
:join channel, user
:part channel, user, reason
:quit user, reason
:kick channel, user, by, reason
:nick old_nick, new_nick
:topic channel, topic, setter
:mode target, modes, args
:names channel, users
:who channel, user, host, server, nick, away, realname
:whois result (WhoisResult object)
:error numeric, message

Commands

client.connect                    # Connect and register
client.quit("Goodbye")            # Disconnect with optional message

client.join("#channel")           # Join a channel
client.join("#channel", "key")    # Join with key
client.part("#channel")           # Leave a channel
client.part("#channel", "reason") # Leave with reason

client.privmsg("#channel", "Hi")  # Send message to channel
client.privmsg("nick", "Hello")   # Send private message
client.msg("#channel", "Hi")      # Alias for privmsg
client.notice("#channel", "Info") # Send notice

client.nick("newnick")            # Change nickname
client.topic("#channel")          # Request topic
client.topic("#channel", "New")   # Set topic
client.kick("#channel", "nick")   # Kick user
client.mode("#channel", "+o", "nick") # Set mode

client.who("#channel")            # WHO query
client.whois("nick")              # WHOIS query
client.names("#channel")          # NAMES query

Threading

The client spawns a background thread to read incoming messages. Event handlers are called from this thread. All public methods are thread-safe.

Channel State

Access joined channels:

client.channels["#ruby"]           # => Channel object
client.channels["#ruby"].users     # => {"nick" => Set[:op, :voice], ...}
client.channels["#ruby"].topic     # => "Ruby programming"
client.channels["#ruby"].modes     # => {:moderated => true, ...}

Development

rake test              # Run all tests
rake test_unit         # Run unit tests only
rake test_integration  # Run integration tests (requires IRC server)
bundle exec standardrb -A  # Run linter

License

MIT License