twitch_chatter 0.2.6 → 0.2.7

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: e0626809247948353252813fb4a42078bab2df4e08d51c78f3a709147d2c18b9
4
- data.tar.gz: f71b8c46884ee66112eca143d7b195170a34ed382967b86c25b88aeca9773d0b
3
+ metadata.gz: 492969da096c5b1c22a1470cf299261cc6df2df03d48fc8b05ed29bfc0fc4b0c
4
+ data.tar.gz: 023faac7d335744978a18cd976c4669c8c062a630d4443b8235e49c01ca8566f
5
5
  SHA512:
6
- metadata.gz: 55d5d7fd4159fe3b17817ba8ead6e0d06308c422d21516f83b121cab1b41b98e5fe217d7cbf294ba19832e7a795e6da13cbde788453ff51a151d4100cc31edfe
7
- data.tar.gz: 9f6697054a4f8af92583aacad9f529a036f6adf4795c8e7255ef98287df3870609a22cc182801ec4983d14a42b48d2f104ec5c7852f8de382369e8cfc3b2909f
6
+ metadata.gz: 8a59850e2a9194d7034abd2944bdd07b3219718c9f45c4be8a15ba8535070b22f151726e0805733cc07e1b9a5b5b9422ec344a3eb51f2287b422c50eaf812d9c
7
+ data.tar.gz: a27584857fd99b20d7e7923022ceacaf1c459b468c36b7719b29878c704ec6a0d88f6f8406c9dee8f81c935c7cb53656642adaa14a7c3e7d82003bb96610bf61
@@ -21,22 +21,25 @@ module Twitch
21
21
  websocket_url: "wss://irc-ws.chat.twitch.tv:443",
22
22
  }.freeze
23
23
 
24
+ # @see [DEFAULT_OPTIONS]
24
25
  def initialize(**options)
25
26
  @nick = options[:nick] || DEFAULT_OPTIONS[:nick]
26
27
  @websocket_url = Async::HTTP::Endpoint.parse(options[:websocket_url] || DEFAULT_OPTIONS[:websocket_url])
27
28
  end
28
29
 
29
- # @yield
30
- # @yieldparam
30
+ # Dispatched on websocket connect, but before channel joins
31
+ # @yield [nil]
31
32
  def ready(&block)
32
33
  @ready_handle = block
33
34
  end
34
35
 
36
+ # If we're connected to Twitch's websocket
35
37
  # @return [Boolean]
36
38
  def ready?
37
39
  @ws != nil
38
40
  end
39
41
 
42
+ # Begin pulling messages
40
43
  # @return [Async::Task]
41
44
  def start
42
45
  Async do
@@ -54,7 +57,7 @@ module Twitch
54
57
 
55
58
  next unless data.include?("PRIVMSG")
56
59
 
57
- dispatch(Message.new(data, connection: self))
60
+ dispatch(Message.new(data, bot: self))
58
61
  end
59
62
  end
60
63
  end
@@ -64,27 +67,22 @@ module Twitch
64
67
 
65
68
  # @return [Array<Symbol>]
66
69
  def channels
67
- streams.keys
70
+ streams.keys.map { |s| Channel.new(s, bot: self) }
68
71
  end
69
72
 
70
- # @yield
71
- # @yieldparam streamer [Symbol]
72
- # @yieldreturn [nil]
73
+ # @yieldparam [Symbol] streamer
73
74
  def joined(&block)
74
75
  @join_handle = block
75
76
  end
76
77
 
77
- # @yield
78
- # @yieldparam streamer [Symbol]
79
- # @yieldreturn [nil]
78
+ # @yieldparam [Symbol] streamer
80
79
  def left(&block)
81
80
  @leave_handle = block
82
81
  end
83
82
 
84
83
  # @param streamer [Symbol, String]
85
- # @yield
86
84
  # @yieldparam message [Twitch::Message]
87
- # @yieldreturn [nil]
85
+ # @return [nil]
88
86
  # @example
89
87
  # bot.join(:twitchgaming) do |message|
90
88
  # puts "##{message.channel} #{message.sender}: #{message}"
@@ -100,9 +98,12 @@ module Twitch
100
98
  streams[streamer] << block if block_given?
101
99
  @ws.write("JOIN ##{streamer}")
102
100
  @join_handle&.call(streamer)
101
+ nil
103
102
  end
104
103
 
104
+ # Disconnects from channel and removes all message callbacks.
105
105
  # @param streamer [Symbol, String]
106
+ # @return [nil]
106
107
  # @example
107
108
  # bot.leave(:twitchgaming)
108
109
  def leave(streamer)
@@ -112,11 +113,10 @@ module Twitch
112
113
  streams[streamer] = []
113
114
  @ws.write("PART ##{streamer}")
114
115
  @leave_handle&.call(streamer)
116
+ nil
115
117
  end
116
118
 
117
- # @yield
118
119
  # @yieldparam message [Twitch::Message]
119
- # @yieldreturn [nil]
120
120
  # @example
121
121
  # bot.message do |message|
122
122
  # puts "##{message.channel} #{message.sender}: #{message}"
@@ -126,7 +126,7 @@ module Twitch
126
126
  end
127
127
 
128
128
  alias_method :part, :leave
129
- alias_method :on_leave, :leave
129
+ alias_method :on_leave, :left
130
130
  alias_method :on_join, :joined
131
131
  alias_method :on_message, :message
132
132
 
@@ -140,8 +140,8 @@ module Twitch
140
140
  end
141
141
 
142
142
  def dispatch_ready
143
- join_all
144
143
  @ready_handle&.call
144
+ join_all
145
145
  end
146
146
 
147
147
  def streams
@@ -4,27 +4,26 @@ module Twitch
4
4
  # @!attribute [r] name
5
5
  # @return [Symbol] Name of the channel
6
6
  # @example
7
- # channel = Twitch::Channel.new("twitchgaming")
7
+ # channel = Twitch::Channel.new(:twitchgaming)
8
8
  class Channel
9
+ # @return [String]
9
10
  attr_reader :name
10
11
 
11
- # @param name [String, Symbol]
12
- # @param connection [Bot, nil] For internal usage
13
- def initialize(name, connection: nil)
12
+ # @param [String, Symbol] name
13
+ # @param [Bot, nil] bot
14
+ def initialize(name, bot: nil)
14
15
  @name = name.to_sym
15
- @connection = connection
16
+ @bot = bot
16
17
  end
17
18
 
18
- # @yield
19
- # @yieldparam message [Twitch::Message]
20
- # @return [nil]
19
+ # (see Bot#join)
21
20
  def join(&block)
22
- @connection.join(@name, &block)
21
+ @bot.join(@name, &block)
23
22
  end
24
23
 
25
- # @return [nil]
24
+ # (see Bot#join)
26
25
  def leave
27
- @connection.leave(@name)
26
+ @bot.leave(@name)
28
27
  end
29
28
 
30
29
  # @return [Symbol]
@@ -37,6 +36,7 @@ module Twitch
37
36
  @name.to_s
38
37
  end
39
38
 
39
+ # @return [String]
40
40
  def to_url
41
41
  "https://twitch.tv/#{@name}"
42
42
  end
@@ -44,7 +44,7 @@ module Twitch
44
44
  alias_method :link, :to_url
45
45
  alias_method :href, :to_url
46
46
 
47
- # @param other [Channel, String, Symbol]
47
+ # @param [Channel, String, Symbol] other
48
48
  # @return [Boolean]
49
49
  def ==(other)
50
50
  if other.is_a?(Channel)
@@ -1,36 +1,34 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Twitch
4
- # @!attribute [r] sender
5
- # @return [Channel] Sender of the message
6
- # @!attribute [r] channel
7
- # @return [Channel] Channel the message was sent to
8
- # @!attribute [r] content
9
- # @return [String] Content of the message
10
- # @!attribute [r] raw
11
- # @return [String] Raw message from Twitch
12
4
  # @example
13
5
  # message = Twitch::Message.new(":justinfan!justinfan@justinfan.tmi.twitch.tv PRIVMSG #twitchgaming :Hello world!\r\n")
14
6
  # message.sender.name # => :justinfan
15
7
  # message.channel.name # => :twitchgaming
16
8
  # message.content # => "Hello world!"
17
9
  # message.raw # => ":justinfan!justinfan@justinfan.tmi.twitch.tv PRIVMSG #justinfan :Hello world!\r\n"
18
- class Message < String
19
- attr_reader :sender, :channel, :content, :raw
10
+ class Message
11
+ # @return [Channel] Sender of the message
12
+ attr_reader :sender
13
+ # @return [Channel] Channel the message was sent to
14
+ attr_reader :channel
15
+ # @return [String] Content of the message
16
+ attr_reader :content
17
+ # @return [String] Raw message from Twitch
18
+ attr_reader :raw
20
19
 
21
20
  # @param raw [String] Raw IRC websocket message from Twitch
22
- # @param connection [Bot, nil] For internal usage
21
+ # @param bot [Bot, nil] bot
23
22
  # @example
24
23
  # message = Twitch::Message.new(":justinfan!justinfan@justinfan.tmi.twitch.tv PRIVMSG #twitchgaming :Hello world!\r\n")
25
- def initialize(raw, connection: nil)
24
+ def initialize(raw, bot: nil)
26
25
  split = raw.split(" ")
27
26
  content = split[3..-1].join(" ")[1..-1]
28
- super(content)
29
27
 
30
28
  @content = content
31
- @connection = connection
32
- @channel = Channel.new(split[2][1..-1], connection: connection)
33
- @sender = Channel.new(split[0].split("!")[0][1..-1], connection: connection)
29
+ @bot = bot
30
+ @channel = Channel.new(split[2][1..-1], bot: bot)
31
+ @sender = Channel.new(split[0].split("!")[0][1..-1], bot: bot)
34
32
  @raw = raw
35
33
  end
36
34
 
@@ -38,6 +36,8 @@ module Twitch
38
36
  alias_method :streamer, :channel
39
37
  alias_method :user, :sender
40
38
 
39
+ # Username regexp
40
+ # @api private
41
41
  USERNAME = /[a-zA-Z0-9_]{4,25}/
42
42
  # @return [Array<Twitch::Channel>] List of usernames mentioned in the message
43
43
  def mentions
@@ -48,12 +48,14 @@ module Twitch
48
48
  match = word.match(/@#{USERNAME}/)
49
49
  next unless match
50
50
 
51
- @mentions << Channel.new(match[0][1..-1], connection: @connection)
51
+ @mentions << Channel.new(match[0][1..-1], bot: @bot)
52
52
  end
53
53
 
54
54
  @mentions
55
55
  end
56
56
 
57
+ # Link regexp
58
+ # @api private
57
59
  LINK = %r{(https?://[^\s]+)}
58
60
  # @return [Array<String>] List of links mentioned in the message
59
61
  # @example
@@ -3,8 +3,6 @@
3
3
  require "async"
4
4
  require "async/http/endpoint"
5
5
  require "async/websocket/client"
6
- require_relative "twitch_chatter/models"
7
- require_relative "twitch_chatter/bot"
8
6
 
9
7
  # @author Dylan Hackworth <me@dylhack.dev>
10
8
  # @example
@@ -20,4 +18,6 @@ require_relative "twitch_chatter/bot"
20
18
  #
21
19
  # bot.start
22
20
  module Twitch
21
+ require_relative "twitch_chatter/models"
22
+ require_relative "twitch_chatter/bot"
23
23
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: twitch_chatter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.6
4
+ version: 0.2.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dylan Hackworth
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-06-04 00:00:00.000000000 Z
11
+ date: 2024-10-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: async-websocket