2023-02-13 23:10:39 -05:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
2024-10-02 00:18:12 -04:00
|
|
|
namespace TgBotLib\Objects;
|
2023-02-13 23:10:39 -05:00
|
|
|
|
2024-10-02 15:04:29 -04:00
|
|
|
use InvalidArgumentException;
|
|
|
|
use TgBotLib\Enums\Types\ChatMemberStatus;
|
2023-02-13 23:10:39 -05:00
|
|
|
use TgBotLib\Interfaces\ObjectTypeInterface;
|
2024-10-02 15:04:29 -04:00
|
|
|
use TgBotLib\Objects\ChatMember\ChatMemberAdministrator;
|
|
|
|
use TgBotLib\Objects\ChatMember\ChatMemberBanned;
|
|
|
|
use TgBotLib\Objects\ChatMember\ChatMemberLeft;
|
|
|
|
use TgBotLib\Objects\ChatMember\ChatMemberMember;
|
|
|
|
use TgBotLib\Objects\ChatMember\ChatMemberOwner;
|
|
|
|
use TgBotLib\Objects\ChatMember\ChatMemberRestricted;
|
|
|
|
|
|
|
|
abstract class ChatMember implements ObjectTypeInterface
|
2023-02-13 23:10:39 -05:00
|
|
|
{
|
|
|
|
/**
|
2024-10-02 15:04:29 -04:00
|
|
|
* @var ChatMemberStatus
|
2023-02-13 23:10:39 -05:00
|
|
|
*/
|
2024-10-02 15:04:29 -04:00
|
|
|
protected ChatMemberStatus $status;
|
2023-02-13 23:10:39 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The member's status in the chat, can be “creator”, “administrator”, “member”, “restricted”, “left” or “kicked”
|
|
|
|
*
|
2024-10-02 15:04:29 -04:00
|
|
|
* @return ChatMemberStatus
|
2023-02-13 23:10:39 -05:00
|
|
|
*/
|
2024-10-02 15:04:29 -04:00
|
|
|
public function getStatus(): ChatMemberStatus
|
2023-02-13 23:10:39 -05:00
|
|
|
{
|
|
|
|
return $this->status;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2024-10-02 15:04:29 -04:00
|
|
|
* @inheritDoc
|
2023-02-13 23:10:39 -05:00
|
|
|
*/
|
2024-10-02 15:04:29 -04:00
|
|
|
public abstract function toArray(): array;
|
2023-02-13 23:10:39 -05:00
|
|
|
|
|
|
|
/**
|
2024-10-02 15:04:29 -04:00
|
|
|
* @inheritDoc
|
2023-02-13 23:10:39 -05:00
|
|
|
*/
|
2024-10-03 21:14:27 -04:00
|
|
|
public static function fromArray(?array $data): ?ChatMember
|
2023-02-13 23:10:39 -05:00
|
|
|
{
|
2024-10-03 21:14:27 -04:00
|
|
|
if($data === null)
|
|
|
|
{
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
2024-10-02 15:04:29 -04:00
|
|
|
if(!isset($data['status']))
|
|
|
|
{
|
|
|
|
throw new InvalidArgumentException('ChatMember expected status');
|
|
|
|
}
|
2023-02-13 23:10:39 -05:00
|
|
|
|
2024-10-02 15:04:29 -04:00
|
|
|
return match(ChatMemberStatus::tryFrom($data['status']))
|
|
|
|
{
|
|
|
|
ChatMemberStatus::ADMINISTRATOR => ChatMemberAdministrator::fromArray($data),
|
|
|
|
ChatMemberStatus::KICKED => ChatMemberBanned::fromArray($data),
|
|
|
|
ChatMemberStatus::LEFT => ChatMemberLeft::fromArray($data),
|
|
|
|
ChatMemberStatus::MEMBER => ChatMemberMember::fromArray($data),
|
|
|
|
ChatMemberStatus::CREATOR => ChatMemberOwner::fromArray($data),
|
|
|
|
ChatMemberStatus::RESTRICTED => ChatMemberRestricted::fromArray($data),
|
|
|
|
default => throw new InvalidArgumentException('Unexpected status for ChatMember')
|
|
|
|
};
|
2023-02-13 23:10:39 -05:00
|
|
|
}
|
|
|
|
}
|