dialog_bot_ruby 0.8.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (102) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +6 -0
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +18 -0
  5. data/.rubocop_todo.yml +13 -0
  6. data/.travis.yml +6 -0
  7. data/CHANGELOG.md +68 -0
  8. data/Gemfile +3 -0
  9. data/LICENSE +14 -0
  10. data/README.md +197 -0
  11. data/Rakefile +15 -0
  12. data/bin/console +6 -0
  13. data/bin/setup +5 -0
  14. data/dialog_bot_ruby.gemspec +32 -0
  15. data/examples/bot.rb +17 -0
  16. data/lib/telegram/bot/adapters/socks5.rb +24 -0
  17. data/lib/telegram/bot/api.rb +172 -0
  18. data/lib/telegram/bot/client.rb +77 -0
  19. data/lib/telegram/bot/configuration.rb +11 -0
  20. data/lib/telegram/bot/exceptions/base.rb +7 -0
  21. data/lib/telegram/bot/exceptions/response_error.rb +32 -0
  22. data/lib/telegram/bot/exceptions.rb +2 -0
  23. data/lib/telegram/bot/null_logger.rb +11 -0
  24. data/lib/telegram/bot/types/animation.rb +13 -0
  25. data/lib/telegram/bot/types/audio.rb +14 -0
  26. data/lib/telegram/bot/types/base.rb +10 -0
  27. data/lib/telegram/bot/types/callback_game.rb +8 -0
  28. data/lib/telegram/bot/types/callback_query.rb +15 -0
  29. data/lib/telegram/bot/types/chat.rb +22 -0
  30. data/lib/telegram/bot/types/chat_member.rb +24 -0
  31. data/lib/telegram/bot/types/chat_photo.rb +10 -0
  32. data/lib/telegram/bot/types/chosen_inline_result.rb +15 -0
  33. data/lib/telegram/bot/types/compactable.rb +26 -0
  34. data/lib/telegram/bot/types/contact.rb +13 -0
  35. data/lib/telegram/bot/types/document.rb +13 -0
  36. data/lib/telegram/bot/types/encrypted_credentials.rb +11 -0
  37. data/lib/telegram/bot/types/encrypted_passport_element.rb +16 -0
  38. data/lib/telegram/bot/types/file.rb +11 -0
  39. data/lib/telegram/bot/types/force_reply.rb +10 -0
  40. data/lib/telegram/bot/types/game.rb +14 -0
  41. data/lib/telegram/bot/types/game_high_score.rb +11 -0
  42. data/lib/telegram/bot/types/inline_keyboard_button.rb +15 -0
  43. data/lib/telegram/bot/types/inline_keyboard_markup.rb +20 -0
  44. data/lib/telegram/bot/types/inline_query.rb +15 -0
  45. data/lib/telegram/bot/types/inline_query_result_article.rb +19 -0
  46. data/lib/telegram/bot/types/inline_query_result_audio.rb +17 -0
  47. data/lib/telegram/bot/types/inline_query_result_cached_audio.rb +14 -0
  48. data/lib/telegram/bot/types/inline_query_result_cached_document.rb +16 -0
  49. data/lib/telegram/bot/types/inline_query_result_cached_gif.rb +15 -0
  50. data/lib/telegram/bot/types/inline_query_result_cached_mpeg4_gif.rb +15 -0
  51. data/lib/telegram/bot/types/inline_query_result_cached_photo.rb +16 -0
  52. data/lib/telegram/bot/types/inline_query_result_cached_sticker.rb +13 -0
  53. data/lib/telegram/bot/types/inline_query_result_cached_video.rb +16 -0
  54. data/lib/telegram/bot/types/inline_query_result_cached_voice.rb +15 -0
  55. data/lib/telegram/bot/types/inline_query_result_contact.rb +19 -0
  56. data/lib/telegram/bot/types/inline_query_result_document.rb +20 -0
  57. data/lib/telegram/bot/types/inline_query_result_game.rb +12 -0
  58. data/lib/telegram/bot/types/inline_query_result_gif.rb +19 -0
  59. data/lib/telegram/bot/types/inline_query_result_location.rb +18 -0
  60. data/lib/telegram/bot/types/inline_query_result_mpeg4_gif.rb +19 -0
  61. data/lib/telegram/bot/types/inline_query_result_photo.rb +19 -0
  62. data/lib/telegram/bot/types/inline_query_result_venue.rb +20 -0
  63. data/lib/telegram/bot/types/inline_query_result_video.rb +21 -0
  64. data/lib/telegram/bot/types/inline_query_result_voice.rb +16 -0
  65. data/lib/telegram/bot/types/input_contact_message_content.rb +12 -0
  66. data/lib/telegram/bot/types/input_location_message_content.rb +10 -0
  67. data/lib/telegram/bot/types/input_media_photo.rb +11 -0
  68. data/lib/telegram/bot/types/input_media_video.rb +14 -0
  69. data/lib/telegram/bot/types/input_message_content.rb +8 -0
  70. data/lib/telegram/bot/types/input_text_message_content.rb +11 -0
  71. data/lib/telegram/bot/types/input_venue_message_content.rb +13 -0
  72. data/lib/telegram/bot/types/invoice.rb +13 -0
  73. data/lib/telegram/bot/types/keyboard_button.rb +11 -0
  74. data/lib/telegram/bot/types/labeled_price.rb +10 -0
  75. data/lib/telegram/bot/types/location.rb +10 -0
  76. data/lib/telegram/bot/types/mask_position.rb +12 -0
  77. data/lib/telegram/bot/types/message.rb +52 -0
  78. data/lib/telegram/bot/types/message_entity.rb +15 -0
  79. data/lib/telegram/bot/types/order_info.rb +12 -0
  80. data/lib/telegram/bot/types/passport_data.rb +10 -0
  81. data/lib/telegram/bot/types/passport_file.rb +11 -0
  82. data/lib/telegram/bot/types/photo_size.rb +12 -0
  83. data/lib/telegram/bot/types/pre_checkout_query.rb +15 -0
  84. data/lib/telegram/bot/types/reply_keyboard_markup.rb +23 -0
  85. data/lib/telegram/bot/types/reply_keyboard_remove.rb +10 -0
  86. data/lib/telegram/bot/types/shipping_address.rb +14 -0
  87. data/lib/telegram/bot/types/shipping_option.rb +11 -0
  88. data/lib/telegram/bot/types/shipping_query.rb +12 -0
  89. data/lib/telegram/bot/types/sticker.rb +16 -0
  90. data/lib/telegram/bot/types/sticker_set.rb +12 -0
  91. data/lib/telegram/bot/types/successful_payment.rb +15 -0
  92. data/lib/telegram/bot/types/update.rb +23 -0
  93. data/lib/telegram/bot/types/user.rb +14 -0
  94. data/lib/telegram/bot/types/user_profile_photos.rb +10 -0
  95. data/lib/telegram/bot/types/venue.rb +12 -0
  96. data/lib/telegram/bot/types/video.rb +15 -0
  97. data/lib/telegram/bot/types/video_note.rb +13 -0
  98. data/lib/telegram/bot/types/voice.rb +12 -0
  99. data/lib/telegram/bot/types.rb +77 -0
  100. data/lib/telegram/bot/version.rb +5 -0
  101. data/lib/telegram/bot.rb +29 -0
  102. metadata +286 -0
@@ -0,0 +1,77 @@
1
+ module Telegram
2
+ module Bot
3
+ class Client
4
+ attr_reader :api, :options
5
+ attr_accessor :logger
6
+
7
+ def self.run(*args, &block)
8
+ new(*args).run(&block)
9
+ end
10
+
11
+ def initialize(token, h = {})
12
+ @options = default_options.merge(h)
13
+ @api = Api.new(token)
14
+ @logger = options.delete(:logger)
15
+ end
16
+
17
+ def run
18
+ yield self
19
+ end
20
+
21
+ def listen(&block)
22
+ logger.info('Starting bot')
23
+ catch(:stop) {
24
+ loop { fetch_updates(&block) }
25
+ }
26
+ end
27
+
28
+ # This can also be written in any calling code (the throw does not have to appear
29
+ # within the static scope of the catch), but is included here for completeness
30
+ def stop
31
+ throw :stop
32
+ end
33
+
34
+ # Listen for a given period of time (in minutes)
35
+ def listen_for(minutes = 15, &block)
36
+ counter = 15 * 60
37
+ interval = 5 # Check every 5 seconds
38
+ interval_timer = 1 # must start at 1
39
+ now = Time.now
40
+ while Time.now - now < counter
41
+ if interval_timer % interval == 0 #Every 5 attempts the activity will process
42
+ fetch_updates(&block)
43
+ end
44
+ interval_timer = interval_timer + 1
45
+ end
46
+ end
47
+
48
+ def fetch_updates
49
+ response = api.getUpdates(options)
50
+ return unless response['ok']
51
+
52
+ response['result'].each do |data|
53
+ update = Types::Update.new(data)
54
+ @options[:offset] = update.update_id.next
55
+ message = update.current_message
56
+ log_incoming_message(message)
57
+ yield message
58
+ end
59
+ rescue Faraday::Error::TimeoutError
60
+ retry
61
+ end
62
+
63
+ private
64
+
65
+ def default_options
66
+ { offset: 0, timeout: 20, logger: NullLogger.new }
67
+ end
68
+
69
+ def log_incoming_message(message)
70
+ uid = message.from ? message.from.id : nil
71
+ logger.info(
72
+ format('Incoming message: text="%s" uid=%s', message, uid)
73
+ )
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,11 @@
1
+ module Telegram
2
+ module Bot
3
+ class Configuration
4
+ attr_accessor :adapter, :ssl_opts
5
+
6
+ def initialize
7
+ @adapter = Faraday.default_adapter
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,7 @@
1
+ module Telegram
2
+ module Bot
3
+ module Exceptions
4
+ class Base < StandardError; end
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,32 @@
1
+ module Telegram
2
+ module Bot
3
+ module Exceptions
4
+ class ResponseError < Base
5
+ attr_reader :response
6
+
7
+ def initialize(response)
8
+ @response = response
9
+ end
10
+
11
+ def to_s
12
+ super +
13
+ format(' (%s)', data.map { |k, v| %(#{k}: "#{v}") }.join(', '))
14
+ end
15
+
16
+ def error_code
17
+ data[:error_code] || data['error_code']
18
+ end
19
+
20
+ private
21
+
22
+ def data
23
+ @data ||= begin
24
+ JSON.parse(response.body)
25
+ rescue JSON::ParserError
26
+ { error_code: response.status, uri: response.env.url.to_s }
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,2 @@
1
+ require 'telegram/bot/exceptions/base'
2
+ require 'telegram/bot/exceptions/response_error'
@@ -0,0 +1,11 @@
1
+ module Telegram
2
+ module Bot
3
+ class NullLogger < Logger
4
+ def initialize(*)
5
+ end
6
+
7
+ def add(*)
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,13 @@
1
+ module Telegram
2
+ module Bot
3
+ module Types
4
+ class Animation < Base
5
+ attribute :file_id, String
6
+ attribute :thumb, PhotoSize
7
+ attribute :file_name, String
8
+ attribute :mime_type, String
9
+ attribute :file_size, Integer
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,14 @@
1
+ module Telegram
2
+ module Bot
3
+ module Types
4
+ class Audio < Base
5
+ attribute :file_id, String
6
+ attribute :duration, Integer
7
+ attribute :performer, String
8
+ attribute :title, String
9
+ attribute :mime_type, String
10
+ attribute :file_size, Integer
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,10 @@
1
+ module Telegram
2
+ module Bot
3
+ module Types
4
+ class Base
5
+ include Virtus.model
6
+ include Compactable
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,8 @@
1
+ module Telegram
2
+ module Bot
3
+ module Types
4
+ class CallbackGame < Base
5
+ end
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,15 @@
1
+ module Telegram
2
+ module Bot
3
+ module Types
4
+ class CallbackQuery < Base
5
+ attribute :id, String
6
+ attribute :from, User
7
+ attribute :message, Message
8
+ attribute :inline_message_id, String
9
+ attribute :chat_instance, String
10
+ attribute :data, String
11
+ attribute :game_short_name, String
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,22 @@
1
+ module Telegram
2
+ module Bot
3
+ module Types
4
+ class Chat < Base
5
+ include Virtus.model(finalize: false)
6
+ include Compactable
7
+
8
+ attribute :id, Integer
9
+ attribute :type, String
10
+ attribute :title, String
11
+ attribute :username, String
12
+ attribute :first_name, String
13
+ attribute :last_name, String
14
+ attribute :all_members_are_administrators, Boolean
15
+ attribute :photo, ChatPhoto
16
+ attribute :description, String
17
+ attribute :invite_link, String
18
+ attribute :pinned_message, 'Telegram::Bot::Types::Message'
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,24 @@
1
+ module Telegram
2
+ module Bot
3
+ module Types
4
+ class ChatMember < Base
5
+ attribute :user, User
6
+ attribute :status, String
7
+ attribute :until_date, Integer
8
+ attribute :can_be_edited, Boolean
9
+ attribute :can_change_info, Boolean
10
+ attribute :can_post_messages, Boolean
11
+ attribute :can_edit_messages, Boolean
12
+ attribute :can_delete_messages, Boolean
13
+ attribute :can_invite_users, Boolean
14
+ attribute :can_restrict_members, Boolean
15
+ attribute :can_pin_messages, Boolean
16
+ attribute :can_promote_members, Boolean
17
+ attribute :can_send_messages, Boolean
18
+ attribute :can_send_media_messages, Boolean
19
+ attribute :can_send_other_messages, Boolean
20
+ attribute :can_add_web_page_previews, Boolean
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,10 @@
1
+ module Telegram
2
+ module Bot
3
+ module Types
4
+ class ChatPhoto < Base
5
+ attribute :small_file_id, String
6
+ attribute :big_file_id, String
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,15 @@
1
+ module Telegram
2
+ module Bot
3
+ module Types
4
+ class ChosenInlineResult < Base
5
+ attribute :result_id, String
6
+ attribute :from, User
7
+ attribute :location, Location
8
+ attribute :inline_message_id, String
9
+ attribute :query, String
10
+
11
+ alias to_s query
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,26 @@
1
+ module Telegram
2
+ module Bot
3
+ module Types
4
+ module Compactable
5
+ def to_compact_hash
6
+ Hash[attributes.dup.delete_if { |_, v| v.nil? }.map do |key, value|
7
+ value = recursive_hash_conversion(value)
8
+ [key, value]
9
+ end]
10
+ end
11
+
12
+ private
13
+
14
+ def recursive_hash_conversion(value)
15
+ if value.class.ancestors.include?(Telegram::Bot::Types::Base)
16
+ value.to_compact_hash
17
+ elsif value.is_a?(Array)
18
+ value.map { |arr_content| recursive_hash_conversion(arr_content) }
19
+ else
20
+ value
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,13 @@
1
+ module Telegram
2
+ module Bot
3
+ module Types
4
+ class Contact < Base
5
+ attribute :phone_number, String
6
+ attribute :first_name, String
7
+ attribute :last_name, String
8
+ attribute :user_id, Integer
9
+ attribute :vcard, String
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module Telegram
2
+ module Bot
3
+ module Types
4
+ class Document < Base
5
+ attribute :file_id, String
6
+ attribute :thumb, PhotoSize
7
+ attribute :file_name, String
8
+ attribute :mime_type, String
9
+ attribute :file_size, Integer
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,11 @@
1
+ module Telegram
2
+ module Bot
3
+ module Types
4
+ class EncryptedCredentials < Base
5
+ attribute :data, String
6
+ attribute :hash, String
7
+ attribute :secret, String
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,16 @@
1
+ module Telegram
2
+ module Bot
3
+ module Types
4
+ class EncryptedPassportElement < Base
5
+ attribute :type, String
6
+ attribute :data, String
7
+ attribute :phone_number, String
8
+ attribute :email, String
9
+ attribute :files, Array[PassportFile]
10
+ attribute :front_side, PassportFile
11
+ attribute :reverse_side, PassportFile
12
+ attribute :selfie, PassportFile
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,11 @@
1
+ module Telegram
2
+ module Bot
3
+ module Types
4
+ class File < Base
5
+ attribute :file_id, String
6
+ attribute :file_size, Integer
7
+ attribute :file_path, String
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,10 @@
1
+ module Telegram
2
+ module Bot
3
+ module Types
4
+ class ForceReply < Base
5
+ attribute :force_reply, Boolean
6
+ attribute :selective, Boolean, default: false
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,14 @@
1
+ module Telegram
2
+ module Bot
3
+ module Types
4
+ class Game < Base
5
+ attribute :title, String
6
+ attribute :description, String
7
+ attribute :photo, Array[PhotoSize]
8
+ attribute :text, String
9
+ attribute :text_entities, Array[MessageEntity]
10
+ attribute :animation, Animation
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,11 @@
1
+ module Telegram
2
+ module Bot
3
+ module Types
4
+ class GameHighScore < Base
5
+ attribute :position, Integer
6
+ attribute :user, User
7
+ attribute :score, Integer
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,15 @@
1
+ module Telegram
2
+ module Bot
3
+ module Types
4
+ class InlineKeyboardButton < Base
5
+ attribute :text, String
6
+ attribute :url, String
7
+ attribute :callback_data, String
8
+ attribute :switch_inline_query, String
9
+ attribute :switch_inline_query_current_chat, String
10
+ attribute :callback_game, CallbackGame
11
+ attribute :pay, Boolean
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,20 @@
1
+ module Telegram
2
+ module Bot
3
+ module Types
4
+ class InlineKeyboardMarkup < Base
5
+ attribute :inline_keyboard, Array[Array[InlineKeyboardButton]]
6
+
7
+ def to_compact_hash
8
+ hsh = super
9
+ hsh[:inline_keyboard].map! do |arr|
10
+ arr.map do |item|
11
+ item.is_a?(InlineKeyboardButton) ? item.to_compact_hash : item
12
+ end
13
+ end
14
+
15
+ hsh
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,15 @@
1
+ module Telegram
2
+ module Bot
3
+ module Types
4
+ class InlineQuery < Base
5
+ attribute :id, String
6
+ attribute :from, User
7
+ attribute :location, Location
8
+ attribute :query, String
9
+ attribute :offset, String
10
+
11
+ alias to_s query
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,19 @@
1
+ module Telegram
2
+ module Bot
3
+ module Types
4
+ class InlineQueryResultArticle < Base
5
+ attribute :type, String, default: 'article'
6
+ attribute :id, String
7
+ attribute :title, String
8
+ attribute :input_message_content, InputMessageContent
9
+ attribute :reply_markup, InlineKeyboardMarkup
10
+ attribute :url, String
11
+ attribute :hide_url, Boolean
12
+ attribute :description, String
13
+ attribute :thumb_url, String
14
+ attribute :thumb_width, Integer
15
+ attribute :thumb_height, Integer
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,17 @@
1
+ module Telegram
2
+ module Bot
3
+ module Types
4
+ class InlineQueryResultAudio < Base
5
+ attribute :type, String, default: 'audio'
6
+ attribute :id, String
7
+ attribute :audio_url, String
8
+ attribute :title, String
9
+ attribute :caption, String
10
+ attribute :performer, String
11
+ attribute :audio_duration, Integer
12
+ attribute :reply_markup, InlineKeyboardMarkup
13
+ attribute :input_message_content, InputMessageContent
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,14 @@
1
+ module Telegram
2
+ module Bot
3
+ module Types
4
+ class InlineQueryResultCachedAudio < Base
5
+ attribute :type, String, default: 'audio'
6
+ attribute :id, String
7
+ attribute :audio_file_id, String
8
+ attribute :caption, String
9
+ attribute :reply_markup, InlineKeyboardMarkup
10
+ attribute :input_message_content, InputMessageContent
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,16 @@
1
+ module Telegram
2
+ module Bot
3
+ module Types
4
+ class InlineQueryResultCachedDocument < Base
5
+ attribute :type, String, default: 'document'
6
+ attribute :id, String
7
+ attribute :title, String
8
+ attribute :document_file_id, String
9
+ attribute :description, String
10
+ attribute :caption, String
11
+ attribute :reply_markup, InlineKeyboardMarkup
12
+ attribute :input_message_content, InputMessageContent
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,15 @@
1
+ module Telegram
2
+ module Bot
3
+ module Types
4
+ class InlineQueryResultCachedGif < Base
5
+ attribute :type, String, default: 'gif'
6
+ attribute :id, String
7
+ attribute :gif_file_id, String
8
+ attribute :title, String
9
+ attribute :caption, String
10
+ attribute :reply_markup, InlineKeyboardMarkup
11
+ attribute :input_message_content, InputMessageContent
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ module Telegram
2
+ module Bot
3
+ module Types
4
+ class InlineQueryResultCachedMpeg4Gif < Base
5
+ attribute :type, String, default: 'mpeg4_gif'
6
+ attribute :id, String
7
+ attribute :mpeg4_file_id, String
8
+ attribute :title, String
9
+ attribute :caption, String
10
+ attribute :reply_markup, InlineKeyboardMarkup
11
+ attribute :input_message_content, InputMessageContent
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,16 @@
1
+ module Telegram
2
+ module Bot
3
+ module Types
4
+ class InlineQueryResultCachedPhoto < Base
5
+ attribute :type, String, default: 'photo'
6
+ attribute :id, String
7
+ attribute :photo_file_id, String
8
+ attribute :title, String
9
+ attribute :description, String
10
+ attribute :caption, String
11
+ attribute :reply_markup, InlineKeyboardMarkup
12
+ attribute :input_message_content, InputMessageContent
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,13 @@
1
+ module Telegram
2
+ module Bot
3
+ module Types
4
+ class InlineQueryResultCachedSticker < Base
5
+ attribute :type, String, default: 'sticker'
6
+ attribute :id, String
7
+ attribute :sticker_file_id, String
8
+ attribute :reply_markup, InlineKeyboardMarkup
9
+ attribute :input_message_content, InputMessageContent
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,16 @@
1
+ module Telegram
2
+ module Bot
3
+ module Types
4
+ class InlineQueryResultCachedVideo < Base
5
+ attribute :type, String, default: 'video'
6
+ attribute :id, String
7
+ attribute :video_file_id, String
8
+ attribute :title, String
9
+ attribute :description, String
10
+ attribute :caption, String
11
+ attribute :reply_markup, InlineKeyboardMarkup
12
+ attribute :input_message_content, InputMessageContent
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,15 @@
1
+ module Telegram
2
+ module Bot
3
+ module Types
4
+ class InlineQueryResultCachedVoice < Base
5
+ attribute :type, String, default: 'voice'
6
+ attribute :id, String
7
+ attribute :voice_file_id, String
8
+ attribute :title, String
9
+ attribute :caption, String
10
+ attribute :reply_markup, InlineKeyboardMarkup
11
+ attribute :input_message_content, InputMessageContent
12
+ end
13
+ end
14
+ end
15
+ end