twitch-bot 4.1.0 → 5.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 59dabc57f451a9054c650af520cacc2b05b2532538d22080404a19a30be51c35
4
- data.tar.gz: d6f75053e902744d29c512abc89ebfca97acfb46fc4f7a5362c61faec9902534
3
+ metadata.gz: c93a3e736df843858523b560468c2e8f5b485753d962048a53a1d31288dac8e7
4
+ data.tar.gz: 0bcecc94bf291ba8f1cbdd95643fef3fcb63dec42a60b19b6b4714a99412e48a
5
5
  SHA512:
6
- metadata.gz: 9d25aae7bfcf9b00aca8d9cfde3d76e480c933aa12ac03ea7b74406f96645db3d374455b5152dd420e854bb87f15048ffa03eea59e7b266fe5c9a5207df25d43
7
- data.tar.gz: 5baf4cf1ca8392c2d92c80b1d7582c01fe0a9ec3911e14decd8aca2d0e72503f7a20cb3521367c833e7c6de4f874dbbeeb62cbde6f3dfcd365cdc714cd20e264
6
+ metadata.gz: 1dd1afaf1758e6e284286c574d6e1c97c7173431ecec73570394193e174afd8ed2216bf6f22cec76f4ac0c0b379b4fdcf0ef93d275664870b8247f0da2f880a7
7
+ data.tar.gz: 2457c8f76af99c2b0293ffce6bc6269df1cc0c07f9a3aa54fbfb210e28c791f34e42eee7eeb89da00d523da6b9853454c8ad0b561d182667e80280f962253f76
File without changes
data/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Changelog Twitch::Bot
2
2
 
3
+ ## v5.0.1
4
+
5
+ - [FIX] Environment variable `REDIS_URL` now has precedence over configuration
6
+ object values.
7
+
8
+ ## v5.0.0
9
+
10
+ - [BREAKING] Complex values like arrays and hashes get serialized as JSON before
11
+ being stored in Redis.
12
+
13
+ ## v4.1.1
14
+
15
+ - [NEW] `CommandHandler` by default responds to `:user_message` events.
16
+
3
17
  ## v4.1.0
4
18
 
5
19
  * [NEW] New `CommandHandler` class that simplifies building chat commands.
@@ -11,7 +11,7 @@ module Twitch
11
11
  # Represent the event triggered when quitting the client loop.
12
12
  class StopEvent < Twitch::Bot::Event
13
13
  def initialize
14
- @type = :stop
14
+ super(type: :stop)
15
15
  end
16
16
  end
17
17
 
@@ -22,7 +22,7 @@ module Twitch
22
22
  attr_reader :channel, :config, :memory
23
23
 
24
24
  def initialize(
25
- channel: nil, config:, &block
25
+ config:, channel: nil, &block
26
26
  )
27
27
  @config = config
28
28
  @channel = Twitch::Bot::Channel.new(channel) if channel
@@ -4,6 +4,10 @@ module Twitch
4
4
  module Bot
5
5
  # Base class for implementing chat commands
6
6
  class CommandHandler < EventHandler
7
+ def self.handled_events
8
+ [:user_message]
9
+ end
10
+
7
11
  def initialize(event:, client:)
8
12
  super
9
13
  @command_aliases = []
@@ -6,6 +6,21 @@ module Twitch
6
6
  class EventHandler
7
7
  attr_reader :event, :client
8
8
 
9
+ #
10
+ # Return a list of event types this handler subscribes to
11
+ #
12
+ # @return [Array] list of event types
13
+ #
14
+ def self.handled_events
15
+ []
16
+ end
17
+
18
+ #
19
+ # Inititalize an event handler object
20
+ #
21
+ # @parameter event The latest event of a subscribed type
22
+ # @parameter client The current chat client object
23
+ #
9
24
  def initialize(event:, client:)
10
25
  @event = event
11
26
  @client = client
@@ -19,15 +34,6 @@ module Twitch
19
34
  def call
20
35
  raise "Unhandled #{event.type}"
21
36
  end
22
-
23
- #
24
- # Return a list of event types this handler can handle
25
- #
26
- # @return [Array] event type list
27
- #
28
- def self.handled_events
29
- []
30
- end
31
37
  end
32
38
  end
33
39
  end
@@ -16,7 +16,7 @@ module Twitch
16
16
  end
17
17
 
18
18
  def self.logger
19
- @logger ||= ::Logger.new(STDOUT)
19
+ @logger ||= ::Logger.new($stdout)
20
20
  end
21
21
  end
22
22
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "redis"
4
+ require "json"
4
5
 
5
6
  module Twitch
6
7
  module Bot
@@ -13,11 +14,12 @@ module Twitch
13
14
  end
14
15
 
15
16
  def store(key, value)
16
- redis.set(key, value)
17
+ redis.set(key, value.to_json)
17
18
  end
18
19
 
19
20
  def retrieve(key)
20
- redis.get(key)
21
+ value = redis.get(key)
22
+ JSON.parse(value)
21
23
  end
22
24
 
23
25
  private
@@ -25,17 +27,15 @@ module Twitch
25
27
  attr_reader :client, :redis
26
28
 
27
29
  def connect_db
28
- url = redis_config_url || ENV["REDIS_URL"]
30
+ url = ENV["REDIS_URL"] || redis_config_url
29
31
  ::Redis.new(url: url)
30
32
  end
31
33
 
32
34
  def redis_config_url
33
35
  config = client.config
34
- if config.setting("redis_host")
35
- host = config.setting("redis_host") || "localhost"
36
- port = config.setting("redis_port") || 6379
37
- "redis://#{host}:#{port}"
38
- end
36
+ host = config.setting("redis_host") || "localhost"
37
+ port = config.setting("redis_port") || 6379
38
+ "redis://#{host}:#{port}"
39
39
  end
40
40
  end
41
41
  end
@@ -10,7 +10,7 @@ module Twitch
10
10
  def initialize(text:, user:)
11
11
  @text = text
12
12
  @user = user
13
- @type = :user_message
13
+ super(type: :user_message)
14
14
  end
15
15
 
16
16
  def command_name?(check_command)
@@ -5,8 +5,8 @@ module Twitch
5
5
  module Message
6
6
  # This class is the abstract base class for IRC events.
7
7
  class Base < Twitch::Bot::Event
8
- def initialize(_message)
9
- @type = :unknown
8
+ def initialize(type: :unknown)
9
+ super(type: type)
10
10
  end
11
11
  end
12
12
 
@@ -16,7 +16,7 @@ module Twitch
16
16
 
17
17
  def initialize(message)
18
18
  @message = message
19
- @type = :not_supported
19
+ super(type: :not_supported)
20
20
  end
21
21
  end
22
22
 
@@ -26,7 +26,7 @@ module Twitch
26
26
 
27
27
  def initialize(hostname:)
28
28
  @hostname = hostname
29
- @type = :ping
29
+ super(type: :ping)
30
30
  end
31
31
  end
32
32
 
@@ -37,21 +37,21 @@ module Twitch
37
37
  def initialize(user:, mode:)
38
38
  @user = user
39
39
  @mode = mode
40
- @type = :mode
40
+ super(type: :mode)
41
41
  end
42
42
  end
43
43
 
44
44
  # This class stores the details of an Authenticated event.
45
45
  class Authenticated < Base
46
46
  def initialize
47
- @type = :authenticated
47
+ super(type: :authenticated)
48
48
  end
49
49
  end
50
50
 
51
51
  # This class stores the details of a Join event.
52
52
  class Join < Base
53
53
  def initialize
54
- @type = :join
54
+ super(type: :join)
55
55
  end
56
56
  end
57
57
 
@@ -61,7 +61,7 @@ module Twitch
61
61
 
62
62
  def initialize(user:)
63
63
  @user = user
64
- @type = :subscription
64
+ super(type: :subscription)
65
65
  end
66
66
  end
67
67
 
@@ -71,7 +71,7 @@ module Twitch
71
71
 
72
72
  def initialize(user:)
73
73
  @user = user
74
- @type = :login_failed
74
+ super(type: :login_failed)
75
75
  end
76
76
  end
77
77
 
@@ -82,7 +82,7 @@ module Twitch
82
82
  def initialize(status:, channel:)
83
83
  @status = status
84
84
  @channel = channel
85
- @type = :slow_mode
85
+ super(type: :slow_mode)
86
86
  end
87
87
 
88
88
  def enabled?
@@ -96,7 +96,7 @@ module Twitch
96
96
 
97
97
  def initialize(status:)
98
98
  @status = status
99
- @type = :followers_only_mode
99
+ super(type: :followers_only_mode)
100
100
  end
101
101
  end
102
102
 
@@ -107,7 +107,7 @@ module Twitch
107
107
  def initialize(status:, channel:)
108
108
  @status = status
109
109
  @channel = channel
110
- @type = :subs_only_mode
110
+ super(type: :subs_only_mode)
111
111
  end
112
112
  end
113
113
 
@@ -118,7 +118,7 @@ module Twitch
118
118
  def initialize(status:, channel:)
119
119
  @status = status
120
120
  @channel = channel
121
- @type = :r9k_mode
121
+ super(type: :r9k_mode)
122
122
  end
123
123
  end
124
124
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Twitch
4
4
  module Bot
5
- VERSION = "4.1.0"
5
+ VERSION = "5.0.1"
6
6
  end
7
7
  end
@@ -1,6 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RSpec.describe Twitch::Bot::CommandHandler do
4
+ it "responds to user_message" do
5
+ expect(described_class.handled_events).to include(:user_message)
6
+ end
7
+
4
8
  it "responds to a known command" do
5
9
  config = Twitch::Bot::Config.new
6
10
  client = Twitch::Bot::Client.new(config: config)
@@ -9,5 +9,26 @@ RSpec.describe Twitch::Bot::Memory::Hash do
9
9
 
10
10
  expect(mem.retrieve("foo")).to eq "bar"
11
11
  end
12
+
13
+ it "persists an Array" do
14
+ mem = described_class.new(client: nil)
15
+
16
+ mem.store("foo", [1, 2])
17
+
18
+ result = mem.retrieve("foo")
19
+ expect(result).to be_an Array
20
+ expect(result[0]).to eq 1
21
+ expect(result[1]).to eq 2
22
+ end
23
+
24
+ it "persists a Hash" do
25
+ mem = described_class.new(client: nil)
26
+
27
+ mem.store("foo", { "bar" => "baz" })
28
+
29
+ result = mem.retrieve("foo")
30
+ expect(result).to be_a Hash
31
+ expect(result["bar"]).to eq "baz"
32
+ end
12
33
  end
13
34
  end
@@ -40,5 +40,44 @@ RSpec.describe Twitch::Bot::Memory::Redis do
40
40
 
41
41
  expect(mem.retrieve("foo")).to eq "bar"
42
42
  end
43
+
44
+ it "persists an Array" do
45
+ config = Twitch::Bot::Config.new(
46
+ settings: {
47
+ bot_user: "testuser",
48
+ },
49
+ )
50
+ client = Twitch::Bot::Client.new(
51
+ config: config,
52
+ channel: "testchannel",
53
+ )
54
+ mem = described_class.new(client: client)
55
+
56
+ mem.store("foo", [1, 2])
57
+
58
+ result = mem.retrieve("foo")
59
+ expect(result).to be_an Array
60
+ expect(result[0]).to eq 1
61
+ expect(result[1]).to eq 2
62
+ end
63
+
64
+ it "persists a Hash" do
65
+ config = Twitch::Bot::Config.new(
66
+ settings: {
67
+ bot_user: "testuser",
68
+ },
69
+ )
70
+ client = Twitch::Bot::Client.new(
71
+ config: config,
72
+ channel: "testchannel",
73
+ )
74
+ mem = described_class.new(client: client)
75
+
76
+ mem.store("foo", { "bar" => "baz" })
77
+
78
+ result = mem.retrieve("foo")
79
+ expect(result).to be_a Hash
80
+ expect(result["bar"]).to eq "baz"
81
+ end
43
82
  end
44
83
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: twitch-bot
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.1.0
4
+ version: 5.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jochen Lillich
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-05 00:00:00.000000000 Z
11
+ date: 2022-06-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redis
@@ -174,7 +174,7 @@ extensions: []
174
174
  extra_rdoc_files: []
175
175
  files:
176
176
  - ".editorconfig"
177
- - ".env.dist"
177
+ - ".env.sample"
178
178
  - ".github/workflows/main.yml"
179
179
  - ".gitignore"
180
180
  - ".rspec"
@@ -221,7 +221,7 @@ homepage: https://github.com/geewiz/twitch-bot
221
221
  licenses:
222
222
  - MIT
223
223
  metadata: {}
224
- post_install_message:
224
+ post_install_message:
225
225
  rdoc_options: []
226
226
  require_paths:
227
227
  - lib
@@ -237,7 +237,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
237
237
  version: '0'
238
238
  requirements: []
239
239
  rubygems_version: 3.0.3
240
- signing_key:
240
+ signing_key:
241
241
  specification_version: 4
242
242
  summary: twitch-bot is a Twitch chat client that uses Twitch IRC that can be used
243
243
  as a Twitch chat bot engine.