dialog_ruby 0.1.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.
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