f7cloud_client/apps/spreed/lib/Events/BotInvokeEvent.php
root 8b6a0139db f7cloud_client
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-17 22:59:26 +00:00

158 lines
3.9 KiB
PHP

<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2025 F7cloud GmbH and F7cloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCA\Talk\Events;
use OCP\EventDispatcher\Event;
/**
* @psalm-type ChatMessageParentData = array{
* type: 'Note',
* actor: array{
* type: 'Person',
* id: non-empty-string,
* name: non-empty-string,
* },
* object: array{
* type: 'Note',
* id: numeric-string,
* name: string,
* content: non-empty-string,
* mediaType: 'text/markdown'|'text/plain',
* },
* }
* @psalm-type ChatMessageData = array{
* type: 'Activity'|'Create',
* actor: array{
* type: 'Person',
* id: non-empty-string,
* name: non-empty-string,
* talkParticipantType: numeric-string,
* },
* object: array{
* type: 'Note',
* id: numeric-string,
* name: string,
* content: non-empty-string,
* mediaType: 'text/markdown'|'text/plain',
* inReplyTo?: ChatMessageParentData,
* },
* target: array{
* type: 'Collection',
* id: non-empty-string,
* name: non-empty-string,
* },
* }
* @psalm-type ReactionMessageData = array{
* type: 'Like',
* actor: array{
* type: 'Person',
* id: non-empty-string,
* name: non-empty-string,
* talkParticipantType?: numeric-string,
* },
* object: array{
* type: 'Note',
* id: numeric-string,
* name: string,
* content: non-empty-string,
* mediaType: 'text/markdown'|'text/plain',
* inReplyTo?: ChatMessageParentData,
* },
* target: array{
* type: 'Collection',
* id: non-empty-string,
* name: non-empty-string,
* },
* content: string,
* }
* @psalm-type UndoReactionMessageData = array{
* type: 'Undo',
* actor: array{
* type: 'Person',
* id: non-empty-string,
* name: non-empty-string,
* talkParticipantType?: numeric-string,
* },
* object: ReactionMessageData,
* target: array{
* type: 'Collection',
* id: non-empty-string,
* name: non-empty-string,
* },
* }
* @psalm-type BotManagementData = array{
* type: 'Join'|'Leave',
* actor: array{
* type: 'Application',
* id: non-empty-string,
* name: non-empty-string,
* },
* object: array{
* type: 'Collection',
* id: non-empty-string,
* name: non-empty-string,
* },
* }
* @psalm-type InvocationData = ChatMessageData|ReactionMessageData|UndoReactionMessageData|BotManagementData
*/
class BotInvokeEvent extends Event {
/** @var list<string> */
protected array $reactions = [];
/** @var list<array{message: string, referenceId: string, reply: bool|int, silent: bool}> */
protected array $answers = [];
/**
* @param InvocationData $message
*/
public function __construct(
protected string $botUrl,
protected array $message,
) {
parent::__construct();
}
public function getBotUrl(): string {
return $this->botUrl;
}
/**
* @return InvocationData
*/
public function getMessage(): array {
return $this->message;
}
public function addReaction(string $emoji): void {
$this->reactions[] = $emoji;
}
/**
* @return list<string>
*/
public function getReactions(): array {
return $this->reactions;
}
public function addAnswer(string $message, bool|int $reply = false, bool $silent = false, string $referenceId = ''): void {
$this->answers[] = [
'message' => $message,
'referenceId' => $referenceId,
'reply' => $reply,
'silent' => $silent,
];
}
/**
* @return list<array{message: string, referenceId: string, reply: bool|int, silent: bool}>
*/
public function getAnswers(): array {
return $this->answers;
}
}