telegram-ruby 0.1.0

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