dialog_ruby 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +1 -0
- data/Gemfile +0 -0
- data/_dev/get_full_botapi.rb +59 -0
- data/_dev/inlinekb_pubsub.rb +69 -0
- data/_dev/main.rb +127 -0
- data/_dev/restriction.rb +32 -0
- data/_dev/ru.yml +79 -0
- data/_dev/sidekiq.rb +28 -0
- data/_dev/tdlib.rb +154 -0
- data/dialog.sh +51 -0
- data/dialog_ruby.gemspec +41 -0
- data/lib/architecture.md +22 -0
- data/lib/configuration.rb +117 -0
- data/lib/dialogStart.rb +189 -0
- data/lib/dialog_ruby.rb +59 -0
- data/lib/exec.sh +61 -0
- data/lib/exec_conf/cli_config +7 -0
- data/lib/exec_conf/dialog__sync.service +14 -0
- data/lib/exec_conf/dialog__sync.timer +11 -0
- data/lib/exec_conf/dialog_bot@.path +6 -0
- data/lib/exec_conf/dialog_bot@.service +18 -0
- data/lib/exec_conf/dialog_bot_dev@.path +6 -0
- data/lib/exec_conf/dialog_bot_dev_pre@.service +16 -0
- data/lib/exec_conf/dialog_bot_pre@.service +16 -0
- data/lib/exec_conf/dialog_redis@.service +14 -0
- data/lib/exec_conf/post-merge +5 -0
- data/lib/exec_conf/redis_global.conf +49 -0
- data/lib/exec_conf/redis_local.conf +4 -0
- data/lib/lang/global_ru.yml +29 -0
- data/lib/lib/dialect/canvas/canvas.rb +35 -0
- data/lib/lib/dialect/canvas/element/convert/SearchBaloo.rb +45 -0
- data/lib/lib/dialect/canvas/element/data/search.rb +34 -0
- data/lib/lib/dialect/canvas/element/send/Inline_query_result.rb +32 -0
- data/lib/lib/dialect/canvas/element/send/bot_message.rb +38 -0
- data/lib/lib/dialect/canvas/element/send/keyboards.rb +59 -0
- data/lib/lib/dialect/canvas/element/send/recognize.rb +51 -0
- data/lib/lib/dialect/canvas/element/send/restrict.rb +42 -0
- data/lib/lib/dialect/canvas/element/send/tdlib_chat.rb +33 -0
- data/lib/lib/dialect/canvas/element/send/tdlib_message.rb +38 -0
- data/lib/lib/dialect/canvas/mod/send/_Inline_query_result.rb +38 -0
- data/lib/lib/dialect/canvas/mod/send/_keyboards.rb +40 -0
- data/lib/lib/dialect/canvas/mod/send/func.rb +98 -0
- data/lib/lib/dialect/canvas/mod/send/general/_heads.rb +27 -0
- data/lib/lib/dialect/canvas/mod/send/general/chat.rb +38 -0
- data/lib/lib/dialect/canvas/mod/send/general/common.rb +32 -0
- data/lib/lib/dialect/canvas/mod/send/general/message.rb +37 -0
- data/lib/lib/dialect/canvas/mod/send/general/user.rb +36 -0
- data/lib/lib/dialect/canvas/mod/send/inline_query_result/common.rb +36 -0
- data/lib/lib/dialect/codegen/codegen.rb +74 -0
- data/lib/lib/dialect/codegen/erb/data/1.ModReceive2GetData.erb +27 -0
- data/lib/lib/dialect/codegen/erb/data/2.GetData2Elements.erb +27 -0
- data/lib/lib/dialect/codegen/erb/data/3.GenData2Dest.erb +34 -0
- data/lib/lib/dialect/codegen/erb/functional/1.Expect2Events.erb +37 -0
- data/lib/lib/dialect/codegen/erb/functional/2.1.Events2AppEvent.erb +26 -0
- data/lib/lib/dialect/codegen/erb/functional/2.2.1.Events2ModReceive.erb +73 -0
- data/lib/lib/dialect/codegen/erb/functional/2.2.2.ModReceive2AppEvent.erb +59 -0
- data/lib/lib/dialect/codegen/erb/functional/3.Appevent2EventBus.erb +35 -0
- data/lib/lib/dialect/codegen/erb/functional/4.1.AppEvent2Elements.erb +72 -0
- data/lib/lib/dialect/codegen/erb/functional/5.1.Element2ModElements.erb +70 -0
- data/lib/lib/dialect/codegen/erb/functional/5.2.Element2ModSend.erb +69 -0
- data/lib/lib/dialect/codegen/erb/functional/7.ElementChains.erb +91 -0
- data/lib/lib/dialect/codegen/repack/constructor/DockedGroupings2AppFunctions.rb +36 -0
- data/lib/lib/dialect/codegen/repack/constructor/Element2ModSend.rb +49 -0
- data/lib/lib/dialect/codegen/repack/constructor/ElementsInElements.rb +34 -0
- data/lib/lib/dialect/codegen/repack/functional/1.Expect2Events.rb +35 -0
- data/lib/lib/dialect/codegen/repack/functional/2.2.1.Events2ModReceive.rb +71 -0
- data/lib/lib/dialect/codegen/repack/functional/2.2.2.ModReceive2AppEvent.rb +45 -0
- data/lib/lib/dialect/codegen/repack/functional/5.1.Element2ModElements.rb +90 -0
- data/lib/lib/dialect/codegen/repack/functional/5.2.Element2ModSend.rb +60 -0
- data/lib/lib/dialect/codegen/repack/functional/7.ElementChains.rb +88 -0
- data/lib/lib/dialect/codegen/run.rb +79 -0
- data/lib/lib/metamess/_run.rb +162 -0
- data/lib/lib/metamess/content/content_o-command_f.rb +100 -0
- data/lib/lib/metamess/content/content_o-media_f.rb +149 -0
- data/lib/lib/metamess/content/content_o-simple_f.rb +35 -0
- data/lib/lib/metamess/content/content_o.rb +245 -0
- data/lib/lib/metamess/event/notify_o-chatmember_f.rb +124 -0
- data/lib/lib/metamess/event/notify_o-chattitle_f.rb +34 -0
- data/lib/lib/metamess/event/notify_o-create_f.rb +42 -0
- data/lib/lib/metamess/event/notify_o-migrate_f.rb +34 -0
- data/lib/lib/metamess/event/notify_o-pinned_f.rb +34 -0
- data/lib/lib/metamess/event/notify_o.rb +28 -0
- data/lib/lib/metamess/event_c.rb +26 -0
- data/lib/lib/metamess/func.rb +220 -0
- data/lib/lib/metamess/service/service_o-callback_f.rb +33 -0
- data/lib/lib/metamess/service/service_o-inline_f.rb +55 -0
- data/lib/lib/metamess/service/service_o.rb +26 -0
- data/lib/lib/naming.rb +130 -0
- data/lib/lib/storage/redis/redisPubSub.rb +51 -0
- data/lib/lib/storage/redis/rediscached.rb +97 -0
- data/lib/lib/tdlib/auth.rb +141 -0
- data/lib/lib/tdlib/func.rb +34 -0
- data/lib/lib/tdlib/init.rb +39 -0
- data/lib/lib/telegram/botapi.rb +71 -0
- data/lib/lib/telegram/infra_info.rb +50 -0
- data/lib/lib/telegram/wrappers.rb +41 -0
- data/lib/lib/tooling/lang.rb +24 -0
- data/lib/lib/tooling/log.rb +54 -0
- data/lib/lib/tooling/ruby.rb +25 -0
- data/lib/version.rb +3 -0
- data/logo.png +0 -0
- 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
|
+
|
data/dialog_ruby.gemspec
ADDED
@@ -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
|
data/lib/architecture.md
ADDED
@@ -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
|
data/lib/dialogStart.rb
ADDED
@@ -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
|
data/lib/dialog_ruby.rb
ADDED
@@ -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
|