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.
Files changed (64) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.rspec +3 -0
  4. data/.travis.yml +5 -0
  5. data/CHANGELOG.md +4 -0
  6. data/Gemfile +6 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +97 -0
  9. data/Rakefile +6 -0
  10. data/bin/console +14 -0
  11. data/bin/setup +8 -0
  12. data/examples/api/inline_keyboard_markup.rb +17 -0
  13. data/examples/api/send_message.rb +5 -0
  14. data/examples/client/handler.rb +19 -0
  15. data/lib/telegram/bot.rb +29 -0
  16. data/lib/telegram/bot/api.rb +261 -0
  17. data/lib/telegram/bot/client.rb +54 -0
  18. data/lib/telegram/bot/client_accessors.rb +5 -0
  19. data/lib/telegram/bot/configuration.rb +11 -0
  20. data/lib/telegram/bot/exceptions.rb +13 -0
  21. data/lib/telegram/bot/types.rb +47 -0
  22. data/lib/telegram/bot/types/animation.rb +17 -0
  23. data/lib/telegram/bot/types/audio.rb +14 -0
  24. data/lib/telegram/bot/types/callback_game.rb +4 -0
  25. data/lib/telegram/bot/types/callback_query.rb +23 -0
  26. data/lib/telegram/bot/types/chat.rb +25 -0
  27. data/lib/telegram/bot/types/chat_member.rb +28 -0
  28. data/lib/telegram/bot/types/chat_photo.rb +10 -0
  29. data/lib/telegram/bot/types/chosen_inline_result.rb +21 -0
  30. data/lib/telegram/bot/types/contact.rb +12 -0
  31. data/lib/telegram/bot/types/document.rb +17 -0
  32. data/lib/telegram/bot/types/file.rb +15 -0
  33. data/lib/telegram/bot/types/force_reply.rb +9 -0
  34. data/lib/telegram/bot/types/game.rb +26 -0
  35. data/lib/telegram/bot/types/inline_keyboard_button.rb +19 -0
  36. data/lib/telegram/bot/types/inline_keyboard_markup.rb +20 -0
  37. data/lib/telegram/bot/types/inline_query.rb +21 -0
  38. data/lib/telegram/bot/types/invoice.rb +13 -0
  39. data/lib/telegram/bot/types/keyboard_button.rb +11 -0
  40. data/lib/telegram/bot/types/location.rb +10 -0
  41. data/lib/telegram/bot/types/mask_position.rb +12 -0
  42. data/lib/telegram/bot/types/message.rb +145 -0
  43. data/lib/telegram/bot/types/message_entity.rb +17 -0
  44. data/lib/telegram/bot/types/order_info.rb +16 -0
  45. data/lib/telegram/bot/types/photo_size.rb +12 -0
  46. data/lib/telegram/bot/types/pre_checkout_query.rb +23 -0
  47. data/lib/telegram/bot/types/reply_keyboard_markup.rb +22 -0
  48. data/lib/telegram/bot/types/reply_keyboard_remove.rb +9 -0
  49. data/lib/telegram/bot/types/shipping_address.rb +14 -0
  50. data/lib/telegram/bot/types/shipping_query.rb +20 -0
  51. data/lib/telegram/bot/types/sticker.rb +24 -0
  52. data/lib/telegram/bot/types/sticker_set.rb +16 -0
  53. data/lib/telegram/bot/types/successful_payment.rb +19 -0
  54. data/lib/telegram/bot/types/update.rb +54 -0
  55. data/lib/telegram/bot/types/user.rb +14 -0
  56. data/lib/telegram/bot/types/user_profile_photos.rb +14 -0
  57. data/lib/telegram/bot/types/venue.rb +16 -0
  58. data/lib/telegram/bot/types/video.rb +19 -0
  59. data/lib/telegram/bot/types/video_note.rb +17 -0
  60. data/lib/telegram/bot/types/voice.rb +12 -0
  61. data/lib/telegram/bot/types/webhook_info.rb +15 -0
  62. data/lib/telegram/version.rb +3 -0
  63. data/telegram-ruby.gemspec +29 -0
  64. metadata +176 -0
@@ -0,0 +1,13 @@
1
+ module Telegram::Bot::Types
2
+ class Invoice
3
+ attr_accessor :title,
4
+ :description,
5
+ :start_parameter,
6
+ :currency,
7
+ :total_amount
8
+
9
+ def initialize(attributes)
10
+ attributes.each { |k, v| self.send("#{k}=", v) if self.respond_to? k }
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,11 @@
1
+ module Telegram::Bot::Types
2
+ class KeyboardButton
3
+ attr_accessor :text,
4
+ :request_contact,
5
+ :request_location
6
+
7
+ def initialize(attributes)
8
+ attributes.each { |k, v| self.send("#{k}=", v) if self.respond_to? k }
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,10 @@
1
+ module Telegram::Bot::Types
2
+ class Location
3
+ attr_accessor :longitude,
4
+ :latitude
5
+
6
+ def initialize(attributes)
7
+ attributes.each { |k, v| self.send("#{k}=", v) if self.respond_to? k }
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,12 @@
1
+ module Telegram::Bot::Types
2
+ class MaskPosition
3
+ attr_accessor :point,
4
+ :x_shift,
5
+ :y_shift,
6
+ :scale
7
+
8
+ def initialize(attributes)
9
+ attributes.each { |k, v| self.send("#{k}=", v) if self.respond_to? k }
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,145 @@
1
+ module Telegram::Bot::Types
2
+ class Message
3
+ attr_accessor :message_id,
4
+ :from,
5
+ :date,
6
+ :chat,
7
+ :forward_from,
8
+ :forward_from_chat,
9
+ :forward_from_message_id,
10
+ :forward_signature,
11
+ :forward_date,
12
+ :reply_to_message,
13
+ :edit_date,
14
+ :media_group_id,
15
+ :author_signature,
16
+ :text,
17
+ :entities,
18
+ :caption_entities,
19
+ :audio,
20
+ :document,
21
+ :game,
22
+ :photo,
23
+ :sticker,
24
+ :video,
25
+ :voice,
26
+ :video_note,
27
+ :caption,
28
+ :contact,
29
+ :location,
30
+ :venue,
31
+ :new_chat_members,
32
+ :left_chat_member,
33
+ :new_chat_title,
34
+ :new_chat_photo,
35
+ :delete_chat_photo,
36
+ :group_chat_created,
37
+ :supergroup_chat_created,
38
+ :channel_chat_created,
39
+ :migrate_to_chat_id,
40
+ :migrate_from_chat_id,
41
+ :pinned_message,
42
+ :invoice,
43
+ :successful_payment
44
+
45
+ def initialize(attributes)
46
+ attributes.each { |k, v| self.send("#{k}=", v) if self.respond_to? k }
47
+ end
48
+
49
+ def from=(attributes)
50
+ @from = User.new(attributes)
51
+ end
52
+
53
+ def chat=(attributes)
54
+ @chat = Chat.new(attributes)
55
+ end
56
+
57
+ def forward_from=(attributes)
58
+ @forward_from = User.new(attributes)
59
+ end
60
+
61
+ def forward_from_chat=(attributes)
62
+ @forward_from_chat = Chat.new(attributes)
63
+ end
64
+
65
+ def reply_to_message=(attributes)
66
+ @reply_to_message = Message.new(attributes)
67
+ end
68
+
69
+ def entities=(attributes)
70
+ @entities = attributes.map {|attr| MessageEntity.new(attr) }
71
+ end
72
+
73
+ def caption_entities=(attributes)
74
+ @caption_entities = attributes.map {|attr| MessageEntity.new(attr) }
75
+ end
76
+
77
+ def audio=(attributes)
78
+ @audio = Audio.new(attributes)
79
+ end
80
+
81
+ def document=(attributes)
82
+ @document = Audio.new(attributes)
83
+ end
84
+
85
+ def game=(attributes)
86
+ @game = Game.new(attributes)
87
+ end
88
+
89
+ def photo=(attributes)
90
+ @photo = PhotoSize.new(attributes)
91
+ end
92
+
93
+ def sticker=(attributes)
94
+ @sticker = Sticker.new(attributes)
95
+ end
96
+
97
+ def video=(attributes)
98
+ @video = Video.new(attributes)
99
+ end
100
+
101
+ def voice=(attributes)
102
+ @voice = Voice.new(attributes)
103
+ end
104
+
105
+ def video_note=(attributes)
106
+ @video_note = VideoNote.new(attributes)
107
+ end
108
+
109
+ def contact=(attributes)
110
+ @contact = Contact.new(attributes)
111
+ end
112
+
113
+ def location=(attributes)
114
+ @location = Location.new(attributes)
115
+ end
116
+
117
+ def venue=(attributes)
118
+ @venue = Venue.new(attributes)
119
+ end
120
+
121
+ def new_chat_members=(attributes)
122
+ @new_chat_members = attributes.map {|attr| User.new(attr) }
123
+ end
124
+
125
+ def left_chat_member=(attributes)
126
+ @left_chat_member = User.new(attributes)
127
+ end
128
+
129
+ def new_chat_photo=(attributes)
130
+ @new_chat_photo = PhotoSize.new(attributes)
131
+ end
132
+
133
+ def pinned_message=(attributes)
134
+ @pinned_message = Message.new(attributes)
135
+ end
136
+
137
+ def invoice=(attributes)
138
+ @invoice = Invoice.new(attributes)
139
+ end
140
+
141
+ def successful_payment=(attributes)
142
+ @successful_payment = SuccessfulPayment.new(attributes)
143
+ end
144
+ end
145
+ end
@@ -0,0 +1,17 @@
1
+ module Telegram::Bot::Types
2
+ class MessageEntity
3
+ attr_accessor :type,
4
+ :offset,
5
+ :length,
6
+ :url,
7
+ :user
8
+
9
+ def initialize(attributes)
10
+ attributes.each { |k, v| self.send("#{k}=", v) if self.respond_to? k }
11
+ end
12
+
13
+ def user=(attributes)
14
+ @user = User.new(attributes)
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,16 @@
1
+ module Telegram::Bot::Types
2
+ class OrderInfo
3
+ attr_accessor :name,
4
+ :phone_number,
5
+ :email,
6
+ :shipping_address
7
+
8
+ def initialize(attributes)
9
+ attributes.each { |k, v| self.send("#{k}=", v) if self.respond_to? k }
10
+ end
11
+
12
+ def shipping_address=(attributes)
13
+ @shipping_address = ShippingAddress.new(attributes)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,12 @@
1
+ module Telegram::Bot::Types
2
+ class PhotoSize
3
+ attr_accessor :file_id,
4
+ :width,
5
+ :height,
6
+ :file_size
7
+
8
+ def initialize(attributes)
9
+ attributes.each { |k, v| self.send("#{k}=", v) if self.respond_to? k }
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,23 @@
1
+ module Telegram::Bot::Types
2
+ class PreCheckoutQuery
3
+ attr_accessor :id,
4
+ :from,
5
+ :currency,
6
+ :total_amount,
7
+ :invoice_payload,
8
+ :shipping_option_id,
9
+ :order_info
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(attr)
17
+ end
18
+
19
+ def order_info=(attributes)
20
+ @order_info = OrderInfo.new(attr)
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,22 @@
1
+ module Telegram::Bot::Types
2
+ class ReplyKeyboardMarkup
3
+ attr_accessor :keyboard, :resize_keyboard, :one_time_keyboard, :selective
4
+
5
+ def initialize(attributes, options = {})
6
+ options.each { |k, v| self.send("#{k}=", v) if self.respond_to? k }
7
+
8
+ @keyboard = attributes.map do |v|
9
+ v.map do |b|
10
+ if b.is_a?(KeyboardButton)
11
+ b
12
+ elsif b.is_a?(Hash)
13
+ InlineKeyboardButton.new(b)
14
+ else
15
+ raise Telegram::Bot::Exceptions::KeyboardMarkupError
16
+ .new('Attributes must be Array of Array of Telegram::Bot::Types::KeyboardButton or Hash')
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,9 @@
1
+ module Telegram::Bot::Types
2
+ class ReplyKeyboardRemove
3
+ attr_accessor :remove_keyboard, :selective
4
+
5
+ def initialize(attributes)
6
+ attributes.each { |k, v| self.send("#{k}=", v) if self.respond_to? k }
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,14 @@
1
+ module Telegram::Bot::Types
2
+ class ShippingAddress
3
+ attr_accessor :country_code,
4
+ :state,
5
+ :city,
6
+ :street_line1,
7
+ :street_line2,
8
+ :post_code
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,20 @@
1
+ module Telegram::Bot::Types
2
+ class ShippingQuery
3
+ attr_accessor :id,
4
+ :from,
5
+ :invoice_payload,
6
+ :shipping_address
7
+
8
+ def initialize(attributes)
9
+ attributes.each { |k, v| self.send("#{k}=", v) if self.respond_to? k }
10
+ end
11
+
12
+ def from=(attributes)
13
+ @from = User.new(attr)
14
+ end
15
+
16
+ def shipping_address=(attributes)
17
+ @shipping_address = ShippingAddress.new(attributes)
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,24 @@
1
+ module Telegram::Bot::Types
2
+ class Sticker
3
+ attr_accessor :file_id,
4
+ :width,
5
+ :height,
6
+ :thumb,
7
+ :emoji,
8
+ :set_name,
9
+ :mask_position,
10
+ :file_size
11
+
12
+ def initialize(attributes)
13
+ attributes.each { |k, v| self.send("#{k}=", v) if self.respond_to? k }
14
+ end
15
+
16
+ def thumb=(attributes)
17
+ @thumb = PhotoSize.new(attributes)
18
+ end
19
+
20
+ def mask_position=(attributes)
21
+ @mask_position = MaskPosition.new(attributes)
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,16 @@
1
+ module Telegram::Bot::Types
2
+ class StickerSet
3
+ attr_accessor :name,
4
+ :title,
5
+ :contains_masks,
6
+ :stickers
7
+
8
+ def initialize(attributes)
9
+ attributes.each { |k, v| self.send("#{k}=", v) if self.respond_to? k }
10
+ end
11
+
12
+ def stickers=(attributes)
13
+ @stickers = attributes.map {|attr| Sticker.new(attr) }
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,19 @@
1
+ module Telegram::Bot::Types
2
+ class SuccessfulPayment
3
+ attr_accessor :currency,
4
+ :total_amount,
5
+ :invoice_payload,
6
+ :shipping_option_id,
7
+ :order_info,
8
+ :telegram_payment_charge_id,
9
+ :provider_payment_charge_id
10
+
11
+ def initialize(attributes)
12
+ attributes.each { |k, v| self.send("#{k}=", v) if self.respond_to? k }
13
+ end
14
+
15
+ def order_info=(attributes)
16
+ @order_info = OrderInfo.new(attributes)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,54 @@
1
+ module Telegram::Bot::Types
2
+ class Update
3
+ attr_accessor :update_id,
4
+ :message,
5
+ :edited_message,
6
+ :channel_post,
7
+ :edited_channel_post,
8
+ :inline_query,
9
+ :chosen_inline_result,
10
+ :callback_query,
11
+ :shipping_query,
12
+ :pre_checkout_query
13
+
14
+ def initialize(attributes)
15
+ attributes.each { |k, v| self.send("#{k}=", v) if self.respond_to? k }
16
+ end
17
+
18
+ def message=(attributes)
19
+ @message = Message.new(attributes)
20
+ end
21
+
22
+ def edited_message=(attributes)
23
+ @edited_message = Message.new(attributes)
24
+ end
25
+
26
+ def channel_post=(attributes)
27
+ @channel_post = Message.new(attributes)
28
+ end
29
+
30
+ def edited_channel_post=(attributes)
31
+ @edited_channel_post = Message.new(attributes)
32
+ end
33
+
34
+ def inline_query=(attributes)
35
+ @inline_query = InlineQuery.new(attributes)
36
+ end
37
+
38
+ def chosen_inline_result=(attributes)
39
+ @chosen_inline_result = ChosenInlineResult.new(attributes)
40
+ end
41
+
42
+ def callback_query=(attributes)
43
+ @callback_query = CallbackQuery.new(attributes)
44
+ end
45
+
46
+ def shipping_query=(attributes)
47
+ @shipping_query = ShippingQuery.new(attributes)
48
+ end
49
+
50
+ def pre_checkout_query=(attributes)
51
+ @pre_checkout_query = PreCheckoutQuery.new(attributes)
52
+ end
53
+ end
54
+ end