twitchbot 0.0.2 → 0.0.3
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 +4 -4
- data/lib/twitchbot.rb +1 -0
- data/lib/twitchbot/event_handler.rb +1 -1
- data/lib/twitchbot/message.rb +33 -10
- data/lib/twitchbot/message_plugin.rb +2 -1
- data/lib/twitchbot/user.rb +17 -15
- data/lib/twitchbot/version.rb +1 -1
- data/lib/twitchbot/whisper_plugin.rb +48 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4d0c016d500046220ef061dc024c9a98f201c59cc89e9536f09752b3f82df330
|
4
|
+
data.tar.gz: c1228859476211eaf4f8d4b4ac099fd56e21c181474c3a557a68b3daf6790c79
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7f7cbee9b6ed3575acc0e9d77b0dbb40c426e6529f9cb829c41bea583793c00d085e26fc399f72c284bb61dea7a166f17be1ca39acff8cca1baaf3745a781010
|
7
|
+
data.tar.gz: a93d6c30bc1d1630b96cf1a92bcbd34d79f5432a868306d08ab9c9e17779496f746bdf01e90783aeccd3eeaef4fc11e545fdcf215629609448c77ce7dd744219
|
data/lib/twitchbot.rb
CHANGED
@@ -36,7 +36,7 @@ module Twitchbot
|
|
36
36
|
|
37
37
|
# Add a whisper to the specified user to the message queue
|
38
38
|
def send_whisper(user, message)
|
39
|
-
@bot.message_queue.push("PRIVMSG jtv :/w #{user}
|
39
|
+
@bot.message_queue.push("PRIVMSG #jtv :/w #{user} #{message}")
|
40
40
|
end
|
41
41
|
|
42
42
|
# Method that provides a shortcut to grab the first message in an event
|
data/lib/twitchbot/message.rb
CHANGED
@@ -36,23 +36,26 @@ module Twitchbot
|
|
36
36
|
@target = target
|
37
37
|
@payload = payload
|
38
38
|
|
39
|
-
if message?
|
39
|
+
if message? || whisper?
|
40
40
|
@payload.slice! 0, 1
|
41
41
|
@channel = @handler.bot.channel
|
42
|
-
/
|
43
|
-
@
|
44
|
-
/display-name=(?<display_name>\w+)/ =~ @tags
|
45
|
-
/user-id=(?<user_id>[a-zA-Z0-9\-]+)/ =~ @tags
|
46
|
-
/badges=(?<badges>[a-zA-Z\/,0-9\-]+)/ =~ @tags
|
47
|
-
badges = badges || ''
|
42
|
+
@display_name = @tags[/display-name=(\w+)/, 1]
|
43
|
+
@user_id = @tags[/user-id=(?<user_id>\d+)/, 1]
|
48
44
|
/:(?<user>\w+)/ =~ @sender
|
49
45
|
if @channel.users.key? user
|
50
|
-
@channel.users[user].update_attributes display_name, user_id
|
46
|
+
@channel.users[user].update_attributes @display_name, @user_id
|
51
47
|
else
|
52
|
-
@channel.users[user] = User.new user, display_name, user_id
|
48
|
+
@channel.users[user] = User.new user, @display_name, @user_id
|
53
49
|
end
|
54
50
|
@user = @channel.users[user]
|
55
51
|
end
|
52
|
+
|
53
|
+
if message?
|
54
|
+
/bits=(?<bits>\d+)/ =~ @tags
|
55
|
+
@bits = bits.nil? ? 0 : bits.to_i
|
56
|
+
/badges=(?<badges>[a-zA-Z\/,0-9\-]+)/ =~ @tags
|
57
|
+
@user.update_badges badges || ''
|
58
|
+
end
|
56
59
|
end
|
57
60
|
|
58
61
|
# Method to determine if the IRC message includes any tags from the +:twitch.tv/tags+ capability
|
@@ -65,9 +68,29 @@ module Twitchbot
|
|
65
68
|
@command.eql? 'PRIVMSG'.freeze
|
66
69
|
end
|
67
70
|
|
71
|
+
# Method to determine if the IRC message is a whisper to the bot
|
72
|
+
def whisper?
|
73
|
+
@command.eql? 'WHISPER'.freeze
|
74
|
+
end
|
75
|
+
|
68
76
|
# Method to respond to the IRC message target with a private message
|
69
77
|
def respond(message)
|
70
|
-
|
78
|
+
if message?
|
79
|
+
send_channel message
|
80
|
+
end
|
81
|
+
if whisper?
|
82
|
+
send_whisper @user, message
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
# Method to send a message to the joined [Channel]
|
87
|
+
def send_channel(message)
|
88
|
+
@handler.send_channel message
|
89
|
+
end
|
90
|
+
|
91
|
+
# Method to send a whisper to the specified [User]
|
92
|
+
def send_whisper(user, message)
|
93
|
+
@handler.send_whisper user, message
|
71
94
|
end
|
72
95
|
|
73
96
|
# Method to determine if the IRC message is a PING challenge
|
@@ -9,6 +9,7 @@ module Twitchbot
|
|
9
9
|
def message(handler)
|
10
10
|
handler.messages.each do |message|
|
11
11
|
if message.message?
|
12
|
+
# TODO: Extract this block from WhisperPlugin and MessagePlugin
|
12
13
|
prefix = handler.bot.command_prefix
|
13
14
|
_, _command, arguments = message.payload.partition(
|
14
15
|
/#{Regexp.escape prefix}\S+/
|
@@ -16,7 +17,7 @@ module Twitchbot
|
|
16
17
|
command = _command.delete prefix
|
17
18
|
commands = COMMANDS[self.class]
|
18
19
|
if !command.nil? && !commands[command].nil?
|
19
|
-
send(commands[command], message, arguments)
|
20
|
+
send(commands[command], message, arguments.lstrip)
|
20
21
|
end
|
21
22
|
end
|
22
23
|
end
|
data/lib/twitchbot/user.rb
CHANGED
@@ -8,18 +8,26 @@ module Twitchbot
|
|
8
8
|
# @return [Hash] Collection of known badges for the user
|
9
9
|
attr_reader :badges
|
10
10
|
|
11
|
-
def initialize(name, display_name = nil, id = nil
|
11
|
+
def initialize(name, display_name = nil, id = nil)
|
12
12
|
@name = name
|
13
13
|
@display_name = display_name
|
14
14
|
@id = id
|
15
|
-
@badges = badges.nil? ? nil : process_badges(badges)
|
16
15
|
end
|
17
16
|
|
18
17
|
# Method to update the main attributes of a user
|
19
|
-
def update_attributes(display_name, id
|
18
|
+
def update_attributes(display_name, id)
|
20
19
|
@display_name = display_name
|
21
20
|
@user_id = id
|
22
|
-
|
21
|
+
end
|
22
|
+
|
23
|
+
# Method to process the string representation of badges into a Hash so that
|
24
|
+
# we can query it for specific badges and levels of the badges
|
25
|
+
def update_badges(badge)
|
26
|
+
@badges = {}
|
27
|
+
badge.split(',').each do |_badge|
|
28
|
+
type, value = _badge.split '/'
|
29
|
+
@badges[type] = value.to_i
|
30
|
+
end
|
23
31
|
end
|
24
32
|
|
25
33
|
# Method to grab the best representation of a user
|
@@ -27,6 +35,11 @@ module Twitchbot
|
|
27
35
|
@display_name || @name
|
28
36
|
end
|
29
37
|
|
38
|
+
# Method to determine if the user is the broadcaster of the channel
|
39
|
+
def streamer?
|
40
|
+
@badges.key? 'broadcaster'
|
41
|
+
end
|
42
|
+
|
30
43
|
# Method to determine if the user is a moderator of the channel
|
31
44
|
def mod?
|
32
45
|
@badges.key? 'moderator'
|
@@ -62,17 +75,6 @@ module Twitchbot
|
|
62
75
|
@badges.key? 'bits-leader'
|
63
76
|
end
|
64
77
|
|
65
|
-
# Method to process the string representation of badges into a Hash so that
|
66
|
-
# we can query it for specific badges and levels of the badges
|
67
|
-
def process_badges(badges)
|
68
|
-
badge = {}
|
69
|
-
badges.split(',').each do |_badge|
|
70
|
-
type, value = _badge.split '/'
|
71
|
-
badge[type] = value.to_i
|
72
|
-
end
|
73
|
-
badge
|
74
|
-
end
|
75
|
-
|
76
78
|
def to_s
|
77
79
|
name
|
78
80
|
end
|
data/lib/twitchbot/version.rb
CHANGED
@@ -0,0 +1,48 @@
|
|
1
|
+
module Twitchbot
|
2
|
+
module WhisperPlugin
|
3
|
+
|
4
|
+
COMMANDS = {}
|
5
|
+
|
6
|
+
# Method that can be overriden to react to the eventmachine +:open+ event
|
7
|
+
def open(handler) end
|
8
|
+
|
9
|
+
def message(handler)
|
10
|
+
handler.messages.each do |message|
|
11
|
+
if message.whisper?
|
12
|
+
# TODO: Extract this block from WhisperPlugin and MessagePlugin
|
13
|
+
prefix = handler.bot.command_prefix
|
14
|
+
_, _command, arguments = message.payload.partition(
|
15
|
+
/#{Regexp.escape prefix}\S+/
|
16
|
+
)
|
17
|
+
command = _command.delete prefix
|
18
|
+
commands = COMMANDS[self.class]
|
19
|
+
if !command.nil? && !commands[command].nil?
|
20
|
+
send(commands[command], message, arguments.lstrip)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# Method that can be overriden to react to the eventmachine +:error+ event
|
27
|
+
def error(handler) end
|
28
|
+
|
29
|
+
# Method that can be overriden to react to the eventmachine +:close+ event
|
30
|
+
def close(handler) end
|
31
|
+
|
32
|
+
# Define a class method called register on each class that includes this
|
33
|
+
# module, which allows the user to add methods to the +COMMANDS+ constant
|
34
|
+
#
|
35
|
+
# def self.register(command:, method:)
|
36
|
+
# COMMANDS[base] = {} if COMMANDS[base].nil?
|
37
|
+
# COMMANDS[base][params[:command]] = params[:method]
|
38
|
+
# end
|
39
|
+
def self.included(klass)
|
40
|
+
klass.instance_eval do
|
41
|
+
define_singleton_method 'register' do |params|
|
42
|
+
COMMANDS[klass] = {} if COMMANDS[klass].nil?
|
43
|
+
COMMANDS[klass][params[:command]] = params[:method]
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: twitchbot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Charles Ray Shisler III
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-11-
|
11
|
+
date: 2019-11-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -106,6 +106,7 @@ files:
|
|
106
106
|
- lib/twitchbot/timed_plugin.rb
|
107
107
|
- lib/twitchbot/user.rb
|
108
108
|
- lib/twitchbot/version.rb
|
109
|
+
- lib/twitchbot/whisper_plugin.rb
|
109
110
|
homepage: https://github.com/craysiii/twitchbot
|
110
111
|
licenses:
|
111
112
|
- MIT
|