telegram-ruby 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|