Update::getInlineQuery()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Zanzara\Telegram\Type;
6
7
use Zanzara\Telegram\Type\Passport\PassportData;
8
use Zanzara\Telegram\Type\Poll\Poll;
9
use Zanzara\Telegram\Type\Poll\PollAnswer;
10
use Zanzara\Telegram\Type\Shipping\PreCheckoutQuery;
11
use Zanzara\Telegram\Type\Shipping\ShippingQuery;
12
use Zanzara\Telegram\Type\Shipping\SuccessfulPayment;
13
14
/**
15
 * This object represents an incoming update.At most one of the optional parameters can be present in any given update.
16
 *
17
 * More on https://core.telegram.org/bots/api#update
18
 */
19
class Update implements \JsonSerializable
20
{
21
22
    /**
23
     * The update's unique identifier. Update identifiers start from a certain positive number and increase sequentially.
24
     * This ID becomes especially handy if you're using Webhooks, since it allows you to ignore repeated updates or to
25
     * restore the correct update sequence, should they get out of order. If there are no new updates for at least a
26
     * week, then identifier of the next update will be chosen randomly instead of sequentially.
27
     *
28
     * @var int
29
     */
30
    private $update_id;
31
32
    /**
33
     * Optional. New incoming message of any kind -- text, photo, sticker, etc.
34
     *
35
     * @var Message|null
36
     */
37
    private $message;
38
39
    /**
40
     * Optional. New version of a message that is known to the bot and was edited
41
     *
42
     * @var EditedMessage|null
43
     */
44
    private $edited_message;
45
46
    /**
47
     * Optional. New incoming channel post of any kind -- text, photo, sticker, etc.
48
     *
49
     * @var ChannelPost|null
50
     */
51
    private $channel_post;
52
53
    /**
54
     * Optional. New version of a channel post that is known to the bot and was edited
55
     *
56
     * @var EditedChannelPost|null
57
     */
58
    private $edited_channel_post;
59
60
    /**
61
     * Optional. New incoming inline query
62
     *
63
     * @var InlineQuery|null
64
     */
65
    private $inline_query;
66
67
    /**
68
     * Optional. The result of an inline query that was chosen by a user and sent to their chat partner. Please see our
69
     * documentation on the feedback collecting for details on how to enable these updates for your bot.
70
     *
71
     * @var ChosenInlineResult|null
72
     */
73
    private $chosen_inline_result;
74
75
    /**
76
     * Optional. New incoming callback query
77
     *
78
     * @var CallbackQuery|null
79
     */
80
    private $callback_query;
81
82
    /**
83
     * Optional. New incoming shipping query. Only for invoices with flexible price
84
     *
85
     * @var ShippingQuery|null
86
     */
87
    private $shipping_query;
88
89
    /**
90
     * Optional. New incoming pre-checkout query. Contains full information about checkout
91
     *
92
     * @var PreCheckoutQuery|null
93
     */
94
    private $pre_checkout_query;
95
96
    /**
97
     * Optional. New poll state. Bots receive only updates about stopped polls and polls, which are sent by the bot
98
     *
99
     * @var Poll|null
100
     */
101
    private $poll;
102
103
    /**
104
     * Optional. A user changed their answer in a non-anonymous poll. Bots receive new votes only in polls that were sent by
105
     * the bot itself.
106
     *
107
     * @var PollAnswer|null
108
     */
109
    private $poll_answer;
110
111
    /**
112
     * @var string
113
     */
114
    private $updateType;
115
116
    /**
117
     * @var User|null
118
     */
119
    private $effectiveUser;
120
121
    /**
122
     * @var Chat|null
123
     */
124
    private $effectiveChat;
125
126
    /**
127
     * @return int
128
     */
129
    public function getUpdateId(): int
130
    {
131
        return $this->update_id;
132
    }
133
134
    /**
135
     * @param int $update_id
136
     */
137
    public function setUpdateId(int $update_id): void
138
    {
139
        $this->update_id = $update_id;
140
    }
141
142
    /**
143
     * @return Message|null
144
     */
145
    public function getMessage(): ?Message
146
    {
147
        return $this->message;
148
    }
149
150
    /**
151
     * @param Message|null $message
152
     */
153
    public function setMessage(?Message $message): void
154
    {
155
        $this->message = $message;
156
    }
157
158
    /**
159
     * @return EditedMessage|null
160
     */
161
    public function getEditedMessage(): ?EditedMessage
162
    {
163
        return $this->edited_message;
164
    }
165
166
    /**
167
     * @param EditedMessage|null $edited_message
168
     */
169
    public function setEditedMessage(?EditedMessage $edited_message): void
170
    {
171
        $this->edited_message = $edited_message;
172
    }
173
174
    /**
175
     * @return ChannelPost|null
176
     */
177
    public function getChannelPost(): ?ChannelPost
178
    {
179
        return $this->channel_post;
180
    }
181
182
    /**
183
     * @param ChannelPost|null $channel_post
184
     */
185
    public function setChannelPost(?ChannelPost $channel_post): void
186
    {
187
        $this->channel_post = $channel_post;
188
    }
189
190
    /**
191
     * @return EditedChannelPost|null
192
     */
193
    public function getEditedChannelPost(): ?EditedChannelPost
194
    {
195
        return $this->edited_channel_post;
196
    }
197
198
    /**
199
     * @param EditedChannelPost|null $edited_channel_post
200
     */
201
    public function setEditedChannelPost(?EditedChannelPost $edited_channel_post): void
202
    {
203
        $this->edited_channel_post = $edited_channel_post;
204
    }
205
206
    /**
207
     * @return InlineQuery|null
208
     */
209
    public function getInlineQuery(): ?InlineQuery
210
    {
211
        return $this->inline_query;
212
    }
213
214
    /**
215
     * @param InlineQuery|null $inline_query
216
     */
217
    public function setInlineQuery(?InlineQuery $inline_query): void
218
    {
219
        $this->inline_query = $inline_query;
220
    }
221
222
    /**
223
     * @return ChosenInlineResult|null
224
     */
225
    public function getChosenInlineResult(): ?ChosenInlineResult
226
    {
227
        return $this->chosen_inline_result;
228
    }
229
230
    /**
231
     * @param ChosenInlineResult|null $chosen_inline_result
232
     */
233
    public function setChosenInlineResult(?ChosenInlineResult $chosen_inline_result): void
234
    {
235
        $this->chosen_inline_result = $chosen_inline_result;
236
    }
237
238
    /**
239
     * @return CallbackQuery|null
240
     */
241
    public function getCallbackQuery(): ?CallbackQuery
242
    {
243
        return $this->callback_query;
244
    }
245
246
    /**
247
     * @param CallbackQuery|null $callback_query
248
     */
249
    public function setCallbackQuery(?CallbackQuery $callback_query): void
250
    {
251
        $this->callback_query = $callback_query;
252
    }
253
254
    /**
255
     * @return ShippingQuery|null
256
     */
257
    public function getShippingQuery(): ?ShippingQuery
258
    {
259
        return $this->shipping_query;
260
    }
261
262
    /**
263
     * @param ShippingQuery|null $shipping_query
264
     */
265
    public function setShippingQuery(?ShippingQuery $shipping_query): void
266
    {
267
        $this->shipping_query = $shipping_query;
268
    }
269
270
    /**
271
     * @return PreCheckoutQuery|null
272
     */
273
    public function getPreCheckoutQuery(): ?PreCheckoutQuery
274
    {
275
        return $this->pre_checkout_query;
276
    }
277
278
    /**
279
     * @param PreCheckoutQuery|null $pre_checkout_query
280
     */
281
    public function setPreCheckoutQuery(?PreCheckoutQuery $pre_checkout_query): void
282
    {
283
        $this->pre_checkout_query = $pre_checkout_query;
284
    }
285
286
    /**
287
     * @return Poll|null
288
     */
289
    public function getPoll(): ?Poll
290
    {
291
        return $this->poll;
292
    }
293
294
    /**
295
     * @param Poll|null $poll
296
     */
297
    public function setPoll(?Poll $poll): void
298
    {
299
        $this->poll = $poll;
300
    }
301
302
    /**
303
     * @return PollAnswer|null
304
     */
305
    public function getPollAnswer(): ?PollAnswer
306
    {
307
        return $this->poll_answer;
308
    }
309
310
    /**
311
     * @param PollAnswer|null $poll_answer
312
     */
313
    public function setPollAnswer(?PollAnswer $poll_answer): void
314
    {
315
        $this->poll_answer = $poll_answer;
316
    }
317
318
    /**
319
     * @return string
320
     */
321
    public function getUpdateType(): string
322
    {
323
        return $this->updateType;
324
    }
325
326
    /**
327
     *
328
     */
329
    public function detectUpdateType()
330
    {
331
        if ($this->message && $this->message->getSuccessfulPayment()) {
332
            $this->updateType = SuccessfulPayment::class;
333
            $this->effectiveUser = $this->message->getFrom();
334
            $this->effectiveChat = $this->message->getChat();
335
        } else if ($this->message && $this->message->getReplyToMessage()) {
336
            $this->updateType = ReplyToMessage::class;
337
            $this->effectiveUser = $this->message->getFrom();
338
            $this->effectiveChat = $this->message->getChat();
339
        } else if ($this->message && $this->message->getPassportData()) {
340
            $this->updateType = PassportData::class;
341
            $this->effectiveUser = $this->message->getFrom();
342
            $this->effectiveChat = $this->message->getChat();
343
        } else if ($this->message) {
344
            $this->updateType = Message::class;
345
            $this->effectiveUser = $this->message->getFrom();
346
            $this->effectiveChat = $this->message->getChat();
347
        } else if ($this->edited_message) {
348
            $this->updateType = EditedMessage::class;
349
            $this->effectiveUser = $this->edited_message->getFrom();
350
            $this->effectiveChat = $this->edited_message->getChat();
351
        } else if ($this->channel_post) {
352
            $this->updateType = ChannelPost::class;
353
            $this->effectiveUser = $this->channel_post->getFrom();
354
            $this->effectiveChat = $this->channel_post->getChat();
355
        } else if ($this->edited_channel_post) {
356
            $this->updateType = EditedChannelPost::class;
357
            $this->effectiveUser = $this->edited_channel_post->getFrom();
358
            $this->effectiveChat = $this->edited_channel_post->getChat();
359
        } else if ($this->callback_query) {
360
            $this->updateType = CallbackQuery::class;
361
            $this->effectiveUser = $this->callback_query->getFrom();
362
            $this->effectiveChat = $this->callback_query->getMessage()
363
                ? $this->callback_query->getMessage()->getChat()
364
                : null;
365
        } else if ($this->shipping_query) {
366
            $this->updateType = ShippingQuery::class;
367
            $this->effectiveUser = $this->shipping_query->getFrom();
368
        } else if ($this->pre_checkout_query) {
369
            $this->updateType = PreCheckoutQuery::class;
370
            $this->effectiveUser = $this->pre_checkout_query->getFrom();
371
        } else if ($this->inline_query) {
372
            $this->updateType = InlineQuery::class;
373
            $this->effectiveUser = $this->inline_query->getFrom();
374
        } else if ($this->chosen_inline_result) {
375
            $this->updateType = ChosenInlineResult::class;
376
            $this->effectiveUser = $this->chosen_inline_result->getFrom();
377
        } else if ($this->poll) {
378
            $this->updateType = Poll::class;
379
        } else if ($this->poll_answer) {
380
            $this->updateType = PollAnswer::class;
381
            $this->effectiveUser = $this->poll_answer->getUser();
382
        }
383
    }
384
385
    /**
386
     * @return User|null
387
     */
388
    public function getEffectiveUser(): ?User
389
    {
390
        return $this->effectiveUser;
391
    }
392
393
    /**
394
     * @param User|null $effectiveUser
395
     */
396
    public function setEffectiveUser(?User $effectiveUser): void
397
    {
398
        $this->effectiveUser = $effectiveUser;
399
    }
400
401
    /**
402
     * @return Chat|null
403
     */
404
    public function getEffectiveChat(): ?Chat
405
    {
406
        return $this->effectiveChat;
407
    }
408
409
    /**
410
     * @param Chat|null $effectiveChat
411
     */
412
    public function setEffectiveChat(?Chat $effectiveChat): void
413
    {
414
        $this->effectiveChat = $effectiveChat;
415
    }
416
417
    public function __toString()
418
    {
419
        return json_encode($this, JSON_PRETTY_PRINT);
420
    }
421
422
    /**
423
     * @inheritDoc
424
     */
425
    public function jsonSerialize()
426
    {
427
        return [
428
            'update_id' => $this->update_id,
429
            'update_type' => $this->updateType,
430
            'chat' => $this->effectiveChat,
431
            'user' => $this->effectiveUser
432
        ];
433
    }
434
435
}
436