xasin-telegram 0.2.2 → 0.2.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9b586489f2bb15aa638d85a6409bbfd937ee10d8
4
- data.tar.gz: 3b184fa20bf6fa785ce51796b00af78ca75bc83f
3
+ metadata.gz: 25c7030241f3f7f6eb094897f5175c49a177e299
4
+ data.tar.gz: 9d335a41200777ead31dad505e059d3a9ae726c1
5
5
  SHA512:
6
- metadata.gz: c8241173e2b8911d30dcbef771aa1c03848bc6d289160401a518d6b8248fa93281852ab34ccf192afc1a0e770a0dfa232900e528d5cf04fe7c5aa90e43b163b9
7
- data.tar.gz: ee57382ce4b7649d32e7c01752ddf3d965241815b7e13413486014e5326644caa361b7567decd5f0467baef7d7ec5764fa2627db0c4ac01ad416b5795c4d87f9
6
+ metadata.gz: 6fe1d6ce851631e0460bba3b843eef7fbf3583bff045bd854870c9cf1cb8526c8b300e5a793d7e13e5c8ebbf22a1fc926bf0727a7f13b7d243faf35878c26685
7
+ data.tar.gz: 2dc0c584e4e5e4b829d0f8c8b12ef0664a78326f6d5d7769fdfbb4da53bd2c3a47688137ea17f39bd12042bb980b65a1770629307b7b086bcfb099801b9eddbf
@@ -9,6 +9,7 @@ module Telegram
9
9
  attr_accessor :usernameList
10
10
 
11
11
  def initialize(httpCore, mqtt)
12
+ # Check if we already have a HTTPCore, else create one
12
13
  if(httpCore.is_a? Telegram::HTTPCore)
13
14
  @httpCore = httpCore;
14
15
  else
@@ -28,24 +29,34 @@ module Telegram
28
29
  setup_mqtt();
29
30
  end
30
31
 
31
- def _process_inline_keyboard(keyboardLayout, gID)
32
- return nil unless (keyboardLayout.is_a? Array)
33
- return nil unless gID
32
+ def _process_inline_keyboard(keyboardLayout, gID = nil)
33
+ # Return unless we have a structure we can form into a keyboard
34
+ return nil unless (keyboardLayout.is_a? Array or keyboardLayout.is_a? Hash)
34
35
 
36
+ # Make sure the structure of keyboardLayout is [{}] or [[]]
37
+ if(keyboardLayout.is_a? Hash)
38
+ keyboardLayout = [keyboardLayout]
39
+ elsif(not (keyboardLayout[0].is_a? Array or keyboardLayout[0].is_a? Hash))
40
+ keyboardLayout = [keyboardLayout]
41
+ end
35
42
 
36
- keyboardLayout = [keyboardLayout] unless(keyboardLayout[0].is_a? Array);
37
43
  outData = Array.new();
38
44
 
45
+ # Iterate through the rows of keyboards
39
46
  keyboardLayout.each do |row|
40
47
  newRow = Array.new();
41
48
 
49
+ # Create the INLINE KEY button elements
42
50
  row.each do |key, val|
43
51
  cbd = {i: gID, k: (val or key)};
44
52
  newRow << {text: key, callback_data: cbd.to_json}
45
53
  end
54
+
55
+ # Add the new row to the array of rows
46
56
  outData << newRow;
47
57
  end
48
58
 
59
+ # Return the ready reply_markup element
49
60
  return {inline_keyboard: outData};
50
61
  end
51
62
 
@@ -59,93 +70,105 @@ module Telegram
59
70
  def _handle_send(data, uID)
60
71
  # Resolve a saved Username to a User-ID
61
72
  uID = @usernameList[uID] if(@usernameList.key? uID)
62
- return if (uID = uID.to_i) == 0;
73
+ return if (uID = uID.to_i) == 0; # Return if a unknown Username was used
63
74
 
64
- begin
65
- data = JSON.parse(data, symbolize_names: true) if data.is_a? String
66
- rescue
67
- # Allow for pure-text to be sent (easier on the ESPs)
68
- data = {text: data}
69
- end
75
+ gID = data[:gid];
70
76
 
71
- if(gID = data[:gid])
77
+ # Check if a GroupID is present and a former message is known
78
+ if(gID and @groupIDList[uID][gID])
72
79
  if(data[:replace])
73
80
  _handle_delete(gID, uID)
74
- elsif(data[:overwrite] and @groupIDList[uID][gID])
81
+ elsif(data[:overwrite])
75
82
  _handle_edit(data, uID);
76
- return;
83
+ return; # After editing, no new message should be sent!
77
84
  end
78
85
  end
79
86
 
87
+ # Lay out all mandatory parameters for sendMessage request
80
88
  outData = {
81
89
  chat_id: uID,
82
- parse_mode: (data[:parse_mode] or "Markdown"),
90
+ parse_mode: (data[:parse_mode] or "Markdown"), # Markdown parse mode is just nice
83
91
  text: data[:text]
84
92
  }
85
93
 
86
- if(ilk = data[:inline_keyboard] and data[:gid])
87
- outData[:reply_markup] = _process_inline_keyboard(ilk, data[:gid]);
94
+ # Check if the message is meant to be sent without notification
95
+ if(data[:silent])
96
+ outData[:disable_notification] = true;
97
+ end
98
+
99
+ # Check if an inline keyboard layout is given, and parse that.
100
+ if((ilk = data[:inline_keyboard]))
101
+ outData[:reply_markup] = _process_inline_keyboard(ilk, gID);
88
102
  end
89
103
 
90
104
  reply = @httpCore.perform_post("sendMessage", outData);
91
- return unless reply[:ok]
105
+ return unless reply[:ok] # Something was wrong about our message layout
106
+ # TODO Add a proper error handler here.
92
107
 
93
- # Check if this message has a grouping ID
94
- if(gID = data[:gid])
95
- # Save this grouping ID
96
- @groupIDList[uID][gID] = reply[:result][:message_id];
97
- end
108
+ # If a GroupID was given, save the sent message's ID
109
+ @groupIDList[uID][gID] = reply[:result][:message_id] if(gID);
98
110
  end
99
111
 
100
112
  def _handle_edit(data, uID)
101
113
  # Resolve a saved Username to a User-ID
102
114
  uID = @usernameList[uID] if(@usernameList.key? uID)
103
- return if (uID = uID.to_i) == 0;
104
-
105
- begin
106
- data = JSON.parse(data, symbolize_names: true) if data.is_a? String
115
+ return if (uID = uID.to_i) == 0; # Return if a unknown Username was used
107
116
 
108
- # Fetch the target Message ID
109
- return unless mID = @groupIDList[uID][data[:gid]]
117
+ # Fetch the target MessageID - Return if none is present
118
+ return unless mID = @groupIDList[uID][data[:gid]]
110
119
 
111
- outData = {
112
- chat_id: uID,
113
- message_id: mID,
114
- };
120
+ # Lay out all mandatory arguments for the edit POST
121
+ outData = {
122
+ chat_id: uID,
123
+ message_id: mID,
124
+ };
115
125
 
116
- if(data[:inline_keyboard])
117
- outData[:reply_markup] = _process_inline_keyboard(data[:inline_keyboard]);
118
- end
126
+ # If a inline keyboard was given, parse that.
127
+ if(ilk = data[:inline_keyboard])
128
+ outData[:reply_markup] = _process_inline_keyboard(ilk, data[:gid]);
129
+ end
119
130
 
120
- if(data[:text])
121
- outData[:text] = data[:text];
122
- # Send the POST request editing the message text
123
- @httpCore.perform_post("editMessageText", outData);
124
- else
125
- @httpCore.perform_post("editMessageReplyMarkup", outData);
126
- end
127
- rescue
131
+ if(data[:text]) # Check if text was given
132
+ outData[:text] = data[:text];
133
+ # Send the POST request editing the message text
134
+ @httpCore.perform_post("editMessageText", outData);
135
+ else
136
+ # Otherwise, only edit the reply markup (keyboard etc.)
137
+ @httpCore.perform_post("editMessageReplyMarkup", outData);
128
138
  end
129
139
  end
130
140
 
131
141
  def _handle_delete(data, uID)
132
142
  # Resolve a saved Username to a User-ID
133
143
  uID = @usernameList[uID] if(@usernameList.key? uID)
134
- return if (uID = uID.to_i) == 0;
144
+ return if (uID = uID.to_i) == 0; # Return unless the username was known
135
145
 
136
146
  # Fetch the real message ID held by a grouping ID
137
147
  return unless mID = @groupIDList[uID][data]
138
- @groupIDList[uID].delete(data);
148
+ @groupIDList[uID].delete(data); # Clear that ID from the list
139
149
 
150
+ # Perform the actual delete
140
151
  @httpCore.perform_post("deleteMessage", {chat_id: uID, message_id: mID});
141
152
  end
142
153
 
143
154
  def setup_mqtt()
144
155
  @mqtt.subscribe_to "Telegram/+/Send" do |data, tSplit|
156
+ begin
157
+ data = JSON.parse(data);
158
+ rescue
159
+ data = {text: data}
160
+ end
161
+
145
162
  _handle_send(data, tSplit[0]);
146
163
  end
147
164
 
148
165
  @mqtt.subscribe_to "Telegram/+/Edit" do |data, tSplit|
166
+ begin
167
+ data = JSON.parse(data);
168
+ rescue
169
+ next;
170
+ end
171
+
149
172
  _handle_edit(data, tSplit[0])
150
173
  end
151
174
 
@@ -195,12 +218,11 @@ module Telegram
195
218
  uID = newUID
196
219
  end
197
220
 
198
- return unless /(\S+):(\S+)/ =~ msg[:data]
199
221
  begin
200
222
  data = JSON.parse(msg[:data], symbolize_names: true);
201
223
 
202
224
  data = {
203
- gid: data[:g],
225
+ gid: data[:i],
204
226
  key: data[:k],
205
227
  }
206
228
 
@@ -0,0 +1,40 @@
1
+
2
+ require_relative 'HTTPCore.rb'
3
+
4
+ module Xasin
5
+ module Telegram
6
+ class TestCore < HTTPCore
7
+ attr_accessor :lastPostData, :lastPostRequest
8
+ attr_reader :currentMessageID
9
+ attr_accessor :toReturn
10
+
11
+ def initialize()
12
+ prepare();
13
+ end
14
+
15
+ def prepare()
16
+ @lastPostData = Array.new();
17
+ @lastPostRequest = Array.new();
18
+
19
+ @currentMessageID = rand(0..9999);
20
+
21
+ @toReturn = {
22
+ ok: true,
23
+ result: {
24
+ message_id: @currentMessageID
25
+ }
26
+ }
27
+ end
28
+
29
+ def attach_receptor(receptor)
30
+ end
31
+
32
+ def perform_post(postRequest, postData)
33
+ @lastPostRequest << postRequest;
34
+ @lastPostData << postData;
35
+
36
+ return @toReturn;
37
+ end
38
+ end
39
+ end
40
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xasin-telegram
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Xasin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-06-16 00:00:00.000000000 Z
11
+ date: 2018-06-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mqtt-sub_handler
@@ -36,6 +36,7 @@ files:
36
36
  - lib/xasin/telegram/HTTPCore.rb
37
37
  - lib/xasin/telegram/MQTT_Adapter.rb
38
38
  - lib/xasin/telegram/SingleUser.rb
39
+ - lib/xasin/telegram/TestHTTPCore.rb
39
40
  homepage: https://github.com/XasWorks/XasCode/tree/GEM_Telegram/Ruby/Telegram
40
41
  licenses:
41
42
  - GPL-3.0