twitch-bot 3.1.0 → 3.2.0

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: 38e0242c3bca6c9dbf21deab310f99435146e3e7be852ba50d26a489c81f2f24
4
- data.tar.gz: 17963e5b6af86dcd2892d20a80661f2a44afc46692375b207c2f55600664e5b3
3
+ metadata.gz: 7f73427a772e3b29804f8ef6066b2d4ea44259f0c095218a9e63b1caddae7dd3
4
+ data.tar.gz: 282e8a62f638085d855c1a6fca1717b314b0f5b3fe6671fb5e4c07fd32e4bf17
5
5
  SHA512:
6
- metadata.gz: 3d77d780322da5aeb3df98caa3991995be44e0b67c8510473fa66ccc533b8c3cfd0169dc1082726fcf4c7f26f324ac4086d3f6af300d933a47882263d5372203
7
- data.tar.gz: 4c1e4e6cbbde65ce58dc0683e43f6de1ebdeaa62582375304b554beaad604b8f69f95a6bfa3821490e6cdb03f1eb02b2b3d37972ea0eee7a4189803aa0661156
6
+ metadata.gz: 72e2a1d4d0292645703d1110109004d2b20b346decd30677432dc5d3890c39b5a869a9b2cc31774e9adf37ffbe4fcaf90ec1d7a6f1784756f032100603f0826c
7
+ data.tar.gz: 41e166ebb07600f9d667bee2c88599e0c51874b572b63a9e3ded8047f67fbe339e9be7e1b753df0a935ae251748a09b49891c6c65f4832976fa9a8e64718ee20
@@ -7,20 +7,27 @@ on:
7
7
  jobs:
8
8
  test:
9
9
  runs-on: ubuntu-latest
10
-
10
+ container: ruby:2.6
11
+ services:
12
+ redis:
13
+ image: redis
14
+ options: >-
15
+ --health-cmd "redis-cli ping"
16
+ --health-interval 10s
17
+ --health-timeout 5s
18
+ --health-retries 5
11
19
  steps:
12
20
  - uses: actions/checkout@v2
13
- - name: Set up Ruby
14
- uses: actions/setup-ruby@v1
15
- with:
16
- ruby-version: 2.6.x
17
21
  - name: Bundle
18
22
  run: |
19
23
  gem install bundler
20
24
  bundle install --jobs 4 --retry 3
21
- - name: Build and test
25
+ - name: Test
22
26
  run: |
23
27
  bundle exec rake test
28
+ env:
29
+ REDIS_HOST: redis
30
+ REDIS_PORT: 6379
24
31
 
25
32
  release:
26
33
  if: startsWith(github.ref, 'refs/tags/v')
@@ -28,7 +35,7 @@ jobs:
28
35
  runs-on: ubuntu-latest
29
36
  steps:
30
37
  - uses: actions/checkout@v2
31
- - name: Set up Ruby
38
+ - name: Setup
32
39
  uses: actions/setup-ruby@v1
33
40
  with:
34
41
  ruby-version: 2.6.x
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Changelog Twitch::Bot
2
2
 
3
+ ## v3.2.0
4
+
5
+ * [NEW] This release introduces a `Memory::Redis` class that allows users to provide their bot with a persistent memory storage.
6
+
3
7
  ## v3.1.0
4
8
 
5
9
  * [NEW] Client provides a persistent memory in form of a key/value store.
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # Twitch::Bot
2
2
 
3
+ ![](https://github.com/geewiz/twitch-bot/workflows/Ruby%20Gem/badge.svg)
4
+
3
5
  `twitch-bot` provides a Twitch chat client object that can be used for building Twitch chat bots.
4
6
 
5
7
  This gem is based on [`twitch-chat`](https://github.com/EnotPoloskun/twitch-chat).
@@ -0,0 +1,7 @@
1
+ version: "3"
2
+
3
+ services:
4
+ redis:
5
+ image: redis
6
+ ports:
7
+ - "6379:6379"
data/lib/twitch/bot.rb CHANGED
@@ -13,6 +13,7 @@ require_relative "bot/message"
13
13
  require_relative "bot/irc_message"
14
14
  require_relative "bot/message_parser"
15
15
  require_relative "bot/memory/hash"
16
+ require_relative "bot/memory/redis"
16
17
  require_relative "bot/channel"
17
18
  require_relative "bot/adapter/irc"
18
19
  require_relative "bot/adapter/terminal"
@@ -34,7 +34,7 @@ module Twitch
34
34
  setup_logging
35
35
 
36
36
  memory_class = config.setting("memory") || "Twitch::Bot::Memory::Hash"
37
- @memory = Object.const_get(memory_class).new
37
+ @memory = Object.const_get(memory_class).new(client: self)
38
38
 
39
39
  adapter_class = config.setting("adapter") || "Twitch::Bot::Adapter::Irc"
40
40
  @adapter = Object.const_get(adapter_class).new(client: self)
@@ -4,8 +4,10 @@ module Twitch
4
4
  module Bot
5
5
  # Manage a key/value store for our bot
6
6
  module Memory
7
+ # Implement an ephemeral memory using a Hash
7
8
  class Hash
8
- def initialize
9
+ def initialize(client:)
10
+ @client = client
9
11
  @kvstore = {}
10
12
  end
11
13
 
@@ -19,7 +21,7 @@ module Twitch
19
21
 
20
22
  private
21
23
 
22
- attr_reader :kvstore
24
+ attr_reader :client, :kvstore
23
25
  end
24
26
  end
25
27
  end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "redis"
4
+
5
+ module Twitch
6
+ module Bot
7
+ module Memory
8
+ # Implement persistent memory based on Redis
9
+ class Redis
10
+ def initialize(client:)
11
+ @client = client
12
+ @redis = connect_db
13
+ end
14
+
15
+ def store(key, value)
16
+ redis.set(key, value)
17
+ end
18
+
19
+ def retrieve(key)
20
+ redis.get(key)
21
+ end
22
+
23
+ private
24
+
25
+ attr_reader :client, :redis
26
+
27
+ def connect_db
28
+ config = client.config
29
+ host = config.setting("redis_host") ||
30
+ ENV["REDIS_HOST"] || "localhost"
31
+ port = config.setting("redis_port") ||
32
+ ENV["REDIS_PORT"] || 6379
33
+ ::Redis.new(host: host, port: port)
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Twitch
4
4
  module Bot
5
- VERSION = "3.1.0"
5
+ VERSION = "3.2.0"
6
6
  end
7
7
  end
@@ -14,7 +14,7 @@ RSpec.describe Twitch::Bot::Client do
14
14
  )
15
15
  end
16
16
 
17
- describe "#trigger" do
17
+ describe "#dispath" do
18
18
  it "responds to a Ping message" do
19
19
  ping_message_fake = Struct.new(:type, :hostname, :user)
20
20
  message = ping_message_fake.new(:ping, "test.twitch", nil)
@@ -3,7 +3,7 @@
3
3
  RSpec.describe Twitch::Bot::Memory::Hash do
4
4
  describe "#store" do
5
5
  it "persists a value for a key" do
6
- mem = described_class.new
6
+ mem = described_class.new(client: nil)
7
7
 
8
8
  mem.store("foo", "bar")
9
9
 
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Twitch::Bot::Memory::Redis do
4
+ describe "#store" do
5
+ it "persists a value for a key" do
6
+ config = Twitch::Bot::Config.new(
7
+ settings: {
8
+ bot_user: "testuser",
9
+ },
10
+ )
11
+ client = Twitch::Bot::Client.new(
12
+ config: config,
13
+ channel: "testchannel",
14
+ )
15
+ mem = described_class.new(client: client)
16
+
17
+ mem.store("foo", "bar")
18
+
19
+ expect(mem.retrieve("foo")).to eq "bar"
20
+ end
21
+ end
22
+ end
data/twitch-bot.gemspec CHANGED
@@ -22,6 +22,8 @@ Gem::Specification.new do |spec|
22
22
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
23
23
  spec.require_paths = ["lib"]
24
24
 
25
+ spec.add_dependency "redis", "~> 4.1"
26
+
25
27
  spec.add_development_dependency "bundler", "~> 2.0"
26
28
  spec.add_development_dependency "freistil-rubocop"
27
29
  spec.add_development_dependency "guard", "~> 2.16"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: twitch-bot
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.0
4
+ version: 3.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jochen Lillich
@@ -10,6 +10,20 @@ bindir: bin
10
10
  cert_chain: []
11
11
  date: 2020-04-24 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: redis
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '4.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '4.1'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -187,6 +201,7 @@ files:
187
201
  - LICENSE.txt
188
202
  - README.md
189
203
  - Rakefile
204
+ - docker-compose.yml
190
205
  - lib/twitch/bot.rb
191
206
  - lib/twitch/bot/adapter/irc.rb
192
207
  - lib/twitch/bot/adapter/terminal.rb
@@ -199,6 +214,7 @@ files:
199
214
  - lib/twitch/bot/irc_message.rb
200
215
  - lib/twitch/bot/logger.rb
201
216
  - lib/twitch/bot/memory/hash.rb
217
+ - lib/twitch/bot/memory/redis.rb
202
218
  - lib/twitch/bot/message.rb
203
219
  - lib/twitch/bot/message/user_message.rb
204
220
  - lib/twitch/bot/message_parser.rb
@@ -207,6 +223,7 @@ files:
207
223
  - spec/twitch/bot/client_spec.rb
208
224
  - spec/twitch/bot/config_spec.rb
209
225
  - spec/twitch/bot/memory/hash_spec.rb
226
+ - spec/twitch/bot/memory/redis_spec.rb
210
227
  - spec/twitch/bot/message/user_message_spec.rb
211
228
  - spec/twitch/bot/message_parser_spec.rb
212
229
  - twitch-bot.gemspec
@@ -239,5 +256,6 @@ test_files:
239
256
  - spec/twitch/bot/client_spec.rb
240
257
  - spec/twitch/bot/config_spec.rb
241
258
  - spec/twitch/bot/memory/hash_spec.rb
259
+ - spec/twitch/bot/memory/redis_spec.rb
242
260
  - spec/twitch/bot/message/user_message_spec.rb
243
261
  - spec/twitch/bot/message_parser_spec.rb