mirror of
https://github.com/pelican-dev/panel.git
synced 2026-07-15 21:48:08 +03:00
Fix discord webhooks (#2412)
This commit is contained in:
@@ -64,6 +64,8 @@ class CreateWebhookConfiguration extends CreateRecord
|
||||
}
|
||||
|
||||
$flags = collect($data['flags'] ?? [])->reduce(fn ($carry, $bit) => $carry | $bit, 0);
|
||||
$selected = data_get($data, 'allowed_mentions', []);
|
||||
$allowedMentions = $selected ? ['parse' => array_values($selected)] : [];
|
||||
|
||||
$tmp = collect([
|
||||
'username' => data_get($data, 'username'),
|
||||
@@ -74,7 +76,7 @@ class CreateWebhookConfiguration extends CreateRecord
|
||||
'embeds' => $embeds,
|
||||
'thread_name' => data_get($data, 'thread_name'),
|
||||
'flags' => $flags,
|
||||
'allowed_mentions' => data_get($data, 'allowed_mentions', []),
|
||||
'allowed_mentions' => $allowedMentions,
|
||||
])->filter(fn ($key) => !empty($key))->all();
|
||||
|
||||
unset($data['username'], $data['avatar_url'], $data['content'], $data['image'], $data['thumbnail'], $data['embeds'], $data['thread_name'], $data['flags'], $data['allowed_mentions']);
|
||||
|
||||
@@ -56,6 +56,8 @@ class EditWebhookConfiguration extends EditRecord
|
||||
}
|
||||
|
||||
$flags = collect($data['flags'] ?? [])->reduce(fn ($carry, $bit) => $carry | $bit, 0);
|
||||
$selected = data_get($data, 'allowed_mentions', []);
|
||||
$allowedMentions = $selected ? ['parse' => array_values($selected)] : [];
|
||||
|
||||
$tmp = collect([
|
||||
'username' => data_get($data, 'username'),
|
||||
@@ -66,7 +68,7 @@ class EditWebhookConfiguration extends EditRecord
|
||||
'embeds' => $embeds,
|
||||
'thread_name' => data_get($data, 'thread_name'),
|
||||
'flags' => $flags,
|
||||
'allowed_mentions' => data_get($data, 'allowed_mentions', []),
|
||||
'allowed_mentions' => $allowedMentions,
|
||||
])->filter(fn ($key) => !empty($key))->all();
|
||||
|
||||
unset($data['username'], $data['avatar_url'], $data['content'], $data['image'], $data['thumbnail'], $data['embeds'], $data['thread_name'], $data['flags'], $data['allowed_mentions']);
|
||||
@@ -110,7 +112,7 @@ class EditWebhookConfiguration extends EditRecord
|
||||
'embeds' => $embeds,
|
||||
'thread_name' => data_get($data, 'payload.thread_name'),
|
||||
'flags' => $flags,
|
||||
'allowed_mentions' => data_get($data, 'payload.allowed_mentions'),
|
||||
'allowed_mentions' => data_get($data, 'payload.allowed_mentions.parse'),
|
||||
])->filter(fn ($key) => !empty($key))->all();
|
||||
|
||||
unset($data['payload'], $data['created_at'], $data['updated_at'], $data['deleted_at']);
|
||||
|
||||
@@ -51,6 +51,13 @@ class ProcessWebhook implements ShouldQueue
|
||||
}
|
||||
}
|
||||
$data['embeds'] = $embeds;
|
||||
if (isset($data['flags'])) {
|
||||
$data['flags'] &= ~(1 << 2);
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($data['content']) && $data['content'] === '') {
|
||||
unset($data['content']);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -175,17 +175,29 @@ class DispatchWebhooks
|
||||
protected function handleGlobalWebhooks(ActivityLogged $activityLogged): void
|
||||
{
|
||||
$eventName = $activityLogged->model->event;
|
||||
$activityLoggedClass = ActivityLogged::class;
|
||||
|
||||
if (!$this->eventIsWatched($eventName)) {
|
||||
return;
|
||||
$matchingHooks = collect();
|
||||
|
||||
if ($this->eventIsWatched($eventName)) {
|
||||
$matchingHooks = $matchingHooks->merge(
|
||||
cache()->rememberForever("webhooks.$eventName", fn () => WebhookConfiguration::query()
|
||||
->where('scope', WebhookScope::Global)
|
||||
->whereJsonContains('events', $eventName)
|
||||
->get())
|
||||
);
|
||||
}
|
||||
|
||||
$matchingHooks = cache()->rememberForever("webhooks.$eventName", function () use ($eventName) {
|
||||
return WebhookConfiguration::query()
|
||||
$matchingHooks = $matchingHooks->merge(
|
||||
cache()->rememberForever("webhooks.$activityLoggedClass", fn () => WebhookConfiguration::query()
|
||||
->where('scope', WebhookScope::Global)
|
||||
->whereJsonContains('events', $eventName)
|
||||
->get();
|
||||
});
|
||||
->whereJsonContains('events', $activityLoggedClass)
|
||||
->get())
|
||||
)->unique('id');
|
||||
|
||||
if ($matchingHooks->isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
$webhookData = $this->buildActivityPayload($activityLogged);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user