reddit-to-telegram 0.1.2 → 0.2.1

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: '0409bbca53a356490970298ad89f7990a7cc34a806a4211faef79c772bf7a7f9'
4
- data.tar.gz: 3c1029e0f2c335eb34d26c2be1f31c08d13643fdd7a5915812f44f4667b8b1e4
3
+ metadata.gz: 1ec45bcf41a275baa3ea712968010d520b4af973a78149837ebe4cbc0b4c3870
4
+ data.tar.gz: 328805f68a80798c6c9c3a26fbd00aac37560ac97d55b601df9471b0587c2a31
5
5
  SHA512:
6
- metadata.gz: 062ab3a460e4599fcba146020dd9e3713eb78f4e992f13f8aa370a5df25baa9890b64075c3392eba5b2c921661e2ba3e47028a3dde02df79afa0277f1c5bfc42
7
- data.tar.gz: 81fa4e1dd727da653f3786641e75d08b6f50890b92192a35ff70d5a908fec5dded3c67a0a85f7ee4c83cb4b79e58adca9d488a50755afca753646145cb6088b0
6
+ metadata.gz: 7184c7bddf2027cfef0bd40ddd90a044e309482b1467d1ab942114d43d4b6c4b7c03d2081a06035ba4b408d82aa19c64ba28d74d5ef98c03f58399153e61dbe3
7
+ data.tar.gz: e46c030bd186fbef1185970769d8d9263849e2b8048c043ca5b7ffa28c9a5b7d4e980fde260ee705ae2358419c7c581ebba458e620c68c3742541bc511dbdaae
data/README.md CHANGED
@@ -4,7 +4,58 @@
4
4
 
5
5
  #### Fetches hot posts from chosen subreddits and pushes them to Telegram channels.
6
6
 
7
- I'll update readme with instructions soon.
7
+ Beware, this is remotely not production-ready, you'll see lots of bugs and it may break at any time.
8
+ Be sure to check for gem updates.
8
9
 
9
- ### TODO:
10
- - Error handling (maybe send them to another channel in Telegram)
10
+ ## Installation
11
+ In your `Gemfile` add:
12
+ ```
13
+ gem "reddit-to-telegram"
14
+ ```
15
+ Then run `bundle install`.
16
+
17
+ Or `gem install reddit-to-telegram`, but don't forget to `require` it first then.
18
+
19
+ ## Prerequisites
20
+ - You need an AWS account to host a free SimpleDB (memory and local file storage options are available, but no way to switch for now)
21
+ - (Optionally) Create a Reddit app, which would allow more requests to reddit
22
+ - [Obtain](https://core.telegram.org/bots/tutorial#obtain-your-bot-token) a telegram bot token
23
+
24
+ ## Installation
25
+ To run it, you'll need some env variables set.
26
+ ```
27
+ RTT_AWS_ACCESS_KEY_ID= # Your AWS access key ID. Needed for AWS SimpleDB storage.
28
+ RTT_AWS_REGION= # AWS region your SimpleDB will be hosted on. Beware, it's not available in all regions.
29
+ RTT_AWS_SECRET_ACCESS_KEY= # Your AWS access key ID. Needed for AWS SimpleDB storage.
30
+ RTT_MAX_STORED_POSTS= # (Optional) Number of posts to store in the database to avoid duplicates, default is 25.
31
+ RTT_REDDIT_CLIENT_ID= # Reddit app credentials to access API. Might not be needed depending on setup, reddit allows some requests without authentication.
32
+ RTT_REDDIT_CLIENT_SECRET= # Reddit app credentials to access API. Might not be needed depending on setup, reddit allows some requests without authentication.
33
+ RTT_TELEGRAM_BOT_TOKEN= # The token you've received when you've created a telegram bot.
34
+ RTT_TEMP_DIR= (Optional) # Directory to write temp files to without trailing /
35
+ ```
36
+
37
+ You can also set them dynamically:
38
+ ```
39
+ RedditToTelegram::Vars.assign_values(
40
+ max_stored_posts:,
41
+ tmp_dir:
42
+ aws_access_key_id:,
43
+ aws_secret_access_key:,
44
+ aws_region:,
45
+ reddit_client_id:,
46
+ reddit_client_secret:,
47
+ telegram_bot_token:
48
+ )
49
+ ```
50
+ ## Usage
51
+
52
+ 1. Add the bot as administrator to Telegram channels you'd like to post to.
53
+ 2.
54
+ ```
55
+ RedditToTelegram.post(
56
+ subreddit_name_1: :telegram_channel_id_1,
57
+ subreddit_name_2: :telegram_channel_id_2
58
+ )
59
+
60
+ ```
61
+ Use `:telegram_channel_id` without the `@`.
@@ -3,6 +3,7 @@
3
3
  require_relative "reddit_to_telegram/reddit/fetch"
4
4
  require_relative "reddit_to_telegram/store"
5
5
  require_relative "reddit_to_telegram/telegram/post"
6
+ require_relative "reddit_to_telegram/version"
6
7
 
7
8
  module RedditToTelegram
8
9
  class << self
@@ -1,12 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "json"
4
+ require_relative "../vars"
4
5
 
5
6
  module RedditToTelegram
6
7
  module Store
7
8
  class TempFile
8
- STORE_FILE_DIR = "#{Dir.pwd}/tmp/store.json".freeze
9
-
10
9
  class << self
11
10
  attr_reader :reddit_token, :posts
12
11
 
@@ -36,9 +35,9 @@ module RedditToTelegram
36
35
  end
37
36
 
38
37
  def read_file
39
- return assign_default_values unless File.exist?(STORE_FILE_DIR)
38
+ return assign_default_values unless File.exist?(temp_file_path)
40
39
 
41
- file = File.read(STORE_FILE_DIR)
40
+ file = File.read(temp_file_path)
42
41
  data = JSON.parse(file)
43
42
  @reddit_token = data["reddit_token"]
44
43
  @posts = {}
@@ -52,13 +51,17 @@ module RedditToTelegram
52
51
  @posts.each do |subreddit, values|
53
52
  data["posts_#{subreddit}".to_sym] = values
54
53
  end
55
- File.open(STORE_FILE_DIR, "w") { |f| f.write(data.to_json) }
54
+ File.open(temp_file_path, "w") { |f| f.write(data.to_json) }
56
55
  end
57
56
 
58
57
  def assign_default_values
59
58
  @reddit_token = nil
60
59
  @posts = {}
61
60
  end
61
+
62
+ def temp_file_path
63
+ "#{Vars.tmp_dir}/store.json"
64
+ end
62
65
  end
63
66
  end
64
67
  end
@@ -32,7 +32,7 @@ module RedditToTelegram
32
32
  return post[:media] unless post[:misc][:binary]
33
33
 
34
34
  Video.from_link(post[:media])
35
- File.open(Video::TEMP_VIDEO_PATH)
35
+ File.open(Video.temp_video_path)
36
36
  end
37
37
  end
38
38
  end
@@ -1,23 +1,29 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "open-uri"
4
+ require_relative "../vars"
4
5
 
5
6
  module RedditToTelegram
6
7
  module Telegram
7
8
  class Video
8
- TEMP_VIDEO_PATH = "#{Dir.pwd}/tmp/video.mp4".freeze
9
-
10
9
  class << self
11
10
  def from_link(link)
12
11
  download = URI.parse(link).open
13
- IO.copy_stream(download, TEMP_VIDEO_PATH)
12
+ File.open(temp_video_path, "w+b") do |file|
13
+ download.respond_to?(:read) ? IO.copy_stream(download, file) : file.write(download)
14
+ end
14
15
  end
15
16
 
16
17
  def delete_file
17
- f = File.open(TEMP_VIDEO_PATH, "r")
18
- ensure
18
+ return unless File.exist?(temp_video_path)
19
+
20
+ f = File.open(temp_video_path, "r")
19
21
  f.close unless f.nil? || f.closed?
20
- File.delete(TEMP_VIDEO_PATH) if File.exist?(TEMP_VIDEO_PATH)
22
+ File.delete(temp_video_path)
23
+ end
24
+
25
+ def temp_video_path
26
+ "#{Vars.tmp_dir}/video.mp4"
21
27
  end
22
28
  end
23
29
  end
@@ -2,10 +2,13 @@
2
2
 
3
3
  module RedditToTelegram
4
4
  module Vars
5
+ DEFAULT_TMP_DIR = "#{Dir.pwd}/tmp".freeze
6
+
5
7
  class << self
6
8
  # rubocop:disable Metrics/ParameterLists
7
9
  def assign_values(
8
10
  max_stored_posts:,
11
+ tmp_dir:,
9
12
  aws_access_key_id:,
10
13
  aws_secret_access_key:,
11
14
  aws_region:,
@@ -15,6 +18,7 @@ module RedditToTelegram
15
18
  )
16
19
 
17
20
  @max_stored_posts = max_stored_posts
21
+ @tmp_dir = tmp_dir
18
22
  AWS.instance_variable_set(:@access_key_id, aws_access_key_id)
19
23
  AWS.instance_variable_set(:@secret_access_key, aws_secret_access_key)
20
24
  AWS.instance_variable_set(:@region, aws_region)
@@ -27,6 +31,10 @@ module RedditToTelegram
27
31
  def max_stored_posts
28
32
  @max_stored_posts ||= ENV["RTT_MAX_STORED_POSTS"].to_i || 25
29
33
  end
34
+
35
+ def tmp_dir
36
+ @tmp_dir ||= ENV["RTT_TEMP_DIR"] || DEFAULT_TMP_DIR
37
+ end
30
38
  end
31
39
 
32
40
  class AWS
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RedditToTelegram
4
- VERSION = "0.1.2"
4
+ VERSION = "0.2.1"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: reddit-to-telegram
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mark Tityuk
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-01-25 00:00:00.000000000 Z
11
+ date: 2024-01-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-simpledb