diff --git a/CHANGELOG.md b/CHANGELOG.md index cf4d516..4af04f4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 * Added Story object * Added Giveaway object * Added GiveawayWinners object + * Added ExternalReplyInfo object ### Changed * Refactored the way HTTP requests are handled & methods are called diff --git a/src/TgBotLib/Objects/Telegram/ExternalReplyInfo.php b/src/TgBotLib/Objects/Telegram/ExternalReplyInfo.php new file mode 100644 index 0000000..46de31c --- /dev/null +++ b/src/TgBotLib/Objects/Telegram/ExternalReplyInfo.php @@ -0,0 +1,348 @@ +origin; + } + + /** + * Optional. Chat the original message belongs to. Available only if the chat is a supergroup or a channel. + * + * @return Chat|null + */ + public function getChat(): ?Chat + { + return $this->chat; + } + + /** + * Optional. Unique message identifier inside the original chat. Available only if the original chat is a + * supergroup or a channel. + * + * @return int|null + */ + public function getMessageId(): ?int + { + return $this->message_id; + } + + /** + * Optional. Options used for link preview generation for the original message, if it is a text message + * + * @return LinkPreviewOptions|null + */ + public function getLinkPreviewOptions(): ?LinkPreviewOptions + { + return $this->link_preview_options; + } + + /** + * Optional. Message is an animation, information about the animation + * + * @return Animation|null + */ + public function getAnimation(): ?Animation + { + return $this->animation; + } + + /** + * Optional. Message is an audio file, information about the file + * + * @return Audio|null + */ + public function getAudio(): ?Audio + { + return $this->audio; + } + + /** + * Optional. Message is a general file, information about the file + * + * @return Document|null + */ + public function getDocument(): ?Document + { + return $this->document; + } + + /** + * Optional. Message contains paid media; information about the paid media + * + * @return PaidMediaInfo|null + */ + public function getPaidMedia(): ?PaidMediaInfo + { + return $this->paid_media; + } + + /** + * Optional. Message is a photo, available sizes of the photo + * + * @return PhotoSize[]|null + */ + public function getPhoto(): ?array + { + return $this->photo; + } + + /** + * Optional. Message is a sticker, information about the sticker + * + * @return Sticker|null + */ + public function getSticker(): ?Sticker + { + return $this->sticker; + } + + /** + * Optional. Message is a forwarded story + * + * @return Story|null + */ + public function getStory(): ?Story + { + return $this->story; + } + + /** + * Optional. Message is a video, information about the video + * + * @return Video|null + */ + public function getVideo(): ?Video + { + return $this->video; + } + + /** + * Optional. Message is a video note, information about the video message + * + * @return VideoNote|null + */ + public function getVideoNote(): ?VideoNote + { + return $this->video_note; + } + + /** + * Optional. Message is a voice message, information about the file + * + * @return Voice|null + */ + public function getVoice(): ?Voice + { + return $this->voice; + } + + /** + * Optional. True, if the message media is covered by a spoiler animation + * + * @return bool + */ + public function isHasMediaSpoiler(): bool + { + return $this->has_media_spoiler; + } + + /** + * Optional. Message is a shared contact, information about the contact + * + * @return Contact|null + */ + public function getContact(): ?Contact + { + return $this->contact; + } + + /** + * Optional. Message is a dice with random value + * + * @return Dice|null + */ + public function getDice(): ?Dice + { + return $this->dice; + } + + /** + * Optional. Message is a game, information about the game. + * + * @see https://core.telegram.org/bots/api#games + * @return Game|null + */ + public function getGame(): ?Game + { + return $this->game; + } + + /** + * Optional. Message is a scheduled giveaway, information about the giveaway + * + * @return Giveaway|null + */ + public function getGiveaway(): ?Giveaway + { + return $this->giveaway; + } + + /** + * Optional. A giveaway with public winners was completed + * + * @return GiveawayWinners|null + */ + public function getGiveawayWinners(): ?GiveawayWinners + { + return $this->giveaway_winners; + } + + /** + * Optional. Message is an invoice for a payment, information about the invoice. + * + * @see https://core.telegram.org/bots/api#payments + * @return Invoice|null + */ + public function getInvoice(): ?Invoice + { + return $this->invoice; + } + + /** + * Optional. Message is a shared location, information about the location + * + * @return Location|null + */ + public function getLocation(): ?Location + { + return $this->location; + } + + /** + * Optional. Message is a native poll, information about the poll + * + * @return Poll|null + */ + public function getPoll(): ?Poll + { + return $this->poll; + } + + /** + * Optional. Message is a venue, information about the venue + * + * @return Venue|null + */ + public function getVenue(): ?Venue + { + return $this->venue; + } + + /** + * @inheritDoc + */ + public function toArray(): array + { + return [ + 'origin' => $this->origin?->toArray(), + 'chat' => $this->chat?->toArray(), + 'message_id' => $this->message_id, + 'link_preview_options' => $this->link_preview_options?->toArray(), + 'animation' => $this->animation?->toArray(), + 'audio' => $this->audio?->toArray(), + 'document' => $this->document?->toArray(), + 'paid_media' => $this->paid_media?->toArray(), + 'photo' => array_map(fn(PhotoSize $photoSize) => $photoSize->toArray(), $this->photo), + 'sticker' => $this->sticker?->toArray(), + 'story' => $this->story?->toArray(), + 'video' => $this->video?->toArray(), + 'video_note' => $this->video_note?->toArray(), + 'voice' => $this->voice?->toArray(), + 'has_media_spoiler' => $this->has_media_spoiler ?? false, + 'contact' => $this->contact?->toArray(), + 'dice' => $this->dice?->toArray(), + 'game' => $this->game?->toArray(), + 'giveaway' => $this->giveaway?->toArray(), + 'giveaway_winners' => $this->giveaway_winners?->toArray(), + 'invoice' => $this->invoice?->toArray(), + 'location' => $this->location?->toArray(), + 'poll' => $this->poll?->toArray(), + 'venue' => $this->venue?->toArray() + ]; + } + + /** + * @inheritDoc + * @noinspection DuplicatedCode + */ + public static function fromArray(array $data): ObjectTypeInterface + { + $object = new self(); + + $object->origin = MessageOrigin::fromArray($data['origin']); + $object->chat = isset($data['chat']) ? Chat::fromArray($data['chat']) : null; + $object->message_id = $data['message_id'] ?? null; + $object->link_preview_options = isset($data['link_preview_options']) ? LinkPreviewOptions::fromArray($data['link_preview_options']) : null; + $object->animation = isset($data['animation']) ? Animation::fromArray($data['animation']) : null; + $object->audio = isset($data['audio']) ? Audio::fromArray($data['audio']) : null; + $object->document = isset($data['document']) ? Document::fromArray($data['document']) : null; + $object->paid_media = isset($data['paid_media']) ? PaidMediaInfo::fromArray($data['paid_media']) : null; + $object->photo = isset($data['photo']) ? array_map(fn(array $photo) => PhotoSize::fromArray($photo), $data['photo']) : null; + $object->sticker = isset($data['sticker']) ? Sticker::fromArray($data['sticker']) : null; + $object->story = isset($data['story']) ? Story::fromArray($data['story']) : null; + $object->video = isset($data['video']) ? Video::fromArray($data['video']) : null; + $object->video_note = isset($data['video_note']) ? VideoNote::fromArray($data['video_note']) : null; + $object->voice = isset($data['voice']) ? Voice::fromArray($data['voice']) : null; + $object->has_media_spoiler = $data['has_media_spoiler'] ?? false; + $object->contact = isset($data['contact']) ? Contact::fromArray($data['contact']) : null; + $object->dice = isset($data['dice']) ? Dice::fromArray($data['dice']) : null; + $object->game = isset($data['game']) ? Game::fromArray($data['game']) : null; + $object->giveaway = isset($data['giveaway']) ? Giveaway::fromArray($data['giveaway']) : null; + $object->giveaway_winners = isset($data['giveaway_winners']) ? GiveawayWinners::fromArray($data['giveaway_winners']) : null; + $object->invoice = isset($data['invoice']) ? Invoice::fromArray($data['invoice']) : null; + $object->location = isset($data['location']) ? Location::fromArray($data['location']) : null; + $object->poll = isset($data['poll']) ? Poll::fromArray($data['poll']) : null; + $object->venue = isset($data['venue']) ? Venue::fromArray($data['venue']) : null; + + return $object; + } +} \ No newline at end of file