feat: send internal notification to discord

This commit is contained in:
Andras Bacsai 2023-08-16 16:03:30 +02:00
parent d15e1bcc7d
commit 3ab38e69fc
5 changed files with 51 additions and 6 deletions

View File

@ -29,6 +29,7 @@ public function handle(): void
try {
$this->cleanup_waitlist();
} catch (\Exception $e) {
send_internal_notification('CleanupInstanceStuffsJob failed with error: ' . $e->getMessage());
ray($e->getMessage());
}
}

View File

@ -52,6 +52,7 @@ public function handle()
->html((string) $mail->render())
);
} catch (\Throwable $th) {
send_internal_notification('SendConfirmationForWaitlistJob failed with error: ' . $th->getMessage());
ray($th->getMessage());
throw $th;
}

View File

@ -0,0 +1,27 @@
<?php
namespace App\Notifications\Internal;
use App\Notifications\Channels\DiscordChannel;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Notification;
class GeneralNotification extends Notification implements ShouldQueue
{
use Queueable;
public function __construct(public string $message)
{}
public function via(object $notifiable): array
{
$channels[] = DiscordChannel::class;
return $channels;
}
public function toDiscord(): string
{
return $this->message;
}
}

View File

@ -1,6 +1,9 @@
<?php
use App\Models\InstanceSettings;
use App\Models\Team;
use App\Notifications\Internal\GeneralNotification;
use DanHarrin\LivewireRateLimiting\Exceptions\TooManyRequestsException;
use Illuminate\Database\QueryException;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Route;
@ -8,7 +11,6 @@
use Nubs\RandomNameGenerator\All;
use Poliander\Cron\CronExpression;
use Visus\Cuid2\Cuid2;
use DanHarrin\LivewireRateLimiting\Exceptions\TooManyRequestsException;
function application_configuration_dir(): string
{
@ -35,7 +37,7 @@ function is_instance_admin()
return auth()->user()?->isInstanceAdmin();
}
function general_error_handler(Throwable|null $err = null, $that = null, $isJson = false, $customErrorMessage = null): mixed
function general_error_handler(Throwable | null $err = null, $that = null, $isJson = false, $customErrorMessage = null): mixed
{
try {
ray('ERROR OCCURRED: ' . $err->getMessage());
@ -47,9 +49,9 @@ function general_error_handler(Throwable|null $err = null, $that = null, $isJson
} else {
throw new Exception($customErrorMessage ?? $err->errorInfo[2]);
}
} elseif($err instanceof TooManyRequestsException){
} elseif ($err instanceof TooManyRequestsException) {
throw new Exception($customErrorMessage ?? "Too many requests. Please try again in {$err->secondsUntilAvailable} seconds.");
}else {
} else {
throw new Exception($customErrorMessage ?? $err->getMessage());
}
} catch (Throwable $error) {
@ -104,7 +106,7 @@ function is_transactional_emails_active(): bool
return data_get(InstanceSettings::get(), 'smtp_enabled');
}
function set_transanctional_email_settings(InstanceSettings|null $settings = null): void
function set_transanctional_email_settings(InstanceSettings | null $settings = null): void
{
if (!$settings) {
$settings = InstanceSettings::get();
@ -194,3 +196,12 @@ function validate_cron_expression($expression_to_validate): bool
}
return $isValid;
}
function send_internal_notification(string $message): void
{
try {
$team = Team::find(0);
$team->notify(new GeneralNotification('👀 Internal notifications: ' . $message));
} catch (\Throwable $th) {
ray($th->getMessage());
}
}

View File

@ -174,7 +174,6 @@
return general_error_handler(err: $e);
}
});
Route::get('/waitlist/confirm', function () {
$email = request()->get('email');
$confirmation_code = request()->get('confirmation_code');
@ -184,6 +183,7 @@
if ($found && !$found->verified && $found->created_at > now()->subMinutes(config('constants.waitlist.confirmation_valid_for_minutes'))) {
$found->verified = true;
$found->save();
send_internal_notification('Waitlist confirmed: ' . $email);
return 'Thank you for confirming your email address. We will notify you when you are next in line.';
}
return redirect()->route('dashboard');
@ -199,6 +199,7 @@
$found = Waitlist::where('uuid', $confirmation_code)->where('email', $email)->first();
if ($found && !$found->verified) {
$found->delete();
send_internal_notification('Waitlist cancelled: ' . $email);
return 'Your email address has been removed from the waitlist.';
}
return redirect()->route('dashboard');
@ -250,6 +251,7 @@
case 'subscription_updated':
case 'subscription_resumed':
case 'subscription_unpaused':
send_internal_notification('Subscription created or updated: ' . $subscription_id . ' for team ' . $team_id . ' with status ' . $status);
$subscription = Subscription::updateOrCreate([
'team_id' => $team_id,
], [
@ -271,6 +273,7 @@
case 'subscription_expired':
$subscription = Subscription::where('team_id', $team_id)->where('lemon_order_id', $order_id)->first();
if ($subscription) {
send_internal_notification('Subscription cancelled or paused: ' . $subscription_id . ' for team ' . $team_id . ' with status ' . $status);
$subscription->update([
'lemon_status' => $status,
'lemon_trial_ends_at' => $trial_ends_at,
@ -281,11 +284,13 @@
}
break;
}
$webhook->update([
'status' => 'success',
]);
} catch (Exception $e) {
ray($e->getMessage());
send_internal_notification('Subscription webhook failed: ' . $e->getMessage());
$webhook->update([
'status' => 'failed',
'failure_reason' => $e->getMessage(),