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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 173e8777a79a860697a3d962421d877bc6727b6226c2dca06bb13c376b5c0311
4
- data.tar.gz: fccda1de7a698076058388279abd6601db64eae181d55bcd83459290c7927ab3
3
+ metadata.gz: 99301911c71cb6fe44225ba4ae6071886359ae6c667471f8a9198daf4a202ef8
4
+ data.tar.gz: 98944310ca826e8d5432df0d699cb7eb7ed47c8997b19ef75331954e40b20e47
5
5
  SHA512:
6
- metadata.gz: 972b0cf7fceef426ca71f056390872a7f50eb977f15ed4a459dd6a9ab49270a47bdfd76d42c7845f2d74bcc38069fd0c9d38218486367dd46bd0dd48fca23cd6
7
- data.tar.gz: 469eb1582aaba3e29068ced5e8db564a908e3deed125bb2010d23dd6e187ce6959c697b8a3d0b8c5140d8e8bd41362a8ab737b94e5fcd5ffcd06ed02297f9bf5
6
+ metadata.gz: da91f48e6e1502a97fec68ada9d66e0b89c33e231fc884318549af623217468e0b0e393b466496ba19520435f6bcb8ba5bdbd20e111c3a2009c07b0c8606898b
7
+ data.tar.gz: fffdcd359ea544c6b7ff4bbe91b00c93f5629ffa51144df1ae10256499b7885d6a486e93e3e5bfbdcb26480a18fc6c5993ba99073f2f4e4e6ffe930e61d3a721
@@ -1,22 +1,23 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- elephrame (0.4.4)
5
- moostodon (~> 0.2.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.5.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.6)
17
+ et-orbi (1.1.7)
17
18
  tzinfo
18
- fugit (1.1.6)
19
- et-orbi (~> 1.1, >= 1.1.6)
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.2.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.4)
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
- thread_safe (0.3.6)
43
- tzinfo (1.2.5)
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.1
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
 
@@ -41,5 +41,5 @@ Gem::Specification.new do |spec|
41
41
  spec.add_development_dependency "minitest", "~> 5.0"
42
42
 
43
43
  spec.add_dependency 'rufus-scheduler'
44
- spec.add_dependency 'moostodon', '~> 0.2.0'
44
+ spec.add_dependency 'moostodon', '~> 0.4.0'
45
45
  end
@@ -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
@@ -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
@@ -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
- # TODO: check account fields for NoBot, too
99
- # right now, limited by moostodon
100
- @client.account(account_id).note =~ /#?NoBot/i
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
@@ -1,6 +1,7 @@
1
1
  require_relative 'reply'
2
2
  require_relative 'command'
3
3
  require_relative 'interaction'
4
+ require_relative 'watcher'
4
5
 
5
6
  module Elephrame
6
7
  module Streaming
@@ -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
@@ -8,8 +8,11 @@ module Mastodon
8
8
  # @return [String]
9
9
 
10
10
  def strip
11
- rcontent.gsub(/<\/p><p>/, "\n")
11
+ rcontent
12
+ .gsub(/<\/p><p>/, "\n")
12
13
  .gsub(/<("[^"]*"|'[^']*'|[^'">])*>/, '')
14
+ .gsub('&gt;', '>')
15
+ .gsub('&lt;', '<')
13
16
  end
14
17
  end
15
18
  end
@@ -1,3 +1,3 @@
1
1
  module Elephrame
2
- VERSION = "0.4.4"
2
+ VERSION = "0.4.5"
3
3
  end
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
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: 2018-12-18 00:00:00.000000000 Z
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.2.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.2.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
- rubyforge_project:
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