telegram-ruby 0.1.0
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 +11 -0
- data/.rspec +3 -0
- data/.travis.yml +5 -0
- data/CHANGELOG.md +4 -0
- data/Gemfile +6 -0
- data/LICENSE.txt +21 -0
- data/README.md +97 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/examples/api/inline_keyboard_markup.rb +17 -0
- data/examples/api/send_message.rb +5 -0
- data/examples/client/handler.rb +19 -0
- data/lib/telegram/bot.rb +29 -0
- data/lib/telegram/bot/api.rb +261 -0
- data/lib/telegram/bot/client.rb +54 -0
- data/lib/telegram/bot/client_accessors.rb +5 -0
- data/lib/telegram/bot/configuration.rb +11 -0
- data/lib/telegram/bot/exceptions.rb +13 -0
- data/lib/telegram/bot/types.rb +47 -0
- data/lib/telegram/bot/types/animation.rb +17 -0
- data/lib/telegram/bot/types/audio.rb +14 -0
- data/lib/telegram/bot/types/callback_game.rb +4 -0
- data/lib/telegram/bot/types/callback_query.rb +23 -0
- data/lib/telegram/bot/types/chat.rb +25 -0
- data/lib/telegram/bot/types/chat_member.rb +28 -0
- data/lib/telegram/bot/types/chat_photo.rb +10 -0
- data/lib/telegram/bot/types/chosen_inline_result.rb +21 -0
- data/lib/telegram/bot/types/contact.rb +12 -0
- data/lib/telegram/bot/types/document.rb +17 -0
- data/lib/telegram/bot/types/file.rb +15 -0
- data/lib/telegram/bot/types/force_reply.rb +9 -0
- data/lib/telegram/bot/types/game.rb +26 -0
- data/lib/telegram/bot/types/inline_keyboard_button.rb +19 -0
- data/lib/telegram/bot/types/inline_keyboard_markup.rb +20 -0
- data/lib/telegram/bot/types/inline_query.rb +21 -0
- data/lib/telegram/bot/types/invoice.rb +13 -0
- data/lib/telegram/bot/types/keyboard_button.rb +11 -0
- data/lib/telegram/bot/types/location.rb +10 -0
- data/lib/telegram/bot/types/mask_position.rb +12 -0
- data/lib/telegram/bot/types/message.rb +145 -0
- data/lib/telegram/bot/types/message_entity.rb +17 -0
- data/lib/telegram/bot/types/order_info.rb +16 -0
- data/lib/telegram/bot/types/photo_size.rb +12 -0
- data/lib/telegram/bot/types/pre_checkout_query.rb +23 -0
- data/lib/telegram/bot/types/reply_keyboard_markup.rb +22 -0
- data/lib/telegram/bot/types/reply_keyboard_remove.rb +9 -0
- data/lib/telegram/bot/types/shipping_address.rb +14 -0
- data/lib/telegram/bot/types/shipping_query.rb +20 -0
- data/lib/telegram/bot/types/sticker.rb +24 -0
- data/lib/telegram/bot/types/sticker_set.rb +16 -0
- data/lib/telegram/bot/types/successful_payment.rb +19 -0
- data/lib/telegram/bot/types/update.rb +54 -0
- data/lib/telegram/bot/types/user.rb +14 -0
- data/lib/telegram/bot/types/user_profile_photos.rb +14 -0
- data/lib/telegram/bot/types/venue.rb +16 -0
- data/lib/telegram/bot/types/video.rb +19 -0
- data/lib/telegram/bot/types/video_note.rb +17 -0
- data/lib/telegram/bot/types/voice.rb +12 -0
- data/lib/telegram/bot/types/webhook_info.rb +15 -0
- data/lib/telegram/version.rb +3 -0
- data/telegram-ruby.gemspec +29 -0
- metadata +176 -0
@@ -0,0 +1,54 @@
|
|
1
|
+
module Telegram::Bot
|
2
|
+
PAYLOAD_KEYS = %w(message edited_message channel_post edited_channel_post).freeze
|
3
|
+
|
4
|
+
class Client
|
5
|
+
attr_reader :update, :message, :command
|
6
|
+
|
7
|
+
def initialize(handler)
|
8
|
+
@handler = handler.new
|
9
|
+
@handler.api = Telegram::Bot::Api.new
|
10
|
+
end
|
11
|
+
|
12
|
+
def handle(params)
|
13
|
+
parse_request(params)
|
14
|
+
invoke
|
15
|
+
end
|
16
|
+
|
17
|
+
def invoke
|
18
|
+
@handler.update = @update
|
19
|
+
@handler.message = @message
|
20
|
+
@handler.command = @command
|
21
|
+
|
22
|
+
if !@command.nil? && @handler.respond_to?("cmd_#{@command}")
|
23
|
+
@handler.public_send("cmd_#{@command}")
|
24
|
+
else
|
25
|
+
@handler.public_send(:cmd_fallback) if @handler.respond_to?(:cmd_fallback)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def parse_request(params)
|
32
|
+
@update = Types::Update.new(params)
|
33
|
+
|
34
|
+
if params.has_key? :callback_query
|
35
|
+
@message = @update.callback_query.message
|
36
|
+
@command = pull_command(@update.callback_query.data)
|
37
|
+
else
|
38
|
+
message_key = PAYLOAD_KEYS.find { |key| params.has_key?(key.to_sym) }
|
39
|
+
|
40
|
+
if !message_key.nil? && @update.respond_to?(message_key)
|
41
|
+
@message = @update.send(message_key)
|
42
|
+
@command = pull_command(@message.text)
|
43
|
+
@command = pull_command(@message.reply_to_message.text) if !@command && @message.reply_to_message
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
raise Exceptions::ParseError.new('Can not parse request') unless @message
|
48
|
+
end
|
49
|
+
|
50
|
+
def pull_command(text)
|
51
|
+
!text.nil? && text.index('/') == 0 ? text.downcase.split(' ').first.gsub('/', '') : nil
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'telegram/bot/types/audio'
|
2
|
+
require 'telegram/bot/types/animation'
|
3
|
+
require 'telegram/bot/types/sticker'
|
4
|
+
require 'telegram/bot/types/game'
|
5
|
+
require 'telegram/bot/types/photo_size'
|
6
|
+
require 'telegram/bot/types/mask_position'
|
7
|
+
require 'telegram/bot/types/video'
|
8
|
+
require 'telegram/bot/types/video_note'
|
9
|
+
require 'telegram/bot/types/chat'
|
10
|
+
require 'telegram/bot/types/chat_member'
|
11
|
+
require 'telegram/bot/types/chat_photo'
|
12
|
+
require 'telegram/bot/types/contact'
|
13
|
+
require 'telegram/bot/types/location'
|
14
|
+
require 'telegram/bot/types/venue'
|
15
|
+
require 'telegram/bot/types/invoice'
|
16
|
+
require 'telegram/bot/types/successful_payment'
|
17
|
+
require 'telegram/bot/types/order_info'
|
18
|
+
require 'telegram/bot/types/shipping_address'
|
19
|
+
require 'telegram/bot/types/file'
|
20
|
+
require 'telegram/bot/types/voice'
|
21
|
+
require 'telegram/bot/types/user'
|
22
|
+
require 'telegram/bot/types/message'
|
23
|
+
require 'telegram/bot/types/message_entity'
|
24
|
+
require 'telegram/bot/types/webhook_info'
|
25
|
+
require 'telegram/bot/types/update'
|
26
|
+
require 'telegram/bot/types/inline_query'
|
27
|
+
require 'telegram/bot/types/chosen_inline_result'
|
28
|
+
require 'telegram/bot/types/callback_query'
|
29
|
+
require 'telegram/bot/types/shipping_query'
|
30
|
+
require 'telegram/bot/types/pre_checkout_query'
|
31
|
+
require 'telegram/bot/types/user_profile_photos'
|
32
|
+
require 'telegram/bot/types/sticker_set'
|
33
|
+
require 'telegram/bot/types/inline_keyboard_markup'
|
34
|
+
require 'telegram/bot/types/inline_keyboard_button'
|
35
|
+
require 'telegram/bot/types/callback_game'
|
36
|
+
require 'telegram/bot/types/reply_keyboard_markup'
|
37
|
+
require 'telegram/bot/types/keyboard_button'
|
38
|
+
require 'telegram/bot/types/reply_keyboard_remove'
|
39
|
+
require 'telegram/bot/types/force_reply'
|
40
|
+
|
41
|
+
module Telegram
|
42
|
+
module Bot
|
43
|
+
module Types
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Telegram::Bot::Types
|
2
|
+
class Animation
|
3
|
+
attr_accessor :file_id,
|
4
|
+
:thumb,
|
5
|
+
:file_name,
|
6
|
+
:mime_type,
|
7
|
+
:file_size
|
8
|
+
|
9
|
+
def initialize(attributes)
|
10
|
+
attributes.each { |k, v| self.send("#{k}=", v) if self.respond_to? k }
|
11
|
+
end
|
12
|
+
|
13
|
+
def thumb=(attributes)
|
14
|
+
@thumb = PhotoSize.new(attributes)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Telegram::Bot::Types
|
2
|
+
class Audio
|
3
|
+
attr_accessor :file_id,
|
4
|
+
:duration,
|
5
|
+
:performer,
|
6
|
+
:title,
|
7
|
+
:mime_type,
|
8
|
+
:file_size
|
9
|
+
|
10
|
+
def initialize(attributes)
|
11
|
+
attributes.each { |k, v| self.send("#{k}=", v) if self.respond_to? k }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Telegram::Bot::Types
|
2
|
+
class CallbackQuery
|
3
|
+
attr_accessor :id,
|
4
|
+
:from,
|
5
|
+
:message,
|
6
|
+
:inline_message_id,
|
7
|
+
:chat_instance,
|
8
|
+
:data,
|
9
|
+
:game_short_name
|
10
|
+
|
11
|
+
def initialize(attributes)
|
12
|
+
attributes.each { |k, v| self.send("#{k}=", v) if self.respond_to? k }
|
13
|
+
end
|
14
|
+
|
15
|
+
def from=(attributes)
|
16
|
+
@from = User.new(attributes)
|
17
|
+
end
|
18
|
+
|
19
|
+
def message=(attributes)
|
20
|
+
@message = Message.new(attributes)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Telegram::Bot::Types
|
2
|
+
class Chat
|
3
|
+
attr_accessor :id,
|
4
|
+
:type,
|
5
|
+
:title,
|
6
|
+
:username,
|
7
|
+
:first_name,
|
8
|
+
:last_name,
|
9
|
+
:all_members_are_administrators,
|
10
|
+
:photo,
|
11
|
+
:description,
|
12
|
+
:invite_link,
|
13
|
+
:pinned_message,
|
14
|
+
:sticker_set_name,
|
15
|
+
:can_set_sticker_set
|
16
|
+
|
17
|
+
def initialize(attributes)
|
18
|
+
attributes.each { |k, v| self.send("#{k}=", v) if self.respond_to? k }
|
19
|
+
end
|
20
|
+
|
21
|
+
def photo=(attributes)
|
22
|
+
@photo = ChatPhoto.new(attributes)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Telegram::Bot::Types
|
2
|
+
class ChatMember
|
3
|
+
attr_accessor :user,
|
4
|
+
:status,
|
5
|
+
:until_date,
|
6
|
+
:can_be_edited,
|
7
|
+
:can_change_info,
|
8
|
+
:can_post_messages,
|
9
|
+
:can_edit_messages,
|
10
|
+
:can_delete_messages,
|
11
|
+
:can_invite_users,
|
12
|
+
:can_restrict_members,
|
13
|
+
:can_pin_messages,
|
14
|
+
:can_promote_members,
|
15
|
+
:can_send_messages,
|
16
|
+
:can_send_media_messages,
|
17
|
+
:can_send_other_messages,
|
18
|
+
:can_add_web_page_previews
|
19
|
+
|
20
|
+
def initialize(attributes)
|
21
|
+
attributes.each { |k, v| self.send("#{k}=", v) if self.respond_to? k }
|
22
|
+
end
|
23
|
+
|
24
|
+
def user=(attributes)
|
25
|
+
@user = User.new(attributes)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Telegram::Bot::Types
|
2
|
+
class ChosenInlineResult
|
3
|
+
attr_accessor :result_id,
|
4
|
+
:from,
|
5
|
+
:location,
|
6
|
+
:inline_message_id,
|
7
|
+
:query
|
8
|
+
|
9
|
+
def initialize(attributes)
|
10
|
+
attributes.each { |k, v| self.send("#{k}=", v) if self.respond_to? k }
|
11
|
+
end
|
12
|
+
|
13
|
+
def from=(attributes)
|
14
|
+
@from = User.new(attr)
|
15
|
+
end
|
16
|
+
|
17
|
+
def location=(attributes)
|
18
|
+
@location = Location.new(attr)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Telegram::Bot::Types
|
2
|
+
class Document
|
3
|
+
attr_accessor :file_id,
|
4
|
+
:thumb,
|
5
|
+
:file_name,
|
6
|
+
:mime_type,
|
7
|
+
:file_size
|
8
|
+
|
9
|
+
def initialize(attributes)
|
10
|
+
attributes.each { |k, v| self.send("#{k}=", v) if self.respond_to? k }
|
11
|
+
end
|
12
|
+
|
13
|
+
def thumb=(attributes)
|
14
|
+
@thumb = PhotoSize.new(attributes)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Telegram::Bot::Types
|
2
|
+
class File
|
3
|
+
attr_accessor :file_id,
|
4
|
+
:file_size,
|
5
|
+
:file_path
|
6
|
+
|
7
|
+
def initialize(attributes)
|
8
|
+
attributes.each { |k, v| self.send("#{k}=", v) if self.respond_to? k }
|
9
|
+
end
|
10
|
+
|
11
|
+
def file_path=(file_path)
|
12
|
+
@file_path = file_path
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Telegram::Bot::Types
|
2
|
+
class Game
|
3
|
+
attr_accessor :title,
|
4
|
+
:description,
|
5
|
+
:photo,
|
6
|
+
:text,
|
7
|
+
:text_entities,
|
8
|
+
:animation
|
9
|
+
|
10
|
+
def initialize(attributes)
|
11
|
+
attributes.each { |k, v| self.send("#{k}=", v) if self.respond_to? k }
|
12
|
+
end
|
13
|
+
|
14
|
+
def photo=(attributes)
|
15
|
+
@photo = attributes.map {|attr| PhotoSize.new(attr) }
|
16
|
+
end
|
17
|
+
|
18
|
+
def text_entities=(attributes)
|
19
|
+
@text_entities = MessageEntity.new(attributes)
|
20
|
+
end
|
21
|
+
|
22
|
+
def animation=(attributes)
|
23
|
+
@animation = Animation.new(attributes)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Telegram::Bot::Types
|
2
|
+
class InlineKeyboardButton
|
3
|
+
attr_accessor :text,
|
4
|
+
:url,
|
5
|
+
:callback_data,
|
6
|
+
:switch_inline_query,
|
7
|
+
:switch_inline_query_current_chat,
|
8
|
+
:callback_game,
|
9
|
+
:pay
|
10
|
+
|
11
|
+
def initialize(attributes)
|
12
|
+
attributes.each { |k, v| self.send("#{k}=", v) if self.respond_to? k }
|
13
|
+
end
|
14
|
+
|
15
|
+
def callback_game=(attributes)
|
16
|
+
@callback_game = CallbackGame.new(attributes)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Telegram::Bot::Types
|
2
|
+
class InlineKeyboardMarkup
|
3
|
+
attr_accessor :inline_keyboard
|
4
|
+
|
5
|
+
def initialize(attributes)
|
6
|
+
@inline_keyboard = attributes.map do |v|
|
7
|
+
v.map do |b|
|
8
|
+
if b.is_a?(InlineKeyboardButton)
|
9
|
+
b
|
10
|
+
elsif b.is_a?(Hash)
|
11
|
+
InlineKeyboardButton.new(b)
|
12
|
+
else
|
13
|
+
raise Telegram::Bot::Exceptions::KeyboardMarkupError
|
14
|
+
.new('Attributes must be Array of Array of Telegram::Bot::Types::InlineKeyboardButton or Hash')
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Telegram::Bot::Types
|
2
|
+
class InlineQuery
|
3
|
+
attr_accessor :id,
|
4
|
+
:from,
|
5
|
+
:location,
|
6
|
+
:query,
|
7
|
+
:offset
|
8
|
+
|
9
|
+
def initialize(attributes)
|
10
|
+
attributes.each { |k, v| self.send("#{k}=", v) if self.respond_to? k }
|
11
|
+
end
|
12
|
+
|
13
|
+
def from=(attributes)
|
14
|
+
@from = User.new(attr)
|
15
|
+
end
|
16
|
+
|
17
|
+
def location=(attributes)
|
18
|
+
@location = Location.new(attr)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|