Skip to content

Commit d1c9a63

Browse files
Merge pull request #10269 from nextcloud/bugfix/noid/fix-bots-on-systemmessages
fix(bots): Fix some system messages for bots
2 parents bd997d3 + 4ba00e6 commit d1c9a63

2 files changed

Lines changed: 50 additions & 18 deletions

File tree

lib/Chat/Parser/SystemMessage.php

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ public function parseMessage(Message $chatMessage): void {
258258
}
259259
} elseif ($currentUserIsActor) {
260260
$parsedMessage = $this->l->t('You added {user}');
261-
} elseif (!$participant->isGuest() && $currentActorId === $parsedParameters['user']['id']) {
261+
} elseif ($participant && !$participant->isGuest() && $currentActorId === $parsedParameters['user']['id']) {
262262
$parsedMessage = $this->l->t('{actor} added you');
263263
if ($cliIsActor) {
264264
$parsedMessage = $this->l->t('An administrator added you');
@@ -278,7 +278,7 @@ public function parseMessage(Message $chatMessage): void {
278278
$parsedMessage = $this->l->t('{actor} removed {user}');
279279
if ($currentUserIsActor) {
280280
$parsedMessage = $this->l->t('You removed {user}');
281-
} elseif (!$participant->isGuest() && $currentActorId === $parsedParameters['user']['id']) {
281+
} elseif ($participant && !$participant->isGuest() && $currentActorId === $parsedParameters['user']['id']) {
282282
$parsedMessage = $this->l->t('{actor} removed you');
283283
if ($cliIsActor) {
284284
$parsedMessage = $this->l->t('An administrator removed you');
@@ -344,7 +344,7 @@ public function parseMessage(Message $chatMessage): void {
344344
$parsedMessage = $this->l->t('{actor} promoted {user} to moderator');
345345
if ($currentUserIsActor) {
346346
$parsedMessage = $this->l->t('You promoted {user} to moderator');
347-
} elseif (!$participant->isGuest() && $currentActorId === $parsedParameters['user']['id']) {
347+
} elseif ($participant && !$participant->isGuest() && $currentActorId === $parsedParameters['user']['id']) {
348348
$parsedMessage = $this->l->t('{actor} promoted you to moderator');
349349
if ($cliIsActor) {
350350
$parsedMessage = $this->l->t('An administrator promoted you to moderator');
@@ -357,7 +357,7 @@ public function parseMessage(Message $chatMessage): void {
357357
$parsedMessage = $this->l->t('{actor} demoted {user} from moderator');
358358
if ($currentUserIsActor) {
359359
$parsedMessage = $this->l->t('You demoted {user} from moderator');
360-
} elseif (!$participant->isGuest() && $currentActorId === $parsedParameters['user']['id']) {
360+
} elseif ($participant && !$participant->isGuest() && $currentActorId === $parsedParameters['user']['id']) {
361361
$parsedMessage = $this->l->t('{actor} demoted you from moderator');
362362
if ($cliIsActor) {
363363
$parsedMessage = $this->l->t('An administrator demoted you from moderator');
@@ -370,7 +370,7 @@ public function parseMessage(Message $chatMessage): void {
370370
$parsedMessage = $this->l->t('{actor} promoted {user} to moderator');
371371
if ($currentUserIsActor) {
372372
$parsedMessage = $this->l->t('You promoted {user} to moderator');
373-
} elseif ($participant->isGuest() && $currentActorId === $parsedParameters['user']['id']) {
373+
} elseif ($participant && $participant->isGuest() && $currentActorId === $parsedParameters['user']['id']) {
374374
$parsedMessage = $this->l->t('{actor} promoted you to moderator');
375375
if ($cliIsActor) {
376376
$parsedMessage = $this->l->t('An administrator promoted you to moderator');
@@ -383,7 +383,7 @@ public function parseMessage(Message $chatMessage): void {
383383
$parsedMessage = $this->l->t('{actor} demoted {user} from moderator');
384384
if ($currentUserIsActor) {
385385
$parsedMessage = $this->l->t('You demoted {user} from moderator');
386-
} elseif ($participant->isGuest() && $currentActorId === $parsedParameters['user']['id']) {
386+
} elseif ($participant && $participant->isGuest() && $currentActorId === $parsedParameters['user']['id']) {
387387
$parsedMessage = $this->l->t('{actor} demoted you from moderator');
388388
if ($cliIsActor) {
389389
$parsedMessage = $this->l->t('An administrator demoted you from moderator');
@@ -603,17 +603,17 @@ public function parseDeletedMessage(Message $chatMessage): void {
603603
}
604604

605605
/**
606-
* @param Participant $participant
606+
* @param ?Participant $participant
607607
* @param string $shareId
608608
* @return array
609609
* @throws InvalidPathException
610610
* @throws NotFoundException
611611
* @throws ShareNotFound
612612
*/
613-
protected function getFileFromShare(Participant $participant, string $shareId): array {
613+
protected function getFileFromShare(?Participant $participant, string $shareId): array {
614614
$share = $this->shareProvider->getShareById((int) $shareId);
615615

616-
if (!$participant->isGuest()) {
616+
if ($participant && !$participant->isGuest()) {
617617
if ($share->getShareOwner() !== $participant->getAttendee()->getActorId()) {
618618
$userFolder = $this->rootFolder->getUserFolder($participant->getAttendee()->getActorId());
619619
if ($userFolder instanceof Node) {

tests/php/Chat/Parser/SystemMessageTest.php

Lines changed: 41 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,14 @@ public function dataParseMessage(): array {
267267
'You removed {user}',
268268
['actor' => ['id' => 'actor', 'type' => 'user'], 'user' => ['id' => 'user', 'type' => 'user']],
269269
],
270+
['user_added', ['user' => 'user'], null,
271+
'{actor} added {user}',
272+
['actor' => ['id' => 'actor', 'type' => 'user'], 'user' => ['id' => 'user', 'type' => 'user']],
273+
],
274+
['user_removed', ['user' => 'user'], null,
275+
'{actor} removed {user}',
276+
['actor' => ['id' => 'actor', 'type' => 'user'], 'user' => ['id' => 'user', 'type' => 'user']],
277+
],
270278
['group_added', ['group' => 'g1'], 'recipient',
271279
'{actor} added group {group}',
272280
['actor' => ['id' => 'actor', 'type' => 'user'], 'group' => ['id' => 'g1', 'type' => 'group']],
@@ -339,6 +347,22 @@ public function dataParseMessage(): array {
339347
'You demoted {user} from moderator',
340348
['actor' => ['id' => 'actor', 'type' => 'user'], 'user' => ['id' => 'moderator', 'type' => 'guest']],
341349
],
350+
['moderator_promoted', ['user' => 'user'], null,
351+
'{actor} promoted {user} to moderator',
352+
['actor' => ['id' => 'actor', 'type' => 'user'], 'user' => ['id' => 'user', 'type' => 'user']],
353+
],
354+
['moderator_demoted', ['user' => 'user'], null,
355+
'{actor} demoted {user} from moderator',
356+
['actor' => ['id' => 'actor', 'type' => 'user'], 'user' => ['id' => 'user', 'type' => 'user']],
357+
],
358+
['guest_moderator_promoted', ['session' => 'moderator'], null,
359+
'{actor} promoted {user} to moderator',
360+
['actor' => ['id' => 'actor', 'type' => 'user'], 'user' => ['id' => 'moderator', 'type' => 'guest']],
361+
],
362+
['guest_moderator_demoted', ['session' => 'moderator'], null,
363+
'{actor} demoted {user} from moderator',
364+
['actor' => ['id' => 'actor', 'type' => 'user'], 'user' => ['id' => 'moderator', 'type' => 'guest']],
365+
],
342366
['file_shared', ['share' => '42'], 'recipient',
343367
'{file}',
344368
['actor' => ['id' => 'actor', 'type' => 'user'], 'file' => ['id' => 'file-from-share']],
@@ -430,14 +454,16 @@ public function dataParseMessage(): array {
430454
* @dataProvider dataParseMessage
431455
* @param string $message
432456
* @param array $parameters
433-
* @param $recipientId
457+
* @param string|null $recipientId
434458
* @param string $expectedMessage
435459
* @param array $expectedParameters
436460
*/
437-
public function testParseMessage(string $message, array $parameters, $recipientId, string $expectedMessage, array $expectedParameters) {
461+
public function testParseMessage(string $message, array $parameters, ?string $recipientId, string $expectedMessage, array $expectedParameters) {
438462
/** @var Participant|MockObject $participant */
439463
$participant = $this->createMock(Participant::class);
440-
if ($recipientId && strpos($recipientId, 'guest::') !== false) {
464+
if ($recipientId === null) {
465+
$participant = null;
466+
} elseif ($recipientId && strpos($recipientId, 'guest::') !== false) {
441467
$attendee = Attendee::fromRow([
442468
'actor_type' => 'guests',
443469
'actor_id' => substr($recipientId, strlen('guest::')),
@@ -448,6 +474,12 @@ public function testParseMessage(string $message, array $parameters, $recipientI
448474
$participant->expects($this->atLeastOnce())
449475
->method('isGuest')
450476
->willReturn(true);
477+
$participant->expects($this->any())
478+
->method('getAttendee')
479+
->willReturn($attendee);
480+
$participant->expects($this->any())
481+
->method('getSession')
482+
->willReturn($session);
451483
} else {
452484
$participant->expects($this->atLeastOnce())
453485
->method('isGuest')
@@ -457,13 +489,13 @@ public function testParseMessage(string $message, array $parameters, $recipientI
457489
'actor_id' => $recipientId,
458490
]);
459491
$session = null;
492+
$participant->expects($this->any())
493+
->method('getAttendee')
494+
->willReturn($attendee);
495+
$participant->expects($this->any())
496+
->method('getSession')
497+
->willReturn($session);
460498
}
461-
$participant->expects($this->any())
462-
->method('getAttendee')
463-
->willReturn($attendee);
464-
$participant->expects($this->any())
465-
->method('getSession')
466-
->willReturn($session);
467499

468500
/** @var IComment|MockObject $comment */
469501
$comment = $this->createMock(IComment::class);

0 commit comments

Comments
 (0)