Class: GrubY::Context

Inherits:
Object
  • Object
show all
Defined in:
lib/gruubY/context.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(update, api, session = nil) ⇒ Context

Returns a new instance of Context.



11
12
13
14
15
# File 'lib/gruubY/context.rb', line 11

def initialize(update, api, session = nil)
  @update = update
  @api = api
  @session = session
end

Instance Attribute Details

#apiObject (readonly)

Returns the value of attribute api.



9
10
11
# File 'lib/gruubY/context.rb', line 9

def api
  @api
end

#sessionObject (readonly)

Returns the value of attribute session.



9
10
11
# File 'lib/gruubY/context.rb', line 9

def session
  @session
end

#updateObject (readonly)

Returns the value of attribute update.



9
10
11
# File 'lib/gruubY/context.rb', line 9

def update
  @update
end

Instance Method Details

#answer_callback(text = nil, show_alert: false) ⇒ Object



170
171
172
173
174
175
176
177
# File 'lib/gruubY/context.rb', line 170

def answer_callback(text = nil, show_alert: false)
  id = callback_query&.id
  return unless id

  params = { callback_query_id: id, show_alert: show_alert }
  params[:text] = text if text
  @api.raw("answerCallbackQuery", params)
end

#business_connectionObject



89
90
91
92
# File 'lib/gruubY/context.rb', line 89

def business_connection
  data = @update["business_connection"]
  wrap_type("BusinessConnection", data)
end

#business_messageObject



27
28
29
30
# File 'lib/gruubY/context.rb', line 27

def business_message
  data = @update["business_message"]
  Message.new(data, api: @api) if data
end

#callback_queryObject



64
65
66
67
# File 'lib/gruubY/context.rb', line 64

def callback_query
  data = update["callback_query"]
  CallbackQuery.new(data, api: @api) if data
end

#chat_boostObject



104
105
106
107
# File 'lib/gruubY/context.rb', line 104

def chat_boost
  data = @update["chat_boost"] || @update["chat_boost_updated"]
  wrap_type("ChatBoostUpdated", data)
end

#chat_idObject



51
52
53
# File 'lib/gruubY/context.rb', line 51

def chat_id
  primary_message_payload&.dig("chat", "id")
end

#chat_join_requestObject



84
85
86
87
# File 'lib/gruubY/context.rb', line 84

def chat_join_request
  data = update["chat_join_request"]
  ChatJoinRequest.new(data, api: @api) if data
end

#chat_member_updatedObject



109
110
111
112
# File 'lib/gruubY/context.rb', line 109

def chat_member_updated
  data = @update["chat_member_updated"] || @update["chat_member"]
  wrap_type("ChatMemberUpdated", data)
end

#chosen_inline_resultObject



114
115
116
117
# File 'lib/gruubY/context.rb', line 114

def chosen_inline_result
  data = @update["chosen_inline_result"]
  wrap_type("ChosenInlineResult", data)
end

#commandObject



183
184
185
186
187
188
189
# File 'lib/gruubY/context.rb', line 183

def command
  t = text
  return nil unless t&.start_with?("/")

  token = t.split(/\s+/, 2).first
  token.sub(%r{^/}, "").split("@", 2).first
end

#command_argsObject



191
192
193
194
195
196
197
198
199
# File 'lib/gruubY/context.rb', line 191

def command_args
  t = text
  return [] unless t

  _, rest = t.split(/\s+/, 2)
  return [] unless rest

  rest.strip.split(/\s+/)
end

#deleted_business_messagesObject



42
43
44
45
# File 'lib/gruubY/context.rb', line 42

def deleted_business_messages
  list = @update["deleted_business_messages"]
  Array(list).map { |m| Message.new(m, api: @api) }
end

#deleted_messagesObject



37
38
39
40
# File 'lib/gruubY/context.rb', line 37

def deleted_messages
  list = @update["deleted_messages"]
  Array(list).map { |m| Message.new(m, api: @api) }
end

#download(file_name = "file.dat") ⇒ Object



216
217
218
219
220
# File 'lib/gruubY/context.rb', line 216

def download(file_name = "file.dat")
  f = api.get_file(file_id)
  api.download_file(f["file_path"], file_name)
  file_name
end

#edited_business_messageObject



32
33
34
35
# File 'lib/gruubY/context.rb', line 32

def edited_business_message
  data = @update["edited_business_message"]
  Message.new(data, api: @api) if data
end

#edited_messageObject



22
23
24
25
# File 'lib/gruubY/context.rb', line 22

def edited_message
  data = @update["edited_message"]
  Message.new(data, api: @api) if data
end

#error_payloadObject



144
145
146
# File 'lib/gruubY/context.rb', line 144

def error_payload
  @update["error"]
end

#file_idObject



201
202
203
204
205
206
207
208
209
210
211
212
213
214
# File 'lib/gruubY/context.rb', line 201

def file_id
  data = primary_message_payload
  return nil unless data

  if data["photo"]
    data["photo"].last["file_id"]
  elsif data["video"]
    data["video"]["file_id"]
  elsif data["audio"]
    data["audio"]["file_id"]
  elsif data["document"]
    data["document"]["file_id"]
  end
end

#fromObject



55
56
57
58
# File 'lib/gruubY/context.rb', line 55

def from
  data = user_data
  User.new(data, api: @api) if data
end

#inline_queryObject



69
70
71
72
# File 'lib/gruubY/context.rb', line 69

def inline_query
  data = update["inline_query"]
  InlineQuery.new(data, api: @api) if data
end

#managed_bot_updatedObject



139
140
141
142
# File 'lib/gruubY/context.rb', line 139

def managed_bot_updated
  data = @update["managed_bot_updated"] || @update["managed_bot"]
  wrap_type("ManagedBotUpdated", data)
end

#messageObject



17
18
19
20
# File 'lib/gruubY/context.rb', line 17

def message
  data = primary_message_payload
  Message.new(data, api: @api) if data
end

#message_reactionObject



99
100
101
102
# File 'lib/gruubY/context.rb', line 99

def message_reaction
  data = @update["message_reaction"] || @update["message_reaction_updated"]
  wrap_type("MessageReactionUpdated", data)
end

#message_reaction_countObject



94
95
96
97
# File 'lib/gruubY/context.rb', line 94

def message_reaction_count
  data = @update["message_reaction_count"] || @update["message_reaction_count_updated"]
  wrap_type("MessageReactionCountUpdated", data)
end

#poll(question, options) ⇒ Object



60
61
62
# File 'lib/gruubY/context.rb', line 60

def poll(question, options)
  @api.send_poll(chat_id, question, options)
end

#poll_updateObject



119
120
121
122
# File 'lib/gruubY/context.rb', line 119

def poll_update
  data = @update["poll"]
  wrap_type("Poll", data)
end

#pre_checkout_queryObject



74
75
76
77
# File 'lib/gruubY/context.rb', line 74

def pre_checkout_query
  data = update["pre_checkout_query"]
  PreCheckoutQuery.new(data, api: @api) if data
end

#purchased_paid_mediaObject



124
125
126
127
# File 'lib/gruubY/context.rb', line 124

def purchased_paid_media
  data = @update["purchased_paid_media"]
  wrap_type("PurchasedPaidMedia", data)
end

#raw(method, params = {}) ⇒ Object



179
180
181
# File 'lib/gruubY/context.rb', line 179

def raw(method, params = {})
  @api.raw(method, params)
end

#reply(text, keyboard = nil) ⇒ Object



164
165
166
167
168
# File 'lib/gruubY/context.rb', line 164

def reply(text, keyboard = nil)
  params = {}
  params[:reply_markup] = keyboard if keyboard
  @api.send_message(chat_id, text, **params)
end

#session_dataObject



152
153
154
155
156
# File 'lib/gruubY/context.rb', line 152

def session_data
  return {} unless @session && user

  @session.get(user.id)
end

#set_session(value) ⇒ Object



158
159
160
161
162
# File 'lib/gruubY/context.rb', line 158

def set_session(value)
  return unless @session && user

  @session.set(user.id, value)
end

#shipping_queryObject



79
80
81
82
# File 'lib/gruubY/context.rb', line 79

def shipping_query
  data = update["shipping_query"]
  ShippingQuery.new(data, api: @api) if data
end

#story_updateObject



129
130
131
132
# File 'lib/gruubY/context.rb', line 129

def story_update
  data = @update["story"]
  Story.new(data, api: @api) if data
end

#textObject



47
48
49
# File 'lib/gruubY/context.rb', line 47

def text
  primary_message_payload&.dig("text")
end

#userObject



148
149
150
# File 'lib/gruubY/context.rb', line 148

def user
  from
end

#user_statusObject



134
135
136
137
# File 'lib/gruubY/context.rb', line 134

def user_status
  data = @update["user_status"] || @update["user"]
  User.new(data, api: @api) if data
end