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.
- 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/lib/lib/naming.rb
ADDED
|
@@ -0,0 +1,130 @@
|
|
|
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; module Naming;
|
|
14
|
+
module ChatContext
|
|
15
|
+
def ChatContext.Private; 'Private'; end
|
|
16
|
+
def ChatContext.Noman; 'Noman'; end
|
|
17
|
+
def ChatContext.Botman; 'Botman'; end
|
|
18
|
+
def ChatContext.Climan; 'Climan'; end
|
|
19
|
+
def ChatContext.Fullman; 'Fullman'; end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
module Class
|
|
23
|
+
|
|
24
|
+
def Class.Event; 'event'; end
|
|
25
|
+
module Event; module Order
|
|
26
|
+
|
|
27
|
+
def Order.Content; 'content'; end
|
|
28
|
+
module Content; module Type
|
|
29
|
+
def Type.Original; 'original'; end
|
|
30
|
+
def Type.Edit; 'edit'; end
|
|
31
|
+
def Type.Reply; 'reply'; end
|
|
32
|
+
def Type.Forward; 'forward'; end
|
|
33
|
+
end; end;
|
|
34
|
+
|
|
35
|
+
module Content; module Family
|
|
36
|
+
def Family.Media; 'media'; end
|
|
37
|
+
module Media; module Genus
|
|
38
|
+
def Genus.Photo; 'photo'; end
|
|
39
|
+
def Genus.Document; 'document'; end
|
|
40
|
+
def Genus.Voice; 'voice'; end
|
|
41
|
+
def Genus.Audio; 'audio'; end
|
|
42
|
+
def Genus.Video; 'video'; end
|
|
43
|
+
def Genus.Videonote; 'videonote'; end
|
|
44
|
+
def Genus.Sticker; 'sticker'; end
|
|
45
|
+
end; end
|
|
46
|
+
|
|
47
|
+
def Family.Command; 'command'; end
|
|
48
|
+
module Command; module Genus
|
|
49
|
+
def Genus.Telegram; 'telegram'; end
|
|
50
|
+
def Genus.Dialog; 'dialog'; end
|
|
51
|
+
end; end
|
|
52
|
+
|
|
53
|
+
def Family.Simple; 'simple'; end
|
|
54
|
+
module Simple; module Genus
|
|
55
|
+
def Genus.Text; 'text'; end
|
|
56
|
+
end; end
|
|
57
|
+
def Family.Notext; 'notext'; end
|
|
58
|
+
|
|
59
|
+
def Family.Contact; 'contact'; end
|
|
60
|
+
def Family.Location; 'location'; end
|
|
61
|
+
def Family.Invoice; 'invoice'; end
|
|
62
|
+
end; end
|
|
63
|
+
|
|
64
|
+
def Order.Notify; 'notify'; end
|
|
65
|
+
module Notify; module Family
|
|
66
|
+
def Family.ChatTitle; 'chattitle'; end
|
|
67
|
+
def Family.Passport; 'passport'; end
|
|
68
|
+
module Passport; module Genus
|
|
69
|
+
def Genus.Personal_details; 'personal_details'; end
|
|
70
|
+
def Genus.Passport; 'passport'; end
|
|
71
|
+
def Genus.Driver_license; 'driver_license'; end
|
|
72
|
+
def Genus.Identity_card; 'identity_card'; end
|
|
73
|
+
def Genus.Internal_passport; 'internal_passport'; end
|
|
74
|
+
def Genus.Address; 'address'; end
|
|
75
|
+
def Genus.Utility_bill; 'utility_bill'; end
|
|
76
|
+
def Genus.Bank_statement; 'bank_statement'; end
|
|
77
|
+
def Genus.Rental_agreement; 'rental_agreement'; end
|
|
78
|
+
def Genus.Passport_registration; 'passport_registration'; end
|
|
79
|
+
def Genus.Temporary_registration; 'temporary_registration'; end
|
|
80
|
+
def Genus.Phone_number; 'phone_number'; end
|
|
81
|
+
def Genus.Email; 'email'; end
|
|
82
|
+
end; end
|
|
83
|
+
def Family.ChatMember; 'chatmember'; end
|
|
84
|
+
module ChatMember; module Genus
|
|
85
|
+
def Genus.In_open; 'in_open'; end
|
|
86
|
+
def Genus.In_link; 'in_link'; end
|
|
87
|
+
def Genus.Invite; 'invite'; end
|
|
88
|
+
def Genus.Leave; 'leave'; end
|
|
89
|
+
def Genus.Ban; 'ban'; end
|
|
90
|
+
end; end
|
|
91
|
+
def Family.ChatPhoto; 'chatphoto'; end
|
|
92
|
+
def Family.Create; 'create'; end
|
|
93
|
+
def Family.Migrate; 'migrate'; end
|
|
94
|
+
def Family.Pinned; 'pinned'; end
|
|
95
|
+
def Family.Login; 'login'; end
|
|
96
|
+
end; end;
|
|
97
|
+
|
|
98
|
+
def Order.Service; 'service'; end
|
|
99
|
+
module Service; module Family
|
|
100
|
+
def Family.Inline; 'inline'; end
|
|
101
|
+
module Inline; module Genus
|
|
102
|
+
def Genus.Query; 'query'; end
|
|
103
|
+
def Genus.Cresult; 'cresult'; end
|
|
104
|
+
# def Genus.Answer; 'answer'; end
|
|
105
|
+
end; end;
|
|
106
|
+
|
|
107
|
+
def Family.Callback; 'callback'; end
|
|
108
|
+
module Callback; module Genus
|
|
109
|
+
def Genus.Query; 'query'; end
|
|
110
|
+
end; end;
|
|
111
|
+
end; end;
|
|
112
|
+
|
|
113
|
+
def Order.Default; 'default'; end
|
|
114
|
+
module Default; module Family
|
|
115
|
+
def Family.Default; 'default'; end
|
|
116
|
+
module Inline; module Genus
|
|
117
|
+
def Default.Main; 'main'; end
|
|
118
|
+
end; end;
|
|
119
|
+
end; end;
|
|
120
|
+
|
|
121
|
+
end; end;
|
|
122
|
+
end
|
|
123
|
+
end; end;
|
|
124
|
+
|
|
125
|
+
# module Message; module Family
|
|
126
|
+
# def Family.EditMessage; 'EditMessage'; end
|
|
127
|
+
# def Family.Pin; 'Pin'; end
|
|
128
|
+
# def Family.WebLogin; 'WebLogin'; end
|
|
129
|
+
# def Family.GenusNone; 'GenusNone'; end
|
|
130
|
+
# end; end;
|
|
@@ -0,0 +1,51 @@
|
|
|
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
|
+
module RedisPubSub
|
|
15
|
+
class << self
|
|
16
|
+
|
|
17
|
+
def subGetUnsub1(args)
|
|
18
|
+
redisChannelPrefix = args[:x][:redis][:user_id]
|
|
19
|
+
redisSubTimeout = 1
|
|
20
|
+
|
|
21
|
+
subGetUnsub(args,redisChannelPrefix,redisSubTimeout)
|
|
22
|
+
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def subGetUnsub2(args)
|
|
26
|
+
redisChannelPrefix = args[:mmsg][:user_id]
|
|
27
|
+
redisSubTimeout = 300
|
|
28
|
+
|
|
29
|
+
subGetUnsub(args,redisChannelPrefix,redisSubTimeout)
|
|
30
|
+
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def subGetUnsub(args,redisChannelPrefix,redisSubTimeout)
|
|
34
|
+
args[:x][:redis][:redisChannelpostfix].nil? ? args[:x][:redis][:redisChannelpostfix] = "" : true
|
|
35
|
+
redisChannel = "#{redisChannelPrefix}__#{args[:x][:redis][:subPostfix]}_#{args[:x][:redis][:redisChannelpostfix]}"
|
|
36
|
+
redis ||= Redis.new(path: Bot.configuration.redis_url)
|
|
37
|
+
redis.subscribe_with_timeout(redisSubTimeout, redisChannel) do |on, subscriptions|
|
|
38
|
+
Dialog.logger.debug "Subscribed to #{redisChannel} (#{subscriptions} subscriptions)"
|
|
39
|
+
on.message do |channel, msg|
|
|
40
|
+
Dialog.logger.debug "Redis READ from #{channel}, MSG: #{msg}"
|
|
41
|
+
args[:x][:redis][:answer] = Oj.load(msg)
|
|
42
|
+
redis.unsubscribe(redisChannel)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
rescue Redis::TimeoutError => @e
|
|
46
|
+
true
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,97 @@
|
|
|
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
|
+
module RedisCached
|
|
15
|
+
class << self
|
|
16
|
+
|
|
17
|
+
def areaDescr(args)
|
|
18
|
+
case args[:x][:redis][:region]
|
|
19
|
+
when 'chat'
|
|
20
|
+
args[:x][:redis][:area] = args[:mmsg][:fqndata][:o][:chat][:id]
|
|
21
|
+
args[:pushCache] = true if args[:x][:redis][:territory] == 'context'
|
|
22
|
+
when 'user'
|
|
23
|
+
args[:x][:redis][:area] = args[:mmsg][:user_id]
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def pullCached(args)
|
|
29
|
+
# Using a "REGION -> AREA -> TERRITORY" semantics
|
|
30
|
+
# Means: hash 'REGION:AREA' key 'TERRITORY'
|
|
31
|
+
areaDescr(args)
|
|
32
|
+
# redis ||= Redis.new(path: Bot.configuration.redis_url) ### May be BUG - needs additional Redis connection
|
|
33
|
+
a = Dialog::redis.hmget("#{args[:x][:redis][:region]}:#{args[:x][:redis][:area]}", ":#{args[:x][:redis][:territory]}")[0] # possible BUG - first array element
|
|
34
|
+
Dialog.logger.debug "Redis Request: \"#{args[:x][:redis][:region]}:#{args[:x][:redis][:area]}\" Key: \":#{args[:x][:redis][:territory]}\" Answer: \"#{a}\", x: #{args[:x][:redis]}"
|
|
35
|
+
|
|
36
|
+
if a.nil? and args[:pushCache] == true
|
|
37
|
+
a = pushCached(args)
|
|
38
|
+
end
|
|
39
|
+
Dialog.logger.debug "Using RedisCached for the upper request"
|
|
40
|
+
Dialog.clearRedis(args)
|
|
41
|
+
a
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def pushCached(args)
|
|
46
|
+
areaDescr(args)
|
|
47
|
+
Dialog.logger.debug "Redis pushToCache, area::#{args[:x][:redis][:area]}, region::#{args[:x][:redis][:region]}"
|
|
48
|
+
case args[:x][:redis][:region]
|
|
49
|
+
when 'chat'
|
|
50
|
+
|
|
51
|
+
case args[:x][:redis][:territory]
|
|
52
|
+
when 'context'
|
|
53
|
+
pushCachedContext(args)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
when 'user'
|
|
57
|
+
case args[:x][:redis][:territory]
|
|
58
|
+
when 'settings'
|
|
59
|
+
@v = true
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
@v=redisWrite_ChatCached({hname: "#{args[:x][:redis][:region]}:#{args[:x][:redis][:area]}", k: args[:x][:redis][:territory], v: @v}, args)
|
|
64
|
+
@v
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def pushCachedContext(args)
|
|
69
|
+
Dialog.clearApi(args)
|
|
70
|
+
args[:smsg] = {chat_id: args[:mmsg][:fqndata][:o][:chat][:id]}
|
|
71
|
+
args[:api][:op] = 'ChatAdministrators'
|
|
72
|
+
a = Dialog::BotApi.apiActionGet(args)
|
|
73
|
+
bman = 0; cman = 0
|
|
74
|
+
a['result'].each do |user|
|
|
75
|
+
Dialog.logger.debug "userId #{user['user']['id']}, userStatus #{user['status']}; cliId #{args[:globals][:cliId]}, botId #{Dialog.config.naming.id}"
|
|
76
|
+
cman = 1 if (user['user']['id'].to_i == args[:globals][:cliId] and user['status'] == 'creator')
|
|
77
|
+
bman = 1 if (user['user']['id'].to_i == Dialog.config.naming.id and user['status'] == 'administrator')
|
|
78
|
+
end
|
|
79
|
+
Dialog.logger.debug "Context args: @bman=#{bman} @cman=#{cman}"
|
|
80
|
+
@v = Dialog::Naming::ChatContext.Fullman if (bman == 1 and cman == 1)
|
|
81
|
+
@v = Dialog::Naming::ChatContext.Botman if (bman == 1 and cman == 0)
|
|
82
|
+
@v = Dialog::Naming::ChatContext.Climan if (bman == 0 and cman == 1)
|
|
83
|
+
@v = Dialog::Naming::ChatContext.Noman if (bman == 0 and cman == 0)
|
|
84
|
+
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def redisWrite_ChatCached(vals, args)
|
|
88
|
+
Dialog.redis.hmset("#{vals[:hname]}", ":#{vals[:k]}", vals[:v])
|
|
89
|
+
args[:x][:redis].key?(:ttl) ? true : args[:x][:redis][:ttl] = 600
|
|
90
|
+
Dialog.redis.expire "#{vals[:hname]}", args[:x][:redis][:ttl]
|
|
91
|
+
Dialog.logger.debug "Redis SET - #{vals[:hname]} K:#{vals[:k]} V: #{vals[:v]} with ttl #{args[:x][:redis][:ttl]}"
|
|
92
|
+
vals[:v]
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
@@ -0,0 +1,141 @@
|
|
|
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
|
+
module Dialog
|
|
13
|
+
module TDLib
|
|
14
|
+
class << self
|
|
15
|
+
|
|
16
|
+
def tdlibAuth(mode, tgSess)
|
|
17
|
+
case mode
|
|
18
|
+
when 'bot'
|
|
19
|
+
bot_auth(tgSess)
|
|
20
|
+
when 'cli'
|
|
21
|
+
cli_auth(tgSess)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def proxy
|
|
27
|
+
proxy = {
|
|
28
|
+
'@type' => 'addProxy',
|
|
29
|
+
'server' => Dialog.config.proxy.host,
|
|
30
|
+
'port' => Dialog.config.proxy.port,
|
|
31
|
+
'enable' => true,
|
|
32
|
+
'type' => {
|
|
33
|
+
'@type' => 'proxyTypeSocks5',
|
|
34
|
+
'username' => Dialog.config.proxy.login,
|
|
35
|
+
'password' => Dialog.config.proxy.pass
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return proxy
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def bot_auth(tgSess)
|
|
42
|
+
state = nil
|
|
43
|
+
|
|
44
|
+
tgSess.on('updateAuthorizationState') do |update|
|
|
45
|
+
next unless update.dig('authorization_state', '@type') == 'authorizationStateWaitPhoneNumber'
|
|
46
|
+
state = :wait_token
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
tgSess.on('updateAuthorizationState') do |update|
|
|
50
|
+
next unless update.dig('authorization_state', '@type') == 'authorizationStateReady'
|
|
51
|
+
state = :ready
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
loop do
|
|
55
|
+
case state
|
|
56
|
+
when :wait_token
|
|
57
|
+
p 'Please enter bot token:'
|
|
58
|
+
token = STDIN.gets.strip
|
|
59
|
+
params = {
|
|
60
|
+
'@type' => 'checkAuthenticationBotToken',
|
|
61
|
+
'token' => token
|
|
62
|
+
}
|
|
63
|
+
tgSess.broadcast_and_receive(params).tap(&error_handler)
|
|
64
|
+
|
|
65
|
+
when :ready
|
|
66
|
+
@me = tgSess.broadcast_and_receive('@type' => 'getMe')
|
|
67
|
+
break
|
|
68
|
+
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
close(tgSess)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def cli_auth(tgSess)
|
|
77
|
+
state = nil
|
|
78
|
+
|
|
79
|
+
tgSess.broadcast(proxy)
|
|
80
|
+
|
|
81
|
+
tgSess.on('updateAuthorizationState') do |update|
|
|
82
|
+
next unless update.dig('authorization_state', '@type') == 'authorizationStateWaitPhoneNumber'
|
|
83
|
+
state = :wait_phone
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
tgSess.on('updateAuthorizationState') do |update|
|
|
87
|
+
next unless update.dig('authorization_state', '@type') == 'authorizationStateWaitPassword'
|
|
88
|
+
state = :wait_password
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
tgSess.on('updateAuthorizationState') do |update|
|
|
92
|
+
next unless update.dig('authorization_state', '@type') == 'authorizationStateWaitCode'
|
|
93
|
+
state = :wait_code
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
tgSess.on('updateAuthorizationState') do |update|
|
|
97
|
+
next unless update.dig('authorization_state', '@type') == 'authorizationStateReady'
|
|
98
|
+
state = :ready
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
loop do
|
|
102
|
+
p state
|
|
103
|
+
case state
|
|
104
|
+
when :wait_phone
|
|
105
|
+
p 'Please enter phone number:'
|
|
106
|
+
phone = STDIN.gets.strip
|
|
107
|
+
params = {
|
|
108
|
+
'@type' => 'setAuthenticationPhoneNumber',
|
|
109
|
+
'phone_number' => phone
|
|
110
|
+
}
|
|
111
|
+
tgSess.broadcast_and_receive(params).tap(&error_handler)
|
|
112
|
+
|
|
113
|
+
when :wait_code
|
|
114
|
+
p 'Please enter code from SMS:'
|
|
115
|
+
code = STDIN.gets.strip
|
|
116
|
+
params = {
|
|
117
|
+
'@type' => 'checkAuthenticationCode',
|
|
118
|
+
'code' => code
|
|
119
|
+
}
|
|
120
|
+
tgSess.broadcast_and_receive(params).tap(&error_handler)
|
|
121
|
+
|
|
122
|
+
when :wait_password
|
|
123
|
+
p 'Please enter password:'
|
|
124
|
+
password = STDIN.gets.strip
|
|
125
|
+
params = {
|
|
126
|
+
'@type' => 'checkAuthenticationPassword',
|
|
127
|
+
'password' => password
|
|
128
|
+
}
|
|
129
|
+
tgSess.broadcast_and_receive(params).tap(&error_handler)
|
|
130
|
+
when :ready
|
|
131
|
+
@me = tgSess.broadcast_and_receive('@type' => 'getMe')
|
|
132
|
+
break
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
close(tgSess)
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
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
|
+
module Dialog
|
|
13
|
+
module TDLib
|
|
14
|
+
class << self
|
|
15
|
+
|
|
16
|
+
def error_handler
|
|
17
|
+
proc do |result|
|
|
18
|
+
if result['@type'] == 'error'
|
|
19
|
+
msg = "Failed to process request: #{result['code']} #{result['message']}"
|
|
20
|
+
p msg
|
|
21
|
+
raise msg
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def close(tgSess)
|
|
27
|
+
# ensure
|
|
28
|
+
tgSess.close
|
|
29
|
+
# end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|