iirc 0.6.1 → 0.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d37d0f934314b8e8eeb5fd4ea354eafcc202ccc4bc567d380c80654717315fbe
4
- data.tar.gz: 89ffd1535419115092ecb43111b849a28cde83dccf4e91b7203bc1aef74d8fc8
3
+ metadata.gz: 49f724afe62aa2f76c2d5effda29ce98c9f9b5ae8d83f175ac0de51385e9c431
4
+ data.tar.gz: e61a5053975303f7e45dc4be44f3cebddc63a3171a984c1785fcae666be27d07
5
5
  SHA512:
6
- metadata.gz: 07fc79ea88bd32e3af37fa05da4c18dcd532aff0d9bd1e458394293a009ba3b6166bd1d80ec55f4c041ecd42b206773ed6b445fc0983dc83c53ec3566d9c2388
7
- data.tar.gz: 428284505861a86036420d2f4cc9924327364f5195b683364d20def329335a69377408a8b12c01aa442dee1e205977d5f2dd8d68f6778c4e4d37c48648736e12
6
+ metadata.gz: fc76b8e4d7455058a20dff37d6d29cb0082d69b65681a0e36b7eeccb7abdb25cf58b52bbb23bb652c34747756e0352e2969bb99a669349cada61041cfcdd0dec
7
+ data.tar.gz: 3c4a85314c46eb87752f1a85e2235d1744a0e2f3b9a024af7c5bc5e8b7a604d505edf9905022393bacb973b7bfd7e94da815321cba5d651cea21776d1dc07486
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## [0.6.2] - 2022-04-28
2
+
3
+ - [Event] Add CTCP parsing methods
4
+ - [Sender] Nick is the server name when sender is a server
5
+
1
6
  ## [0.6.1] - 2022-04-01
2
7
 
3
8
  - Add SedBot example
data/lib/iirc/bot.rb CHANGED
@@ -21,6 +21,10 @@ module IIRC
21
21
  super() if defined? super
22
22
  self.socket = socket
23
23
  self.user = user.is_a?(User) ? user : User.new(**user)
24
+
25
+ if !user.key?(:nick)
26
+ self.user.nick ||= self.class.name&.split('::')&.last
27
+ end
24
28
  end
25
29
 
26
30
  def register!
@@ -35,4 +39,4 @@ module IIRC
35
39
  raise ArgumentError.new('no nick given') unless me.nick && !me.nick.empty?
36
40
  end
37
41
  end
38
- end
42
+ end
data/lib/iirc/event.rb CHANGED
@@ -28,5 +28,39 @@ module IIRC
28
28
  def message
29
29
  args.last
30
30
  end
31
+
32
+ CTCP_REGEX = /^\x01(\w+)(?: ([^\x01]+))?\x01?$/
33
+
34
+ def ctcp?
35
+ message&.match?(CTCP_REGEX)
36
+ end
37
+
38
+ def ctcp_verb
39
+ $1.downcase.to_sym if message =~ CTCP_REGEX
40
+ end
41
+
42
+ def ctcp_message
43
+ $2 if message =~ CTCP_REGEX
44
+ end
45
+
46
+ # Parses CTCP data in message, returning nil or an Array like [:action, "does the Macarena"], [:version], [:version, "SomeClient v0.1"]
47
+ # @example Pattern matching (case)
48
+ # case evt.ctcp
49
+ # in [:action, msg]
50
+ # say "#{evt.nick} did an action: #{italic msg}"
51
+ # in [:version]
52
+ # say "\x01VERSION Ruby IIRC (v#{IIRC::VERSION})\x01"
53
+ # in [:dcc, type, *]
54
+ # say "You want to start a DCC #{type} with me? Are you crazy!?"
55
+ # else
56
+ # end
57
+ # @example Pattern matching (if)
58
+ # on(:privmsg, :be_annoying) { |evt|
59
+ # act "#{thing} also" if [:action, thing] in evt.ctcp
60
+ # }
61
+ # @return [Array<Symbol, String?>, nil] CTCP verb and text content, if any (e.g. [:action, "says hello"], [:clientinfo], [:version, "SomeClient v0.1"])
62
+ def ctcp
63
+ [ctcp_verb, ctcp_message].compact if ctcp?
64
+ end
31
65
  end
32
66
  end
@@ -8,7 +8,7 @@ module IIRC
8
8
  on :'001', :autojoin!
9
9
  end
10
10
 
11
- # Send JOIN for each {#autojoin_channel}
11
+ # Send JOIN for each in {#autojoin_channels}
12
12
  # @return [Array<String>] channels joined
13
13
  def autojoin!
14
14
  for channel in autojoin_channels
@@ -7,8 +7,7 @@ module IIRC
7
7
  def run
8
8
  lines { |line|
9
9
  begin
10
- evt = parse(line)
11
- fire! evt.verb, evt
10
+ self >> line
12
11
  rescue Exception => ex
13
12
  puts ex.message
14
13
  puts ex.backtrace
@@ -16,6 +15,11 @@ module IIRC
16
15
  }
17
16
  end
18
17
 
18
+ def >>(line)
19
+ evt = parse(line)
20
+ fire! evt.verb, evt
21
+ end
22
+
19
23
  def on verb=nil, action=nil, &blk
20
24
  if action and blk
21
25
  define_singleton_method(action, blk)
@@ -20,9 +20,14 @@ module IIRC
20
20
 
21
21
  private
22
22
  def configure_isupport
23
+ on :'001', :clear_isupport
23
24
  on :'005', :store_isupport
24
25
  end
25
26
 
27
+ def clear_isupport
28
+ @isupport = nil
29
+ end
30
+
26
31
  def store_isupport(evt)
27
32
  tokens = evt.args[1..-2]
28
33
 
@@ -66,5 +71,20 @@ module IIRC
66
71
  def channel_prefixes
67
72
  (@channel_prefixes ||= self['CHANTYPES']&.chars.freeze) || ['#'].freeze
68
73
  end
74
+
75
+ # Modes which grant privileges to a user in a channel and their respective
76
+ # prefix characters seen in NAMES, WHO and WHOIS replies.
77
+ # @see https://modern.ircdocs.horse/#channel-membership-prefixes
78
+ # @example qaohv
79
+ # isupport.prefix_modes # => {'q'=>'~', 'a'=>'&', 'o'=>'@', 'h'=>'%', 'v'=>'+'}
80
+ # @return [Hash<String,String>] channel mode => prefix character
81
+ def prefix_modes
82
+ if self['PREFIX'].is_a? String
83
+ modes, symbols = self['PREFIX'][1..].split(')').map!(&:chars)
84
+ Hash[modes.zip(symbols)].freeze
85
+ else
86
+ {}.freeze
87
+ end
88
+ end
69
89
  end
70
90
  end
data/lib/iirc/sender.rb CHANGED
@@ -31,9 +31,9 @@ module IIRC
31
31
  not user.nil?
32
32
  end
33
33
 
34
- def nick; user&.nick end
34
+ def nick; user ? user.nick : without_leading_colon end
35
35
  def username; user&.username end
36
- def host; server? ? without_leading_colon : user.host end
36
+ def host; user ? user.host : without_leading_colon end
37
37
 
38
38
  def to_prefix
39
39
  ":#{self}"
@@ -48,8 +48,9 @@ module IIRC
48
48
  end
49
49
 
50
50
  module_function
51
- # Extends and returns a source string with the IIRC::Sender mixin.
52
- # Duplicates first if the string is frozen. Returns nil if source is nil.
51
+ # Adds the IIRC::Sender mixin to a string.
52
+ # If the string is frozen, a copy is returned.
53
+ # If the source is nil, nil is returned.
53
54
  #
54
55
  # @example :nick!user@host
55
56
  # v = IIRC.Sender(":JimmyWales!jim@wikipedia.org") # => "JimmyWales!jim@wikipedia.org"
@@ -66,4 +67,4 @@ module IIRC
66
67
  (source.frozen? ? source.dup : source).extend(Sender)
67
68
  end
68
69
  end
69
- end
70
+ end
data/lib/iirc/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module IIRC
4
- VERSION = "0.6.1"
4
+ VERSION = "0.6.2"
5
5
  end
data/lib/iirc.rb CHANGED
@@ -49,8 +49,6 @@ module IIRC
49
49
  local_host: local_host, local_port: local_port,
50
50
  ssl_context: ssl_context)
51
51
 
52
- user_params[:nick] = self.name&.split('::').last if !user_params.key?(:nick)
53
-
54
52
  new(socket, **user_params).tap { |bot|
55
53
  bot.register!
56
54
  bot.tap(&blk) if blk
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: iirc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - mooff
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-04-01 00:00:00.000000000 Z
11
+ date: 2022-04-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ircparser