ezii 0.0.0.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 +7 -0
- data/ezii-client/Gemfile +6 -0
- data/ezii-client/Gemfile.lock +32 -0
- data/ezii-client/Procfile +2 -0
- data/ezii-client/README.md +16 -0
- data/ezii-client/chat.txt +1446 -0
- data/ezii-client/config.ru +1 -0
- data/ezii-client/fake.rb +5 -0
- data/ezii-client/managables/programs/game_aided_manufacturing/functions/base_command.rb +26 -0
- data/ezii-client/managables/programs/game_aided_manufacturing/functions/mouse_y_axis_to_3d_z_axis.rb +4 -0
- data/ezii-client/managables/programs/game_aided_manufacturing/functions/record_audio_and_send_to_wit.rb +18 -0
- data/ezii-client/managables/programs/game_aided_manufacturing/functions/rotate_camera_axis_using_mouse_drag.rb +37 -0
- data/ezii-client/managables/programs/game_aided_manufacturing/functions/selection_cube.rb +35 -0
- data/ezii-client/managables/programs/game_aided_manufacturing/gam.rb +388 -0
- data/ezii-client/managables/programs/game_aided_manufacturing/gems.locked +75 -0
- data/ezii-client/managables/programs/game_aided_manufacturing/gems.rb +10 -0
- data/ezii-client/managables/programs/game_aided_manufacturing/lib/drb_server.rb +13 -0
- data/ezii-client/managables/programs/game_aided_manufacturing/lib/mittsu_monkeypatches/box_geometry.rb +5 -0
- data/ezii-client/managables/programs/game_aided_manufacturing/runnable.rb +20 -0
- data/ezii-client/managables/programs/game_aided_manufacturing/shapes/cube.rb +29 -0
- data/ezii-client/managables/programs/game_aided_manufacturing/sig/runable.rbi +9 -0
- data/ezii-client/managables/programs/game_aided_manufacturing/test.sh +5 -0
- data/ezii-client/managables/programs/game_aided_manufacturing/test/commands/test_move_cube.rb +18 -0
- data/ezii-client/managables/programs/game_aided_manufacturing/test/commands/test_selection_cube.rb +31 -0
- data/ezii-client/managables/programs/game_aided_manufacturing/test/test_command_remapping.rb +30 -0
- data/ezii-client/managables/programs/game_aided_manufacturing/test/test_helper.rb +75 -0
- data/ezii-client/managables/services/chat-bot-integrations/chat.txt +15 -0
- data/ezii-client/managables/services/chat-bot-integrations/gems.locked +66 -0
- data/ezii-client/managables/services/chat-bot-integrations/gems.rb +18 -0
- data/ezii-client/managables/services/chat-bot-integrations/gitter_zircon.rb +644 -0
- data/ezii-client/managables/services/chat-bot-integrations/regexes.rb +240 -0
- data/ezii-client/managables/services/chat-bot-integrations/setup-mac-os-x.sh +0 -0
- data/ezii-client/managables/services/chat-bot-integrations/setup.sh +1 -0
- data/ezii-client/managables/services/chat-bot-integrations/start.sh +3 -0
- data/ezii-client/managables/services/error-inspect/simplest-log +1 -0
- data/ezii-client/managables/services/error-inspect/simplest-log-init +1 -0
- data/ezii-client/managables/services/livestream-interactive/Twitch.Tv/ascii_nebuchadnezzar +9 -0
- data/ezii-client/managables/services/livestream-interactive/Twitch.Tv/chat.txt +1 -0
- data/ezii-client/managables/services/livestream-interactive/Twitch.Tv/twitch_zircon.rb +61 -0
- data/ezii-client/managables/services/livestream-interactive/Twitch.Tv/zion_fleet.rb +198 -0
- data/ezii-client/managables/services/livestream-interactive/chat.txt +40 -0
- data/ezii-client/managables/services/stdlib-dot-com/koma/qanda-api@dev/README.md +3 -0
- data/ezii-client/managables/services/stdlib-dot-com/koma/qanda-api@dev/functions/__main__.js +58 -0
- data/ezii-client/managables/services/stdlib-dot-com/koma/qanda-api@dev/functions/black-out-random-word.js +74 -0
- data/ezii-client/managables/services/stdlib-dot-com/koma/qanda-api@dev/functions/random-sentence.js +57 -0
- data/ezii-client/managables/services/stdlib-dot-com/koma/qanda-api@dev/functions/random-wikipedia-page.js +25 -0
- data/ezii-client/managables/services/stdlib-dot-com/koma/qanda-api@dev/functions/random-words.js +34 -0
- data/ezii-client/managables/services/stdlib-dot-com/koma/qanda-api@dev/functions/rare-enough-word.js +41 -0
- data/ezii-client/managables/services/stdlib-dot-com/koma/qanda-api@dev/functions/wikipedia-page.js +35 -0
- data/ezii-client/managables/services/stdlib-dot-com/koma/qanda-api@dev/package.json +20 -0
- data/ezii-client/managables/services/stdlib-dot-com/koma/qanda-api@dev/statistics/count-word.js +12 -0
- data/ezii-client/managables/services/stdlib-dot-com/koma/qanda-api@dev/utils/log-to-natural-database.js +10 -0
- data/ezii-client/managables/services/stdlib-dot-com/koma/qanda-api@dev/word2vec-models/test-text8-vector.bin +0 -0
- data/ezii-client/managament_interface/gems.locked +13 -0
- data/ezii-client/managament_interface/gems.rb +3 -0
- data/ezii-client/managament_interface/management_interface +4 -0
- data/ezii-client/managament_interface/runnable.rb +30 -0
- data/ezii-client/rocknrolla +1 -0
- data/ezii-client/start.sh +2 -0
- data/ezii-client/test.wav +0 -0
- data/ezii-misc/detect-intent-from-git-patch.rb +46 -0
- data/ezii-server/Gemfile +23 -0
- data/ezii-server/Gemfile.lock +84 -0
- data/ezii-server/README.md +13 -0
- data/ezii-server/config.ru +2 -0
- data/ezii-server/eezee.rb +1243 -0
- data/ezii-server/httpsprojecteulernetproblem=155.png +0 -0
- data/ezii-server/httpsprojecteulernetproblem=205.png +0 -0
- data/ezii-server/httpsprojecteulernetproblem=228.png +0 -0
- data/ezii-server/httpsprojecteulernetproblem=262.png +0 -0
- data/ezii-server/httpsprojecteulernetproblem=3.png +0 -0
- data/ezii-server/httpsprojecteulernetproblem=333.png +0 -0
- data/ezii-server/httpsprojecteulernetproblem=334.png +0 -0
- data/ezii-server/httpsprojecteulernetproblem=337.png +0 -0
- data/ezii-server/httpsprojecteulernetproblem=426.png +0 -0
- data/ezii-server/httpsprojecteulernetproblem=442.png +0 -0
- data/ezii-server/httpsprojecteulernetproblem=449.png +0 -0
- data/ezii-server/httpsprojecteulernetproblem=497.png +0 -0
- data/ezii-server/httpsprojecteulernetproblem=51.png +0 -0
- data/ezii-server/httpsprojecteulernetproblem=514.png +0 -0
- data/ezii-server/httpsprojecteulernetproblem=520.png +0 -0
- data/ezii-server/httpsprojecteulernetproblem=571.png +0 -0
- data/ezii-server/httpsprojecteulernetproblem=587.png +0 -0
- data/ezii-server/httpsprojecteulernetproblem=588.png +0 -0
- data/ezii-server/httpsprojecteulernetproblem=599.png +0 -0
- data/ezii-server/httpsprojecteulernetproblem=72.png +0 -0
- data/ezii-server/httpsprojecteulernetproblem=93.png +0 -0
- data/ezii-server/regexes +258 -0
- data/ezii-server/sample.wav +0 -0
- data/ezii.gemspec +13 -0
- metadata +132 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
require 'ruby2d'
|
|
2
|
+
|
|
3
|
+
# Set the window size
|
|
4
|
+
set width: 400, height: 400
|
|
5
|
+
|
|
6
|
+
set title: "Fun first"
|
|
7
|
+
|
|
8
|
+
Text.new('Managables', y: 0)
|
|
9
|
+
Text.new(' Games', y: 20)
|
|
10
|
+
Text.new(' Game Aided Manufacturing', y: 40)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
Text.new(' Services', y: 60)
|
|
14
|
+
Text.new(' Error Web App', y: 80)
|
|
15
|
+
Text.new(' Vision/OCR', y: 100)
|
|
16
|
+
Text.new(' Livestream Interactive', y: 120)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
on :mouse_up do |event|
|
|
20
|
+
# x and y coordinates of the mouse button event
|
|
21
|
+
case event.button
|
|
22
|
+
when :left
|
|
23
|
+
puts event.x
|
|
24
|
+
puts event.y
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
# Show the window
|
|
30
|
+
show
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
rackup
|
|
Binary file
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
require 'sinatra'
|
|
2
|
+
require 'json'
|
|
3
|
+
require 'wit'
|
|
4
|
+
|
|
5
|
+
set :protection, :except => :frame_options
|
|
6
|
+
set :bind, '0.0.0.0'
|
|
7
|
+
|
|
8
|
+
ENV['WIT_AI_TOKEN'] = "NKALLR6ED2Q7EI3PH4URT7Y7FQMJWM4P"
|
|
9
|
+
|
|
10
|
+
REPO_PATHS = [
|
|
11
|
+
'tootsuite/mastodon',
|
|
12
|
+
'rails/rails',
|
|
13
|
+
'facebook/relay',
|
|
14
|
+
'tensorflow/tensorflow'
|
|
15
|
+
]
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
search_terms = ["machine+learning", "rails"]
|
|
19
|
+
repos_json = `curl -u ezii123:b6c3c55c3307e21f9c7f387bcc4d3ae38a30e412 https://api.github.com/search/repositories?q=#{search_terms.sample}&sort=updated`
|
|
20
|
+
parsed_json = JSON.parse(repos_json)
|
|
21
|
+
|
|
22
|
+
parsed_json["items"].each do |repo_hash|
|
|
23
|
+
REPO_PATHS.push(repo_hash["full_name"])
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
get '/' do
|
|
27
|
+
|
|
28
|
+
case params[:message]
|
|
29
|
+
when 'do something'
|
|
30
|
+
json = `curl -u ezii123:b6c3c55c3307e21f9c7f387bcc4d3ae38a30e412 https://api.github.com/repos/#{REPO_PATHS.sample}/commits/master`
|
|
31
|
+
parsed_json = JSON.parse(json)
|
|
32
|
+
p parsed_json
|
|
33
|
+
message = parsed_json["files"][0]["patch"].to_s
|
|
34
|
+
|
|
35
|
+
client = Wit.new(access_token: ENV["WIT_AI_TOKEN"])
|
|
36
|
+
response = client.message(message)
|
|
37
|
+
|
|
38
|
+
return response.to_s
|
|
39
|
+
when "ezii-dev what are you doing?"
|
|
40
|
+
# return "Help with development of eezi-ruby"
|
|
41
|
+
erb :index, :locals => { host: request.host }
|
|
42
|
+
# when /.*608730770953076786.*debug.*`(.*)`.*/
|
|
43
|
+
# erb :minimalistic_debug, :locals => { code: $1 }
|
|
44
|
+
# # return "ohohohoho you fool I\'M UR MASTER'"
|
|
45
|
+
end
|
|
46
|
+
end
|
data/ezii-server/Gemfile
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
source "https://rubygems.org"
|
|
2
|
+
|
|
3
|
+
gem 'rack'
|
|
4
|
+
gem 'zircon'
|
|
5
|
+
gem 'colorize'
|
|
6
|
+
gem 'byebug'
|
|
7
|
+
gem 'gyazo'
|
|
8
|
+
gem 'open4'
|
|
9
|
+
gem 'brainz'
|
|
10
|
+
gem 'bundler'
|
|
11
|
+
gem 'sinatra'
|
|
12
|
+
gem 'nokogiri'
|
|
13
|
+
gem 'wit'
|
|
14
|
+
gem 'eezee_regexes'
|
|
15
|
+
gem 'facets'
|
|
16
|
+
gem 'polynomials'
|
|
17
|
+
gem 'mathn'
|
|
18
|
+
gem 'screencap'
|
|
19
|
+
gem 'json2table'
|
|
20
|
+
gem 'rake'
|
|
21
|
+
gem 'gnuplot'
|
|
22
|
+
gem 'mathn'
|
|
23
|
+
gem 'activesupport'
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
GEM
|
|
2
|
+
remote: https://rubygems.org/
|
|
3
|
+
specs:
|
|
4
|
+
activesupport (5.2.3)
|
|
5
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
6
|
+
i18n (>= 0.7, < 2)
|
|
7
|
+
minitest (~> 5.1)
|
|
8
|
+
tzinfo (~> 1.1)
|
|
9
|
+
brainz (0.2.0)
|
|
10
|
+
byebug (11.0.1)
|
|
11
|
+
colorize (0.8.1)
|
|
12
|
+
concurrent-ruby (1.1.5)
|
|
13
|
+
eezee_regexes (0.1.5)
|
|
14
|
+
facets (3.1.0)
|
|
15
|
+
faraday (0.15.4)
|
|
16
|
+
multipart-post (>= 1.2, < 3)
|
|
17
|
+
gnuplot (2.6.2)
|
|
18
|
+
gyazo (3.0.1)
|
|
19
|
+
faraday
|
|
20
|
+
mime-types
|
|
21
|
+
multipart-post
|
|
22
|
+
i18n (1.6.0)
|
|
23
|
+
concurrent-ruby (~> 1.0)
|
|
24
|
+
json2table (1.0.7)
|
|
25
|
+
mathn (0.1.0)
|
|
26
|
+
mime-types (3.2.2)
|
|
27
|
+
mime-types-data (~> 3.2015)
|
|
28
|
+
mime-types-data (3.2019.0331)
|
|
29
|
+
mini_portile2 (2.4.0)
|
|
30
|
+
minitest (5.11.3)
|
|
31
|
+
multipart-post (2.1.1)
|
|
32
|
+
mustermann (1.0.3)
|
|
33
|
+
nokogiri (1.10.3)
|
|
34
|
+
mini_portile2 (~> 2.4.0)
|
|
35
|
+
open4 (1.3.4)
|
|
36
|
+
phantomjs (2.1.1.0)
|
|
37
|
+
polynomials (0.4.4)
|
|
38
|
+
activesupport
|
|
39
|
+
i18n
|
|
40
|
+
rack (2.0.7)
|
|
41
|
+
rack-protection (2.0.5)
|
|
42
|
+
rack
|
|
43
|
+
rake (12.3.3)
|
|
44
|
+
screencap (0.1.4)
|
|
45
|
+
phantomjs
|
|
46
|
+
sinatra (2.0.5)
|
|
47
|
+
mustermann (~> 1.0)
|
|
48
|
+
rack (~> 2.0)
|
|
49
|
+
rack-protection (= 2.0.5)
|
|
50
|
+
tilt (~> 2.0)
|
|
51
|
+
thread_safe (0.3.6)
|
|
52
|
+
tilt (2.0.9)
|
|
53
|
+
tzinfo (1.2.5)
|
|
54
|
+
thread_safe (~> 0.1)
|
|
55
|
+
wit (6.0.0)
|
|
56
|
+
zircon (0.0.8)
|
|
57
|
+
|
|
58
|
+
PLATFORMS
|
|
59
|
+
ruby
|
|
60
|
+
|
|
61
|
+
DEPENDENCIES
|
|
62
|
+
activesupport
|
|
63
|
+
brainz
|
|
64
|
+
bundler
|
|
65
|
+
byebug
|
|
66
|
+
colorize
|
|
67
|
+
eezee_regexes
|
|
68
|
+
facets
|
|
69
|
+
gnuplot
|
|
70
|
+
gyazo
|
|
71
|
+
json2table
|
|
72
|
+
mathn
|
|
73
|
+
nokogiri
|
|
74
|
+
open4
|
|
75
|
+
polynomials
|
|
76
|
+
rack
|
|
77
|
+
rake
|
|
78
|
+
screencap
|
|
79
|
+
sinatra
|
|
80
|
+
wit
|
|
81
|
+
zircon
|
|
82
|
+
|
|
83
|
+
BUNDLED WITH
|
|
84
|
+
2.0.2
|
|
@@ -0,0 +1,1243 @@
|
|
|
1
|
+
|
|
2
|
+
require 'zircon'
|
|
3
|
+
require 'colorize'
|
|
4
|
+
require 'byebug'
|
|
5
|
+
require 'json'
|
|
6
|
+
require 'date'
|
|
7
|
+
require 'timeout'
|
|
8
|
+
require 'gyazo'
|
|
9
|
+
require 'open4'
|
|
10
|
+
require 'brainz'
|
|
11
|
+
require 'bundler'
|
|
12
|
+
require 'sinatra'
|
|
13
|
+
require 'nokogiri'
|
|
14
|
+
require 'eezee_regexes'
|
|
15
|
+
|
|
16
|
+
require 'bigdecimal'
|
|
17
|
+
|
|
18
|
+
require 'json2table'
|
|
19
|
+
|
|
20
|
+
require 'rake'
|
|
21
|
+
require 'active_support/all'
|
|
22
|
+
|
|
23
|
+
class Bomb
|
|
24
|
+
def throw
|
|
25
|
+
return """
|
|
26
|
+
```
|
|
27
|
+
Local variables (5 first)
|
|
28
|
+
#{local_variables.sample(5)}
|
|
29
|
+
|
|
30
|
+
Instance variables (5 first)
|
|
31
|
+
#{instance_variables.sample(5)}
|
|
32
|
+
|
|
33
|
+
Public methods (5 first)
|
|
34
|
+
#{public_methods.sample(5)}
|
|
35
|
+
|
|
36
|
+
ENV (120 first chars)
|
|
37
|
+
#{ENV.inspect[0...120]}
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
"""
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
EEZEE_PREFIX = "eezee "
|
|
44
|
+
ANSWERS = Hash.new { |hash, key| hash[key] = Hash.new }
|
|
45
|
+
CURRENT_DISCORD_MESSAGE = Hash.new
|
|
46
|
+
|
|
47
|
+
class ::Integer
|
|
48
|
+
def direction
|
|
49
|
+
self/self.abs
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
class Number
|
|
55
|
+
def initialize(string_representation_from_discord, source="discord")
|
|
56
|
+
@source = source
|
|
57
|
+
@string_representation_from_discord = string_representation_from_discord
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def to_s
|
|
61
|
+
"""
|
|
62
|
+
NUMBER
|
|
63
|
+
STRING REPRESENTATION FROM #{@source.upcase}
|
|
64
|
+
#{@string_representation_from_discord}
|
|
65
|
+
|
|
66
|
+
RUBY #{RUBY_ENGINE} #{RUBY_VERSION} FLOAT
|
|
67
|
+
#{@string_representation_from_discord.to_f}
|
|
68
|
+
|
|
69
|
+
RUBY #{RUBY_ENGINE} #{RUBY_VERSION} BIG DECIMAL
|
|
70
|
+
#{BigDecimal(@string_representation_from_discord)}
|
|
71
|
+
|
|
72
|
+
RUBY #{RUBY_ENGINE} #{RUBY_VERSION} INTEGER
|
|
73
|
+
#{@string_representation_from_discord.to_i}
|
|
74
|
+
|
|
75
|
+
PYTHON #{"runtime X"} #{"version X"} INTEGER
|
|
76
|
+
tbi by @gurrenm3 or @gurrenm4
|
|
77
|
+
PYTHON #{"runtime X"} #{"version X"} FLOAT
|
|
78
|
+
tbi by @gurrenm3 or @gurrenm4
|
|
79
|
+
"""
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
class Function
|
|
84
|
+
attr_accessor :input_variables, :output_variables, :string_from_discord
|
|
85
|
+
|
|
86
|
+
def initialize
|
|
87
|
+
self.input_variables = []
|
|
88
|
+
self.output_variables = []
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def evaluate
|
|
92
|
+
case string_from_discord
|
|
93
|
+
when "NeuralNetwork()"
|
|
94
|
+
return NeuralNetwork().verbose_introspect(very_verbose=true)
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def compute(*args)
|
|
99
|
+
if @compute_type
|
|
100
|
+
case @compute_type
|
|
101
|
+
when :convert_to_integer_then_sum
|
|
102
|
+
return args.map(&:to_i).reduce(:+)
|
|
103
|
+
when :sum
|
|
104
|
+
return args.public_send(@compute_type)
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
return args
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def compute_is(compute_type)
|
|
112
|
+
@compute_type = compute_type
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def to_s
|
|
116
|
+
"Function"
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def explain
|
|
120
|
+
"""
|
|
121
|
+
This command creates a new function ƒ(x) = y
|
|
122
|
+
|
|
123
|
+
ƒ
|
|
124
|
+
|
|
125
|
+
Mac OS X: press option and f simultaniously
|
|
126
|
+
Windows:
|
|
127
|
+
On a computer running Microsoft Windows and using the Windows-1252 character encoding, the minuscule can be input using alt+159 or alt+0131.
|
|
128
|
+
Look up at wikipedia and search for ƒ
|
|
129
|
+
Linux:
|
|
130
|
+
Copy & Paste ƒ (maybe a clipboard manager?) ofc you rule the world
|
|
131
|
+
"""
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
class Method
|
|
136
|
+
def source(limit=10)
|
|
137
|
+
file, line = source_location
|
|
138
|
+
if file && line
|
|
139
|
+
IO.readlines(file)[line-1,limit]
|
|
140
|
+
else
|
|
141
|
+
nil
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
class NeuralNetwork
|
|
147
|
+
# TODO: DelegateAllMissingMethodsTo @brainz
|
|
148
|
+
|
|
149
|
+
def method_missing(method, *args, &block)
|
|
150
|
+
@brainz.public_send(method, *args, &block)
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
def initialize
|
|
154
|
+
@brainz = Brainz::Brainz.new
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
def verbose_introspect(very_verbose = false)
|
|
158
|
+
var = <<~HUMAN_SCRIPT_INTROSPECT_FOR_DISCORD
|
|
159
|
+
```
|
|
160
|
+
Brainz Rubygem (wrapper)
|
|
161
|
+
Ruby object id: #{@brainz.object_id}
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
```
|
|
165
|
+
Instance variables
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
```
|
|
169
|
+
#{@brainz.instance_variables}
|
|
170
|
+
```
|
|
171
|
+
HUMAN_SCRIPT_INTROSPECT_FOR_DISCORD
|
|
172
|
+
|
|
173
|
+
if very_verbose
|
|
174
|
+
var = <<~HUMAN_SCRIPT_INTROSPECT_FOR_DISCORD
|
|
175
|
+
```
|
|
176
|
+
Public methods (random sample of 3)
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
```
|
|
180
|
+
#{(@brainz.public_methods - Object.new.public_methods).sample(3).join("\n")}
|
|
181
|
+
```
|
|
182
|
+
HUMAN_SCRIPT_INTROSPECT_FOR_DISCORD
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
unless @brainz.network.nil?
|
|
187
|
+
# var += <<~HUMAN_SCRIPT_INTROSPECT_FOR_DISCORD
|
|
188
|
+
# ```
|
|
189
|
+
# #{@brainz.network.input.to_s}
|
|
190
|
+
# #{@brainz.network.hidden.to_s}
|
|
191
|
+
# #{@brainz.network.output.to_s}
|
|
192
|
+
# ```
|
|
193
|
+
# HUMAN_SCRIPT_INTROSPECT_FOR_DISCORD
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
return var
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
def to_s
|
|
200
|
+
verbose_introspect
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
def NeuralNetwork()
|
|
206
|
+
NeuralNetwork.new
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
class GitterDumbDevBot
|
|
210
|
+
def initialize
|
|
211
|
+
@currently_selected_project = "lemonandroid/gam"
|
|
212
|
+
@variables_for_chat_users = Hash.new
|
|
213
|
+
@players = Hash.new do |dictionary, identifier|
|
|
214
|
+
dictionary[identifier] = Hash.new
|
|
215
|
+
end
|
|
216
|
+
@melting_point_receivables = ["puts 'hello word'"]
|
|
217
|
+
@probes = []
|
|
218
|
+
@melted_liquids = []
|
|
219
|
+
@sent_messages = []
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
# SEC-IMPORTANT
|
|
223
|
+
|
|
224
|
+
@took_off = true
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
def unsafe!
|
|
228
|
+
@took_off = false
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
def load()
|
|
232
|
+
return if ENV["RACK_ENV"] == 'production'
|
|
233
|
+
|
|
234
|
+
warn and return [:info, :no_marshaled_data_found].join(' > ') unless File.exists?("/var/gam-discord-bot.ruby-marshal")
|
|
235
|
+
data = File.read("/var/gam-discord-bot.ruby-marshal")
|
|
236
|
+
@melting_point_receivables = Marshal.load(data)
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
def dump()
|
|
240
|
+
return if ENV["RACK_ENV"] == 'production'
|
|
241
|
+
require 'facets'
|
|
242
|
+
|
|
243
|
+
data = Marshal.dump(@melting_point_receivables)
|
|
244
|
+
File.rewrite("/var/gam-discord-bot.ruby-marshal") do |_previous_file_content_string|
|
|
245
|
+
data
|
|
246
|
+
end
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
def twitch_username_from_url(url)
|
|
250
|
+
url.match(/\/(\w*)\Z/)[1]
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
def record_live_stream_video_and_upload_get_url(url:, duration_seonds:)
|
|
254
|
+
twitch_username = twitch_username_from_url(url)
|
|
255
|
+
twitch_broadcaster_id = JSON.parse(`curl -H 'Authorization: Bearer #{ENV['EZE_TWITCH_TOKEN']}' \
|
|
256
|
+
-X GET 'https://api.twitch.tv/helix/users?login=#{twitch_username}'`)["data"][0]["id"]
|
|
257
|
+
created_clip_json_response = `curl -H 'Authorization: Bearer #{ENV['EZE_TWITCH_TOKEN']}' \
|
|
258
|
+
-X POST 'https://api.twitch.tv/helix/clips?broadcaster_id=#{twitch_broadcaster_id}'`
|
|
259
|
+
|
|
260
|
+
created_clip_json_response = JSON.parse(created_clip_json_response)
|
|
261
|
+
|
|
262
|
+
id = created_clip_json_response["data"][0]["id"]
|
|
263
|
+
return "https://clips.twitch.tv/#{id}"
|
|
264
|
+
|
|
265
|
+
# return `curl -H 'Authorization: Bearer #{ENV['EZE_TWITCH_TOKEN']}' \
|
|
266
|
+
# -X GET '#{url}'`
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
def get_string_of_x_bytes_by_curling_url(url:, byte_count:)
|
|
270
|
+
str = `curl #{url}`
|
|
271
|
+
sub_zero_string = str.each_char.reduce("") do |acc, chr| # haha, sub sero string
|
|
272
|
+
unless acc.bytesize === byte_count
|
|
273
|
+
acc += chr
|
|
274
|
+
else
|
|
275
|
+
break acc
|
|
276
|
+
end
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
"`#{sub_zero_string.unpack('c*')}`"
|
|
280
|
+
end
|
|
281
|
+
|
|
282
|
+
puts "test"
|
|
283
|
+
puts "eezee"
|
|
284
|
+
puts "what?"
|
|
285
|
+
puts "132423"
|
|
286
|
+
puts "practice"
|
|
287
|
+
puts "crazy"
|
|
288
|
+
p "crazy practice"
|
|
289
|
+
p "brasil"
|
|
290
|
+
p "circle"
|
|
291
|
+
p "circle of humans"
|
|
292
|
+
p "fc barcelona"
|
|
293
|
+
p "circle passing training game"
|
|
294
|
+
p "forgot what it's called"
|
|
295
|
+
p "i you seek my help, i expect you to be using gyazo.com gifs to communicate bugs / non-functional stuff"
|
|
296
|
+
|
|
297
|
+
|
|
298
|
+
p <<~TEST
|
|
299
|
+
any one here?
|
|
300
|
+
|
|
301
|
+
Send a message in Discord twitch_username
|
|
302
|
+
|
|
303
|
+
You can see the discord channel link at B O T C O M P A N Y . D E
|
|
304
|
+
|
|
305
|
+
https://gyazo.com/c16ec1dd35409c7eac9642dc013da920
|
|
306
|
+
TEST
|
|
307
|
+
|
|
308
|
+
require 'net/http'
|
|
309
|
+
def on_message(message, message_id, channel_id, user_id)
|
|
310
|
+
if ENV['HEROKU_DISCORD_CONFIGURABLE'] == 'true'
|
|
311
|
+
allowed_channels = ENV['ALLOWED_CHANNELS'] || [602625635633856513, 601874263666065411, 609100317899882527]
|
|
312
|
+
else
|
|
313
|
+
allowed_channels = [601874263666065411, 602625635633856513, 609100317899882527]
|
|
314
|
+
|
|
315
|
+
end
|
|
316
|
+
|
|
317
|
+
if channel_id.present? && !allowed_channels.include?(channel_id.to_i)
|
|
318
|
+
return ""
|
|
319
|
+
end
|
|
320
|
+
|
|
321
|
+
if message === "get last message id"
|
|
322
|
+
return CURRENT_DISCORD_MESSAGE[:mesage_id]
|
|
323
|
+
end
|
|
324
|
+
|
|
325
|
+
CURRENT_DISCORD_MESSAGE[:mesage_id] = message_id
|
|
326
|
+
|
|
327
|
+
require 'wit'
|
|
328
|
+
client = Wit.new(access_token: ENV["WIT_AI_TOKEN"])
|
|
329
|
+
response = client.message(message)
|
|
330
|
+
|
|
331
|
+
if !response.nil? && !response["entities"].empty? && !response["entities"]["intent"].blank?
|
|
332
|
+
if !response.nil? && !response["entities"].empty? && response["entities"]["intent"][0]["value"] === "new_functionalities_template_idea"
|
|
333
|
+
if rand() > 0.9
|
|
334
|
+
return response.inspect
|
|
335
|
+
end
|
|
336
|
+
return "Maybe you lack ideas?" if response["entities"]["idea"].blank? or response["entities"]["search_query"].blank?
|
|
337
|
+
# qanda_iframe_url = "https://github.com/search?q=#{CGI.escape(search_query)}"
|
|
338
|
+
|
|
339
|
+
# iframe_url = "https://gitlab.com/search?utf8=%E2%9C%93&search=#{CGI.escape(search_query)}&group_id=&project_id=&repository_ref=&nav_source=navbar"
|
|
340
|
+
|
|
341
|
+
if rand() < 0.1
|
|
342
|
+
idea = response["entities"]["idea"][0]["value"]
|
|
343
|
+
qanda_iframe_url = "https://agi.blue/?q=#{CGI.escape(idea)}"
|
|
344
|
+
elsif rand() < 0.5
|
|
345
|
+
idea = response["entities"]["search_query"][0]["value"]
|
|
346
|
+
qanda_iframe_url = "https://agi.blue/?q=#{CGI.escape(idea)}"
|
|
347
|
+
end
|
|
348
|
+
|
|
349
|
+
return "https://unique-swing.glitch.me/?myParam=#{CGI.escape(qanda_iframe_url)}"
|
|
350
|
+
end
|
|
351
|
+
|
|
352
|
+
if !response.nil? && !response["entities"].empty? && response["entities"]["intent"][0]["value"] === "new_functionalities_free_form_search"
|
|
353
|
+
search_query = response["entities"]["search_query"][0]["value"]
|
|
354
|
+
# qanda_iframe_url = "https://github.com/search?q=#{CGI.escape(search_query)}"
|
|
355
|
+
|
|
356
|
+
# qanda_iframe_url = "https://gitlab.com/search?utf8=%E2%9C%93&search=#{CGI.escape(search_query)}&group_id=&project_id=&repository_ref=&nav_source=navbar"
|
|
357
|
+
qanda_iframe_url = "https://agi.blue/?q=#{CGI.escape(search_query)}"
|
|
358
|
+
|
|
359
|
+
return "https://unique-swing.glitch.me/?myParam=#{CGI.escape(qanda_iframe_url)}"
|
|
360
|
+
end
|
|
361
|
+
|
|
362
|
+
if !response.nil? && !response["entities"].empty? && response["entities"]["intent"][0]["value"] === "offer_cool_new_functionalities"
|
|
363
|
+
return """
|
|
364
|
+
1: New regex command :)
|
|
365
|
+
2: New wit.ai entity :(
|
|
366
|
+
3: New functionality idea :'D
|
|
367
|
+
4: Free form search :diamond:
|
|
368
|
+
5: Consume new github source link Kappa
|
|
369
|
+
|
|
370
|
+
Please vote via emojis
|
|
371
|
+
"""
|
|
372
|
+
end
|
|
373
|
+
|
|
374
|
+
|
|
375
|
+
if !response.nil? && !response["entities"].empty? && response["entities"]["intent"][0]["value"] === "question-about-eezee-probe"
|
|
376
|
+
answer_api_response = `curl -XGET 'https://api.wit.ai/samples?entity_ids=intent&entity_values=explain-eezee-probe&limit=10' \
|
|
377
|
+
-H "Authorization: Bearer $WIT_AI_TOKEN"`
|
|
378
|
+
|
|
379
|
+
if !answer_api_response.nil? && JSON.parse(answer_api_response).any?
|
|
380
|
+
return JSON.parse(answer_api_response).sample["text"]
|
|
381
|
+
end
|
|
382
|
+
end
|
|
383
|
+
|
|
384
|
+
# if !response
|
|
385
|
+
# return response.inspect
|
|
386
|
+
# end
|
|
387
|
+
|
|
388
|
+
if response && response["entities"].any? && response["entities"]["intent"].map { |intent| intent["value"] }.any? { |intent_value| intent_value === "explain-eezee-probe" }
|
|
389
|
+
answer_api_response = `curl -XGET 'https://api.wit.ai/samples?entity_ids=intent&entity_values=explain-eezee-probe&limit=10' \
|
|
390
|
+
-H "Authorization: Bearer $WIT_AI_TOKEN"`
|
|
391
|
+
|
|
392
|
+
if !answer_api_response.nil? && JSON.parse(answer_api_response).any?
|
|
393
|
+
return JSON.parse(answer_api_response).sample["text"]
|
|
394
|
+
end
|
|
395
|
+
end
|
|
396
|
+
end
|
|
397
|
+
return response.inspect if rand() > 0.7
|
|
398
|
+
|
|
399
|
+
message_for_discord = response.inspect.gsub(/<@(\d+)>/, '<@ \1>')
|
|
400
|
+
|
|
401
|
+
url = "https://botcompany.de/1024081/raw?_pass=#{ENV['BOTCOMPANY']}&server=next-gen+bots&channel=#{602625635633856513}&post=#{CGI.escape(message_for_discord)}"
|
|
402
|
+
|
|
403
|
+
uri = URI(url)
|
|
404
|
+
Net::HTTP.get(uri)
|
|
405
|
+
|
|
406
|
+
# if /run asm #{url_regex}/ === message
|
|
407
|
+
# asm = `curl #{$1}`
|
|
408
|
+
# t = Tempfile.new(['asm', '.asm'])
|
|
409
|
+
# t.write(asm)
|
|
410
|
+
|
|
411
|
+
# `nasm -f macho64 #{t.path}`
|
|
412
|
+
# `ld -macosx_version_min 10.7.0 -lSystem -o hello #{t.path.ext('o')}`
|
|
413
|
+
# byebug
|
|
414
|
+
# return `./hello`
|
|
415
|
+
# end
|
|
416
|
+
|
|
417
|
+
if /\Aget cpu instructions set\Z/ === message
|
|
418
|
+
return `sysctl -a | grep cpu.feat`
|
|
419
|
+
end
|
|
420
|
+
|
|
421
|
+
if /\Ais eeZee ejected\?\Z/ === message
|
|
422
|
+
if @ejected == true
|
|
423
|
+
return "Yes, @eeZee is ejected"
|
|
424
|
+
else
|
|
425
|
+
return "No, @eeZee should still respond"
|
|
426
|
+
end
|
|
427
|
+
end
|
|
428
|
+
|
|
429
|
+
if /explain context/ === message
|
|
430
|
+
return """
|
|
431
|
+
it: the overall subject
|
|
432
|
+
this: the most nearest subject
|
|
433
|
+
that: the subject a bit farer then this (dimension for farer could be time, location, logic, etc)
|
|
434
|
+
"""
|
|
435
|
+
end
|
|
436
|
+
|
|
437
|
+
|
|
438
|
+
if /dev (.*)/ === message
|
|
439
|
+
begin
|
|
440
|
+
`git clone https://github.com/pickhardt/betty`
|
|
441
|
+
ensure
|
|
442
|
+
return `ruby ./betty/main.rb #{$1}`
|
|
443
|
+
end
|
|
444
|
+
end
|
|
445
|
+
|
|
446
|
+
return "" if @ejected
|
|
447
|
+
|
|
448
|
+
|
|
449
|
+
if (commands = message.split("|")).count > 1
|
|
450
|
+
|
|
451
|
+
result = nil
|
|
452
|
+
commands.each do |command|
|
|
453
|
+
result = self.on_message(command.rstrip)
|
|
454
|
+
|
|
455
|
+
@last_pipe = result
|
|
456
|
+
end
|
|
457
|
+
|
|
458
|
+
return result.inspect[0...500]
|
|
459
|
+
end
|
|
460
|
+
|
|
461
|
+
return "" if message.empty?
|
|
462
|
+
|
|
463
|
+
def wrap_code_for_discord(string_of_code)
|
|
464
|
+
<<~DISCORD_MESSAGE
|
|
465
|
+
```
|
|
466
|
+
#{string_of_code}
|
|
467
|
+
```
|
|
468
|
+
DISCORD_MESSAGE
|
|
469
|
+
end
|
|
470
|
+
if /quick maths/ =~ message
|
|
471
|
+
require 'screencap'
|
|
472
|
+
|
|
473
|
+
f = Screencap::Fetcher.new("https://projecteuler.net/problem=#{(0...630).to_a.sample}")
|
|
474
|
+
|
|
475
|
+
|
|
476
|
+
# return wrap_code_for_discord(f.phantomjs_code[0..500])
|
|
477
|
+
|
|
478
|
+
screenshot = f.fetch(div: '.problem_content')
|
|
479
|
+
|
|
480
|
+
tempfile = Tempfile.new
|
|
481
|
+
|
|
482
|
+
`convert -flatten #{screenshot.path} #{tempfile.path}`
|
|
483
|
+
|
|
484
|
+
return upload_gyazo(tempfile.path)
|
|
485
|
+
end
|
|
486
|
+
|
|
487
|
+
if /server byebug/ =~ message
|
|
488
|
+
byebug
|
|
489
|
+
end
|
|
490
|
+
|
|
491
|
+
if /show abstract syntax tree of regexes/ === message
|
|
492
|
+
return ::RegexRulesCollector.new.to_s
|
|
493
|
+
end
|
|
494
|
+
|
|
495
|
+
if /show all regex root level nodes count/ === message
|
|
496
|
+
return ::RegexRulesCollector.new.root_level_if_nodes.count.to_s
|
|
497
|
+
end
|
|
498
|
+
|
|
499
|
+
if /search "(\w*)"/i === message
|
|
500
|
+
fail "INSECURE" if not $1 =~ /\A\w*\Z/i
|
|
501
|
+
return `echo '#{@last_pipe}' | grep '#{$1}'`[0...100]
|
|
502
|
+
end
|
|
503
|
+
|
|
504
|
+
if /agi\.blue/ === message && !@raw_last_pipe.nil?
|
|
505
|
+
@last_raw_pipe.each do |row|
|
|
506
|
+
`curl http://agi.blue/bot/post?q=#{CGI.escape(row)}&key=source&value=eezee`
|
|
507
|
+
end
|
|
508
|
+
|
|
509
|
+
return "#{@last_raw_pipe.count} entries created on https://agi.blue"
|
|
510
|
+
end
|
|
511
|
+
|
|
512
|
+
if /clone eezee 10 times/ === message
|
|
513
|
+
``
|
|
514
|
+
return "climbing the sourcerer.io ruby leaderboard"
|
|
515
|
+
end
|
|
516
|
+
|
|
517
|
+
if /show all regex root level nodes/ === message
|
|
518
|
+
def wrap(text)
|
|
519
|
+
"""
|
|
520
|
+
```
|
|
521
|
+
#{text}
|
|
522
|
+
```
|
|
523
|
+
"""
|
|
524
|
+
end
|
|
525
|
+
|
|
526
|
+
def raw_pipe(result)
|
|
527
|
+
@last_raw_pipe = result
|
|
528
|
+
end
|
|
529
|
+
|
|
530
|
+
result1 = nil
|
|
531
|
+
if @last_raw_pipe
|
|
532
|
+
result1 = RegexRulesCollector.new(@last_raw_pipe).flat_root_level_if_nodes
|
|
533
|
+
else
|
|
534
|
+
result1 = RegexRulesCollector.new.flat_root_level_if_nodes
|
|
535
|
+
end
|
|
536
|
+
|
|
537
|
+
result2 = raw_pipe(result1)
|
|
538
|
+
|
|
539
|
+
return wrap(result)
|
|
540
|
+
end
|
|
541
|
+
|
|
542
|
+
if /\A((?:10)|(?:[1-9]))\Z/ === message
|
|
543
|
+
array = [
|
|
544
|
+
"1: get random eezee bot with wit.ai integration",
|
|
545
|
+
"2: 関数",
|
|
546
|
+
"3: chat-variable bot0 `NeuralNetwork()`",
|
|
547
|
+
"4: get-chat-variable bot0",
|
|
548
|
+
"5: console 2 + 2 (only works in insecure mode)",
|
|
549
|
+
"6: docker ruby `2 + 2`",
|
|
550
|
+
"7: docker python `2 + 2`",
|
|
551
|
+
"8: docker go `2 + 2` (dysfunctional)",
|
|
552
|
+
"9: docker elixir `IO.puts(2 + 2)`",
|
|
553
|
+
"10: docker julia `2 + 2`"
|
|
554
|
+
]
|
|
555
|
+
|
|
556
|
+
return array[$1.to_i - 1]
|
|
557
|
+
end
|
|
558
|
+
|
|
559
|
+
if /take off/ =~ message
|
|
560
|
+
@took_off = true
|
|
561
|
+
end
|
|
562
|
+
|
|
563
|
+
if /\A(\d+(?:\.\d+)?)\Z/ === message
|
|
564
|
+
return Number.new(message).to_s
|
|
565
|
+
end
|
|
566
|
+
|
|
567
|
+
if message === "get random eezee bot with wit.ai integration"
|
|
568
|
+
return "pls integrate a github gist listing github urls of eezees with working bot integration"
|
|
569
|
+
end
|
|
570
|
+
|
|
571
|
+
def new_function_command
|
|
572
|
+
@raw_last_pipe = Function.new
|
|
573
|
+
return @raw_last_pipe.explain
|
|
574
|
+
end
|
|
575
|
+
|
|
576
|
+
if message === "ƒ"
|
|
577
|
+
case @raw_last_pipe
|
|
578
|
+
when Function
|
|
579
|
+
return @raw_last_pipe.evaluate().to_s[0...500]
|
|
580
|
+
else
|
|
581
|
+
return new_function_command
|
|
582
|
+
end
|
|
583
|
+
end
|
|
584
|
+
|
|
585
|
+
if message =~ /ƒ\s*=\s*(.*)/i
|
|
586
|
+
case @raw_last_pipe
|
|
587
|
+
when Function
|
|
588
|
+
@raw_last_pipe.string_from_discord = $1
|
|
589
|
+
end
|
|
590
|
+
end
|
|
591
|
+
|
|
592
|
+
if message === "visualize ƒ"
|
|
593
|
+
response = execute_bash_in_currently_selected_project("ruby /Users/lemonandroid/Documents/GitHub/polynomials/examples/plot_only_mutual_data.rb \"#{@raw_last_pipe.string_from_discord}\"")
|
|
594
|
+
return response
|
|
595
|
+
end
|
|
596
|
+
|
|
597
|
+
if /\Aƒ\(([^\)]*)\)\Z/ === message
|
|
598
|
+
case @raw_last_pipe
|
|
599
|
+
when Functionƒ
|
|
600
|
+
return @raw_last_pipe.compute(*$1.split(',')).to_s
|
|
601
|
+
end
|
|
602
|
+
end
|
|
603
|
+
|
|
604
|
+
if /\A関数\(([^\)]*)\)\Z/ === message
|
|
605
|
+
case @raw_last_pipe
|
|
606
|
+
when Function
|
|
607
|
+
return @raw_last_pipe.compute(*$1.split(',')).to_s
|
|
608
|
+
end
|
|
609
|
+
end
|
|
610
|
+
|
|
611
|
+
if /\Aƒ compute is sumZ/ === message
|
|
612
|
+
case @raw_last_pipe
|
|
613
|
+
when Function
|
|
614
|
+
@raw_last_pipe.compute_is(:sum)
|
|
615
|
+
end
|
|
616
|
+
end
|
|
617
|
+
|
|
618
|
+
if /\A関数 compute is sum\Z/ === message
|
|
619
|
+
case @raw_last_pipe
|
|
620
|
+
when Function
|
|
621
|
+
@raw_last_pipe.compute_is(:sum)
|
|
622
|
+
end
|
|
623
|
+
end
|
|
624
|
+
|
|
625
|
+
|
|
626
|
+
if /\Aƒ compute is convert to integer and sum/ === message
|
|
627
|
+
case @raw_last_pipe
|
|
628
|
+
when Function
|
|
629
|
+
@raw_last_pipe.compute_is(:convert_to_integer_then_sum)
|
|
630
|
+
end
|
|
631
|
+
end
|
|
632
|
+
|
|
633
|
+
if /\A関数 compute is convert to integer and sum\Z/ === message
|
|
634
|
+
case @raw_last_pipe
|
|
635
|
+
when Function
|
|
636
|
+
@raw_last_pipe.compute_is(:convert_to_integer_then_sum)
|
|
637
|
+
end
|
|
638
|
+
end
|
|
639
|
+
|
|
640
|
+
if message === "関数"
|
|
641
|
+
return new_function_command
|
|
642
|
+
end
|
|
643
|
+
|
|
644
|
+
if message === "get wit.ai token"
|
|
645
|
+
return "client HGLIOLWCVEFT2ZIIBLO3KRCA2QYQPGPZ" + " " + "server GZLSZCIOQNZEPPONMS255EYOCR5APVN3"
|
|
646
|
+
end
|
|
647
|
+
|
|
648
|
+
if message === "get wit.ai token comfortably"
|
|
649
|
+
return """
|
|
650
|
+
echo '
|
|
651
|
+
export WIT_AI_TOKEN=\"HGLIOLWCVEFT2ZIIBLO3KRCA2QYQPGPZ\"
|
|
652
|
+
export WIT_AI_TOKEN_SERVER=\"GZLSZCIOQNZEPPONMS255EYOCR5APVN3\"
|
|
653
|
+
' > ~/.bash_profile
|
|
654
|
+
"""
|
|
655
|
+
end
|
|
656
|
+
|
|
657
|
+
message.gsub!(EEZEE_PREFIX, '')
|
|
658
|
+
|
|
659
|
+
removed_colors = [:black, :white, :light_black, :light_white]
|
|
660
|
+
colors = String.colors - removed_colors
|
|
661
|
+
|
|
662
|
+
if message =~ /AGILE FLOW/
|
|
663
|
+
return "https://pbs.twimg.com/media/D_ei8NdXkAAE_0l.jpg:large"
|
|
664
|
+
end
|
|
665
|
+
|
|
666
|
+
if message =~ /bring probes to melting point/
|
|
667
|
+
@melting_point_receivables.push(@probes)
|
|
668
|
+
@probes = []
|
|
669
|
+
return "all of them? melt all the precious probes you idiot?"
|
|
670
|
+
end
|
|
671
|
+
|
|
672
|
+
if message =~ /show source/
|
|
673
|
+
return "https://github.com/LemonAndroid/eezee9"
|
|
674
|
+
end
|
|
675
|
+
|
|
676
|
+
if message =~ /philosophy/
|
|
677
|
+
return [
|
|
678
|
+
# """
|
|
679
|
+
# => first step in the correct direction
|
|
680
|
+
# : build on String#scan and include lines before and after
|
|
681
|
+
# : write a simple wrapper for String#scan and include first char before the match and last char after the match
|
|
682
|
+
# eezee: divide & conquer :white_check_mark:
|
|
683
|
+
# eezee: pls paste repl.it link
|
|
684
|
+
# https://repl.it/repls/SpiffyKookyConfigfiles
|
|
685
|
+
# repl.it
|
|
686
|
+
# SpiffyKookyConfigfiles
|
|
687
|
+
# Powerful and simple online compiler, IDE, interpreter, and REPL. Code, compile, and run code in 50+ programming languages: Clojure, Haskell, Kotlin (beta), QBasic, Forth, LOLCODE, BrainF, Emoticon, Bloop, Unlambda, JavaScript, CoffeeScript, Scheme, APL, Lua, Python 2.7, Ruby,...
|
|
688
|
+
|
|
689
|
+
# @eeZee engage test mode
|
|
690
|
+
# eezee: suggested input output pair search(\"test test test\", \"est\") => [\"test \"]
|
|
691
|
+
# @eeZee :white_check_mark:
|
|
692
|
+
# """,
|
|
693
|
+
|
|
694
|
+
"""
|
|
695
|
+
DEVELOP THIS BY USING ITSELF
|
|
696
|
+
WIELD THE TOOL TO DESIGN ITSELF
|
|
697
|
+
""",
|
|
698
|
+
|
|
699
|
+
"""
|
|
700
|
+
DS-INSPIRED WORKFLOW EXPERIMENT
|
|
701
|
+
|
|
702
|
+
1: DATA
|
|
703
|
+
|
|
704
|
+
|
|
705
|
+
2: MEASURE
|
|
706
|
+
|
|
707
|
+
3: PROGRAM
|
|
708
|
+
|
|
709
|
+
|
|
710
|
+
4: BUILD
|
|
711
|
+
|
|
712
|
+
5: TEST
|
|
713
|
+
|
|
714
|
+
6: SHIP
|
|
715
|
+
|
|
716
|
+
7: GOTO: 1
|
|
717
|
+
"""
|
|
718
|
+
|
|
719
|
+
].sample
|
|
720
|
+
end
|
|
721
|
+
|
|
722
|
+
if message =~ /probe (.*) (.*)/
|
|
723
|
+
action = :log
|
|
724
|
+
|
|
725
|
+
resource = $1
|
|
726
|
+
probe_identifier = $2
|
|
727
|
+
|
|
728
|
+
if probe_identifier =~ /(\d+)s/
|
|
729
|
+
duration_seconds = $1.to_i
|
|
730
|
+
end
|
|
731
|
+
|
|
732
|
+
if probe_identifier =~ /(\d+)bytes/
|
|
733
|
+
byte_count = $1.to_i
|
|
734
|
+
end
|
|
735
|
+
|
|
736
|
+
case resource
|
|
737
|
+
when /twitch.tv/
|
|
738
|
+
twitch_url = resource
|
|
739
|
+
action = :twitch
|
|
740
|
+
when /http/
|
|
741
|
+
action = :plain_curl
|
|
742
|
+
url = resource
|
|
743
|
+
end
|
|
744
|
+
|
|
745
|
+
case action
|
|
746
|
+
when :twitch
|
|
747
|
+
probe = record_live_stream_video_and_upload_get_url(url: twitch_url, duration_seonds: duration_seconds)
|
|
748
|
+
@probes.push(probe)
|
|
749
|
+
return probe
|
|
750
|
+
when :plain_curl
|
|
751
|
+
probe = get_string_of_x_bytes_by_curling_url(url: url, byte_count: byte_count)
|
|
752
|
+
@probes.push(probe)
|
|
753
|
+
return probe
|
|
754
|
+
end
|
|
755
|
+
end
|
|
756
|
+
|
|
757
|
+
|
|
758
|
+
# Example ∫-30,-20ƒ(x) = -10x+ -10
|
|
759
|
+
|
|
760
|
+
# CO1 CO2
|
|
761
|
+
|
|
762
|
+
|
|
763
|
+
# Coefficients
|
|
764
|
+
|
|
765
|
+
# IMPORTANT IDEA: Show what variables correspond to in a visual example
|
|
766
|
+
regex = /∫\s*(\-?\d+)\s*,\s*(\-?\d+)\s*[ƒf]\(x\)\s*=(.*)/
|
|
767
|
+
require 'polynomials'
|
|
768
|
+
|
|
769
|
+
if message =~ regex
|
|
770
|
+
polynomial = Polynomials::Polynomial.parse($3)
|
|
771
|
+
|
|
772
|
+
# Terms is a Hash that has the exponents of the terms as keys
|
|
773
|
+
# https://github.com/LemonAndroid/polynomials/blob/newEra/lib/polynomials/polynomial.rb#L19
|
|
774
|
+
coefficient_1 = polynomial.terms[1].coefficient
|
|
775
|
+
coefficient_2 = polynomial.terms[0].coefficient
|
|
776
|
+
|
|
777
|
+
integral_F_end_value_2 = (
|
|
778
|
+
((coefficient_1 / 2.0) * ($2.to_f**2)) + (coefficient_2.to_f * $2.to_f)
|
|
779
|
+
)
|
|
780
|
+
integral_F_start_value_1 = (
|
|
781
|
+
((coefficient_1 / 2.0) * ($1.to_f**2)) + (coefficient_2.to_f * $1.to_f)
|
|
782
|
+
)
|
|
783
|
+
|
|
784
|
+
return <<~MATH_EXPLANATION_AND_RESULT
|
|
785
|
+
step 1: F(x) = (#{coefficient_1} / 2) * x^2 + (#{coefficient_2} * x)
|
|
786
|
+
step 2: F(#{$2}) - F(#{$1})
|
|
787
|
+
step 3: #{integral_F_end_value_2} - #{integral_F_start_value_1}
|
|
788
|
+
|
|
789
|
+
#{Number.new((integral_F_end_value_2-integral_F_start_value_1).to_s, "ruby").to_s}
|
|
790
|
+
|
|
791
|
+
MATH_EXPLANATION_AND_RESULT
|
|
792
|
+
end
|
|
793
|
+
|
|
794
|
+
if /what is an integral?/ === message
|
|
795
|
+
return "what-is-an-integral.agi.blue"
|
|
796
|
+
end
|
|
797
|
+
|
|
798
|
+
if /how is an integral computed?/ === message
|
|
799
|
+
return "how-is-an-integral-computed.agi.blue"
|
|
800
|
+
end
|
|
801
|
+
|
|
802
|
+
if /what's the explanation for the computation of an integral?/ === message
|
|
803
|
+
return "whats-the-explanation-for-the-computation-of-an-integral.agi.blue"
|
|
804
|
+
end
|
|
805
|
+
|
|
806
|
+
if message =~ /show activity stream/
|
|
807
|
+
return "https://sideways-snowman.glitch.me/"
|
|
808
|
+
end
|
|
809
|
+
|
|
810
|
+
if message =~ /hey\Z/i
|
|
811
|
+
return "hey" if rand < 0.01
|
|
812
|
+
end
|
|
813
|
+
|
|
814
|
+
if message =~ /\Avisualize ƒ\Z/i
|
|
815
|
+
`ruby examples/plot_only_mutual_data.rb "2x^2 + 2x + 2"`
|
|
816
|
+
end
|
|
817
|
+
|
|
818
|
+
if message =~ /\Athrow bomb\Z/i
|
|
819
|
+
return Bomb.new.throw
|
|
820
|
+
end
|
|
821
|
+
|
|
822
|
+
if message =~ /\Abring to melting point #{melting_point_receiavable_regex}\Z/i
|
|
823
|
+
if($1 === "last used picture")
|
|
824
|
+
Nokogiri::HTML(`curl -L http://gazelle.botcompany.de/lastInput`)
|
|
825
|
+
|
|
826
|
+
url = doc.css('a').first.url
|
|
827
|
+
|
|
828
|
+
@melting_point_receivables.push(url)
|
|
829
|
+
end
|
|
830
|
+
@melting_point_receivables.push($1)
|
|
831
|
+
end
|
|
832
|
+
|
|
833
|
+
if message =~ /get-liquids-after-melting-point/
|
|
834
|
+
@sent_messages.push(
|
|
835
|
+
[@melted_liquids.inspect, @melted_liquids.inspect[0...100]]
|
|
836
|
+
)
|
|
837
|
+
return @sent_messages[-1][1]
|
|
838
|
+
end
|
|
839
|
+
|
|
840
|
+
if message =~ /probe last message full version size/
|
|
841
|
+
return @sent_messages[-1][0].bytesize.to_s + 'bytes'
|
|
842
|
+
end
|
|
843
|
+
|
|
844
|
+
if message =~ /\Amelt\Z/
|
|
845
|
+
# First step, assigning a variable
|
|
846
|
+
@melting_point = @melting_point_receivables.sample
|
|
847
|
+
|
|
848
|
+
def liquidify_via_string(object)
|
|
849
|
+
object.to_s.unpack("B*")
|
|
850
|
+
end
|
|
851
|
+
liquid = liquidify_via_string(@melting_point)
|
|
852
|
+
|
|
853
|
+
@melted_liquids.push(liquid)
|
|
854
|
+
|
|
855
|
+
return "Melted liquid which is now #{liquid.object_id} (ruby object id)"
|
|
856
|
+
# Next step, doing something intelligent with the data
|
|
857
|
+
# loosening it up somehow
|
|
858
|
+
# LIQUIDIFYING IT
|
|
859
|
+
# CONVERTING IT ALL TO BYTES
|
|
860
|
+
# PRESERVING VOLUME, just changing it's "Aggregatzustand"
|
|
861
|
+
end
|
|
862
|
+
|
|
863
|
+
if message =~ /\Aget-melting-point\Z/
|
|
864
|
+
return @melting_point
|
|
865
|
+
end
|
|
866
|
+
|
|
867
|
+
if message =~ /\Aget-melting-point-receivables\Z/
|
|
868
|
+
return @melting_point_receivables.inspect
|
|
869
|
+
end
|
|
870
|
+
|
|
871
|
+
if message =~ /\Awhat do you think?\Z/i
|
|
872
|
+
return "I think you're a stupid piece of shit and your dick smells worse than woz before he invented the home computer."
|
|
873
|
+
end
|
|
874
|
+
|
|
875
|
+
if message =~ /\Apass ball to @(\w+)\Z/i
|
|
876
|
+
@players[$1][:hasBall] = :yes
|
|
877
|
+
end
|
|
878
|
+
|
|
879
|
+
if message =~ /\Awho has ball\Z/i
|
|
880
|
+
return @players.find { |k, v| v[:hasBall] == :yes }[0]
|
|
881
|
+
end
|
|
882
|
+
|
|
883
|
+
if message =~ /\Aspace\Z/
|
|
884
|
+
exec_bash_visually_and_post_process_strings(
|
|
885
|
+
'/Users/lemonandroid/gam-git-repos/LemonAndroid/gam/managables/programs/game_aided_manufacturing/test.sh'
|
|
886
|
+
)
|
|
887
|
+
end
|
|
888
|
+
|
|
889
|
+
if message =~ /\Aget-chat-variable (\w*)\Z/i
|
|
890
|
+
return [
|
|
891
|
+
space_2_unicode("Getting variable value for key #{$1}"),
|
|
892
|
+
space_2_unicode(@variables_for_chat_users[$1].verbose_introspect(very_verbose=true))
|
|
893
|
+
].join
|
|
894
|
+
end
|
|
895
|
+
|
|
896
|
+
if message =~ /\Aget-method-definition #{variable_regex}#{method_call_regex}\Z/
|
|
897
|
+
return @variables_for_chat_users[$1].method($2.to_sym).source
|
|
898
|
+
end
|
|
899
|
+
|
|
900
|
+
if message =~ /\A@LemonAndroid List github repos\Z/i
|
|
901
|
+
return "https://api.github.com/users/LemonAndroid/repos"
|
|
902
|
+
end
|
|
903
|
+
|
|
904
|
+
if message =~ /\AList 10 most recently pushed to Github Repos of LemonAndroid\Z/i
|
|
905
|
+
texts = ten_most_pushed_to_github_repos
|
|
906
|
+
texts.each do |text|
|
|
907
|
+
return text
|
|
908
|
+
end
|
|
909
|
+
end
|
|
910
|
+
|
|
911
|
+
if message =~ /get-strategy-chooser-url/i
|
|
912
|
+
return "https://strategychooser.webflow.io/"
|
|
913
|
+
end
|
|
914
|
+
|
|
915
|
+
if message =~ /show qanda/
|
|
916
|
+
return "https://unique-swing.glitch.me"
|
|
917
|
+
end
|
|
918
|
+
|
|
919
|
+
if message =~ /show blue/
|
|
920
|
+
return "https://agi.blue"
|
|
921
|
+
end
|
|
922
|
+
|
|
923
|
+
if message =~ /show red/
|
|
924
|
+
return "https://agi.red"
|
|
925
|
+
end
|
|
926
|
+
|
|
927
|
+
if message =~ /show black/
|
|
928
|
+
return "https://agi.black"
|
|
929
|
+
end
|
|
930
|
+
|
|
931
|
+
if message =~ /\Aeject\Z/
|
|
932
|
+
@ejected = true
|
|
933
|
+
return "@eeZee was ejected"
|
|
934
|
+
end
|
|
935
|
+
|
|
936
|
+
if message =~ /\A@LemonAndroid work on (\w+\/\w+)\Z/i
|
|
937
|
+
@currently_selected_project = $1
|
|
938
|
+
return space_2_unicode("currently selected project set to #{@currently_selected_project}")
|
|
939
|
+
end
|
|
940
|
+
|
|
941
|
+
if message =~ /@LemonAndroid currently selected project/i
|
|
942
|
+
return space_2_unicode("currently selected project is #{@currently_selected_project}")
|
|
943
|
+
end
|
|
944
|
+
|
|
945
|
+
if message =~ /\Als\Z/i
|
|
946
|
+
texts = execute_bash_in_currently_selected_project('ls')
|
|
947
|
+
texts.each do |text|
|
|
948
|
+
return text
|
|
949
|
+
end
|
|
950
|
+
end
|
|
951
|
+
|
|
952
|
+
if message === "exit"
|
|
953
|
+
return "https://tenor.com/view/goal-flash-red-gif-12361214"
|
|
954
|
+
end
|
|
955
|
+
|
|
956
|
+
return "Enjoy flight" if message =~ /console/ && @took_off
|
|
957
|
+
return "" if @took_off
|
|
958
|
+
|
|
959
|
+
if /console (.*)/ =~ message
|
|
960
|
+
return eval($1).to_s
|
|
961
|
+
end
|
|
962
|
+
|
|
963
|
+
if /\Adocker ruby `(.*)`/ === message
|
|
964
|
+
return `docker run -ti --rm andrius/alpine-ruby ruby -e "#{$1}"`
|
|
965
|
+
end
|
|
966
|
+
|
|
967
|
+
if /\Adocker python `(.*)`/ === message
|
|
968
|
+
return `docker run --rm -ti jfloff/alpine-python python -c "#{$1}"`
|
|
969
|
+
end
|
|
970
|
+
|
|
971
|
+
if /\Adocker go `(.*)`/ === message
|
|
972
|
+
return "yet to be implemented"
|
|
973
|
+
# return `docker run --rm -ti jfloff/alpine-python python -c "#{$1}"`
|
|
974
|
+
end
|
|
975
|
+
|
|
976
|
+
if /\Adocker elixir `(.*)`/ === message
|
|
977
|
+
return `docker run --rm -it --user=root bitwalker/alpine-elixir elixir -e "#{$1}"`
|
|
978
|
+
end
|
|
979
|
+
|
|
980
|
+
if /\Adocker julia `(.*)`/ === message
|
|
981
|
+
return `docker run --rm -it -v $(pwd):/source cmplopes/alpine-julia julia -E "#{$1}"`
|
|
982
|
+
end
|
|
983
|
+
|
|
984
|
+
|
|
985
|
+
if /raw #{url_regex}/ === message
|
|
986
|
+
url = $1
|
|
987
|
+
case url
|
|
988
|
+
when /github.com/
|
|
989
|
+
url.gsub!(/github.com/, 'raw.githubusercontent.com')
|
|
990
|
+
url.gsub!(/blob\//, '')
|
|
991
|
+
end
|
|
992
|
+
|
|
993
|
+
result = `curl #{url}`
|
|
994
|
+
@last_raw_pipe = result
|
|
995
|
+
return result[0...250]
|
|
996
|
+
end
|
|
997
|
+
end
|
|
998
|
+
|
|
999
|
+
def url_regex
|
|
1000
|
+
/(.*)/
|
|
1001
|
+
end
|
|
1002
|
+
# require 'nokogiri'
|
|
1003
|
+
# require 'open-uri'
|
|
1004
|
+
# def bounties
|
|
1005
|
+
# bounties_json = JSON.parse(`curl https://api.bountysource.com/search/bounty_search?callback=CORS&page=1&per_page=250`)
|
|
1006
|
+
# bounties_json['data']['issues'].map do |issue|
|
|
1007
|
+
# issue["title"]
|
|
1008
|
+
# end
|
|
1009
|
+
# end
|
|
1010
|
+
|
|
1011
|
+
def exec_bash_visually_and_post_process_strings(test)
|
|
1012
|
+
texts = execute_bash_in_currently_selected_project(test)
|
|
1013
|
+
return texts.map do |text|
|
|
1014
|
+
space_2_unicode(text)
|
|
1015
|
+
end.join("\n")
|
|
1016
|
+
end
|
|
1017
|
+
|
|
1018
|
+
def variable_regex
|
|
1019
|
+
/(\w[_\w]*)/
|
|
1020
|
+
end
|
|
1021
|
+
|
|
1022
|
+
def method_call_regex
|
|
1023
|
+
/\.#{variable_regex}/
|
|
1024
|
+
end
|
|
1025
|
+
|
|
1026
|
+
def melting_point_receiavable_regex
|
|
1027
|
+
/(.*)/
|
|
1028
|
+
end
|
|
1029
|
+
|
|
1030
|
+
def start
|
|
1031
|
+
client = Zircon.new(
|
|
1032
|
+
server: 'irc.gitter.im',
|
|
1033
|
+
port: '6667',
|
|
1034
|
+
channel: 'qanda-api/Lobby',
|
|
1035
|
+
username: 'LemonAndroid',
|
|
1036
|
+
password: '067d08cd7a80e2d15cb583a055ad6b5fe857b271',
|
|
1037
|
+
use_ssl: true
|
|
1038
|
+
)
|
|
1039
|
+
|
|
1040
|
+
client.on_message do |message|
|
|
1041
|
+
response = on_message(message.body.to_s)
|
|
1042
|
+
|
|
1043
|
+
unless response.empty?
|
|
1044
|
+
client.privmsg(
|
|
1045
|
+
"qanda-api/Lobby",
|
|
1046
|
+
space_2_unicode_array([response]).join('')
|
|
1047
|
+
)
|
|
1048
|
+
end
|
|
1049
|
+
end
|
|
1050
|
+
|
|
1051
|
+
client.run!
|
|
1052
|
+
end
|
|
1053
|
+
|
|
1054
|
+
def all_unix_process_ids(unix_id)
|
|
1055
|
+
descendant_pids(unix_id) + [unix_id]
|
|
1056
|
+
end
|
|
1057
|
+
|
|
1058
|
+
def descendant_pids(root_unix_pid)
|
|
1059
|
+
child_unix_pids = `pgrep -P #{root_unix_pid}`.split("\n")
|
|
1060
|
+
further_descendant_unix_pids = \
|
|
1061
|
+
child_unix_pids.map { |unix_pid| descendant_pids(unix_pid) }.flatten
|
|
1062
|
+
|
|
1063
|
+
child_unix_pids + further_descendant_unix_pids
|
|
1064
|
+
end
|
|
1065
|
+
|
|
1066
|
+
def apple_script_window_position_and_size(unix_pid)
|
|
1067
|
+
<<~OSA_SCRIPT
|
|
1068
|
+
tell application "System Events" to tell (every process whose unix id is #{unix_pid})
|
|
1069
|
+
get {position, size} of every window
|
|
1070
|
+
end tell
|
|
1071
|
+
OSA_SCRIPT
|
|
1072
|
+
end
|
|
1073
|
+
|
|
1074
|
+
def get_window_position_and_size(unix_pid)
|
|
1075
|
+
possibly_window_bounds = run_osa_script(apple_script_window_position_and_size(unix_pid))
|
|
1076
|
+
|
|
1077
|
+
if possibly_window_bounds =~ /\d/
|
|
1078
|
+
possibly_window_bounds.scan(/\d+/).map(&:to_i)
|
|
1079
|
+
else
|
|
1080
|
+
return nil
|
|
1081
|
+
end
|
|
1082
|
+
end
|
|
1083
|
+
|
|
1084
|
+
def run_osa_script(script)
|
|
1085
|
+
`osascript -e '#{script}'`
|
|
1086
|
+
end
|
|
1087
|
+
|
|
1088
|
+
def in_gam_dir
|
|
1089
|
+
if currently_selected_project_exists_locally?
|
|
1090
|
+
Dir.chdir(current_repo_dir) do
|
|
1091
|
+
Bundler.with_clean_env do
|
|
1092
|
+
yield
|
|
1093
|
+
end
|
|
1094
|
+
end
|
|
1095
|
+
else
|
|
1096
|
+
return space_2_unicode_array(
|
|
1097
|
+
[
|
|
1098
|
+
"Currently selected project (#{@currently_selected_project}) not cloned",
|
|
1099
|
+
"Do you want to clone it to the VisualServer with the name \"#{`whoami`.rstrip}\"?"
|
|
1100
|
+
]
|
|
1101
|
+
)
|
|
1102
|
+
end
|
|
1103
|
+
end
|
|
1104
|
+
|
|
1105
|
+
def legacy_execute_bash_in_currently_selected_project(hopefully_bash_command)
|
|
1106
|
+
in_gam_dir do
|
|
1107
|
+
execute_bash_in_currently_selected_project(hopefully_bash_command)
|
|
1108
|
+
end
|
|
1109
|
+
end
|
|
1110
|
+
|
|
1111
|
+
def execute_bash_in_currently_selected_project(hopefully_bash_command)
|
|
1112
|
+
byebug
|
|
1113
|
+
ANSWERS[CURRENT_DISCORD_MESSAGE[:mesage_id]][:debug] = binding.inspect
|
|
1114
|
+
|
|
1115
|
+
stdout = ''
|
|
1116
|
+
stderr = ''
|
|
1117
|
+
process = Open4.bg(hopefully_bash_command, 0 => '', 1 => stdout, 2 => stderr)
|
|
1118
|
+
sleep 0.5
|
|
1119
|
+
|
|
1120
|
+
|
|
1121
|
+
ANSWERS[CURRENT_DISCORD_MESSAGE[:mesage_id]][:debug2] = binding.inspect
|
|
1122
|
+
|
|
1123
|
+
texts_array = space_2_unicode_array(stdout.split("\n"))
|
|
1124
|
+
texts_array += space_2_unicode_array(stderr.split("\n"))
|
|
1125
|
+
|
|
1126
|
+
# return [texts_array[1][0...120]]
|
|
1127
|
+
return (texts_array + screen_captures_of_visual_processes(process.pid)).join("\n")
|
|
1128
|
+
|
|
1129
|
+
# return screen_captures_of_visual_processes(process.pid)
|
|
1130
|
+
end
|
|
1131
|
+
|
|
1132
|
+
def screen_captures_of_visual_processes(root_unix_pid)
|
|
1133
|
+
sleep 8
|
|
1134
|
+
|
|
1135
|
+
unix_pids = all_unix_process_ids(root_unix_pid)
|
|
1136
|
+
windows = unix_pids.map do |unix_pid|
|
|
1137
|
+
get_window_position_and_size(unix_pid)
|
|
1138
|
+
end.compact
|
|
1139
|
+
|
|
1140
|
+
windows.map do |position_and_size|
|
|
1141
|
+
t = Tempfile.new(['screencapture-pid-', root_unix_pid.to_s, '.png'])
|
|
1142
|
+
`screencapture -R #{position_and_size.join(',')} #{t.path}`
|
|
1143
|
+
|
|
1144
|
+
upload_gyazo(t.path)
|
|
1145
|
+
end
|
|
1146
|
+
end
|
|
1147
|
+
|
|
1148
|
+
def upload_gyazo(local_file_path)
|
|
1149
|
+
gyazo = Gyazo::Client.new access_token: 'b2893f18deff437b3abd45b6e4413e255fa563d8bd00d360429c37fe1aee560f'
|
|
1150
|
+
res = gyazo.upload imagefile: local_file_path
|
|
1151
|
+
res[:url]
|
|
1152
|
+
end
|
|
1153
|
+
|
|
1154
|
+
def current_repo_dir
|
|
1155
|
+
File.expand_path("~/gam-git-repos/#{@currently_selected_project}")
|
|
1156
|
+
end
|
|
1157
|
+
|
|
1158
|
+
def currently_selected_project_exists_locally?
|
|
1159
|
+
system("stat #{current_repo_dir}")
|
|
1160
|
+
end
|
|
1161
|
+
|
|
1162
|
+
def ten_most_pushed_to_github_repos
|
|
1163
|
+
output = `curl https://api.github.com/users/LemonAndroid/repos`
|
|
1164
|
+
|
|
1165
|
+
processed_output = JSON
|
|
1166
|
+
.parse(output)
|
|
1167
|
+
.sort_by do |project|
|
|
1168
|
+
Date.parse(project["pushed_at"])
|
|
1169
|
+
end
|
|
1170
|
+
.last(10)
|
|
1171
|
+
.map do |project|
|
|
1172
|
+
project["full_name"]
|
|
1173
|
+
end
|
|
1174
|
+
|
|
1175
|
+
space_2_unicode_array(processed_output)
|
|
1176
|
+
end
|
|
1177
|
+
|
|
1178
|
+
def space_2_unicode_array(texts)
|
|
1179
|
+
texts.map { |text| space_2_unicode(text) }
|
|
1180
|
+
end
|
|
1181
|
+
|
|
1182
|
+
def space_2_unicode(text)
|
|
1183
|
+
text.gsub(/\s/, "\u2000")
|
|
1184
|
+
end
|
|
1185
|
+
end
|
|
1186
|
+
|
|
1187
|
+
|
|
1188
|
+
def discord_shorten(message)
|
|
1189
|
+
discord_code_wrap(message.to_s[0...500])
|
|
1190
|
+
end
|
|
1191
|
+
def discord_code_wrap(message)
|
|
1192
|
+
return """
|
|
1193
|
+
```elixir
|
|
1194
|
+
#{message}
|
|
1195
|
+
```
|
|
1196
|
+
"""
|
|
1197
|
+
end
|
|
1198
|
+
begin
|
|
1199
|
+
bot = GitterDumbDevBot.new
|
|
1200
|
+
|
|
1201
|
+
if ENV['UNSAFE_MODE'] === '1'
|
|
1202
|
+
bot.unsafe!
|
|
1203
|
+
end
|
|
1204
|
+
|
|
1205
|
+
bot.load()
|
|
1206
|
+
|
|
1207
|
+
get '/answer' do
|
|
1208
|
+
hash = ANSWERS[params[:message_id]]
|
|
1209
|
+
Json2table::get_html_table(hash.to_json)
|
|
1210
|
+
end
|
|
1211
|
+
|
|
1212
|
+
|
|
1213
|
+
get '/' do
|
|
1214
|
+
if /sinatra-console (.*)/ =~ params[:message]
|
|
1215
|
+
return eval($1).to_s
|
|
1216
|
+
end
|
|
1217
|
+
|
|
1218
|
+
ANSWERS[params[:msgID]][:message_from_discord] = params[:message]
|
|
1219
|
+
response_string = bot.on_message(params[:message], params[:msgID], params[:channelID], params[:userID])
|
|
1220
|
+
bot.dump()
|
|
1221
|
+
ANSWERS[params[:msgID]][:answer_for_discord] = response_string
|
|
1222
|
+
response_string
|
|
1223
|
+
rescue Exception => e
|
|
1224
|
+
if VERBOSE = true || rand > 0.5
|
|
1225
|
+
PUBLIC_METHOD_FILTER = ENV['PUBLIC_METHOD_FILTER']
|
|
1226
|
+
ERROR_INSPECT = ENV['ERROR_INSPECT']
|
|
1227
|
+
if(PUBLIC_METHOD_FILTER)
|
|
1228
|
+
filter = eval(PUBLIC_METHOD_FILTER)
|
|
1229
|
+
|
|
1230
|
+
# return discord_shorten([e.inspect, e.message, e.public_methods.select(&filter)].inspect)
|
|
1231
|
+
return discord_shorten([e.send(ERROR_INSPECT).inspect, e.inspect, e.message, e.public_methods.select(&filter)].inspect)
|
|
1232
|
+
|
|
1233
|
+
end
|
|
1234
|
+
return discord_shorten([e.inspect, e.message, e.public_methods.grep(PUBLIC_METHOD_GREP)].inspect)
|
|
1235
|
+
|
|
1236
|
+
return discord_shorten([e.inspect, e.message, e.public_methods.grep(PUBLIC_METHOD_GREP)].inspect)
|
|
1237
|
+
end
|
|
1238
|
+
return [e.inspect, e.message].inspect
|
|
1239
|
+
end
|
|
1240
|
+
|
|
1241
|
+
end
|
|
1242
|
+
|
|
1243
|
+
HARDWARE = "FREEZE"
|