Файл: upload/core/vendor/longman/telegram-bot/src/Commands/SystemCommand.php
Строк: 155
<?php
/**
* This file is part of the TelegramBot package.
*
* (c) Avtandil Kikabidze aka LONGMAN <akalongman@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace LongmanTelegramBotCommands;
use LongmanTelegramBotConversation;
use LongmanTelegramBotEntitiesServerResponse;
use LongmanTelegramBotExceptionTelegramException;
use LongmanTelegramBotRequest;
abstract class SystemCommand extends Command
{
/**
* @var bool Try to execute any deprecated system command.
*/
public static $execute_deprecated = false;
/**
* @{inheritdoc}
*
* Set to empty string to disallow users calling system commands.
*/
protected $usage = '';
/**
* A system command just executes
*
* Although system commands should just work and return a successful ServerResponse,
* each system command can override this method to add custom functionality.
*
* @return ServerResponse
*/
public function execute(): ServerResponse
{
// System command, return empty ServerResponse by default
return Request::emptyResponse();
}
/**
* Method to execute any active conversation.
*
* @return ServerResponse|null
* @throws TelegramException
* @internal
*/
protected function executeActiveConversation(): ?ServerResponse
{
$message = $this->getMessage() ?: $this->getEditedMessage() ?: $this->getChannelPost() ?: $this->getEditedChannelPost();
if ($message === null) {
return null;
}
$user = $message->getFrom();
$chat = $message->getChat();
if ($user === null || $chat === null) {
return null;
}
// If a conversation is busy, execute the conversation command after handling the message.
$conversation = new Conversation($user->getId(), $chat->getId());
// Fetch conversation command if it exists and execute it.
if ($conversation->exists() && ($command = $conversation->getCommand())) {
return $this->getTelegram()->executeCommand($command);
}
return null;
}
/**
* BC helper method to execute deprecated system commands.
*
* @return ServerResponse|null
* @throws TelegramException
* @internal
*/
protected function executeDeprecatedSystemCommand(): ?ServerResponse
{
$message = $this->getMessage() ?: $this->getEditedMessage() ?: $this->getChannelPost() ?: $this->getEditedChannelPost();
if ($message === null) {
return null;
}
// List of service messages previously handled internally.
$service_message_getters = [
'newchatmembers' => 'getNewChatMembers',
'leftchatmember' => 'getLeftChatMember',
'newchattitle' => 'getNewChatTitle',
'newchatphoto' => 'getNewChatPhoto',
'deletechatphoto' => 'getDeleteChatPhoto',
'groupchatcreated' => 'getGroupChatCreated',
'supergroupchatcreated' => 'getSupergroupChatCreated',
'channelchatcreated' => 'getChannelChatCreated',
'migratefromchatid' => 'getMigrateFromChatId',
'migratetochatid' => 'getMigrateToChatId',
'pinnedmessage' => 'getPinnedMessage',
'successfulpayment' => 'getSuccessfulPayment',
];
foreach ($service_message_getters as $command => $service_message_getter) {
// Let's check if this message is a service message.
if ($message->$service_message_getter() === null) {
continue;
}
// Make sure the command exists otherwise GenericCommand would be executed.
if ($this->getTelegram()->getCommandObject($command) === null) {
break;
}
return $this->getTelegram()->executeCommand($command);
}
return null;
}
}