fry-send_tweet.rb 0.1.0
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 +7 -0
- data/CHANGELOG.md +282 -0
- data/LICENSE.txt +24 -0
- data/PRY_LICENSE.txt +25 -0
- data/README.md +456 -0
- data/Vagrantfile +46 -0
- data/art/44-e44743a5bb.jpg +0 -0
- data/art/52-eec4df2edf.jpg +0 -0
- data/lib/pry-send_tweet.rb +75 -0
- data/lib/pry/pager/system_pager.rb +25 -0
- data/lib/pry/send_tweet/commands/base_command.rb +70 -0
- data/lib/pry/send_tweet/commands/easter_eggs.rb +184 -0
- data/lib/pry/send_tweet/commands/paging/paging_support.rb +16 -0
- data/lib/pry/send_tweet/commands/read_tweets.rb +93 -0
- data/lib/pry/send_tweet/commands/read_tweets/translate_actions.rb +94 -0
- data/lib/pry/send_tweet/commands/send_tweet.rb +151 -0
- data/lib/pry/send_tweet/commands/twitter_action.rb +118 -0
- data/lib/pry/send_tweet/commands/twitter_action/delete_tweet_actions.rb +19 -0
- data/lib/pry/send_tweet/commands/twitter_action/follow_actions.rb +66 -0
- data/lib/pry/send_tweet/commands/twitter_action/like_actions.rb +23 -0
- data/lib/pry/send_tweet/commands/twitter_action/mute_actions.rb +23 -0
- data/lib/pry/send_tweet/commands/twitter_action/profile_actions.rb +60 -0
- data/lib/pry/send_tweet/commands/twitter_action/suggested_actions.rb +20 -0
- data/lib/pry/send_tweet/commands/twitter_search.rb +36 -0
- data/lib/pry/send_tweet/renderers/tweet_renderer.rb +103 -0
- data/lib/pry/send_tweet/renderers/user_renderer.rb +17 -0
- data/lib/pry/send_tweet/tty-box.rb +73 -0
- data/lib/pry/send_tweet/twitter_io.rb +26 -0
- data/lib/pry/send_tweet/version.rb +5 -0
- data/lib/time-ago-in-words/README.md +14 -0
- data/lib/time-ago-in-words/lib/time-ago-in-words.rb +37 -0
- data/lib/time-ago-in-words/time-ago-in-words.gemspec +14 -0
- data/pry-send_tweet.gemspec +23 -0
- data/samples/freebsd-zshrc +5 -0
- data/samples/tmuxinator-vagrant.yml +11 -0
- data/vms/freebsd.rb +15 -0
- metadata +123 -0
data/Vagrantfile
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'shellwords'
|
2
|
+
insert_root_path = ->(tmux_conf) {
|
3
|
+
conf = YAML.load(tmux_conf)
|
4
|
+
conf['root'] = '/app'
|
5
|
+
YAML.dump(conf)
|
6
|
+
}
|
7
|
+
|
8
|
+
Vagrant.configure("2") do |config|
|
9
|
+
config.vm.box = "generic/freebsd12"
|
10
|
+
config.vm.synced_folder Dir.getwd, "/app", type: "rsync"
|
11
|
+
|
12
|
+
config.vm.provider "virtualbox" do |vb|
|
13
|
+
vb.memory = "1024"
|
14
|
+
end
|
15
|
+
|
16
|
+
# Install useful packages
|
17
|
+
cmds = [
|
18
|
+
"sudo pkg install -y zsh tmux",
|
19
|
+
"sudo chsh -s zsh vagrant"
|
20
|
+
]
|
21
|
+
config.vm.provision "shell", inline: cmds.join(' && ')
|
22
|
+
|
23
|
+
# Configure date & time
|
24
|
+
zone = ENV.key?('VMTZ') ? ENV['VMTZ'] : 'CET'
|
25
|
+
cmds = [
|
26
|
+
"cp /usr/share/zoneinfo/#{zone} /etc/localtime"
|
27
|
+
]
|
28
|
+
config.vm.provision "shell", inline: cmds.join(' && ')
|
29
|
+
|
30
|
+
# Insert files into VM
|
31
|
+
tmux_conf = insert_root_path.call File.binread('./samples/tmuxinator-vagrant.yml')
|
32
|
+
cmds = [
|
33
|
+
"echo '#{File.binread('./samples/freebsd-zshrc')}' > /home/vagrant/.zshrc",
|
34
|
+
"mkdir -p /home/vagrant/.config/tmuxinator",
|
35
|
+
"echo #{Shellwords.shellescape(tmux_conf)} > /home/vagrant/.config/tmuxinator/pry_send_tweet.yml"
|
36
|
+
]
|
37
|
+
config.vm.provision "shell", inline: cmds.join(' && ')
|
38
|
+
|
39
|
+
# Install Ruby
|
40
|
+
# Install pry-send_tweet dependencies (..as FreeBSD packages)
|
41
|
+
cmds = [
|
42
|
+
"sudo pkg install -y ruby rubygem-tmuxinator rubygem-pry rubygem-twitter " \
|
43
|
+
"rubygem-tty-box rubygem-unicode-display_width"
|
44
|
+
]
|
45
|
+
config.vm.provision "shell", inline: cmds.join(' && ')
|
46
|
+
end
|
Binary file
|
Binary file
|
@@ -0,0 +1,75 @@
|
|
1
|
+
class Pry
|
2
|
+
module SendTweet
|
3
|
+
#
|
4
|
+
# @return [Integer]
|
5
|
+
# The default width of a box that contains a tweet or user.
|
6
|
+
#
|
7
|
+
# @api private
|
8
|
+
#
|
9
|
+
DEFAULT_BOX_WIDTH = 100
|
10
|
+
|
11
|
+
#
|
12
|
+
# @return [Integer]
|
13
|
+
# The default height of a box that contains a tweet or user.
|
14
|
+
#
|
15
|
+
DEFAULT_BOX_HEIGHT = 8
|
16
|
+
|
17
|
+
#
|
18
|
+
# @return [Integer]
|
19
|
+
# The number of tweets to request when reading tweets from Twitters API.
|
20
|
+
#
|
21
|
+
# @api private
|
22
|
+
#
|
23
|
+
DEFAULT_READ_SIZE = 200
|
24
|
+
|
25
|
+
require 'pry' if not defined?(Pry::ClassCommand)
|
26
|
+
require 'twitter'
|
27
|
+
require 'cgi'
|
28
|
+
require 'timeout'
|
29
|
+
require 'yaml'
|
30
|
+
require 'time-ago-in-words'
|
31
|
+
require_relative 'pry/send_tweet/twitter_io'
|
32
|
+
require_relative 'pry/pager/system_pager'
|
33
|
+
require_relative 'pry/send_tweet/tty-box'
|
34
|
+
require_relative 'pry/send_tweet/renderers/tweet_renderer'
|
35
|
+
require_relative 'pry/send_tweet/renderers/user_renderer'
|
36
|
+
require_relative 'pry/send_tweet/commands/paging/paging_support'
|
37
|
+
require_relative 'pry/send_tweet/commands/base_command'
|
38
|
+
require_relative 'pry/send_tweet/commands/send_tweet'
|
39
|
+
require_relative 'pry/send_tweet/commands/read_tweets'
|
40
|
+
require_relative 'pry/send_tweet/commands/twitter_search'
|
41
|
+
require_relative 'pry/send_tweet/commands/twitter_action'
|
42
|
+
require_relative 'pry/send_tweet/commands/easter_eggs'
|
43
|
+
require_relative 'pry/send_tweet/version'
|
44
|
+
|
45
|
+
# @api private
|
46
|
+
def self.merge_yaml_file!(config, path)
|
47
|
+
if File.readable?(path)
|
48
|
+
warn "[warning] Reading pry-send_tweet configuration from '#{path}'."
|
49
|
+
twitter_config = YAML.safe_load File.binread(path)
|
50
|
+
config.twitter = Pry::Config.from_hash(twitter_config)
|
51
|
+
end
|
52
|
+
rescue => e
|
53
|
+
warn "[warning] Error parsing '#{path}' .. (#{e.class})."
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
Pry.configure do |config|
|
59
|
+
b = lambda do |*ary|
|
60
|
+
pry = ary[-1]
|
61
|
+
twitter = Twitter::REST::Client.new do |config|
|
62
|
+
Pry::SendTweet.merge_yaml_file! pry.config,
|
63
|
+
File.join(ENV['HOME'], '.pry-send_tweet.yml')
|
64
|
+
config.consumer_key = pry.config.twitter.consumer_key
|
65
|
+
config.consumer_secret = pry.config.twitter.consumer_secret
|
66
|
+
config.access_token = pry.config.twitter.access_token
|
67
|
+
config.access_token_secret = pry.config.twitter.access_token_secret
|
68
|
+
end
|
69
|
+
twitter.user_agent = pry.config.twitter.user_agent ||
|
70
|
+
"pry-send_tweet.rb v#{Pry::SendTweet::VERSION}"
|
71
|
+
pry.add_sticky_local(:_twitter_) { twitter }
|
72
|
+
end
|
73
|
+
config.hooks.add_hook(:before_eval, 'pry_send_tweets_before_eval', b)
|
74
|
+
config.hooks.add_hook(:before_session, 'pry_send_tweets_before_session', b)
|
75
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
class Pry::Pager::SystemPager
|
2
|
+
def pid
|
3
|
+
pager.pid
|
4
|
+
end
|
5
|
+
|
6
|
+
def fork
|
7
|
+
pager
|
8
|
+
nil
|
9
|
+
end
|
10
|
+
|
11
|
+
def fast_exit!
|
12
|
+
Process.kill 'SIGKILL', pid
|
13
|
+
Process.wait pid
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
# Patch to avoid spawning a shell when launching the pager.
|
18
|
+
def pager
|
19
|
+
@pager ||= begin
|
20
|
+
ary = self.class.default_pager.split(' ')
|
21
|
+
io = IO.popen(ary, 'w')
|
22
|
+
io.tap{|io| io.sync = true}
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
class Pry::Slop
|
2
|
+
DEFAULT_OPTIONS.merge!(strict: true)
|
3
|
+
end
|
4
|
+
|
5
|
+
class Pry::SendTweet::BaseCommand < Pry::ClassCommand
|
6
|
+
include Pry::SendTweet::TweetRenderer
|
7
|
+
include Pry::SendTweet::UserRenderer
|
8
|
+
include Pry::SendTweet::PagingSupport
|
9
|
+
|
10
|
+
def self.inherited(kls)
|
11
|
+
kls.group 'Twitter'
|
12
|
+
end
|
13
|
+
|
14
|
+
def process(*args)
|
15
|
+
if nil == _pry_.config.twitter
|
16
|
+
raise Pry::CommandError, "_pry_.config.twitter is nil!\n" \
|
17
|
+
"Please set the required keys and tokens to send " \
|
18
|
+
"tweets using Twitters API. \n" \
|
19
|
+
"Visit https://gitlab/trebor8/fry-send_tweet.rb to learn how."
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def default_read_size
|
26
|
+
_pry_.config.twitter.default_read_size || Pry::SendTweet::DEFAULT_READ_SIZE
|
27
|
+
end
|
28
|
+
|
29
|
+
def box_height
|
30
|
+
Pry::SendTweet::DEFAULT_BOX_HEIGHT
|
31
|
+
end
|
32
|
+
|
33
|
+
def box_width
|
34
|
+
_pry_.config.twitter.box_width || Pry::SendTweet::DEFAULT_BOX_WIDTH
|
35
|
+
end
|
36
|
+
|
37
|
+
def search_str_for_users(*ary)
|
38
|
+
ary.map do |str|
|
39
|
+
if str.start_with?('https://twitter.com')
|
40
|
+
path = URI.parse(URI.escape(str)).path
|
41
|
+
path.split('/').reject(&:empty?).first
|
42
|
+
elsif str.start_with?('@')
|
43
|
+
str[1..-1]
|
44
|
+
else
|
45
|
+
str
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# With thanks to ActionView for this method
|
51
|
+
def word_wrap(text, options = {})
|
52
|
+
line_width = box_width
|
53
|
+
text.split("\n").collect! do |line|
|
54
|
+
line.length > line_width ? line.gsub(/(.{1,#{line_width}})(\s+|$)/, "\\1\n").strip : line
|
55
|
+
end * "\n"
|
56
|
+
end
|
57
|
+
|
58
|
+
def numbered_list(title, ary)
|
59
|
+
title = "\n#{bold(title.chomp)}\n\n"
|
60
|
+
title + ary.map.with_index { |item, index| yield(item, index+1) }.join("\n")
|
61
|
+
end
|
62
|
+
|
63
|
+
def time_format
|
64
|
+
"%-d %b %Y, %-I:%M:%S %p"
|
65
|
+
end
|
66
|
+
|
67
|
+
def twitter
|
68
|
+
@twitter ||= _pry_.binding_stack[-1].eval('_twitter_')
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,184 @@
|
|
1
|
+
Pry.commands.instance_eval do
|
2
|
+
command(/[Bb]ismillah/, "") {
|
3
|
+
_pry_.pager.page [
|
4
|
+
"The ِBeneficient / All-Compassionate / Most Gracious",
|
5
|
+
"The Most Merciful / Ever-Merciful / Merciful / Most Clement",
|
6
|
+
'The King / Lord / Sovereign / Dominion / Master [also means "the God/ Lord, the One and Only", "Possessor of Supreme Power or Authority"]',
|
7
|
+
"The Holy / All-Holy / All-Pure / Sacred / All-Sacred",
|
8
|
+
"The Giver of Peace / Peace / All-Calm / Ever-Tranquil",
|
9
|
+
"The Granter of Security / the Giver / Faith / Supreme Believer (of Belief) / Giver of Belief / All-Assurer",
|
10
|
+
"The Controller / Absolute Authority Over All / Guardian Over All / Absolute Master / Eternal Dominating",
|
11
|
+
"The Exalted in Might and Power / Exalted / Powerful / Almighty / Mighty",
|
12
|
+
"The Omnipotent / Supreme Power / Possessor of Having All Power / Strong",
|
13
|
+
"The Possessor of Greatness / Supreme / Justly Proud",
|
14
|
+
"The Creator / Creator of the Universe / Maker / True Originator / Absolute Author",
|
15
|
+
"The Initiator / Evolver/ Eternal Spirit Worshipped By All, Have Absolute Power Over All Matters, Nature and Events",
|
16
|
+
"The Fashioner / Shaper / Designer / Artist",
|
17
|
+
"The Repeatedly Forgiving / Absolute Forgiver / Pardoner / Condoner [He Who is Ready to Pardon and Forgive]",
|
18
|
+
"The Subduer / Overcomer / Conqueror / Absolute Vanquisher [Possessor of Who Subdues Evil and Oppression]",
|
19
|
+
"The ِِAbsolute Bestower / Giver / Grantor / Great Donor",
|
20
|
+
"The Provider / Sustainer / Bestower of Sustenance / All-Provider",
|
21
|
+
"The Opener / Opener of the Gates of Profits / Reliever / The Victory Giver",
|
22
|
+
"The Knowing / All-Knower / Omniscient / All-Knowledgeable / Possessor of Knowing Much of Ever Thing / All-Knowing",
|
23
|
+
"The Restrainer / Withholder / Straightener / Absolute Seizer",
|
24
|
+
"The Extender / Expander / Generous Provider",
|
25
|
+
"The Abaser / Humiliator / Downgrader [Possessor of Giving Comfort, Free from Pain Anxiety or Troubles]",
|
26
|
+
"The Exalter / Upgrader [of Ranks]",
|
27
|
+
"The Giver of Honor / Bestower of Honor / Empowerer",
|
28
|
+
"The Giver of Dishonor / the Giver of Disgrace",
|
29
|
+
"The Hearing / All-Hearing / Hearer of Invocation",
|
30
|
+
"The All-Seeing / All-Seer / Ever-Clairvoyant / Clear-Sighted / Clear-Seeing",
|
31
|
+
"The Judge / Arbitrator / Arbiter / All-Decree / Possessor of Authority of Decisions and Judgment",
|
32
|
+
"The Just / Authorized and Straightforward Judge of Dealing Justly",
|
33
|
+
"The Gentle / Benignant / Subtly Kind / All-Subtle",
|
34
|
+
"The All-Aware / Well-Acquainted / Ever-Adept",
|
35
|
+
"The Forbearing / Indulgent / Oft Forbearing / All-Enduring (of Suffering Pain with Patience)",
|
36
|
+
"The Most Great / Ever-Magnificent / Most Supreme / Exalted / Absolute Dignified",
|
37
|
+
"The Ever-Forgiving / Oft-Forgiving",
|
38
|
+
"The Grateful / Appreciative / Multiplier of Rewards",
|
39
|
+
"The Sublime / Ever-Exalted / Supreme / Most High / Most Lofty",
|
40
|
+
"The Great/ Ever-Great / Grand / Most Great / Greatly Abundant of Extent, Capacity and Importance",
|
41
|
+
"The Preserver / Ever-Preserving / All-Watching / Protector / Guardian / Oft-Conservator",
|
42
|
+
"The Nourisher / Feeder",
|
43
|
+
"The Bringer of Judgment / Ever-Reckoner [the One Who Takes Account of All Matters]",
|
44
|
+
"The Majestic / Exalted / Oft-Important / Splendid",
|
45
|
+
"The Noble / Bountiful / Generous / Precious / Honored / Benefactor",
|
46
|
+
"The Watchful / Observer / Ever-Watchful / Watcher",
|
47
|
+
"The Responsive / Answerer / Supreme Answerer / Accepter of Invocation",
|
48
|
+
"The Vast/ All-Embracing / Omnipresent / Boundless / All-Encompassing",
|
49
|
+
"The Wise/ Ever-Wise / Endowed with Sound Judgment",
|
50
|
+
"The Affectionate / Ever-Affectionate/ Loving One/ Loving/ the One Who Tenders and Warm Hearts",
|
51
|
+
"The All-Glorious / Majestic / Ever-Illustrious [Oft-Brilliant in Dignity, Achievements or Actions]",
|
52
|
+
"The Resurrector / Awakener / Arouser / Dispatcher",
|
53
|
+
"The Witness / Testifier / Ever-Witnessing",
|
54
|
+
"The Truth / Reality / the Only One Certainly Sound and Genuine in Truth",
|
55
|
+
"The Trustee, The Dependable, The Advocate",
|
56
|
+
"The Strong",
|
57
|
+
"The Firm, The Steadfast",
|
58
|
+
"The Friend, Helper",
|
59
|
+
"The All Praiseworthy",
|
60
|
+
"The Accounter, The Numberer of All",
|
61
|
+
"The Originator, The Producer, The Initiator",
|
62
|
+
"The Restorer, The Reinstater Who Brings Back All",
|
63
|
+
"The Giver of Life",
|
64
|
+
"The Bringer of Death",
|
65
|
+
"The Living",
|
66
|
+
"The Subsisting, The Independent",
|
67
|
+
"The Perceiver, The Finder, The Unfailing",
|
68
|
+
"The Illustrious, The Magnificent",
|
69
|
+
"The Unique, The Single",
|
70
|
+
"The One, The Indivisible",
|
71
|
+
"The Eternal, The Absolute, The Self-Sufficient",
|
72
|
+
"The All-Powerful, He Who is able to do Everything",
|
73
|
+
"The Determiner, The Dominant",
|
74
|
+
"The Expediter, He Who Brings Forward",
|
75
|
+
"The Delayer, He Who Puts Far Away",
|
76
|
+
"The First, The Beginning-less",
|
77
|
+
"The Last, The Endless",
|
78
|
+
"The Manifest, The Evident, The Outer",
|
79
|
+
"The Hidden, The Unmanifest, The Inner",
|
80
|
+
"The Patron, The Protecting Friend, The Friendly Lord",
|
81
|
+
"The Supremely Exalted, The Most High",
|
82
|
+
"The Good, The Beneficent",
|
83
|
+
"The Ever-Returning, Ever-Relenting",
|
84
|
+
"The Avenger",
|
85
|
+
"The Pardoner, The Effacer, The Forgiver",
|
86
|
+
"The Kind, The Pitying",
|
87
|
+
"The Owner of all Sovereignty",
|
88
|
+
"The Owner, Lord of Majesty and Honour",
|
89
|
+
"The Equitable, The Requiter",
|
90
|
+
"The Gatherer, The Unifier",
|
91
|
+
"The Rich, The Independent",
|
92
|
+
"The Enricher, The Emancipator",
|
93
|
+
"The Preventer, The Withholder, The Shielder, The Defender",
|
94
|
+
"The Distressor, The Harmer, The Afflictor",
|
95
|
+
"The Propitious, The Benefactor, The Source of Good",
|
96
|
+
"The Light",
|
97
|
+
"The Guide, The Way",
|
98
|
+
"The Originator, The Incomparable, The Unattainable, The Beautiful",
|
99
|
+
"The Immutable, The Infinite, The Everlasting",
|
100
|
+
"The Heir, The Inheritor of All",
|
101
|
+
"The Guide to the Right Path",
|
102
|
+
"The Timeless, The Patient"
|
103
|
+
].sample
|
104
|
+
}
|
105
|
+
alias_command '99', 'bismillah'
|
106
|
+
|
107
|
+
DISCO_BISCUITS = {
|
108
|
+
'Steve Miller Band - Abracadabra (12" Version) (Vinyl)' => 'https://www.youtube.com/watch?v=YqloCj1ZNSw',
|
109
|
+
'Billy Joel Piano Man Lyrics' => 'https://www.youtube.com/watch?v=ErEzQOFzPXU',
|
110
|
+
'6IX9INE - STOOPID FT. BOBBY SHMURDA (Official Music Video)' => 'https://www.youtube.com/watch?v=VDa5iGiPgGs',
|
111
|
+
'NOOP DOGG - O M G (3RIS D3D3 REMIX)' => 'https://www.youtube.com/watch?v=PJL8-DZEscs',
|
112
|
+
'The Frames - Star Star **' => 'https://www.youtube.com/watch?v=eMccPJqyg0o',
|
113
|
+
'6ix9ine, Nicki Minaj, Murda Beatz - “FEFE” (Official Music Video)' => 'https://www.youtube.com/watch?v=V_MXGdSBbAI',
|
114
|
+
'Breaking Bad - Jesse\'s emotional speech' => 'https://www.youtube.com/watch?v=aL9aI4JPtPQ',
|
115
|
+
'The Frames - Revelate with lyrics' => 'https://www.youtube.com/watch?v=SPC0sRQbJ98',
|
116
|
+
'The Way I Am' => 'https://www.youtube.com/watch?v=82lB-gI-uuQ',
|
117
|
+
'Coldplay - Fix You' => 'https://www.youtube.com/watch?v=k4V3Mo61fJM',
|
118
|
+
'O Ri Chiraiya lyrics' => 'https://www.youtube.com/watch?v=56bdi4AJFFo',
|
119
|
+
'Will Smith - Fresh Prince of Bel Air (Le Boeuf Remix)' => 'https://www.youtube.com/watch?v=LPvCeNxsG-w',
|
120
|
+
'Midnight Oil - Beds Are Burning' => 'https://www.youtube.com/watch?v=ejorQVy3m8E',
|
121
|
+
'Lenny Kravitz - Are You Gonna Go My Way' => 'https://www.youtube.com/watch?v=8LhCd1W2V0Q',
|
122
|
+
'Yes - Owner Of A Lonely Heart (vinyl)' => 'https://www.youtube.com/watch?v=5mYMFcnOURs',
|
123
|
+
'Toto - Africa (vinyl)' => 'https://www.youtube.com/watch?v=-M0m5mB_q0Y',
|
124
|
+
'Bill Withers - Just The Two Of Us (Doumëa Remix ft. Kevin Cohen)' => 'https://www.youtube.com/watch?v=5mYMFcnOURs',
|
125
|
+
'Pink Floyd - Money (master tape)' => 'https://www.youtube.com/watch?v=gmV9iX-Q754',
|
126
|
+
'Pink Floyd - Wish You Were Here' => 'https://www.youtube.com/watch?v=IXdNnw99-Ic',
|
127
|
+
'CHIEF KEEF - 3HUNNA / shot by @DJKENN_AON' => 'https://www.youtube.com/watch?v=QFEhJfUcD1Q',
|
128
|
+
'Lil Boosie: We Out Chea' => 'https://www.youtube.com/watch?v=tOYnJv3ztKM',
|
129
|
+
'John Legend All Of Me Lyrics' => 'https://www.youtube.com/watch?v=Mk7-GRWq7wA',
|
130
|
+
'Im a trumpsta motherfucker' => 'https://www.youtube.com/watch?v=WhGsq9X1VZM',
|
131
|
+
'Big Man Tyrone Shills Terry Davis\' TempleOS' => 'https://www.youtube.com/watch?v=HFPM-R_d44M',
|
132
|
+
'Sam Song..... Celtic Storm' => 'https://www.youtube.com/watch?v=TjJR-fvGOXc',
|
133
|
+
'Johnny Cash Reads The New Testament: Matthew Chapter 7' => 'https://www.youtube.com/watch?v=27TfH3hvqAQ',
|
134
|
+
'Tina Turner - Golden Eye (HD)' => 'https://www.youtube.com/watch?v=4hGQ97tCTOs',
|
135
|
+
'Red Hot Chili Peppers - By The Way (Lukas Grinys Remix)' => 'https://www.youtube.com/watch?v=lESwb2mU04M',
|
136
|
+
'Avril Lavigne - I Love You' => 'https://www.youtube.com/watch?v=Q0-omvd2u1s',
|
137
|
+
'RIGGA x DXTR - Город не спит 🔥' => 'https://www.youtube.com/watch?v=d3zQTHbEpkM',
|
138
|
+
'2017 11 26T18 46 30+00 00 171126WorshipWorkPlay' => 'https://www.youtube.com/watch?v=i-Re-PbqNRg',
|
139
|
+
'Black Eyed Peas - Where Is The Love (BCX ft. Ellena Soule Rework)' => 'https://www.youtube.com/watch?v=0_Ro2ifLRpw',
|
140
|
+
'Charlie Puth - Attention (D33pSoul Remix)' => 'https://www.youtube.com/watch?v=IMj7bSSOEAk',
|
141
|
+
'Bob Marley - Three little birds(Video Oficial)(HQ)' => 'https://www.youtube.com/watch?v=4k2PJFPu57Y',
|
142
|
+
'War veteran: "Please don\'t talk about leaving"' => 'https://www.youtube.com/watch?v=1jGnaPrjeh4',
|
143
|
+
'Sunshine by Matisyahu Lyrics' => 'https://www.youtube.com/watch?v=xmQ2QrNnZIE',
|
144
|
+
'Martin Garrix - Animals (Official Video)' => 'https://www.youtube.com/watch?v=gCYcHz2k5x0',
|
145
|
+
'DVBBS & Borgeous - TSUNAMI (Original Mix)' => 'https://www.youtube.com/watch?v=0EWbonj7f18',
|
146
|
+
'We Were Soldiers Broken Arrow' => 'https://www.youtube.com/watch?v=ctnK7wdJmAo',
|
147
|
+
'✵ Жизнь дает свое ✵ (2018)' => 'https://www.youtube.com/watch?v=Z2ozs8-W4H4',
|
148
|
+
'Vladimir Putin Style - True Leader 2017' => 'https://www.youtube.com/watch?v=_A4MmpJV94I',
|
149
|
+
'Survivor - Eye Of The Tiger (Rocky OST)' => 'https://www.youtube.com/watch?v=FLZS3jQPn',
|
150
|
+
'Ноггано, AK 47 - Russian Paradise' => 'https://www.youtube.com/watch?v=Z0s1RTZUAqQ',
|
151
|
+
'Meiko - Lights On(Mellen Gi Remix)' => 'https://www.youtube.com/watch?v=HVzL0XjdFfI',
|
152
|
+
'2Pac - Real Talk (2019)' => 'https://www.youtube.com/watch?v=_3LuY9isL_Y',
|
153
|
+
'Девочка верна только одному..♛' => 'https://www.youtube.com/watch?v=UGmRumCtCrc',
|
154
|
+
'Linkin Park - Numb (Areon Remix) /Chester Bennington/' => 'https://www.youtube.com/watch?v=-g29i6IOzUQ',
|
155
|
+
'Steve Miller Band - Abracadabra (12" Version) (Vinyl)' => 'https://www.youtube.com/watch?v=YqloCj1ZNSw',
|
156
|
+
'Gorillaz - Clint Eastwood (Godlips Remix)' => 'https://www.youtube.com/watch?v=JfJLyuXgjOc',
|
157
|
+
'Narwhals song swimming in the ocean !' => 'https://www.youtube.com/watch?v=dP2lyc53qtI',
|
158
|
+
'Justin Bieber - Sorry (D33pSoul Remix) /Tayler Buono Cover/' => 'https://www.youtube.com/watch?v=r5IO6ReMWXE',
|
159
|
+
'Tupac Ft Elton John Ghetto Gospel Lyrics' => 'https://www.youtube.com/watch?v=eC3F1uZJ2jc',
|
160
|
+
'SWAY - STILL SPEEDIN\' (With Lyrics) OUT NOW!!!!' => 'https://www.youtube.com/watch?v=tRldCYkU8nA',
|
161
|
+
'Chief Keef is 300 years old' => 'https://www.youtube.com/watch?v=VWUg1fgYPiE',
|
162
|
+
'DJ Fresh ft Sian Evans - \'Louder\' (Official Video)' => 'https://www.youtube.com/watch?v=eE-dwpWpscU',
|
163
|
+
'50 Cent - Realest Niggaz (ft. 2Pac & The Notorious B.I.G) 2018' => 'https://www.youtube.com/watch?v=QI_7C3dUgqw',
|
164
|
+
'Tupac - Last Muthafucka Breathin\'' => 'https://www.youtube.com/watch?v=F3kN5x51wjE',
|
165
|
+
'Rihanna - Work ft. Drake (Koni Remix) /Emma & Shaun Cover/' => 'https://www.youtube.com/watch?v=ipjXYtoVG-Q',
|
166
|
+
'Money Gang - 2Pac Ft. Notorious B.I.G (HD)' => 'https://www.youtube.com/watch?v=R96NrNdAzQE',
|
167
|
+
'MKJ - Robot /Frank Sinatra/' => 'https://www.youtube.com/watch?v=bGT1SbFW9OQ',
|
168
|
+
'D33pSoul - La Richesse (Original Mix) "My richness is life" /Bob Marley/' => 'https://www.youtube.com/watch?v=tCXqm8EQtWQ',
|
169
|
+
'Damo & Ivor \'Maniac 2012\' (Official Video)' => 'https://www.youtube.com/watch?v=js-Yet5kskA'
|
170
|
+
}
|
171
|
+
command '🎧', '' do
|
172
|
+
key = DISCO_BISCUITS.keys.uniq.sample
|
173
|
+
_pry_.output.puts [key, DISCO_BISCUITS[key]].join("\n")
|
174
|
+
end
|
175
|
+
alias_command 'disco-biscuits', '🎧'
|
176
|
+
|
177
|
+
command '300', '' do
|
178
|
+
_pry_.output.puts 'https://www.youtube.com/watch?v=VWUg1fgYPiE'
|
179
|
+
end
|
180
|
+
|
181
|
+
command '8', '' do
|
182
|
+
_pry_.output.puts 'https://www.jesuschristsavior.net/Beatitudes.html'
|
183
|
+
end
|
184
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Pry::SendTweet::PagingSupport
|
2
|
+
def page(str)
|
3
|
+
_pry_.pager.page(str.to_s)
|
4
|
+
end
|
5
|
+
|
6
|
+
def page_ok(str)
|
7
|
+
prefix = bright_green "OK: "
|
8
|
+
page "#{prefix}#{str}"
|
9
|
+
end
|
10
|
+
|
11
|
+
def page_error(str)
|
12
|
+
str = str.respond_to?(:message) ? str.message : str
|
13
|
+
prefix = bright_red "Error: "
|
14
|
+
page "#{prefix}#{str}"
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
class Pry::SendTweet::ReadTweets < Pry::SendTweet::BaseCommand
|
2
|
+
require_relative 'read_tweets/translate_actions'
|
3
|
+
include TranslateActions
|
4
|
+
|
5
|
+
match 'read-tweets'
|
6
|
+
description 'Read tweets.'
|
7
|
+
banner <<-BANNER
|
8
|
+
read-tweets [OPTIONS]
|
9
|
+
|
10
|
+
#{description}
|
11
|
+
BANNER
|
12
|
+
|
13
|
+
def options(o)
|
14
|
+
o.on 't=', 'tweeter=',
|
15
|
+
'A username whose timeline you want to read.'
|
16
|
+
o.on 'c=', 'count=',
|
17
|
+
"The number of tweets to read. The maximum is 200, and the default is " \
|
18
|
+
"#{default_read_size}."
|
19
|
+
o.on 'l=', 'likes=',
|
20
|
+
'Read tweets you or another user have liked.',
|
21
|
+
argument: :optional
|
22
|
+
o.on 'r=', 'replies=', 'A username whose replies you want to read.'
|
23
|
+
o.on 'm', 'mentions', 'Read tweets that @mention you.'
|
24
|
+
o.on 'x=', 'translate=', 'Translate a tweet.'
|
25
|
+
o.on 'tx=', nil, 'Translate a string of text.'
|
26
|
+
o.on 'sl=', 'source-lang=', '[optional] The source language of the ' \
|
27
|
+
'text or tweet being translated'
|
28
|
+
o.on 'w', 'with-retweets', 'Include retweets.'
|
29
|
+
end
|
30
|
+
|
31
|
+
def process
|
32
|
+
super
|
33
|
+
case
|
34
|
+
when opts.present?('translate') then translate_tweet(opts['x'], opts['sl'])
|
35
|
+
when opts.present?('tx') then translate_text(opts['tx'], opts['sl'])
|
36
|
+
when opts.present?('replies') then show_replies(user: opts['replies'])
|
37
|
+
when opts.present?('likes') then show_likes(user: opts['likes'])
|
38
|
+
when opts.present?('mentions') then show_mentions
|
39
|
+
else show_tweets_from_timeline(user: opts['tweeter'])
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def show_replies(user:)
|
46
|
+
username = search_str_for_users(user).first
|
47
|
+
render_tweets lambda {
|
48
|
+
twitter.user_timeline(username, timeline_options).select {|tweet|
|
49
|
+
tweet.reply? &&
|
50
|
+
tweet.in_reply_to_screen_name? &&
|
51
|
+
tweet.in_reply_to_screen_name.downcase != username.downcase
|
52
|
+
}
|
53
|
+
},
|
54
|
+
title: "#{'@'+user} replies"
|
55
|
+
end
|
56
|
+
|
57
|
+
def show_likes(user:)
|
58
|
+
if user
|
59
|
+
user = search_str_for_users(user).first
|
60
|
+
render_tweets lambda { twitter.favorites(user, count: opts['count'] || default_read_size)},
|
61
|
+
title: "#{'@'+user} likes"
|
62
|
+
else
|
63
|
+
render_tweets lambda { twitter.favorites(count: opts['count'] || default_read_size) },
|
64
|
+
title: "Your likes"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def show_tweets_from_timeline(user:)
|
69
|
+
if user
|
70
|
+
user = search_str_for_users(user).first
|
71
|
+
render_tweets lambda { twitter.user_timeline(user, timeline_options) },
|
72
|
+
title: '@'+user
|
73
|
+
else
|
74
|
+
render_tweets lambda { twitter.home_timeline(timeline_options) },
|
75
|
+
title: "Twitter"
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def show_mentions
|
80
|
+
render_tweets lambda { twitter.mentions(timeline_options) },
|
81
|
+
title: "@mentions"
|
82
|
+
end
|
83
|
+
|
84
|
+
def timeline_options
|
85
|
+
{
|
86
|
+
tweet_mode: 'extended',
|
87
|
+
include_rts: opts.present?('with-retweets'),
|
88
|
+
count: opts.present?('count') ? opts['count'] : default_read_size
|
89
|
+
}
|
90
|
+
end
|
91
|
+
|
92
|
+
Pry.commands.add_command self
|
93
|
+
end
|