dialog_ruby 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (103) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +1 -0
  3. data/Gemfile +0 -0
  4. data/_dev/get_full_botapi.rb +59 -0
  5. data/_dev/inlinekb_pubsub.rb +69 -0
  6. data/_dev/main.rb +127 -0
  7. data/_dev/restriction.rb +32 -0
  8. data/_dev/ru.yml +79 -0
  9. data/_dev/sidekiq.rb +28 -0
  10. data/_dev/tdlib.rb +154 -0
  11. data/dialog.sh +51 -0
  12. data/dialog_ruby.gemspec +41 -0
  13. data/lib/architecture.md +22 -0
  14. data/lib/configuration.rb +117 -0
  15. data/lib/dialogStart.rb +189 -0
  16. data/lib/dialog_ruby.rb +59 -0
  17. data/lib/exec.sh +61 -0
  18. data/lib/exec_conf/cli_config +7 -0
  19. data/lib/exec_conf/dialog__sync.service +14 -0
  20. data/lib/exec_conf/dialog__sync.timer +11 -0
  21. data/lib/exec_conf/dialog_bot@.path +6 -0
  22. data/lib/exec_conf/dialog_bot@.service +18 -0
  23. data/lib/exec_conf/dialog_bot_dev@.path +6 -0
  24. data/lib/exec_conf/dialog_bot_dev_pre@.service +16 -0
  25. data/lib/exec_conf/dialog_bot_pre@.service +16 -0
  26. data/lib/exec_conf/dialog_redis@.service +14 -0
  27. data/lib/exec_conf/post-merge +5 -0
  28. data/lib/exec_conf/redis_global.conf +49 -0
  29. data/lib/exec_conf/redis_local.conf +4 -0
  30. data/lib/lang/global_ru.yml +29 -0
  31. data/lib/lib/dialect/canvas/canvas.rb +35 -0
  32. data/lib/lib/dialect/canvas/element/convert/SearchBaloo.rb +45 -0
  33. data/lib/lib/dialect/canvas/element/data/search.rb +34 -0
  34. data/lib/lib/dialect/canvas/element/send/Inline_query_result.rb +32 -0
  35. data/lib/lib/dialect/canvas/element/send/bot_message.rb +38 -0
  36. data/lib/lib/dialect/canvas/element/send/keyboards.rb +59 -0
  37. data/lib/lib/dialect/canvas/element/send/recognize.rb +51 -0
  38. data/lib/lib/dialect/canvas/element/send/restrict.rb +42 -0
  39. data/lib/lib/dialect/canvas/element/send/tdlib_chat.rb +33 -0
  40. data/lib/lib/dialect/canvas/element/send/tdlib_message.rb +38 -0
  41. data/lib/lib/dialect/canvas/mod/send/_Inline_query_result.rb +38 -0
  42. data/lib/lib/dialect/canvas/mod/send/_keyboards.rb +40 -0
  43. data/lib/lib/dialect/canvas/mod/send/func.rb +98 -0
  44. data/lib/lib/dialect/canvas/mod/send/general/_heads.rb +27 -0
  45. data/lib/lib/dialect/canvas/mod/send/general/chat.rb +38 -0
  46. data/lib/lib/dialect/canvas/mod/send/general/common.rb +32 -0
  47. data/lib/lib/dialect/canvas/mod/send/general/message.rb +37 -0
  48. data/lib/lib/dialect/canvas/mod/send/general/user.rb +36 -0
  49. data/lib/lib/dialect/canvas/mod/send/inline_query_result/common.rb +36 -0
  50. data/lib/lib/dialect/codegen/codegen.rb +74 -0
  51. data/lib/lib/dialect/codegen/erb/data/1.ModReceive2GetData.erb +27 -0
  52. data/lib/lib/dialect/codegen/erb/data/2.GetData2Elements.erb +27 -0
  53. data/lib/lib/dialect/codegen/erb/data/3.GenData2Dest.erb +34 -0
  54. data/lib/lib/dialect/codegen/erb/functional/1.Expect2Events.erb +37 -0
  55. data/lib/lib/dialect/codegen/erb/functional/2.1.Events2AppEvent.erb +26 -0
  56. data/lib/lib/dialect/codegen/erb/functional/2.2.1.Events2ModReceive.erb +73 -0
  57. data/lib/lib/dialect/codegen/erb/functional/2.2.2.ModReceive2AppEvent.erb +59 -0
  58. data/lib/lib/dialect/codegen/erb/functional/3.Appevent2EventBus.erb +35 -0
  59. data/lib/lib/dialect/codegen/erb/functional/4.1.AppEvent2Elements.erb +72 -0
  60. data/lib/lib/dialect/codegen/erb/functional/5.1.Element2ModElements.erb +70 -0
  61. data/lib/lib/dialect/codegen/erb/functional/5.2.Element2ModSend.erb +69 -0
  62. data/lib/lib/dialect/codegen/erb/functional/7.ElementChains.erb +91 -0
  63. data/lib/lib/dialect/codegen/repack/constructor/DockedGroupings2AppFunctions.rb +36 -0
  64. data/lib/lib/dialect/codegen/repack/constructor/Element2ModSend.rb +49 -0
  65. data/lib/lib/dialect/codegen/repack/constructor/ElementsInElements.rb +34 -0
  66. data/lib/lib/dialect/codegen/repack/functional/1.Expect2Events.rb +35 -0
  67. data/lib/lib/dialect/codegen/repack/functional/2.2.1.Events2ModReceive.rb +71 -0
  68. data/lib/lib/dialect/codegen/repack/functional/2.2.2.ModReceive2AppEvent.rb +45 -0
  69. data/lib/lib/dialect/codegen/repack/functional/5.1.Element2ModElements.rb +90 -0
  70. data/lib/lib/dialect/codegen/repack/functional/5.2.Element2ModSend.rb +60 -0
  71. data/lib/lib/dialect/codegen/repack/functional/7.ElementChains.rb +88 -0
  72. data/lib/lib/dialect/codegen/run.rb +79 -0
  73. data/lib/lib/metamess/_run.rb +162 -0
  74. data/lib/lib/metamess/content/content_o-command_f.rb +100 -0
  75. data/lib/lib/metamess/content/content_o-media_f.rb +149 -0
  76. data/lib/lib/metamess/content/content_o-simple_f.rb +35 -0
  77. data/lib/lib/metamess/content/content_o.rb +245 -0
  78. data/lib/lib/metamess/event/notify_o-chatmember_f.rb +124 -0
  79. data/lib/lib/metamess/event/notify_o-chattitle_f.rb +34 -0
  80. data/lib/lib/metamess/event/notify_o-create_f.rb +42 -0
  81. data/lib/lib/metamess/event/notify_o-migrate_f.rb +34 -0
  82. data/lib/lib/metamess/event/notify_o-pinned_f.rb +34 -0
  83. data/lib/lib/metamess/event/notify_o.rb +28 -0
  84. data/lib/lib/metamess/event_c.rb +26 -0
  85. data/lib/lib/metamess/func.rb +220 -0
  86. data/lib/lib/metamess/service/service_o-callback_f.rb +33 -0
  87. data/lib/lib/metamess/service/service_o-inline_f.rb +55 -0
  88. data/lib/lib/metamess/service/service_o.rb +26 -0
  89. data/lib/lib/naming.rb +130 -0
  90. data/lib/lib/storage/redis/redisPubSub.rb +51 -0
  91. data/lib/lib/storage/redis/rediscached.rb +97 -0
  92. data/lib/lib/tdlib/auth.rb +141 -0
  93. data/lib/lib/tdlib/func.rb +34 -0
  94. data/lib/lib/tdlib/init.rb +39 -0
  95. data/lib/lib/telegram/botapi.rb +71 -0
  96. data/lib/lib/telegram/infra_info.rb +50 -0
  97. data/lib/lib/telegram/wrappers.rb +41 -0
  98. data/lib/lib/tooling/lang.rb +24 -0
  99. data/lib/lib/tooling/log.rb +54 -0
  100. data/lib/lib/tooling/ruby.rb +25 -0
  101. data/lib/version.rb +3 -0
  102. data/logo.png +0 -0
  103. metadata +305 -0
data/dialog.sh ADDED
@@ -0,0 +1,51 @@
1
+ #!/bin/bash
2
+ ######## ####### ######## ####### ######## ########
3
+ ## / / / / License \ \ \ \
4
+ ## Copyleft culture, Copyright (C) is prohibited here
5
+ ## This work is licensed under a CC BY-SA 4.0
6
+ ## Creative Commons Attribution-ShareAlike 4.0 License
7
+ ## Refer to the http://creativecommons.org/licenses/by-sa/4.0/
8
+ ######## ####### ######## ####### ######## ########
9
+ ## / / / / Code Climate \ \ \ \
10
+ ## Language = bash
11
+ ## Indent = space; 2 chars;
12
+ ######## ####### ######## ####### ######## ########
13
+ set -e
14
+
15
+ ## PRE - ENV ##
16
+ . ./engine/exec.sh
17
+
18
+
19
+ if [[ -z $Type ]]; then
20
+ DialogMsg="Please specify type"
21
+ echo $DialogMsg; select Type in bot cli; do break ; done
22
+ fi
23
+
24
+ if [[ -z $Mode ]]; then
25
+ DialogMsg="Please specify mode: "
26
+ echo $DialogMsg; select Mode in dev prod; do break ; done
27
+ fi
28
+
29
+
30
+ if [[ -z $BotFullname ]]; then
31
+ DialogMsg="Please specify BotFullname"
32
+ echo $DialogMsg; select BotFullname in `ls ./_env/*.bot|sed -e 's/.*.\///'`; do break ; done
33
+ fi
34
+
35
+ . ./_env/$BotFullname
36
+ botRunInit
37
+
38
+ # if ! [[ -z $CliId ]]; then
39
+ # if test -f /tmp/dialog_env_${CliId}.sh; then
40
+ # . /tmp/dialog_env_${CliId}.sh
41
+ # else
42
+ # cliRunInit
43
+ # cliExportEnv
44
+ # fi
45
+ # fi
46
+
47
+ DialogBotExec
48
+
49
+
50
+
51
+
@@ -0,0 +1,41 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+
5
+ require 'version'
6
+
7
+ Gem::Specification.new do |s|
8
+ s.name = 'dialog_ruby'.freeze
9
+ s.version = Dialog::VERSION
10
+ s.authors = ['Eugene Istomin'.freeze]
11
+ s.email = ['info@innosense.org'.freeze]
12
+ s.license = 'CC-BY-SA-4.0'
13
+
14
+ s.homepage = 'https://gitlab.com/Innosense/MVP/dialog_ruby'.freeze
15
+ s.description = 'Communication prototyping platform'.freeze
16
+ s.summary = 'Communication prototyping platform'.freeze
17
+
18
+ s.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
19
+ s.bindir = 'exe'
20
+ s.executables = s.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
+ s.require_paths = ['lib'.freeze]
22
+
23
+ #Innosense
24
+ s.add_runtime_dependency 'dialect_lookup', '~> 0.0', '>= 0.0.1'
25
+ s.add_runtime_dependency 'dialog_bot_ruby', '~> 0'
26
+
27
+
28
+ #External
29
+ s.add_runtime_dependency 'tdlib-ruby', '~> 0'
30
+ s.add_runtime_dependency 'i18n', '~> 0'
31
+ s.add_runtime_dependency 'redis', '~> 0'
32
+ s.add_runtime_dependency 'concurrent', '~> 0'
33
+ s.add_runtime_dependency 'oj', '~> 0'
34
+ s.add_runtime_dependency 'erb', '~> 0'
35
+ s.add_runtime_dependency 'open3', '~> 0'
36
+ s.add_runtime_dependency 'sidekiq-cron', '~> 0'
37
+ s.add_runtime_dependency 'sidekiq-rate-limiter', '~> 0'
38
+
39
+ end
40
+
41
+ # bundler
@@ -0,0 +1,22 @@
1
+ ## Передаваемые объекты
2
+
3
+ # lib/runtime/base.rb
4
+ Namespace: Bot::
5
+
6
+ Vars owns:
7
+ args[:bot].freeze
8
+ args[:globals].freeze
9
+ args[:rmsg].freeze
10
+
11
+
12
+ # lib/runtime/metamess.rb
13
+ Namespace: Bot::Metamess.
14
+
15
+ Vars owns:
16
+ args[:mmsg].freeze
17
+
18
+
19
+ # shared
20
+ args[:smsg] - sending messages to telegram servers
21
+ args[:api] - data echange for botapi, cleared after botapi
22
+ args[:x] - object exchange, cleared after each step (metamess, ..)
@@ -0,0 +1,117 @@
1
+ ######## ####### ######## ####### ######## ########
2
+ ## / / / / License \ \ \ \
3
+ ## Copyleft culture, Copyright (C) is prohibited here
4
+ ## This work is licensed under a CC BY-SA 4.0
5
+ ## Creative Commons Attribution-ShareAlike 4.0 License
6
+ ## Refer to the http://creativecommons.org/licenses/by-sa/4.0/
7
+ ######## ####### ######## ####### ######## ########
8
+ ## / / / / Code Climate \ \ \ \
9
+ ## Language = ruby
10
+ ## Indent = space; 2 chars;
11
+ ######## ####### ######## ####### ######## ########
12
+
13
+ module Dialog
14
+ extend Dry::Configurable
15
+
16
+ def self.checkEnv(env, val, err=[])
17
+ if ENV[env].nil?
18
+ case val
19
+ when true; res = true
20
+ when false; res = false && err << "There is no #{env} in envs"
21
+ else res = val
22
+ end
23
+ else res = ENV[env]; end
24
+ return res
25
+ end
26
+
27
+
28
+ err = []
29
+ app = 'Dialog'
30
+ ARGV[0] ? scope = ARGV[0] : err << "There is no scope as ARGV[0]" && scope = false
31
+ ARGV[1] ? mode = ARGV[1] : err << "There is no mode as ARGV[1]" && mode = false
32
+
33
+ setting :api do
34
+ setting :id, Dialog.checkEnv('ApiID', false, err)
35
+ setting :hash_s, Dialog.checkEnv('ApiHash', false, err)
36
+ end
37
+
38
+ setting :run do
39
+ setting :scope, scope
40
+ setting :mode, mode
41
+ end
42
+
43
+ setting :naming do
44
+ setting :app, app
45
+ end
46
+
47
+ unless scope == 'init'
48
+ ARGV[2] ? namingFull = ARGV[2] : err << "There is no naming as ARGV[2]"
49
+
50
+ token = Dialog.checkEnv('BotToken', false, err)
51
+
52
+ setting :naming do
53
+ setting :app, app
54
+ setting :full, namingFull
55
+ if /__/.match? namingFull
56
+ setting :interface, namingFull.split('__')[0]
57
+ setting :instance, namingFull.split('__')[0]
58
+ else
59
+ err << "Error in naming!"
60
+ end
61
+ setting :id, token.split(':')[0].to_i
62
+ end
63
+
64
+ setting :dialect do
65
+ setting :folder, Dialog.checkEnv('DialectFolder', false, err)
66
+ setting :sqlite, Dialog.checkEnv('DialectSqlite', '/tmp/dialect.sqlite')
67
+ end
68
+
69
+ setting :db do
70
+ setting :redis_url, "./_data/#{namingFull}/redis.sock"
71
+ end
72
+
73
+ setting :secure do
74
+ setting :token, token
75
+ end
76
+ end
77
+
78
+ setting :proxy do
79
+ setting :type, Dialog.checkEnv('BotProxyType', false, err)
80
+ setting :host, Dialog.checkEnv('BotProxyHost', false, err)
81
+ setting :port, Dialog.checkEnv('BotProxyPort', false, err)
82
+ setting :login, Dialog.checkEnv('BotProxyLogin', false, err)
83
+ setting :pass, Dialog.checkEnv('BotProxyPass', false, err)
84
+ end
85
+
86
+ setting :path do
87
+ setting :run, "#{Dir.pwd}/engine"
88
+ setting :data, "#{Dir.pwd}/_data"
89
+ setting :render,"#{Dir.pwd}/_render"
90
+ end
91
+
92
+ setting :common do
93
+ setting :mode, mode
94
+ end
95
+
96
+ setting :log do
97
+ setting :base, Dialog.checkEnv('LogLevel', 'info')
98
+ setting :tdlib, Dialog.checkEnv('TdlibLoglevel', 1)
99
+ end
100
+
101
+ setting :monitoring do
102
+ setting :channel, Dialog.checkEnv('MonitoringChannel', true)
103
+ end
104
+
105
+ setting :host do
106
+ setting :apiUri, "https://api.telegram.org"
107
+ botInstanceHostName = Dialog.checkEnv('BotInstanceHostName', true)
108
+ setting :instance, botInstanceHostName
109
+ setting :web_hook_url, "https://#{botInstanceHostName}/telegram/api/web_hook"
110
+ end
111
+
112
+ unless err.empty?
113
+ err << "EXITING!"
114
+ puts err
115
+ exit(false)
116
+ end
117
+ end
@@ -0,0 +1,189 @@
1
+ ######## ####### ######## ####### ######## ########
2
+ ## / / / / License \ \ \ \
3
+ ## Copyleft culture, Copyright (C) is prohibited here
4
+ ## This work is licensed under a CC BY-SA 4.0
5
+ ## Creative Commons Attribution-ShareAlike 4.0 License
6
+ ## Refer to the http://creativecommons.org/licenses/by-sa/4.0/
7
+ ######## ####### ######## ####### ######## ########
8
+ ## / / / / Code Climate \ \ \ \
9
+ ## Language = ruby
10
+ ## Indent = space; 2 chars;
11
+ ######## ####### ######## ####### ######## ########
12
+
13
+ module Dialog
14
+ class << self
15
+
16
+ def redis
17
+ @redis ||= Redis.new(path: Dialog.config.db.redis_url)
18
+ end
19
+
20
+ def clear(args)
21
+ args[:x] = {metamess: {}, redis: {}, data: {}, labels: {}, send: {}, exec: {}}
22
+ args[:smsg] = {}
23
+ end
24
+
25
+ def clearRedis(args)
26
+ args[:x][:redis] = {}
27
+ end
28
+
29
+ def clearApi(args)
30
+ args[:api] = {}
31
+ end
32
+
33
+ def start
34
+ args = {}
35
+ case Dialog.config.common.mode
36
+ when 'check'
37
+ jsonDriven(args, :check)
38
+ when 'bot'
39
+ jsonDriven(args, :prod)
40
+ bot(args)
41
+ when 'dev'
42
+ dialectDriven(args)
43
+ jsonDriven(args, :prod)
44
+ bot(args)
45
+ when 'dev_offline'
46
+ dialectDriven(args)
47
+ jsonDriven(args, :check)
48
+ else
49
+ Dialog.logger.error "ERROR: no such mode - '#{Dialog.config.common.mode}'"
50
+ end
51
+ end
52
+
53
+
54
+ def dialectDriven(args)
55
+ state = {
56
+ dialectFolder: Dialog.config.dialect.folder,
57
+ myAppName: Dialog.config.naming.app,
58
+ sqlite: Dialog.config.dialect.sqlite,
59
+ jsonFolder: "#{Dialog.config.path.render}/json/"
60
+ }
61
+ ::Dialect::Lookup.new.run(state)
62
+ File.delete(Dialog.config.dialect.sqlite)
63
+ end
64
+
65
+
66
+ def jsonDriven(args, type)
67
+ FileUtils.rm_rf(Dir.glob("#{Dialog.config.path.render}/code_#{type}/*.rb"))
68
+ args[:dialect] = {}
69
+
70
+ json = "#{Dialog.config.path.render}/json/#{Dialog.config.dialect.folder}_#{Dialog.config.naming.app}.json"
71
+ jsonLoad = Oj.load(File.read(json), symbol_keys: true)
72
+ args[:dialect] = jsonLoad[:stages][Dialog.config.dialect.folder.to_sym]
73
+ Dialog::Dialect.run(args, type)
74
+
75
+ args[:dialect] ={}
76
+ args[:tmp] = {}
77
+ Dir.glob(File.join("#{Dialog.config.path.render}/code_#{type}/**", "*.rb")).sort.each{|f| require f}
78
+ Dialog.logger.info "Rendered bot code is ok"
79
+ end
80
+
81
+
82
+ def tdlibInit(args)
83
+ inits = ['cli']
84
+ args[:tdlib] = {}
85
+ inits.each do |init|
86
+ unless File.exists?("#{Dialog.config.path.data}/tdlib/#{init}/td.binlog")
87
+ Dialog.logger.error "ERROR: please make init of the '#{init}' using 'ruby dialog.rb init #{init}"
88
+ exit(false)
89
+ end
90
+ args[:tdlib][init.to_sym] = Dialog::TDLib.tdlibInit(init)
91
+ end
92
+ args[:tdlib].freeze
93
+ end
94
+
95
+
96
+
97
+ def tdlibAuth
98
+ sess = Dialog::TDLib.tdlibInit(Dialog.config.run.mode)
99
+ Dialog::TDLib.tdlibAuth(Dialog.config.run.mode, sess)
100
+ end
101
+
102
+
103
+ def bot(args)
104
+ args[:globals] = {}
105
+
106
+ ### LANG
107
+ i18n = Dialog::Lang.initial
108
+
109
+ tdlibInit(args)
110
+ args[:tdlib][:cli].on_ready do |client|
111
+ a = client.fetch('@type' => 'getMe')
112
+ args[:globals][:cliId] = a['id'].to_i
113
+ end
114
+
115
+ Telegram::Bot::Client.run Dialog.config.secure.token do |bot|
116
+ args[:bot]= bot; args[:bot].freeze
117
+
118
+ #bot getMe
119
+ Dialog.logger.info 'BotAPI getMe-request started'
120
+ me = bot.api.send(:getMe)
121
+ Dialog.logger.info 'BotAPI getMe-request completed'
122
+
123
+ #bot globals
124
+ args[:globals][:botUsername] = me["result"]["username"]
125
+ args[:globals][:botFirstName] = me["result"]["first_name"]
126
+ args[:globals][:botFirstNameArray] = me["result"]["first_name"].split("\s")
127
+ args[:globals].freeze
128
+
129
+ #common queue
130
+ args[:queue] = {}
131
+ args[:queue][:threadCommon] = Concurrent::CachedThreadPool.new
132
+
133
+ #Success
134
+ Dialog.logger.info "Started: Bot named \"#{args[:globals][:botUsername]}\", botInstance=\"#{Dialog.config.naming.instance}\" of botInterface=\"#{Dialog.config.naming.interface}\", ID=\"#{Dialog.config.naming.id}\", loglevel=\"#{Dialog.config.log.base}\""
135
+
136
+ begin
137
+ bot.listen do |rmsg|
138
+ args[:rmsg] = rmsg
139
+ Dialog.clear(args)
140
+ Dialog.clearApi(args)
141
+ args[:perf] = {init: Time.now}
142
+ if args[:rmsg].respond_to?(:from)
143
+ fromId = args[:rmsg][:from][:id]
144
+ args[:queue][fromId] ||= {}
145
+ args[:queue][fromId][:thread] = Concurrent::ImmediateExecutor.new unless args[:queue][fromId][:thread]
146
+ args[:queue][fromId][:thread].post do
147
+ runMessage(args)
148
+ end
149
+ else
150
+ Concurrent::Future.execute(executor: args[:queue][:threadCommon]) do
151
+ runMessage(args)
152
+ end
153
+ end
154
+
155
+ end
156
+ rescue
157
+ # rescue Exception => @e
158
+ retry
159
+ # Dialog.logger.error "ERROR - #{@e.inspect}\n\n Backtrace:\n #{@e.backtrace.join("\n\t")}\n \
160
+ # MMSG:\n#{args[:mmsg]}\n" if @e
161
+ end
162
+ end
163
+ end
164
+
165
+
166
+ def runMessage(args)
167
+ begin
168
+ # Dialog.logger.debug "######### - REDIS STAT:\n #{Dialog::redis.call(['client', 'list'])}\n\n"
169
+ Dialog::Metamess.firstpoint(args)
170
+ args[:perf][:fullend] = Time.now
171
+ Dialog.logger.info("## PERF: #{perf(args[:perf]).join(", ")}")
172
+
173
+ rescue Exception => @e
174
+ Dialog.logger.error "ERROR - #{@e.inspect}\n\n Backtrace:\n #{@e.backtrace.join("\n\t")}\n \
175
+ MMSG:\n#{args[:mmsg]}\n" if @e
176
+ args[:bot].api.send("sendMessage".to_sym, {chat_id: Dialog.config.monitoring.channel, disable_notification: true, text: @e}) unless Dialog.config.monitoring.channel.nil?
177
+ raise
178
+ end
179
+ end
180
+
181
+ def perf(perf)
182
+ a = []
183
+ a << "mmsg: #{perf[:metamess] - perf[:init]}s" if perf.has_key?(:metamess)
184
+ a << "preApiAction: #{perf[:preApiAction] - perf[:init]}s" if perf.has_key?(:preApiAction)
185
+ a << "full: #{perf[:fullend] - perf[:init]}s"
186
+ end
187
+
188
+ end
189
+ end
@@ -0,0 +1,59 @@
1
+ ######## ####### ######## ####### ######## ########
2
+ ## / / / / License \ \ \ \
3
+ ## Copyleft culture, Copyright (C) is prohibited here
4
+ ## This work is licensed under a CC BY-SA 4.0
5
+ ## Creative Commons Attribution-ShareAlike 4.0 License
6
+ ## Refer to the http://creativecommons.org/licenses/by-sa/4.0/
7
+ ######## ####### ######## ####### ######## ########
8
+ ## / / / / Code Climate \ \ \ \
9
+ ## Language = ruby
10
+ ## Indent = space; 2 chars;
11
+ ######## ####### ######## ####### ######## ########
12
+
13
+ ### SYSTEM
14
+ require 'pp'
15
+ require 'timeout'
16
+ require 'logger'
17
+ require 'socket'
18
+ require 'fileutils'
19
+ require 'uri'
20
+
21
+ ### GEMS
22
+ require 'dialect_lookup'
23
+ require 'tdlib-ruby'
24
+ require 'telegram/bot'
25
+ require 'i18n'
26
+ require 'redis'
27
+ require 'concurrent'
28
+ require 'oj'
29
+ require 'erb'
30
+ require 'open3'
31
+ require 'sidekiq-cron'
32
+ require 'sidekiq-rate-limiter'
33
+ #lazy_object
34
+
35
+ ### DRY
36
+ require 'dry-configurable'
37
+ require 'dry-monads'
38
+ require 'dry-matcher'
39
+ require 'dry-transaction'
40
+ require 'dry/inflector'
41
+ require 'dry-validation'
42
+ require 'dry-struct'
43
+ require 'dry-types'
44
+
45
+ #dry-events - pub/sub
46
+
47
+ ### CODE
48
+ require_relative './configuration.rb'
49
+ require_relative './dialogStart.rb'
50
+ Dir.glob(File.join("#{Dialog.config.path.run}/lib/**", "*.rb")).each{|f| require f}
51
+
52
+ case Dialog.config.run.scope
53
+ when 'init'
54
+ Dialog.tdlibAuth
55
+ when 'start'
56
+ Dialog.start
57
+ when 'stop'
58
+ true
59
+ end