elephrame 0.4.4 → 0.4.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +12 -12
- data/README.md +4 -1
- data/elephrame.gemspec +1 -1
- data/examples/notbot_check.rb +14 -0
- data/examples/watcher.rb +14 -0
- data/lib/elephrame/bot.rb +20 -5
- data/lib/elephrame/streaming/bots.rb +25 -0
- data/lib/elephrame/streaming/streaming.rb +1 -0
- data/lib/elephrame/streaming/watcher.rb +47 -0
- data/lib/elephrame/util/status.rb +4 -1
- data/lib/elephrame/version.rb +1 -1
- metadata +8 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 99301911c71cb6fe44225ba4ae6071886359ae6c667471f8a9198daf4a202ef8
|
4
|
+
data.tar.gz: 98944310ca826e8d5432df0d699cb7eb7ed47c8997b19ef75331954e40b20e47
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: da91f48e6e1502a97fec68ada9d66e0b89c33e231fc884318549af623217468e0b0e393b466496ba19520435f6bcb8ba5bdbd20e111c3a2009c07b0c8606898b
|
7
|
+
data.tar.gz: fffdcd359ea544c6b7ff4bbe91b00c93f5629ffa51144df1ae10256499b7885d6a486e93e3e5bfbdcb26480a18fc6c5993ba99073f2f4e4e6ffe930e61d3a721
|
data/Gemfile.lock
CHANGED
@@ -1,22 +1,23 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
elephrame (0.4.
|
5
|
-
moostodon (~> 0.
|
4
|
+
elephrame (0.4.5)
|
5
|
+
moostodon (~> 0.4.0)
|
6
6
|
rufus-scheduler
|
7
7
|
|
8
8
|
GEM
|
9
9
|
remote: https://rubygems.org/
|
10
10
|
specs:
|
11
|
-
addressable (2.
|
11
|
+
addressable (2.6.0)
|
12
12
|
public_suffix (>= 2.0.2, < 4.0)
|
13
13
|
buftok (0.2.0)
|
14
|
+
concurrent-ruby (1.1.5)
|
14
15
|
domain_name (0.5.20180417)
|
15
16
|
unf (>= 0.0.5, < 1.0.0)
|
16
|
-
et-orbi (1.1.
|
17
|
+
et-orbi (1.1.7)
|
17
18
|
tzinfo
|
18
|
-
fugit (1.1.
|
19
|
-
et-orbi (~> 1.1, >= 1.1.
|
19
|
+
fugit (1.1.8)
|
20
|
+
et-orbi (~> 1.1, >= 1.1.7)
|
20
21
|
raabro (~> 1.1)
|
21
22
|
http (3.3.0)
|
22
23
|
addressable (~> 2.3)
|
@@ -28,20 +29,19 @@ GEM
|
|
28
29
|
http-form_data (2.1.1)
|
29
30
|
http_parser.rb (0.6.0)
|
30
31
|
minitest (5.11.3)
|
31
|
-
moostodon (0.
|
32
|
+
moostodon (0.4.0)
|
32
33
|
addressable (~> 2.5)
|
33
34
|
buftok (~> 0)
|
34
35
|
http (~> 3.0)
|
35
36
|
oj (~> 3.3)
|
36
|
-
oj (3.7.
|
37
|
+
oj (3.7.9)
|
37
38
|
public_suffix (3.0.3)
|
38
39
|
raabro (1.1.6)
|
39
40
|
rake (10.5.0)
|
40
41
|
rufus-scheduler (3.5.2)
|
41
42
|
fugit (~> 1.1, >= 1.1.5)
|
42
|
-
|
43
|
-
|
44
|
-
thread_safe (~> 0.1)
|
43
|
+
tzinfo (2.0.0)
|
44
|
+
concurrent-ruby (~> 1.0)
|
45
45
|
unf (0.1.4)
|
46
46
|
unf_ext
|
47
47
|
unf_ext (0.0.7.5)
|
@@ -56,4 +56,4 @@ DEPENDENCIES
|
|
56
56
|
rake (~> 10.0)
|
57
57
|
|
58
58
|
BUNDLED WITH
|
59
|
-
1.17.
|
59
|
+
1.17.2
|
data/README.md
CHANGED
@@ -72,7 +72,8 @@ Exposed methods from bot object:
|
|
72
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
73
|
- `reply_with_mentions(content, *options)` similar to `reply` but includes all @s (respects #NoBot)
|
74
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
|
75
|
-
- `no_bot?(account_id)` returns true if user with `account_id` has some form of "#NoBot" in their bio
|
75
|
+
- `no_bot?(account_id)` returns true if user with `account_id` has some form of "#NoBot" in their bio or their profile fields
|
76
|
+
- `fetch_list_id(name)` return the id of a list with given name `name`
|
76
77
|
|
77
78
|
(See RubyDocs for source code documentation)
|
78
79
|
|
@@ -82,6 +83,8 @@ Here's a list of bots that are currently using this framework. If you are using
|
|
82
83
|
|
83
84
|
- [GameBot](https://github.com/theZacAttacks/GameBot)
|
84
85
|
- [EnhanceBot](https://github.com/theZacAttacks/EnhanceBot)
|
86
|
+
- [RemindMe Bot](https://github.com/theZacAttacks/RemindMeBot)
|
87
|
+
- [InstanceEmoji Bot](https://github.com/theZacAttacks/InstanceEmojiBot)
|
85
88
|
|
86
89
|
## Development
|
87
90
|
|
data/elephrame.gemspec
CHANGED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'elephrame'
|
2
|
+
|
3
|
+
# create a bot that watches the public timeline
|
4
|
+
# (this gives us the largest sample size)
|
5
|
+
watcher = Elephrame::Bots::Watcher.new 'public'
|
6
|
+
|
7
|
+
watcher.run do |bot, post|
|
8
|
+
|
9
|
+
# if the account's profile doesn't contain no bot
|
10
|
+
# we print the account's handle and the post's content
|
11
|
+
if not bot.no_bot? post.account.id
|
12
|
+
puts "#{post.account.acct}: #{post.content}"
|
13
|
+
end
|
14
|
+
end
|
data/examples/watcher.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'elephrame'
|
2
|
+
|
3
|
+
# here are various examples of how to create a new watcher bot
|
4
|
+
#tag_watcher = Elephrame::Bots::Watcher.new 'tag', 'CoolHash'
|
5
|
+
#local_watcher = Elephrame::Bots::Watcher.new 'local'
|
6
|
+
#ltag_watcher = Elephrame::Bots::Watcher.new 'local hashtag', 'LocalTag'
|
7
|
+
#list_watcher = Elephrame::Bots::Watcher.new 'list', 'test list'
|
8
|
+
#home_watcher = Elephrame::Bots::Watcher.new 'home'
|
9
|
+
|
10
|
+
fedi_watcher = Elephrame::Bots::Watcher.new 'public'
|
11
|
+
|
12
|
+
fedi_watcher.run do |bot, post|
|
13
|
+
puts "#{post.account.acct}: #{post.content}"
|
14
|
+
end
|
data/lib/elephrame/bot.rb
CHANGED
@@ -87,17 +87,32 @@ module Elephrame
|
|
87
87
|
end
|
88
88
|
|
89
89
|
##
|
90
|
-
# Checks to see if a user has some form of "#NoBot" in their bio
|
91
|
-
# (so we can make making friendly bots easier!)
|
90
|
+
# Checks to see if a user has some form of "#NoBot" in their bio or in
|
91
|
+
# their profile fields (so we can make making friendly bots easier!)
|
92
92
|
#
|
93
93
|
# @param account_id [String] id of account to check bio
|
94
94
|
#
|
95
95
|
# @return [Bool]
|
96
96
|
|
97
97
|
def no_bot? account_id
|
98
|
-
|
99
|
-
|
100
|
-
|
98
|
+
acct = @client.account(account_id)
|
99
|
+
acct.note =~ NoBotRegex ||
|
100
|
+
acct.fields.any? {|f| f.name =~ NoBotRegex || f.value =~ NoBotRegex}
|
101
|
+
end
|
102
|
+
|
103
|
+
##
|
104
|
+
# Gets the ID of a list given the name
|
105
|
+
#
|
106
|
+
# @param name [String] name of the list
|
107
|
+
#
|
108
|
+
# @return [Integer]
|
109
|
+
|
110
|
+
def fetch_list_id(name)
|
111
|
+
lists = {}
|
112
|
+
@client.lists.collect do |l|
|
113
|
+
lists[l.title] = l.id
|
114
|
+
end
|
115
|
+
lists[name]
|
101
116
|
end
|
102
117
|
|
103
118
|
private
|
@@ -67,5 +67,30 @@ module Elephrame
|
|
67
67
|
end
|
68
68
|
end
|
69
69
|
|
70
|
+
##
|
71
|
+
# A bot that watches timelines or lists
|
72
|
+
|
73
|
+
class Watcher < BaseBot
|
74
|
+
include Elephrame::Streaming
|
75
|
+
include Elephrame::Reply
|
76
|
+
include Elephrame::TimelineWatcher
|
77
|
+
|
78
|
+
##
|
79
|
+
# Creates a new Watcher bot
|
80
|
+
#
|
81
|
+
# @param tl [String] the timeline you want to watch. accepted values are:
|
82
|
+
# 'public', 'home', 'list', 'local', 'hashtag'/'tag', 'local hashtag'
|
83
|
+
# @param name [String] the name of the list or hashtag to watch
|
84
|
+
#
|
85
|
+
# @return [Elephrame::Bots::Watcher]
|
86
|
+
|
87
|
+
def initialize tl, name = nil
|
88
|
+
super()
|
89
|
+
|
90
|
+
setup_streaming
|
91
|
+
setup_watcher tl, name
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
70
95
|
end
|
71
96
|
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Elephrame
|
2
|
+
module TimelineWatcher
|
3
|
+
attr :endpoint, :endpoint_arg
|
4
|
+
|
5
|
+
def setup_watcher(timeline, arg = nil)
|
6
|
+
|
7
|
+
@endpoint = format_tl(timeline)
|
8
|
+
|
9
|
+
raise 'list or tag not supplied' if endpoint_needs_arg? and arg.nil?
|
10
|
+
@endpoint_arg = arg
|
11
|
+
|
12
|
+
# does some heavy lifting so the developer
|
13
|
+
# doesn't need to know the ID of the list
|
14
|
+
@endpoint_arg = fetch_list_id(arg) if @endpoint == 'list'
|
15
|
+
|
16
|
+
# in case the the argument contains an actual hash symbol
|
17
|
+
@endpoint_arg.gsub!('#', '') if @endpoint =~ /tag/
|
18
|
+
end
|
19
|
+
|
20
|
+
def run_watcher &block
|
21
|
+
@streamer.send(@endpoint,
|
22
|
+
@endpoint_arg) do |post|
|
23
|
+
next if post.kind_of? Mastodon::Notification or
|
24
|
+
post.kind_of? Mastodon::Streaming::DeletedStatus
|
25
|
+
|
26
|
+
# this makes it so .content calls strip instead
|
27
|
+
post.class.module_eval { alias_method :content, :strip } if @strip_html
|
28
|
+
|
29
|
+
block.call(self, post)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
alias_method :run, :run_watcher
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def format_tl(tl)
|
38
|
+
tl.gsub('home', 'user').gsub('public', 'firehose')
|
39
|
+
.gsub(/(hash)?tag/, 'hashtag')
|
40
|
+
.gsub('local ', 'local_')
|
41
|
+
end
|
42
|
+
|
43
|
+
def endpoint_needs_arg?
|
44
|
+
@endpoint =~ /(list|hashtag)/
|
45
|
+
end
|
46
|
+
end
|
47
|
+
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.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Zac
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-03-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -72,14 +72,14 @@ dependencies:
|
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 0.
|
75
|
+
version: 0.4.0
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 0.
|
82
|
+
version: 0.4.0
|
83
83
|
description:
|
84
84
|
email:
|
85
85
|
- thezacattacks@gmail.com
|
@@ -102,8 +102,10 @@ files:
|
|
102
102
|
- examples/combined.rb
|
103
103
|
- examples/command.rb
|
104
104
|
- examples/interact.rb
|
105
|
+
- examples/notbot_check.rb
|
105
106
|
- examples/periodic.rb
|
106
107
|
- examples/reply.rb
|
108
|
+
- examples/watcher.rb
|
107
109
|
- lib/elephrame.rb
|
108
110
|
- lib/elephrame/bot.rb
|
109
111
|
- lib/elephrame/mix/bots.rb
|
@@ -114,6 +116,7 @@ files:
|
|
114
116
|
- lib/elephrame/streaming/interaction.rb
|
115
117
|
- lib/elephrame/streaming/reply.rb
|
116
118
|
- lib/elephrame/streaming/streaming.rb
|
119
|
+
- lib/elephrame/streaming/watcher.rb
|
117
120
|
- lib/elephrame/util/status.rb
|
118
121
|
- lib/elephrame/version.rb
|
119
122
|
homepage: https://github.com/theZacAttacks/elephrame
|
@@ -139,8 +142,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
139
142
|
- !ruby/object:Gem::Version
|
140
143
|
version: '0'
|
141
144
|
requirements: []
|
142
|
-
|
143
|
-
rubygems_version: 2.7.7
|
145
|
+
rubygems_version: 3.0.1
|
144
146
|
signing_key:
|
145
147
|
specification_version: 4
|
146
148
|
summary: A framework for assisting in making mastodon/pleroma bots
|