# Astaroth
- Что такое аттрибуты?
- Список аттрибутов
-
Для классов
-
Для методов
-
Указывается вначале класса, является событием, которое присылает вконтакте
use Astaroth\Attribute\ClassAttribute\Event;
use Astaroth\Foundation\Enums\Events;
#[Event(Events::MESSAGE_NEW)]
class HelloWorld
{
//...
}
Указывается для метода
Эксклюзивно только для message_new события
Необходим для обработки событий которые происходят в беседах
use Astaroth\Attribute\ClassAttribute\Event;
use Astaroth\Foundation\Enums\Events;
use Astaroth\Commands\BaseCommands;
use Astaroth\Attribute\Method\Action;
#[Event(Events::MESSAGE_EVENT)]
class HelloWorld extends BaseCommands
{
#[Action(Action::CHAT_TITLE_UPDATE)]
public function titleUpdate(Data $data): void
{
$this->message($data->getPeerId(), "Классное название");
}}
Указывается вначале класса
Необходим для определения типа конференции
Можно указать id объектов для которых будут доступны методы
use Astaroth\Attribute\ClassAttribute\Conversation;
use Astaroth\Attribute\ClassAttribute\Event;
use Astaroth\Foundation\Enums\Events;
#[Event(Events::MESSAGE_EVENT)]
#[Conversation(Conversation::PERSONAL_DIALOG, 418618, 1234)]
class Foo
{
//...
}
Указывается для метода
Необходим для определения текста сообщения
Можно указать тип валидации
use Astaroth\DataFetcher\Events\MessageNew as Data;
use Astaroth\Attribute\ClassAttribute\Event;
use Astaroth\Foundation\Enums\Events;
use Astaroth\Attribute\Method\Message;
#[Event(Events::MESSAGE_EVENT)]
class Bar
{
#[Message("содержится ли подстрока в другой подстроке", Message::CONTAINS)]
#[Message("заканчивается на", Message::END_AS)]
#[Message("начинается с", Message::START_AS)]
#[Message("похоже на", Message::SIMILAR_TO)]
#[Message("без валидации, сравнивает точь в точь")]
public function method(Data $data){//...}
}
То же самое что и аттрибут выше, но поиск по регулярным выражениям
use Astaroth\Attribute\Method\MessageRegex;
use Astaroth\DataFetcher\Events\MessageNew as Data;
use Astaroth\Attribute\ClassAttribute\Event;
use Astaroth\Foundation\Enums\Events;
#[Event(Events::MESSAGE_NEW)]
class Bar
{
#[MessageRegex('%(?:youtube(?:-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i')]
public function method(Data $data, MessageRegex $regex){
$videoId = $regex[0];
}
}
Указывается для метода
Необходим для определения типа вложения
Можно указать количество вложений для определённого аттрибута
use Astaroth\DataFetcher\Events\MessageNew as Data;
use Astaroth\Attribute\Method\Attachment;
use Astaroth\Attribute\ClassAttribute\Event;
use Astaroth\Foundation\Enums\Events;
#[Event(Events::MESSAGE_NEW)]
class Foo
{
#[Attachment(Attachment::AUDIO)]
#[Attachment(Attachment::AUDIO_MESSAGE)]
#[Attachment(Attachment::DOC)]
#[Attachment(Attachment::GRAFFITI)]
#[Attachment(Attachment::PHOTO, 2)]
#[Attachment(Attachment::STICKER)]
#[Attachment(Attachment::VIDEO)]
public function method(Data $data)
}
Указывается для метода
Необходим для определения payload (нажатие на кнопку)
Указывается массив
Можно указать тип сравнения
Payload::STRICT //строгое сравнение "точь-в-точь"
Payload::KEY_EXISTS // проверка на содержания ключей
Payload::CONTAINS // проверка на схожесть массивов
use Astaroth\Attribute\Method\Payload;
use Astaroth\DataFetcher\Events\MessageNew as Data;
use Astaroth\Attribute\ClassAttribute\Event;
use Astaroth\Foundation\Enums\Events;
#[Event(Events::MESSAGE_NEW)]
class Foo
{
#[Payload(["button" => 12])]
#[Payload(["button" => ["user_id" => 418618]])]
#[Payload(["button" => ["user_id" => 418618]], Payload::KEY_EXISTS)]
public function method(Data $data){}
}
Указывается для метода
Необходим, для того чтобы узнать поддерживает ли клиент пользователя новые фичи вконтакте (https://vk.com/faq15855)
Для button_actions указывается массив
use Astaroth\Attribute\Method\ClientInfo;
use Astaroth\DataFetcher\Events\MessageNew as Data;
use Astaroth\Attribute\ClassAttribute\Event;
use Astaroth\Foundation\Enums\Events;
#[Event(Events::MESSAGE_NEW)]
class Foo
{
#[ClientInfo([ClientInfo::CALLBACK, ClientInfo::VKPAY], keyboard: true, inline_keyboard: true)]
public function method(Data $data){//...}
}
Указывается как для метода, так и для класса
Доступ к классу\вызов метода если в сессии есть это состояние\n
use Astaroth\Attribute\General\State;
use Astaroth\Attribute\Method\Message;
use Astaroth\Attribute\ClassAttribute\Event;
use Astaroth\Foundation\Enums\Events;
#[Event(Events::MESSAGE_NEW)]
#[State("buy")]
class Foo
{
#[Message("носки", Message::CONTAINS)]
public function method(){}
}
Указывается как для метода, так и для класса
Описывает свойство класса или аттрибута
use Astaroth\Attribute\General\Description;
use Astaroth\Attribute\Method\Message;
use Astaroth\Attribute\ClassAttribute\Event;
use Astaroth\Foundation\Enums\Events;
#[Event(Events::MESSAGE_NEW)]
#[Description("описание для класса")]
class Foo
{
#[Message("носки", Message::CONTAINS)]
#[Description("описание метода\команды")]
public function method(Description $description)
{
$description->getDescription() //описание метода\команды
}
}
Указывается как для метода
Выполняет данный метод при любом условии
Если указать в параметрах, то можно получить полезные данные для дебага
use Astaroth\Attribute\Method\Debug;
use Astaroth\Attribute\Method\Message;
use Astaroth\Attribute\ClassAttribute\Event;
use Astaroth\Foundation\Enums\Events;
#[Event(Events::MESSAGE_NEW)]
class Foo
{
#[Message("носки", Message::CONTAINS)]
#[Debug]
public function method(Debug $debug)
{
$debug->getResult() //описание метода\команды
}
}