elephrame 0.4.1 → 0.4.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 +4 -4
- data/Gemfile.lock +2 -2
- data/README.md +2 -1
- data/elephrame.gemspec +2 -3
- data/lib/elephrame/bot.rb +3 -3
- data/lib/elephrame/streaming/bots.rb +1 -5
- data/lib/elephrame/streaming/command.rb +108 -0
- data/lib/elephrame/streaming/interaction.rb +61 -0
- data/lib/elephrame/streaming/reply.rb +93 -0
- data/lib/elephrame/streaming/streaming.rb +4 -237
- data/lib/elephrame/version.rb +1 -1
- metadata +8 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 443a61168b9ae56b414840dc0390ede87a9f8c5ea8b6a1c2cdac99ee6d69801e
|
4
|
+
data.tar.gz: 174eca80ecec2f12d20de89963bc1ae7db831fa58912d202e730d5c7717011e9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6e5d3401b5b81ea38c65f568bea40e95717db38d3fc228cebbd6aec97281341300945ede38bcacacd26b5dcbd049478f4c2515a8da7d51eefbff04da658de84c
|
7
|
+
data.tar.gz: 81c1877dd775d094ff19497d17f770f2eac003f39980557062d9a664c2ba62a5f600625108ba214bc4187207fdbaf0a0d3cbe39575aea968921ef10f6127c4b1
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
elephrame (0.4.
|
4
|
+
elephrame (0.4.2)
|
5
5
|
moostodon (~> 0.2.0)
|
6
6
|
rufus-scheduler
|
7
7
|
|
@@ -33,7 +33,7 @@ GEM
|
|
33
33
|
buftok (~> 0)
|
34
34
|
http (~> 3.0)
|
35
35
|
oj (~> 3.3)
|
36
|
-
oj (3.7
|
36
|
+
oj (3.6.7)
|
37
37
|
public_suffix (3.0.3)
|
38
38
|
raabro (1.1.6)
|
39
39
|
rake (10.5.0)
|
data/README.md
CHANGED
@@ -69,7 +69,8 @@ Exposed methods from bot object:
|
|
69
69
|
- `max_retries` (defaults to 5) the maximum amount of times the framework will retry a mastodon request
|
70
70
|
- `failed` a hash that represents the status of the last post or media upload. `failed[:post]` and `failed[:media]`; returns true if it failed, false if it succeeded
|
71
71
|
- `post(content, visibility: 'unlisted', spoiler: '', reply_id: '', hide_media: false, media: [])` this provides an easy way to post statuses from inside code blocks
|
72
|
-
- `reply(content, *options)` a shorthand method to reply to the last mention (Note:
|
72
|
+
- `reply(content, *options)` a shorthand method to reply to the last mention (Note: only include the @ for the user who @ed the bot)
|
73
|
+
- `reply_with_mentions(content, *options)` similar to `reply` but includes all @s (respects #NoBot)
|
73
74
|
- `find_ancestor(id, depth = 10, stop_at = 1)` looks backwards through reply chains for the most recent post the bot made starting at post `id` until it hits `depth` number of posts, or finds `stop_at` number of it's own posts
|
74
75
|
- `no_bot?(account_id)` returns true if user with `account_id` has some form of "#NoBot" in their bio
|
75
76
|
|
data/elephrame.gemspec
CHANGED
@@ -20,6 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.metadata["homepage_uri"] = spec.homepage
|
22
22
|
spec.metadata["source_code_uri"] = spec.homepage
|
23
|
+
spec.metadata["changelog_uri"] = "https://github.com/theZacAttacks/elephrame/releases"
|
23
24
|
else
|
24
25
|
raise "RubyGems 2.0 or newer is required to protect against " \
|
25
26
|
"public gem pushes."
|
@@ -34,13 +35,11 @@ Gem::Specification.new do |spec|
|
|
34
35
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
35
36
|
spec.require_paths = ["lib"]
|
36
37
|
|
38
|
+
spec.required_ruby_version = '~> 2.0'
|
37
39
|
spec.add_development_dependency "bundler", "~> 1.17"
|
38
40
|
spec.add_development_dependency "rake", "~> 10.0"
|
39
41
|
spec.add_development_dependency "minitest", "~> 5.0"
|
40
42
|
|
41
43
|
spec.add_dependency 'rufus-scheduler'
|
42
44
|
spec.add_dependency 'moostodon', '~> 0.2.0'
|
43
|
-
|
44
|
-
# until mastodon-api gets a bump this stays commented out
|
45
|
-
#spec.add_dependency 'mastodon-api', '> 1.1.0'
|
46
45
|
end
|
data/lib/elephrame/bot.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'time'
|
2
1
|
require 'net/http'
|
3
2
|
|
4
3
|
module Elephrame
|
@@ -6,7 +5,7 @@ module Elephrame
|
|
6
5
|
|
7
6
|
##
|
8
7
|
# a superclass for other bots
|
9
|
-
# holds common
|
8
|
+
# holds common methods and variables
|
10
9
|
|
11
10
|
class BaseBot
|
12
11
|
attr_reader :client, :username, :failed
|
@@ -115,7 +114,8 @@ module Elephrame
|
|
115
114
|
block.call
|
116
115
|
return false
|
117
116
|
rescue HTTP::TimeoutError
|
118
|
-
puts "caught HTTP Timeout error
|
117
|
+
puts "caught HTTP Timeout error; retrying #{@max_retries-i} more times"
|
118
|
+
sleep 5
|
119
119
|
end
|
120
120
|
end
|
121
121
|
return true
|
@@ -0,0 +1,108 @@
|
|
1
|
+
module Elephrame
|
2
|
+
module Command
|
3
|
+
include Elephrame::Reply
|
4
|
+
|
5
|
+
attr_reader :commands, :prefix
|
6
|
+
attr :cmd_hash, :cmd_regex, :not_found
|
7
|
+
|
8
|
+
##
|
9
|
+
# Initializes the +commands+ array, +cmd_hash+
|
10
|
+
#
|
11
|
+
# @param prefix [String] sets the command prefix, defaults to '!'
|
12
|
+
# @param usage [String] the response to the help command
|
13
|
+
#
|
14
|
+
|
15
|
+
def setup_command(prefix = '!', usage = nil)
|
16
|
+
@commands = []
|
17
|
+
@cmd_hash = {}
|
18
|
+
|
19
|
+
set_prefix prefix
|
20
|
+
set_help usage unless usage.nil?
|
21
|
+
end
|
22
|
+
|
23
|
+
##
|
24
|
+
# sets the prefix for commands
|
25
|
+
#
|
26
|
+
# @param pf [String] the prefix
|
27
|
+
|
28
|
+
def set_prefix pf
|
29
|
+
@prefix = pf
|
30
|
+
end
|
31
|
+
|
32
|
+
##
|
33
|
+
# Shortcut method to provide usage docs in response to help command
|
34
|
+
#
|
35
|
+
# @param usage [String]
|
36
|
+
|
37
|
+
def set_help usage
|
38
|
+
add_command 'help' do |bot, content, status|
|
39
|
+
bot.reply("#{usage}")
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
##
|
44
|
+
# Adds the command and block into the bot to process later
|
45
|
+
# also sets up the command regex
|
46
|
+
#
|
47
|
+
# @param cmd [String] a command to add
|
48
|
+
# @param block [Proc] the code to execute when +cmd+ is recieved
|
49
|
+
|
50
|
+
def add_command cmd, &block
|
51
|
+
@commands.append cmd unless @commands.include? cmd
|
52
|
+
@cmd_hash[cmd.to_sym] = block
|
53
|
+
|
54
|
+
# build up our regex (this regex should be fine, i guess :shrug:)
|
55
|
+
@cmd_regex = /\A#{@prefix}(?<cmd>#{@commands.join('|')})\b(?<data>.*)/m
|
56
|
+
end
|
57
|
+
|
58
|
+
##
|
59
|
+
# What to do if we don't match anything
|
60
|
+
#
|
61
|
+
# @param block [Proc] a block to run when we don't match a command
|
62
|
+
|
63
|
+
def if_not_found &block
|
64
|
+
@not_found = block
|
65
|
+
end
|
66
|
+
|
67
|
+
##
|
68
|
+
# Starts loop to process any mentions, running command procs set up earlier
|
69
|
+
#
|
70
|
+
# If a block is passed to this function it gets ran when no commands
|
71
|
+
# get matched. Otherwise the framework checks if +not_found+ exists
|
72
|
+
# and runs it
|
73
|
+
|
74
|
+
def run_commands
|
75
|
+
@streamer.user do |update|
|
76
|
+
next unless update.kind_of? Mastodon::Notification and update.type == 'mention'
|
77
|
+
|
78
|
+
# set up the status to strip html, if needed
|
79
|
+
update.status.class
|
80
|
+
.module_eval { alias_method :content, :strip } if @strip_html
|
81
|
+
store_mention_data update.status
|
82
|
+
|
83
|
+
# strip our username out of the status
|
84
|
+
post = update.status.content.gsub(/@#{@username} /, '')
|
85
|
+
|
86
|
+
# see if the post matches our regex, running the stored proc if it does
|
87
|
+
matches = @cmd_regex.match(post)
|
88
|
+
|
89
|
+
unless matches.nil?
|
90
|
+
@cmd_hash[matches[:cmd].to_sym]
|
91
|
+
.call(self,
|
92
|
+
matches[:data].strip,
|
93
|
+
update.status)
|
94
|
+
else
|
95
|
+
|
96
|
+
if block_given?
|
97
|
+
yield(self, update.status)
|
98
|
+
else
|
99
|
+
@not_found.call(self, update.status) unless @not_found.nil?
|
100
|
+
end
|
101
|
+
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
alias_method :run, :run_commands
|
107
|
+
end
|
108
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module Elephrame
|
2
|
+
module AllInteractions
|
3
|
+
include Elephrame::Reply
|
4
|
+
attr :on_fave, :on_boost, :on_follow
|
5
|
+
|
6
|
+
##
|
7
|
+
# Sets on_fave equal to +block+
|
8
|
+
|
9
|
+
def on_fave &block
|
10
|
+
@on_fave = block
|
11
|
+
end
|
12
|
+
|
13
|
+
##
|
14
|
+
# Sets on_boost to +block+
|
15
|
+
|
16
|
+
def on_boost &block
|
17
|
+
@on_boost = block
|
18
|
+
end
|
19
|
+
|
20
|
+
##
|
21
|
+
# Sets on_follow to +block+
|
22
|
+
|
23
|
+
def on_follow &block
|
24
|
+
@on_follow = block
|
25
|
+
end
|
26
|
+
|
27
|
+
##
|
28
|
+
# Starts a loop that checks for any notifications for the authenticated
|
29
|
+
# user, running the appropriate stored proc when needed
|
30
|
+
|
31
|
+
def run_interact
|
32
|
+
@streamer.user do |update|
|
33
|
+
if update.kind_of? Mastodon::Notification
|
34
|
+
|
35
|
+
case update.type
|
36
|
+
|
37
|
+
when 'mention'
|
38
|
+
|
39
|
+
# this makes it so .content calls strip instead
|
40
|
+
update.status.class.module_eval { alias_method :content, :strip } if @strip_html
|
41
|
+
store_mention_data update.status
|
42
|
+
@on_reply.call(self, update.status) unless @on_reply.nil?
|
43
|
+
|
44
|
+
when 'reblog'
|
45
|
+
@on_boost.call(self, update) unless @on_boost.nil?
|
46
|
+
|
47
|
+
when 'favourite'
|
48
|
+
@on_fave.call(self, update) unless @on_fave.nil?
|
49
|
+
|
50
|
+
when 'follow'
|
51
|
+
@on_follow.call(self, update) unless @on_follow.nil?
|
52
|
+
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
|
59
|
+
alias_method :run, :run_interact
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
module Elephrame
|
2
|
+
module Reply
|
3
|
+
attr :on_reply, :mention_data
|
4
|
+
|
5
|
+
##
|
6
|
+
# Sets on_reply equal to +block+
|
7
|
+
|
8
|
+
def on_reply &block
|
9
|
+
@on_reply = block
|
10
|
+
end
|
11
|
+
|
12
|
+
##
|
13
|
+
# Replies to the last mention the bot recieved using the mention's
|
14
|
+
# visibility and spoiler with +text+
|
15
|
+
#
|
16
|
+
# Automatically includes an @ for the account that mentioned the bot.
|
17
|
+
# Does not include any other @. See +reply_with_mentions+ if you want
|
18
|
+
# to automatically include all mentions
|
19
|
+
#
|
20
|
+
# @param text [String] text to post as a reply
|
21
|
+
# @param options [Hash] a hash of arguments to pass to post, overrides
|
22
|
+
# duplicating settings from last mention
|
23
|
+
|
24
|
+
def reply(text, *options)
|
25
|
+
options = Hash[*options]
|
26
|
+
|
27
|
+
post("@#{@mention_data[:account].acct} #{text}",
|
28
|
+
**@mention_data.merge(options).reject { |k|
|
29
|
+
k == :mentions or k == :account
|
30
|
+
})
|
31
|
+
end
|
32
|
+
|
33
|
+
##
|
34
|
+
# Replies to the last post and tags everyone who was mentioned
|
35
|
+
# (this function respects #NoBot)
|
36
|
+
#
|
37
|
+
# @param text [String] text to post as a reply
|
38
|
+
# @param options [Hash] arguments to pass to post, overrides settings from
|
39
|
+
# last mention
|
40
|
+
|
41
|
+
def reply_with_mentions(text, *options)
|
42
|
+
# build up a string of all accounts mentioned in the post
|
43
|
+
# unless that account is our own, or the tagged account
|
44
|
+
# has #NoBot
|
45
|
+
mentions = @mention_data[:mentions].collect do |m|
|
46
|
+
"@#{m.acct}" unless m.acct == @username or no_bot? m.id
|
47
|
+
end.join ' '
|
48
|
+
|
49
|
+
reply("#{mentions.strip} #{text}", *options)
|
50
|
+
end
|
51
|
+
|
52
|
+
##
|
53
|
+
# Starts a loop that checks for mentions from the authenticated user account
|
54
|
+
# running a supplied block or, if a block is not provided, on_reply
|
55
|
+
|
56
|
+
def run_reply
|
57
|
+
@streamer.user do |update|
|
58
|
+
next unless update.kind_of? Mastodon::Notification and update.type == 'mention'
|
59
|
+
|
60
|
+
# this makes it so .content calls strip instead
|
61
|
+
update.status.class.module_eval { alias_method :content, :strip } if @strip_html
|
62
|
+
|
63
|
+
store_mention_data update.status
|
64
|
+
|
65
|
+
if block_given?
|
66
|
+
yield(self, update.status)
|
67
|
+
else
|
68
|
+
@on_reply.call(self, update.status)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
alias_method :run, :run_reply
|
74
|
+
|
75
|
+
private
|
76
|
+
|
77
|
+
##
|
78
|
+
# Stores select data about a post into a hash for later use
|
79
|
+
#
|
80
|
+
# @param mention [Mastodon::Status] the most recent mention the bot received
|
81
|
+
|
82
|
+
def store_mention_data(mention)
|
83
|
+
@mention_data = {
|
84
|
+
reply_id: mention.id,
|
85
|
+
visibility: mention.visibility,
|
86
|
+
spoiler: mention.spoiler_text,
|
87
|
+
hide_media: mention.sensitive?,
|
88
|
+
mentions: mention.mentions,
|
89
|
+
account: mention.account
|
90
|
+
}
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -1,3 +1,7 @@
|
|
1
|
+
require_relative 'reply'
|
2
|
+
require_relative 'command'
|
3
|
+
require_relative 'interaction'
|
4
|
+
|
1
5
|
module Elephrame
|
2
6
|
module Streaming
|
3
7
|
attr :streamer
|
@@ -11,241 +15,4 @@ module Elephrame
|
|
11
15
|
end
|
12
16
|
|
13
17
|
end
|
14
|
-
|
15
|
-
|
16
|
-
module Reply
|
17
|
-
attr :on_reply, :mention_data
|
18
|
-
|
19
|
-
##
|
20
|
-
# Sets on_reply equal to +block+
|
21
|
-
|
22
|
-
def on_reply &block
|
23
|
-
@on_reply = block
|
24
|
-
end
|
25
|
-
|
26
|
-
##
|
27
|
-
# Replies to the last mention the bot recieved using the mention's
|
28
|
-
# visibility and spoiler with +text+
|
29
|
-
#
|
30
|
-
# Automatically includes an @ for the account that mentioned the bot.
|
31
|
-
# Does not include any other @. See +reply_with_mentions+ if you want
|
32
|
-
# to automatically include all mentions
|
33
|
-
#
|
34
|
-
# @param text [String] text to post as a reply
|
35
|
-
# @param options [Hash] a hash of arguments to pass to post, overrides
|
36
|
-
# duplicating settings from last mention
|
37
|
-
|
38
|
-
def reply(text, *options)
|
39
|
-
options = Hash[*options]
|
40
|
-
|
41
|
-
post("@#{@mention_data[:account].acct} #{text}",
|
42
|
-
**@mention_data.merge(options).reject { |k|
|
43
|
-
k == :mentions or k == :account
|
44
|
-
})
|
45
|
-
end
|
46
|
-
|
47
|
-
##
|
48
|
-
# Replies to the last post and tags everyone who was mentioned
|
49
|
-
# (this function respects #NoBot)
|
50
|
-
#
|
51
|
-
# @param text [String] text to post as a reply
|
52
|
-
# @param options [Hash] arguments to pass to post, overrides settings from
|
53
|
-
# last mention
|
54
|
-
|
55
|
-
def reply_with_mentions(text, *options)
|
56
|
-
# build up a string of all accounts mentioned in the post
|
57
|
-
# unless that account is our own, or the tagged account
|
58
|
-
# has #NoBot
|
59
|
-
mentions = @mention_data[:mentions].collect do |m|
|
60
|
-
"@#{m.acct}" unless m.acct == @username or no_bot? m.id
|
61
|
-
end.join ' '
|
62
|
-
|
63
|
-
reply("#{mentions.strip} #{text}", *options)
|
64
|
-
end
|
65
|
-
|
66
|
-
##
|
67
|
-
# Starts a loop that checks for mentions from the authenticated user account
|
68
|
-
# running a supplied block or, if a block is not provided, on_reply
|
69
|
-
|
70
|
-
def run_reply
|
71
|
-
@streamer.user do |update|
|
72
|
-
next unless update.kind_of? Mastodon::Notification and update.type == 'mention'
|
73
|
-
|
74
|
-
# this makes it so .content calls strip instead
|
75
|
-
update.status.class.module_eval { alias_method :content, :strip } if @strip_html
|
76
|
-
|
77
|
-
store_mention_data update.status
|
78
|
-
|
79
|
-
if block_given?
|
80
|
-
yield(self, update.status)
|
81
|
-
else
|
82
|
-
@on_reply.call(self, update.status)
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
alias_method :run, :run_reply
|
88
|
-
|
89
|
-
private
|
90
|
-
|
91
|
-
##
|
92
|
-
# Stores select data about a post into a hash for later use
|
93
|
-
#
|
94
|
-
# @param mention [Mastodon::Status] the most recent mention the bot received
|
95
|
-
|
96
|
-
def store_mention_data(mention)
|
97
|
-
@mention_data = {
|
98
|
-
reply_id: mention.id,
|
99
|
-
visibility: mention.visibility,
|
100
|
-
spoiler: mention.spoiler_text,
|
101
|
-
hide_media: mention.sensitive?,
|
102
|
-
mentions: mention.mentions,
|
103
|
-
account: mention.account
|
104
|
-
}
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
|
109
|
-
module AllInteractions
|
110
|
-
include Elephrame::Reply
|
111
|
-
attr :on_fave, :on_boost, :on_follow
|
112
|
-
|
113
|
-
##
|
114
|
-
# Sets on_fave equal to +block+
|
115
|
-
|
116
|
-
def on_fave &block
|
117
|
-
@on_fave = block
|
118
|
-
end
|
119
|
-
|
120
|
-
##
|
121
|
-
# Sets on_boost to +block+
|
122
|
-
|
123
|
-
def on_boost &block
|
124
|
-
@on_boost = block
|
125
|
-
end
|
126
|
-
|
127
|
-
##
|
128
|
-
# Sets on_follow to +block+
|
129
|
-
|
130
|
-
def on_follow &block
|
131
|
-
@on_follow = block
|
132
|
-
end
|
133
|
-
|
134
|
-
##
|
135
|
-
# Starts a loop that checks for any notifications for the authenticated
|
136
|
-
# user, running the appropriate stored proc when needed
|
137
|
-
|
138
|
-
def run_interact
|
139
|
-
@streamer.user do |update|
|
140
|
-
if update.kind_of? Mastodon::Notification
|
141
|
-
|
142
|
-
case update.type
|
143
|
-
|
144
|
-
when 'mention'
|
145
|
-
|
146
|
-
# this makes it so .content calls strip instead
|
147
|
-
update.status.class.module_eval { alias_method :content, :strip } if @strip_html
|
148
|
-
store_mention_data update.status
|
149
|
-
@on_reply.call(self, update.status) unless @on_reply.nil?
|
150
|
-
|
151
|
-
when 'reblog'
|
152
|
-
@on_boost.call(self, update) unless @on_boost.nil?
|
153
|
-
|
154
|
-
when 'favourite'
|
155
|
-
@on_fave.call(self, update) unless @on_fave.nil?
|
156
|
-
|
157
|
-
when 'follow'
|
158
|
-
@on_follow.call(self, update) unless @on_follow.nil?
|
159
|
-
|
160
|
-
end
|
161
|
-
end
|
162
|
-
end
|
163
|
-
end
|
164
|
-
|
165
|
-
|
166
|
-
alias_method :run, :run_interact
|
167
|
-
end
|
168
|
-
|
169
|
-
|
170
|
-
module Command
|
171
|
-
include Elephrame::Reply
|
172
|
-
|
173
|
-
attr_reader :commands, :prefix
|
174
|
-
attr :cmd_hash, :cmd_regex, :not_found
|
175
|
-
|
176
|
-
##
|
177
|
-
# sets the prefix for commands
|
178
|
-
#
|
179
|
-
# @param pf [String] the prefix
|
180
|
-
|
181
|
-
def set_prefix pf
|
182
|
-
@prefix = pf
|
183
|
-
end
|
184
|
-
|
185
|
-
##
|
186
|
-
# Shortcut method to provide usage docs in response to help command
|
187
|
-
#
|
188
|
-
# @param usage [String]
|
189
|
-
|
190
|
-
def set_help usage
|
191
|
-
add_command 'help' do |bot, content, status|
|
192
|
-
bot.reply("#{usage}")
|
193
|
-
end
|
194
|
-
end
|
195
|
-
|
196
|
-
##
|
197
|
-
# Adds the command and block into the bot to process later
|
198
|
-
# also sets up the command regex
|
199
|
-
#
|
200
|
-
# @param cmd [String] a command to add
|
201
|
-
# @param block [Proc] the code to execute when +cmd+ is recieved
|
202
|
-
|
203
|
-
def add_command cmd, &block
|
204
|
-
@commands.append cmd unless @commands.include? cmd
|
205
|
-
@cmd_hash[cmd.to_sym] = block
|
206
|
-
|
207
|
-
# build up our regex (this regex should be fine, i guess :shrug:)
|
208
|
-
@cmd_regex = /\A#{@prefix}(?<cmd>#{@commands.join('|')})\b(?<data>.*)/m
|
209
|
-
end
|
210
|
-
|
211
|
-
##
|
212
|
-
# What to do if we don't match anything
|
213
|
-
#
|
214
|
-
# @param block [Proc] a block to run when we don't match a command
|
215
|
-
|
216
|
-
def if_not_found &block
|
217
|
-
@not_found = block
|
218
|
-
end
|
219
|
-
|
220
|
-
##
|
221
|
-
# Starts loop to process any mentions, running command procs set up earlier
|
222
|
-
|
223
|
-
def run_commands
|
224
|
-
@streamer.user do |update|
|
225
|
-
next unless update.kind_of? Mastodon::Notification and update.type == 'mention'
|
226
|
-
|
227
|
-
# set up the status to strip html, if needed
|
228
|
-
update.status.class
|
229
|
-
.module_eval { alias_method :content, :strip } if @strip_html
|
230
|
-
store_mention_data update.status
|
231
|
-
|
232
|
-
# strip our username out of the status
|
233
|
-
post = update.status.content.gsub(/@#{@username} /, '')
|
234
|
-
|
235
|
-
# see if the post matches our regex, running the stored proc if it does
|
236
|
-
matches = @cmd_regex.match(post)
|
237
|
-
|
238
|
-
unless matches.nil?
|
239
|
-
@cmd_hash[matches[:cmd].to_sym]
|
240
|
-
.call(self,
|
241
|
-
matches[:data].strip,
|
242
|
-
update.status)
|
243
|
-
else
|
244
|
-
@not_found.call(self, update.status)
|
245
|
-
end
|
246
|
-
end
|
247
|
-
end
|
248
|
-
|
249
|
-
alias_method :run, :run_commands
|
250
|
-
end
|
251
18
|
end
|
data/lib/elephrame/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: elephrame
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Zac
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-12-
|
11
|
+
date: 2018-12-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -110,6 +110,9 @@ files:
|
|
110
110
|
- lib/elephrame/rest/bots.rb
|
111
111
|
- lib/elephrame/rest/rest.rb
|
112
112
|
- lib/elephrame/streaming/bots.rb
|
113
|
+
- lib/elephrame/streaming/command.rb
|
114
|
+
- lib/elephrame/streaming/interaction.rb
|
115
|
+
- lib/elephrame/streaming/reply.rb
|
113
116
|
- lib/elephrame/streaming/streaming.rb
|
114
117
|
- lib/elephrame/util/status.rb
|
115
118
|
- lib/elephrame/version.rb
|
@@ -120,15 +123,16 @@ metadata:
|
|
120
123
|
allowed_push_host: https://rubygems.org
|
121
124
|
homepage_uri: https://github.com/theZacAttacks/elephrame
|
122
125
|
source_code_uri: https://github.com/theZacAttacks/elephrame
|
126
|
+
changelog_uri: https://github.com/theZacAttacks/elephrame/releases
|
123
127
|
post_install_message:
|
124
128
|
rdoc_options: []
|
125
129
|
require_paths:
|
126
130
|
- lib
|
127
131
|
required_ruby_version: !ruby/object:Gem::Requirement
|
128
132
|
requirements:
|
129
|
-
- - "
|
133
|
+
- - "~>"
|
130
134
|
- !ruby/object:Gem::Version
|
131
|
-
version: '0'
|
135
|
+
version: '2.0'
|
132
136
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
133
137
|
requirements:
|
134
138
|
- - ">="
|