kanal-interfaces-telegram 0.3.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +3 -0
- data/Gemfile +1 -1
- data/Gemfile.lock +3 -3
- data/README.md +50 -3
- data/examples/telegram_bot.rb +31 -0
- data/lib/kanal/interfaces/telegram/helpers/telegram_link_parser.rb +17 -0
- data/lib/kanal/interfaces/telegram/plugins/telegram_integration_plugin.rb +6 -14
- data/lib/kanal/interfaces/telegram/telegram_interface.rb +82 -64
- data/lib/kanal/interfaces/telegram/version.rb +1 -1
- metadata +7 -11
- data/.idea/.gitignore +0 -8
- data/.idea/kanal-interfaces-telegram.iml +0 -72
- data/.idea/misc.xml +0 -4
- data/.idea/modules.xml +0 -8
- data/.idea/vcs.xml +0 -6
- data/kanal-interfaces-telegram.gemspec +0 -42
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e2099dcf092fbe8f08c3d7238fce49192a5b473ee0cf9d3768fddc2831cfc444
|
4
|
+
data.tar.gz: 01f5d546c65176738d3e4b06ea526e906a63bfd78db53f774eb24a0e085a9afd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 27db3b2693ac6ce49f93c85d82cf0c52f2dc8943c4b366952fb7c53a70c7d6643aca915120b1168fce7edee95b6418ad07d08461e340c59a8a1878a92250b152
|
7
|
+
data.tar.gz: 4b9691fa2117d2fc0b68ab2e45517ece35d9db66662270a843c0c9d6765d8b916beaad0408260ebf817048b9cb796d35dff3e6e527971f375126b82149b24d49
|
data/CHANGELOG.md
CHANGED
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
kanal-interfaces-telegram (0.
|
4
|
+
kanal-interfaces-telegram (0.3.1)
|
5
5
|
telegram-bot-ruby
|
6
6
|
|
7
7
|
GEM
|
@@ -31,7 +31,7 @@ GEM
|
|
31
31
|
ice_nine (0.11.2)
|
32
32
|
jaro_winkler (1.5.4)
|
33
33
|
json (2.6.3)
|
34
|
-
kanal (0.4.
|
34
|
+
kanal (0.4.3)
|
35
35
|
kramdown (2.4.0)
|
36
36
|
rexml
|
37
37
|
kramdown-parser-gfm (1.1.0)
|
@@ -123,7 +123,7 @@ PLATFORMS
|
|
123
123
|
x86_64-linux
|
124
124
|
|
125
125
|
DEPENDENCIES
|
126
|
-
kanal (= 0.4.
|
126
|
+
kanal (= 0.4.3)
|
127
127
|
kanal-interfaces-telegram!
|
128
128
|
rake (~> 13.0)
|
129
129
|
rspec (~> 3.0)
|
data/README.md
CHANGED
@@ -1,8 +1,14 @@
|
|
1
1
|
# Kanal::Interfaces::Telegram
|
2
2
|
|
3
|
-
Welcome to
|
3
|
+
Welcome to Telegram interface!
|
4
4
|
|
5
|
-
|
5
|
+
Integrate this interface into your Kanal app workflow and it will handle the incoming messages containing plain text or media (images, audio, videos, documents). You can attach media to your responses as well.
|
6
|
+
|
7
|
+
This interface relies on telegram-bot-ruby wrapper (https://github.com/atipugin/telegram-bot-ruby) to handle the actual communication with Telegram API.
|
8
|
+
|
9
|
+
Upon receiving a message or callback from end-user through telegram-bot-ruby, Telegram interface will transform incoming data into Kanal input with specific Telegram properties and feed it to router. Router will form an output (or outputs), which will be sent to Telegram interface. Telegram interface will send a message (or messages) through telegram-bot-ruby wrapper to end-user.
|
10
|
+
|
11
|
+
It is advised to use Telegram interface with Telegram bridge which converts specific input/output properties to standard Kanal properties.
|
6
12
|
|
7
13
|
## Installation
|
8
14
|
|
@@ -16,7 +22,48 @@ If bundler is not being used to manage dependencies, install the gem by executin
|
|
16
22
|
|
17
23
|
## Usage
|
18
24
|
|
19
|
-
|
25
|
+
1. Create instance of Core:
|
26
|
+
|
27
|
+
```core = Kanal::Core::Core.new```
|
28
|
+
|
29
|
+
2. Create instance of Telegram interface
|
30
|
+
|
31
|
+
```interface = Kanal::Interfaces::Telegram::TelegramInterface.new core, "YOUR_TOKEN"```
|
32
|
+
|
33
|
+
3. You can use https://github.com/idchlife/kanal-plugins-batteries_bridge to convert Telegram interface specific properties to Kanal Batteries plugin properties. Batteries plugin properties are using generally known keywords such as :body, :image, :audio etc. More info you can get inside batteries bridge plugin repository
|
34
|
+
|
35
|
+
```core.register_plugin Kanal::Plugins::Batteries::BatteriesPlugin.new```
|
36
|
+
|
37
|
+
4. Add your condition packs (or use conditions provided by Batteries plugin)
|
38
|
+
|
39
|
+
```
|
40
|
+
# Conditions need to be coded for usage in routing
|
41
|
+
core.add_condition_pack :tg_text do
|
42
|
+
add_condition :is do
|
43
|
+
with_argument
|
44
|
+
met? do |input, _core, argument| # 3 arguments provided to the block
|
45
|
+
input.tg_text == argument
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
core.router.configure do
|
51
|
+
# Response for condition created above
|
52
|
+
on :tg_text, is: "foo" do
|
53
|
+
respond do
|
54
|
+
tg_text "bar"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
core.router.default_response do
|
60
|
+
tg_text "Default response"
|
61
|
+
end
|
62
|
+
```
|
63
|
+
|
64
|
+
5. Start your bot
|
65
|
+
|
66
|
+
```interface.start```
|
20
67
|
|
21
68
|
## Development
|
22
69
|
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "kanal/core/core"
|
4
|
+
require "kanal/interfaces/telegram/telegram_interface"
|
5
|
+
|
6
|
+
core = Kanal::Core::Core.new
|
7
|
+
|
8
|
+
interface = Kanal::Interfaces::Telegram::TelegramInterface.new core, "replace-me-with-your-token"
|
9
|
+
|
10
|
+
core.add_condition_pack :tg_text do
|
11
|
+
add_condition :is do
|
12
|
+
with_argument
|
13
|
+
met? do |input, _core, argument|
|
14
|
+
input.tg_text == argument
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
core.router.configure do
|
20
|
+
on :tg_text, is: "foo" do
|
21
|
+
respond do
|
22
|
+
tg_text "bar"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
core.router.default_response do
|
28
|
+
tg_text "Default response"
|
29
|
+
end
|
30
|
+
|
31
|
+
interface.start
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kanal
|
4
|
+
module Interfaces
|
5
|
+
module Telegram
|
6
|
+
module Helpers
|
7
|
+
class TelegramLinkParser
|
8
|
+
def get_file_link(file_id, bot, bot_token)
|
9
|
+
file = bot.api.get_file(file_id: file_id)
|
10
|
+
file_path = file.dig('result', 'file_path')
|
11
|
+
"https://api.telegram.org/file/bot#{bot_token}/#{file_path}"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -16,21 +16,22 @@ module Kanal
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def register_parameters(core)
|
19
|
-
core.register_input_parameter :tg_message, readonly: true
|
20
|
-
core.register_input_parameter :tg_text, readonly: true
|
21
|
-
core.register_input_parameter :tg_callback, readonly: true
|
22
|
-
core.register_input_parameter :tg_callback_text, readonly: true
|
23
19
|
core.register_input_parameter :tg_chat_id, readonly: true
|
24
20
|
core.register_input_parameter :tg_username, readonly: true
|
21
|
+
core.register_input_parameter :tg_text, readonly: true
|
22
|
+
core.register_input_parameter :tg_button_pressed, readonly: true
|
25
23
|
core.register_input_parameter :tg_image_link, readonly: true
|
26
24
|
core.register_input_parameter :tg_audio_link, readonly: true
|
25
|
+
core.register_input_parameter :tg_video_link, readonly: true
|
26
|
+
core.register_input_parameter :tg_document_link, readonly: true
|
27
27
|
|
28
28
|
core.register_output_parameter :tg_chat_id
|
29
29
|
core.register_output_parameter :tg_text
|
30
|
-
core.register_output_parameter :tg_reply_markup
|
31
30
|
core.register_output_parameter :tg_image_path
|
32
31
|
core.register_output_parameter :tg_audio_path
|
32
|
+
core.register_output_parameter :tg_video_path
|
33
33
|
core.register_output_parameter :tg_document_path
|
34
|
+
core.register_output_parameter :tg_reply_markup
|
34
35
|
end
|
35
36
|
|
36
37
|
def register_hooks(core)
|
@@ -38,16 +39,7 @@ module Kanal
|
|
38
39
|
input.source = :telegram
|
39
40
|
end
|
40
41
|
|
41
|
-
core.hooks.attach :input_before_router do |input|
|
42
|
-
if input.tg_callback
|
43
|
-
input.body = input.tg_callback_text
|
44
|
-
else
|
45
|
-
input.body = input.tg_text
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
42
|
core.hooks.attach :output_before_returned do |input, output|
|
50
|
-
output.tg_text = output.body
|
51
43
|
output.tg_chat_id = input.tg_chat_id
|
52
44
|
end
|
53
45
|
end
|
@@ -3,6 +3,7 @@
|
|
3
3
|
require "kanal/core/interfaces/interface"
|
4
4
|
require "kanal/plugins/batteries/batteries_plugin"
|
5
5
|
require_relative "./plugins/telegram_integration_plugin"
|
6
|
+
require_relative "./helpers/telegram_link_parser"
|
6
7
|
|
7
8
|
require "telegram/bot"
|
8
9
|
|
@@ -20,76 +21,59 @@ module Kanal
|
|
20
21
|
|
21
22
|
@core.register_plugin Kanal::Plugins::Batteries::BatteriesPlugin.new
|
22
23
|
@core.register_plugin Kanal::Interfaces::Telegram::Plugins::TelegramIntegrationPlugin.new
|
24
|
+
|
25
|
+
@link_parser = Kanal::Interfaces::Telegram::Helpers::TelegramLinkParser.new
|
23
26
|
end
|
24
27
|
|
25
28
|
def start
|
26
29
|
::Telegram::Bot::Client.run(@bot_token) do |bot|
|
27
30
|
bot.listen do |message|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
input.tg_callback = message
|
34
|
-
input.tg_callback_text = message.data
|
35
|
-
input.tg_chat_id = message.from.id
|
36
|
-
input.tg_username = message.from.username
|
37
|
-
|
38
|
-
puts input.tg_username
|
39
|
-
puts input.tg_chat_id
|
31
|
+
router.consume_input create_input message
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
40
35
|
|
41
|
-
|
36
|
+
def consume_output(output)
|
37
|
+
send_output @bot, output
|
38
|
+
end
|
42
39
|
|
43
|
-
|
44
|
-
|
45
|
-
# send_output bot, output
|
46
|
-
else
|
47
|
-
input = @core.create_input
|
40
|
+
def create_input(message)
|
41
|
+
input = @core.create_input
|
48
42
|
|
49
|
-
|
50
|
-
|
51
|
-
|
43
|
+
if !message.instance_variable_defined?(:@data)
|
44
|
+
# Regular message received
|
45
|
+
input.tg_text = message.text
|
46
|
+
input.tg_chat_id = message.chat.id
|
47
|
+
input.tg_username = message.chat.username || message.from.username
|
52
48
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
puts input.tg_username
|
59
|
-
puts input.tg_chat_id
|
60
|
-
|
61
|
-
if message.photo.count > 0
|
62
|
-
puts message.photo[0].file_id
|
63
|
-
file = bot.api.get_file(file_id: message.photo[2].file_id)
|
64
|
-
file_path = file.dig('result', 'file_path')
|
65
|
-
photo_url = "https://api.telegram.org/file/bot#{@bot_token}/#{file_path}"
|
66
|
-
puts photo_url
|
67
|
-
input.tg_image_link = photo_url
|
68
|
-
end
|
49
|
+
if message.photo.count > 0
|
50
|
+
# Array of images contains thumbnails, we take 3rd element to get the high-res image
|
51
|
+
input.tg_image_link = @link_parser.get_file_link message.photo[2].file_id, @bot, @bot_token
|
52
|
+
end
|
69
53
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
audio_url = "https://api.telegram.org/file/bot#{@bot_token}/#{file_path}"
|
74
|
-
puts audio_url
|
75
|
-
input.tg_audio_link = audio_url
|
76
|
-
end
|
54
|
+
if !message.audio.nil?
|
55
|
+
input.tg_audio_link = @link_parser.get_file_link message.audio.file_id, @bot, @bot_token
|
56
|
+
end
|
77
57
|
|
78
|
-
|
58
|
+
if !message.video.nil?
|
59
|
+
input.tg_video_link = @link_parser.get_file_link message.video.file_id, @bot, @bot_token
|
60
|
+
end
|
79
61
|
|
80
|
-
|
81
|
-
|
82
|
-
# send_output bot, output
|
83
|
-
end
|
62
|
+
if !message.document.nil?
|
63
|
+
input.tg_document_link = @link_parser.get_file_link message.document.file_id, @bot, @bot_token
|
84
64
|
end
|
65
|
+
else
|
66
|
+
# Inline button pressed
|
67
|
+
input.tg_button_pressed = message.data
|
68
|
+
input.tg_chat_id = message.from.id
|
69
|
+
input.tg_username = message.from.username
|
85
70
|
end
|
86
|
-
end
|
87
71
|
|
88
|
-
|
89
|
-
send_output @bot, output
|
72
|
+
input
|
90
73
|
end
|
91
74
|
|
92
75
|
private
|
76
|
+
|
93
77
|
def send_output(bot, output)
|
94
78
|
bot.api.send_message(
|
95
79
|
chat_id: output.tg_chat_id,
|
@@ -111,23 +95,57 @@ module Kanal
|
|
111
95
|
if !output.tg_audio_path.nil? && File.exist?(audio_path)
|
112
96
|
bot.api.send_audio(
|
113
97
|
chat_id: output.tg_chat_id,
|
114
|
-
audio: Faraday::UploadIO.new(output.tg_audio_path,
|
98
|
+
audio: Faraday::UploadIO.new(output.tg_audio_path, guess_mimetype(output.tg_audio_path))
|
99
|
+
)
|
100
|
+
end
|
101
|
+
|
102
|
+
video_path = output.tg_video_path
|
103
|
+
|
104
|
+
if !output.tg_video_path.nil? && File.exist?(video_path)
|
105
|
+
bot.api.send_video(
|
106
|
+
chat_id: output.tg_chat_id,
|
107
|
+
video: Faraday::UploadIO.new(output.tg_video_path, guess_mimetype(output.tg_video_path))
|
108
|
+
)
|
109
|
+
end
|
110
|
+
|
111
|
+
document_path = output.tg_document_path
|
112
|
+
|
113
|
+
if !output.tg_document_path.nil? && File.exist?(document_path)
|
114
|
+
bot.api.send_document(
|
115
|
+
chat_id: output.tg_chat_id,
|
116
|
+
document: Faraday::UploadIO.new(output.tg_document_path, guess_mimetype(output.tg_document_path))
|
115
117
|
)
|
116
118
|
end
|
117
119
|
end
|
118
120
|
|
119
121
|
def guess_mimetype(filename)
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
122
|
+
media_types = [
|
123
|
+
images: {
|
124
|
+
"image/jpeg" => %w[jpg jpeg],
|
125
|
+
"image/png" => ["png"],
|
126
|
+
"image/bmp" => ["bmp"]
|
127
|
+
},
|
128
|
+
audios: {
|
129
|
+
"audio/mp3" => ["mp3"],
|
130
|
+
"audio/ogg" => ["ogg"],
|
131
|
+
"audio/vnd.wave" => ["wav"]
|
132
|
+
},
|
133
|
+
videos: {
|
134
|
+
"video/mp4" => ["mp4"],
|
135
|
+
"video/webm" => ["webm"]
|
136
|
+
},
|
137
|
+
documents: {
|
138
|
+
"application/msword" => %w[doc docx],
|
139
|
+
"application/pdf" => ["pdf"]
|
140
|
+
}
|
141
|
+
]
|
142
|
+
|
143
|
+
media_types.each do |media_type|
|
144
|
+
media_type.each do |media_name, variant|
|
145
|
+
variant.each do |mime, extensions|
|
146
|
+
extensions.each do |extension|
|
147
|
+
return mime if filename.include? extension
|
148
|
+
end
|
131
149
|
end
|
132
150
|
end
|
133
151
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kanal-interfaces-telegram
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- idchlife
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-03-
|
11
|
+
date: 2023-03-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: telegram-bot-ruby
|
@@ -32,11 +32,6 @@ executables: []
|
|
32
32
|
extensions: []
|
33
33
|
extra_rdoc_files: []
|
34
34
|
files:
|
35
|
-
- ".idea/.gitignore"
|
36
|
-
- ".idea/kanal-interfaces-telegram.iml"
|
37
|
-
- ".idea/misc.xml"
|
38
|
-
- ".idea/modules.xml"
|
39
|
-
- ".idea/vcs.xml"
|
40
35
|
- ".rspec"
|
41
36
|
- ".rubocop.yml"
|
42
37
|
- ".ruby-version"
|
@@ -47,8 +42,9 @@ files:
|
|
47
42
|
- LICENSE.txt
|
48
43
|
- README.md
|
49
44
|
- Rakefile
|
50
|
-
-
|
45
|
+
- examples/telegram_bot.rb
|
51
46
|
- lib/kanal/interfaces/telegram.rb
|
47
|
+
- lib/kanal/interfaces/telegram/helpers/telegram_link_parser.rb
|
52
48
|
- lib/kanal/interfaces/telegram/plugins/telegram_integration_plugin.rb
|
53
49
|
- lib/kanal/interfaces/telegram/telegram_interface.rb
|
54
50
|
- lib/kanal/interfaces/telegram/version.rb
|
@@ -61,7 +57,7 @@ metadata:
|
|
61
57
|
homepage_uri: https://github.com/idchlife/kanal-interfaces-telegram
|
62
58
|
source_code_uri: https://github.com/idchlife/kanal-interfaces-telegram
|
63
59
|
changelog_uri: https://github.com/idchlife/kanal-interfaces-telegram
|
64
|
-
post_install_message:
|
60
|
+
post_install_message:
|
65
61
|
rdoc_options: []
|
66
62
|
require_paths:
|
67
63
|
- lib
|
@@ -77,7 +73,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
77
73
|
version: '0'
|
78
74
|
requirements: []
|
79
75
|
rubygems_version: 3.1.6
|
80
|
-
signing_key:
|
76
|
+
signing_key:
|
81
77
|
specification_version: 4
|
82
78
|
summary: This library provides a Telegram interface for Kanal
|
83
79
|
test_files: []
|
data/.idea/.gitignore
DELETED
@@ -1,72 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
-
<module type="RUBY_MODULE" version="4">
|
3
|
-
<component name="ModuleRunConfigurationManager">
|
4
|
-
<shared />
|
5
|
-
</component>
|
6
|
-
<component name="NewModuleRootManager">
|
7
|
-
<content url="file://$MODULE_DIR$">
|
8
|
-
<sourceFolder url="file://$MODULE_DIR$/features" isTestSource="true" />
|
9
|
-
<sourceFolder url="file://$MODULE_DIR$/spec" isTestSource="true" />
|
10
|
-
<sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
|
11
|
-
</content>
|
12
|
-
<orderEntry type="inheritedJdk" />
|
13
|
-
<orderEntry type="sourceFolder" forTests="false" />
|
14
|
-
<orderEntry type="library" scope="PROVIDED" name="ast (v2.4.2, RVM: ruby-2.7.6) [gem]" level="application" />
|
15
|
-
<orderEntry type="library" scope="PROVIDED" name="axiom-types (v0.1.1, RVM: ruby-2.7.6) [gem]" level="application" />
|
16
|
-
<orderEntry type="library" scope="PROVIDED" name="backport (v1.2.0, RVM: ruby-2.7.6) [gem]" level="application" />
|
17
|
-
<orderEntry type="library" scope="PROVIDED" name="benchmark (v0.2.1, RVM: ruby-2.7.6) [gem]" level="application" />
|
18
|
-
<orderEntry type="library" scope="PROVIDED" name="bundler (v2.4.5, RVM: ruby-2.7.6) [gem]" level="application" />
|
19
|
-
<orderEntry type="library" scope="PROVIDED" name="coercible (v1.0.0, RVM: ruby-2.7.6) [gem]" level="application" />
|
20
|
-
<orderEntry type="library" scope="PROVIDED" name="descendants_tracker (v0.0.4, RVM: ruby-2.7.6) [gem]" level="application" />
|
21
|
-
<orderEntry type="library" scope="PROVIDED" name="diff-lcs (v1.5.0, RVM: ruby-2.7.6) [gem]" level="application" />
|
22
|
-
<orderEntry type="library" scope="PROVIDED" name="docile (v1.4.0, RVM: ruby-2.7.6) [gem]" level="application" />
|
23
|
-
<orderEntry type="library" scope="PROVIDED" name="dry-inflector (v1.0.0, RVM: ruby-2.7.6) [gem]" level="application" />
|
24
|
-
<orderEntry type="library" scope="PROVIDED" name="e2mmap (v0.1.0, RVM: ruby-2.7.6) [gem]" level="application" />
|
25
|
-
<orderEntry type="library" scope="PROVIDED" name="faraday (v2.7.4, RVM: ruby-2.7.6) [gem]" level="application" />
|
26
|
-
<orderEntry type="library" scope="PROVIDED" name="faraday-multipart (v1.0.4, RVM: ruby-2.7.6) [gem]" level="application" />
|
27
|
-
<orderEntry type="library" scope="PROVIDED" name="faraday-net_http (v3.0.2, RVM: ruby-2.7.6) [gem]" level="application" />
|
28
|
-
<orderEntry type="library" scope="PROVIDED" name="ice_nine (v0.11.2, RVM: ruby-2.7.6) [gem]" level="application" />
|
29
|
-
<orderEntry type="library" scope="PROVIDED" name="jaro_winkler (v1.5.4, RVM: ruby-2.7.6) [gem]" level="application" />
|
30
|
-
<orderEntry type="library" scope="PROVIDED" name="json (v2.6.3, RVM: ruby-2.7.6) [gem]" level="application" />
|
31
|
-
<orderEntry type="library" scope="PROVIDED" name="kanal (v0.3.0, RVM: ruby-2.7.6) [gem]" level="application" />
|
32
|
-
<orderEntry type="library" scope="PROVIDED" name="kramdown (v2.4.0, RVM: ruby-2.7.6) [gem]" level="application" />
|
33
|
-
<orderEntry type="library" scope="PROVIDED" name="kramdown-parser-gfm (v1.1.0, RVM: ruby-2.7.6) [gem]" level="application" />
|
34
|
-
<orderEntry type="library" scope="PROVIDED" name="multipart-post (v2.3.0, RVM: ruby-2.7.6) [gem]" level="application" />
|
35
|
-
<orderEntry type="library" scope="PROVIDED" name="nokogiri (v1.14.0, RVM: ruby-2.7.6) [gem]" level="application" />
|
36
|
-
<orderEntry type="library" scope="PROVIDED" name="parallel (v1.22.1, RVM: ruby-2.7.6) [gem]" level="application" />
|
37
|
-
<orderEntry type="library" scope="PROVIDED" name="parser (v3.2.0.0, RVM: ruby-2.7.6) [gem]" level="application" />
|
38
|
-
<orderEntry type="library" scope="PROVIDED" name="racc (v1.6.2, RVM: ruby-2.7.6) [gem]" level="application" />
|
39
|
-
<orderEntry type="library" scope="PROVIDED" name="rainbow (v3.1.1, RVM: ruby-2.7.6) [gem]" level="application" />
|
40
|
-
<orderEntry type="library" scope="PROVIDED" name="rake (v13.0.6, RVM: ruby-2.7.6) [gem]" level="application" />
|
41
|
-
<orderEntry type="library" scope="PROVIDED" name="regexp_parser (v2.6.2, RVM: ruby-2.7.6) [gem]" level="application" />
|
42
|
-
<orderEntry type="library" scope="PROVIDED" name="reverse_markdown (v2.1.1, RVM: ruby-2.7.6) [gem]" level="application" />
|
43
|
-
<orderEntry type="library" scope="PROVIDED" name="rexml (v3.2.5, RVM: ruby-2.7.6) [gem]" level="application" />
|
44
|
-
<orderEntry type="library" scope="PROVIDED" name="rspec (v3.12.0, RVM: ruby-2.7.6) [gem]" level="application" />
|
45
|
-
<orderEntry type="library" scope="PROVIDED" name="rspec-core (v3.12.0, RVM: ruby-2.7.6) [gem]" level="application" />
|
46
|
-
<orderEntry type="library" scope="PROVIDED" name="rspec-expectations (v3.12.2, RVM: ruby-2.7.6) [gem]" level="application" />
|
47
|
-
<orderEntry type="library" scope="PROVIDED" name="rspec-mocks (v3.12.3, RVM: ruby-2.7.6) [gem]" level="application" />
|
48
|
-
<orderEntry type="library" scope="PROVIDED" name="rspec-support (v3.12.0, RVM: ruby-2.7.6) [gem]" level="application" />
|
49
|
-
<orderEntry type="library" scope="PROVIDED" name="rubocop (v1.44.1, RVM: ruby-2.7.6) [gem]" level="application" />
|
50
|
-
<orderEntry type="library" scope="PROVIDED" name="rubocop-ast (v1.24.1, RVM: ruby-2.7.6) [gem]" level="application" />
|
51
|
-
<orderEntry type="library" scope="PROVIDED" name="ruby-debug-ide (v0.7.3, RVM: ruby-2.7.6) [gem]" level="application" />
|
52
|
-
<orderEntry type="library" scope="PROVIDED" name="ruby-progressbar (v1.11.0, RVM: ruby-2.7.6) [gem]" level="application" />
|
53
|
-
<orderEntry type="library" scope="PROVIDED" name="ruby2_keywords (v0.0.5, RVM: ruby-2.7.6) [gem]" level="application" />
|
54
|
-
<orderEntry type="library" scope="PROVIDED" name="simplecov (v0.22.0, RVM: ruby-2.7.6) [gem]" level="application" />
|
55
|
-
<orderEntry type="library" scope="PROVIDED" name="simplecov-html (v0.12.3, RVM: ruby-2.7.6) [gem]" level="application" />
|
56
|
-
<orderEntry type="library" scope="PROVIDED" name="simplecov_json_formatter (v0.1.4, RVM: ruby-2.7.6) [gem]" level="application" />
|
57
|
-
<orderEntry type="library" scope="PROVIDED" name="solargraph (v0.48.0, RVM: ruby-2.7.6) [gem]" level="application" />
|
58
|
-
<orderEntry type="library" scope="PROVIDED" name="telegram-bot-ruby (v0.23.0, RVM: ruby-2.7.6) [gem]" level="application" />
|
59
|
-
<orderEntry type="library" scope="PROVIDED" name="thor (v1.2.1, RVM: ruby-2.7.6) [gem]" level="application" />
|
60
|
-
<orderEntry type="library" scope="PROVIDED" name="thread_safe (v0.3.6, RVM: ruby-2.7.6) [gem]" level="application" />
|
61
|
-
<orderEntry type="library" scope="PROVIDED" name="tilt (v2.0.11, RVM: ruby-2.7.6) [gem]" level="application" />
|
62
|
-
<orderEntry type="library" scope="PROVIDED" name="unicode-display_width (v2.4.2, RVM: ruby-2.7.6) [gem]" level="application" />
|
63
|
-
<orderEntry type="library" scope="PROVIDED" name="virtus (v2.0.0, RVM: ruby-2.7.6) [gem]" level="application" />
|
64
|
-
<orderEntry type="library" scope="PROVIDED" name="webrick (v1.7.0, RVM: ruby-2.7.6) [gem]" level="application" />
|
65
|
-
<orderEntry type="library" scope="PROVIDED" name="yard (v0.9.28, RVM: ruby-2.7.6) [gem]" level="application" />
|
66
|
-
</component>
|
67
|
-
<component name="RakeTasksCache">
|
68
|
-
<option name="myRootTask">
|
69
|
-
<RakeTaskImpl id="rake" />
|
70
|
-
</option>
|
71
|
-
</component>
|
72
|
-
</module>
|
data/.idea/misc.xml
DELETED
data/.idea/modules.xml
DELETED
@@ -1,8 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
-
<project version="4">
|
3
|
-
<component name="ProjectModuleManager">
|
4
|
-
<modules>
|
5
|
-
<module fileurl="file://$PROJECT_DIR$/.idea/kanal-interfaces-telegram.iml" filepath="$PROJECT_DIR$/.idea/kanal-interfaces-telegram.iml" />
|
6
|
-
</modules>
|
7
|
-
</component>
|
8
|
-
</project>
|
data/.idea/vcs.xml
DELETED
@@ -1,42 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "lib/kanal/interfaces/telegram/version"
|
4
|
-
|
5
|
-
Gem::Specification.new do |spec|
|
6
|
-
spec.name = "kanal-interfaces-telegram"
|
7
|
-
spec.version = Kanal::Interfaces::Telegram::VERSION
|
8
|
-
spec.authors = ["idchlife"]
|
9
|
-
spec.email = ["idchlife@gmail.com"]
|
10
|
-
|
11
|
-
spec.summary = "This library provides a Telegram interface for Kanal"
|
12
|
-
spec.description = "Library provides Telegram interface for Kanal. With this you can connect to telegram bot and control it"
|
13
|
-
spec.homepage = "https://github.com/idchlife/kanal-interfaces-telegram"
|
14
|
-
spec.license = "MIT"
|
15
|
-
spec.required_ruby_version = ">= 2.7.6"
|
16
|
-
|
17
|
-
spec.metadata["allowed_push_host"] = "https://rubygems.org"
|
18
|
-
|
19
|
-
spec.metadata["homepage_uri"] = spec.homepage
|
20
|
-
spec.metadata["source_code_uri"] = "https://github.com/idchlife/kanal-interfaces-telegram"
|
21
|
-
spec.metadata["changelog_uri"] = "https://github.com/idchlife/kanal-interfaces-telegram"
|
22
|
-
|
23
|
-
# spec.add_dependency "kanal", git: "git@github.com:idchlife/kanal.git"
|
24
|
-
spec.add_dependency "telegram-bot-ruby"
|
25
|
-
|
26
|
-
# Specify which files should be added to the gem when it is released.
|
27
|
-
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
28
|
-
spec.files = Dir.chdir(__dir__) do
|
29
|
-
`git ls-files -z`.split("\x0").reject do |f|
|
30
|
-
(f == __FILE__) || f.match(%r{\A(?:(?:bin|test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
|
31
|
-
end
|
32
|
-
end
|
33
|
-
spec.bindir = "exe"
|
34
|
-
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
35
|
-
spec.require_paths = ["lib"]
|
36
|
-
|
37
|
-
# Uncomment to register a new dependency of your gem
|
38
|
-
# spec.add_dependency "example-gem", "~> 1.0"
|
39
|
-
|
40
|
-
# For more information and examples about making a new gem, check out our
|
41
|
-
# guide at: https://bundler.io/guides/creating_gem.html
|
42
|
-
end
|