|
|
@@ -0,0 +1,59 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+
|
|
|
+namespace App\Jobs;
|
|
|
+
|
|
|
+use Illuminate\Bus\Queueable;
|
|
|
+use Illuminate\Contracts\Queue\ShouldQueue;
|
|
|
+use Illuminate\Foundation\Bus\Dispatchable;
|
|
|
+use Illuminate\Queue\InteractsWithQueue;
|
|
|
+use Illuminate\Queue\SerializesModels;
|
|
|
+use Telegram\Bot\Api;
|
|
|
+use Illuminate\Support\Facades\Log;
|
|
|
+use App\Services\BaseService;
|
|
|
+use DragonCode\PrettyArray\Services\Formatters\Base;
|
|
|
+
|
|
|
+class SendTelegramGroupMessageJob implements ShouldQueue
|
|
|
+{
|
|
|
+ use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
|
|
+
|
|
|
+ public $chatId;
|
|
|
+ public $text;
|
|
|
+ public $buttons;
|
|
|
+ public $image;
|
|
|
+ public $isTop;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param string $chatId
|
|
|
+ * @param string $text
|
|
|
+ * @param array $buttons
|
|
|
+ * @param string|null $image
|
|
|
+ */
|
|
|
+ public function __construct( $text, $buttons = [], $image = null ,$isTop = false)
|
|
|
+ {
|
|
|
+ $this->text = $text;
|
|
|
+ $this->buttons = $buttons;
|
|
|
+ $this->image = $image;
|
|
|
+ $this->isTop = $isTop;
|
|
|
+ }
|
|
|
+
|
|
|
+ public function handle()
|
|
|
+ {
|
|
|
+ try {
|
|
|
+ BaseService::bettingGroupNotice($this->text, $this->buttons, $this->image,$this->isTop);
|
|
|
+ } catch (\Telegram\Bot\Exceptions\TelegramResponseException $e) {
|
|
|
+ // 捕获 Too Many Requests
|
|
|
+ if (str_contains($e->getMessage(), 'Too Many Requests')) {
|
|
|
+ preg_match('/retry after (\d+)/', $e->getMessage(), $matches);
|
|
|
+ $retryAfter = $matches[1] ?? 5;
|
|
|
+ Log::warning("Telegram 429 限制,等待 {$retryAfter} 秒重试...");
|
|
|
+ sleep($retryAfter + 1);
|
|
|
+
|
|
|
+ // 重试
|
|
|
+ $this->handle();
|
|
|
+ } else {
|
|
|
+ Log::error('Telegram 消息发送失败: '.$e->getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|