Autosave: 20260215-034434

This commit is contained in:
Flatlogic Bot 2026-02-15 03:44:34 +00:00
parent 23a545d08d
commit 90e20a836c
4 changed files with 580 additions and 191 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 553 KiB

301
bot.php
View File

@ -76,10 +76,11 @@ function safeJoin(Discord $discord, $channel, $interaction = null, $onSuccess =
}
$vc = $discord->getVoiceClient($guildId);
$isReady = $vc ? (method_exists($vc, 'isReady') ? $vc->isReady() : ($vc->ready ?? false)) : false;
// If we are already in the correct channel, just proceed
if ($vc && (string)$vc->channel->id === (string)$channel->id) {
logToDb("Already in channel {$channel->name}.");
// If we are already in the correct channel AND it's ready, just proceed
if ($vc && (string)$vc->channel->id === (string)$channel->id && $isReady) {
logToDb("Already in channel {$channel->name} and ready.");
if ($onSuccess) $onSuccess($vc);
return;
}
@ -88,57 +89,102 @@ function safeJoin(Discord $discord, $channel, $interaction = null, $onSuccess =
$joiningGuilds[$guildId] = true;
if ($interaction) {
try {
$interaction->updateOriginalResponse(MessageBuilder::new()->setContent("⏳ Initializing voice connection..."));
} catch (\Throwable $e) {}
safeUpdate($interaction, MessageBuilder::new()->setContent("⏳ Initializing voice connection..."));
}
$doJoin = function() use ($discord, $channel, $interaction, $onSuccess, $guildId) {
global $joiningGuilds;
// Final sanity check: if Discord still thinks we have a VC, try to close it again
$existingVc = $discord->getVoiceClient($guildId);
if ($existingVc) {
logToDb("Still have an existing VC for guild $guildId during doJoin. Attempting force close.");
try { $existingVc->close(); } catch (\Throwable $e) {}
}
logToDb("Executing joinVoiceChannel for guild $guildId, channel " . $channel->name);
$timeoutTimer = $discord->getLoop()->addTimer(25.0, function() use ($guildId, $interaction) {
$timeoutTimer = $discord->getLoop()->addTimer(45.0, function() use ($guildId, $interaction, $discord) {
global $joiningGuilds;
if (isset($joiningGuilds[$guildId]) && $joiningGuilds[$guildId] === true) {
logToDb("Safety timeout: Clearing stuck join state for guild $guildId");
unset($joiningGuilds[$guildId]);
// Try to clean up the potentially stuck VC
$vc = $discord->getVoiceClient($guildId);
if ($vc) {
try { $vc->close(); } catch (\Throwable $e) {}
}
if ($interaction) {
try {
$interaction->updateOriginalResponse(MessageBuilder::new()->setContent("⚠️ Joining timed out. Discord's voice servers are slow. Please try again."));
} catch (\Throwable $e) {}
safeUpdate($interaction, MessageBuilder::new()->setContent("⚠️ Joining timed out. Discord's voice servers are slow or unreachable. Try `/out` and try again."));
}
}
});
$discord->joinVoiceChannel($channel, false, true)->then(function (VoiceClient $vc) use ($onSuccess, $guildId, $discord, $interaction, $timeoutTimer) {
$discord->joinVoiceChannel($channel, false, false)->then(function (VoiceClient $vc) use ($onSuccess, $guildId, $discord, $interaction, $timeoutTimer) {
global $joiningGuilds;
logToDb("Successfully joined " . $vc->channel->name);
$discord->getLoop()->cancelTimer($timeoutTimer);
unset($joiningGuilds[$guildId]);
logToDb("Joined channel " . $vc->channel->name . ". Waiting for ready state...");
if ($onSuccess) $onSuccess($vc);
$checkReady = function() use ($vc, $onSuccess, $guildId, $discord, $timeoutTimer) {
global $joiningGuilds;
$isReady = method_exists($vc, 'isReady') ? $vc->isReady() : ($vc->ready ?? false);
if ($isReady) {
logToDb("VoiceClient is ready for " . $vc->channel->name);
$discord->getLoop()->cancelTimer($timeoutTimer);
unset($joiningGuilds[$guildId]);
if ($onSuccess) $onSuccess($vc);
return true;
}
return false;
};
if (!$checkReady()) {
$vc->once('ready', function() use ($checkReady) {
$checkReady();
});
// Backup check every 2 seconds
$periodic = $discord->getLoop()->addPeriodicTimer(2.0, function($timer) use ($checkReady, $discord) {
if ($checkReady()) {
$discord->getLoop()->cancelTimer($timer);
}
});
// Ensure periodic timer is cancelled if timeout hits
$discord->getLoop()->addTimer(46.0, function() use ($discord, $periodic) {
$discord->getLoop()->cancelTimer($periodic);
});
}
}, function ($e) use ($interaction, $guildId, $discord, $timeoutTimer) {
global $joiningGuilds;
unset($joiningGuilds[$guildId]);
$discord->getLoop()->cancelTimer($timeoutTimer);
logToDb("Error joining VC in guild $guildId: " . $e->getMessage(), 'error');
if (strpos($e->getMessage(), 'more than one voice channel') !== false) {
logToDb("Detected out-of-sync voice client. Attempting force reset for next time.");
// Try to find it and close it
$vc = $discord->getVoiceClient($guildId);
if ($vc) {
try { $vc->close(); } catch (\Throwable $e2) {}
}
}
if ($interaction) {
try {
$interaction->updateOriginalResponse(MessageBuilder::new()->setContent("❌ Error joining voice channel: " . $e->getMessage()));
} catch (\Throwable $err) {}
safeUpdate($interaction, MessageBuilder::new()->setContent("❌ Error joining voice channel: " . $e->getMessage() . ". Please try again in a few seconds."));
}
});
};
// If we have a VC in a different channel, close it first
// If we have a VC, always close it if it's not the "perfect" one we already checked
if ($vc) {
logToDb("Closing connection in different channel: " . $vc->channel->name);
$vc->close();
// Give it a bit of time to clear state
$discord->getLoop()->addTimer(1.5, $doJoin);
logToDb("Closing connection for guild $guildId before re-joining (Current Channel: " . ($vc->channel->name ?? 'Unknown') . ")");
try { $vc->close(); } catch (\Throwable $e) {}
// Give it time to clear state
$discord->getLoop()->addTimer(2.0, $doJoin);
} else {
logToDb("No existing VC for guild $guildId. Joining fresh.");
$doJoin();
}
}
@ -161,6 +207,20 @@ function logToDb($message, $level = 'info') {
}
}
/**
* Safely update interaction response with error handling for promises.
*/
function safeUpdate($interaction, $message) {
if (!$interaction) return;
try {
$interaction->updateOriginalResponse($message)->then(null, function($e) {
echo "DEBUG: Failed to update interaction: " . $e->getMessage() . "\n";
});
} catch (\Throwable $e) {
echo "DEBUG: Exception while updating interaction: " . $e->getMessage() . "\n";
}
}
$discord->on('ready', function (Discord $discord) {
echo "Bot is ready as " . $discord->user->username . "#" . $discord->user->discriminator . PHP_EOL;
logToDb("Bot is online and ready: " . $discord->user->username);
@ -176,18 +236,21 @@ $discord->on('ready', function (Discord $discord) {
$channel = $discord->getChannel($state->channel_id);
$channelName = $channel ? $channel->name : $state->channel_id;
}
logToDb("Bot voice state updated: Channel=" . $channelName);
logToDb("Bot voice state updated: Channel=" . $channelName . " in Guild=" . $state->guild_id);
// If the bot was disconnected or moved
// If the bot was disconnected
if ($state->channel_id === null) {
logToDb("Bot was disconnected from voice channel. Cleaning up...");
global $joiningGuilds;
unset($joiningGuilds[$state->guild_id]);
$isJoining = isset($joiningGuilds[$state->guild_id]) && $joiningGuilds[$state->guild_id] === true;
// Ensure VoiceClient is closed if it still exists
$vc = $discord->getVoiceClient($state->guild_id);
if ($vc) {
try { $vc->close(); } catch (\Throwable $e) {}
logToDb("Bot disconnected from voice in guild " . $state->guild_id . ". (Currently joining: " . ($isJoining ? 'Yes' : 'No') . ")");
if (!$isJoining) {
// Only clean up if we aren't actively trying to join right now
$vc = $discord->getVoiceClient($state->guild_id);
if ($vc) {
try { $vc->close(); } catch (\Throwable $e) {}
}
}
}
}
@ -268,24 +331,20 @@ function streamAudio(VoiceClient $vc, string $url, $interaction = null) {
echo "DEBUG: streamAudio called for URL: $url\n";
echo "Streaming audio: $url\n";
if ($interaction) {
try {
$interaction->updateOriginalResponse(MessageBuilder::new()->setContent("🎶 Loading audio info from link..."));
} catch (\Throwable $e) {
echo "Failed to update interaction in streamAudio: " . $e->getMessage() . "\n";
}
safeUpdate($interaction, MessageBuilder::new()->setContent("🎶 Loading audio info from link..."));
}
$userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36";
$safeUrl = escapeshellarg($url);
// Base yt-dlp command with common stability flags
$baseYtDlp = "yt-dlp --no-warnings --no-check-certificates --js-runtimes node --force-ipv4 --geo-bypass --no-playlist --no-cache-dir --print \"%(title)s\" --print \"%(url)s\" -f \"bestaudio[ext=m4a]/bestaudio/best\" --user-agent \"$userAgent\" --extractor-args \"youtube:player-client=web,mweb,tv\"";
// Improved player-client order and added more logging
$baseYtDlp = "yt-dlp --no-warnings --no-check-certificates --js-runtimes node --force-ipv4 --geo-bypass --no-playlist --no-cache-dir --print \"%(title)s\" --print \"%(url)s\" -f \"bestaudio[ext=m4a]/bestaudio/best\" --extractor-args \"youtube:player-client=ios,android,web,mweb,tv\"";
// Handle Spotify differently by searching on YouTube
if (strpos($url, 'spotify.com') !== false) {
logToDb("Spotify link detected, searching on YouTube...");
if ($interaction) {
$interaction->updateOriginalResponse(MessageBuilder::new()->setContent("🎶 Spotify link detected, searching for audio on YouTube..."));
safeUpdate($interaction, MessageBuilder::new()->setContent("🎶 Spotify link detected, searching for audio on YouTube..."));
}
$safeSearch = escapeshellarg("ytsearch1:" . $url);
$cmd = "$baseYtDlp $safeSearch";
@ -300,7 +359,7 @@ function streamAudio(VoiceClient $vc, string $url, $interaction = null) {
} catch (\Exception $e) {
echo "Failed to start yt-dlp process: " . $e->getMessage() . "\n";
if ($interaction) {
$interaction->updateOriginalResponse(MessageBuilder::new()->setContent("❌ Failed to start audio downloader."));
safeUpdate($interaction, MessageBuilder::new()->setContent("❌ Failed to start audio downloader."));
}
return;
}
@ -310,7 +369,7 @@ function streamAudio(VoiceClient $vc, string $url, $interaction = null) {
echo "yt-dlp process timed out after 60s\n";
$process->terminate(SIGKILL);
if ($interaction) {
$interaction->updateOriginalResponse(MessageBuilder::new()->setContent("❌ Audio loading timed out (60s)."));
safeUpdate($interaction, MessageBuilder::new()->setContent("❌ Audio loading timed out (60s)."));
}
}
});
@ -349,14 +408,14 @@ function streamAudio(VoiceClient $vc, string $url, $interaction = null) {
if (empty($streamUrl)) {
echo "Failed to find valid stream URL in yt-dlp output for $url\n";
if ($interaction) {
$interaction->updateOriginalResponse(MessageBuilder::new()->setContent("❌ Failed to parse audio stream URL."));
safeUpdate($interaction, MessageBuilder::new()->setContent("❌ Failed to parse audio stream URL."));
}
return;
}
echo "Title: $title, Stream URL found: " . substr($streamUrl, 0, 60) . "...\n";
if ($interaction) {
$interaction->updateOriginalResponse(MessageBuilder::new()->setContent("🎶 **Now Playing:** $title"));
safeUpdate($interaction, MessageBuilder::new()->setContent("🎶 **Now Playing:** $title"));
}
$playAttempted = false;
@ -372,13 +431,13 @@ function streamAudio(VoiceClient $vc, string $url, $interaction = null) {
if (!$isReady) {
if ($retryCount < $maxRetries) {
$retryCount++;
$vc->discord->getLoop()->addTimer(2.0, function() use (&$playFunc) {
$vc->discord->getLoop()->addTimer(3.0, function() use (&$playFunc) {
$playFunc();
});
} else {
echo "Failed to play $title after $maxRetries retries: Voice client never became ready.\n";
logToDb("Failed to play $title: Voice client never became ready.", 'error');
if ($interaction) {
$interaction->updateOriginalResponse(MessageBuilder::new()->setContent("Failed to play: Voice client timed out waiting to be ready."));
safeUpdate($interaction, MessageBuilder::new()->setContent("Voice connection failed to stabilize. Try using `/out` then play again."));
}
}
return;
@ -387,23 +446,22 @@ function streamAudio(VoiceClient $vc, string $url, $interaction = null) {
if ($playAttempted && !$isFallback) return;
$playAttempted = true;
echo "Calling playFile for $title...\n";
logToDb("Calling playFile for $title...");
$vc->playFile($streamUrl)->then(function() use ($title) {
echo "Finished playing $title\n";
logToDb("Finished playing $title");
}, function($e) use ($vc, $streamUrl, $title, &$playFunc, &$playAttempted, &$retryCount, $maxRetries, $interaction) {
echo "Error playing $title: " . $e->getMessage() . "\n";
logToDb("Error playing $title: " . $e->getMessage(), 'error');
if ($retryCount < $maxRetries && (strpos($e->getMessage(), 'ready') !== false || strpos($e->getMessage(), 'connected') !== false || strpos($e->getMessage(), 'Voice Client') !== false)) {
if ($retryCount < $maxRetries && (stripos($e->getMessage(), 'ready') !== false || stripos($e->getMessage(), 'connected') !== false || stripos($e->getMessage(), 'Voice Client') !== false)) {
$retryCount++;
$playAttempted = false;
echo "Retrying $title (attempt $retryCount/$maxRetries) in 3 seconds...\n";
$vc->discord->getLoop()->addTimer(3.0, function() use (&$playFunc) {
echo "Retrying $title (attempt $retryCount/$maxRetries) in 4 seconds...\n";
$vc->discord->getLoop()->addTimer(4.0, function() use (&$playFunc) {
$playFunc();
});
} else {
if ($interaction) {
$interaction->updateOriginalResponse(MessageBuilder::new()->setContent("Error playing audio: " . $e->getMessage()));
safeUpdate($interaction, MessageBuilder::new()->setContent("Audio playback error: " . $e->getMessage()));
}
}
});
@ -432,8 +490,10 @@ function streamAudio(VoiceClient $vc, string $url, $interaction = null) {
$isReady = method_exists($vc, 'isReady') ? $vc->isReady() : ($vc->ready ?? false);
if (!$isReady) {
echo "Timed out waiting for voice client to be ready for $title after 60s\n";
logToDb("VoiceClient ready timeout for $title. Closing VC.", 'error');
try { $vc->close(); } catch (\Throwable $e) {}
if ($interaction) {
$interaction->updateOriginalResponse(MessageBuilder::new()->setContent("⚠️ Voice client timed out. Use `/out` and try again."));
safeUpdate($interaction, MessageBuilder::new()->setContent("⚠️ Voice client timed out. Use `/out` and try again."));
}
}
} catch (\Exception $e) {}
@ -451,29 +511,34 @@ function streamAudio(VoiceClient $vc, string $url, $interaction = null) {
$vc->discord->getLoop()->cancelTimer($fallbackTimer);
$vc->discord->getLoop()->cancelTimer($safetyTimer);
if ($interaction) {
$interaction->updateOriginalResponse(MessageBuilder::new()->setContent("⚠️ Voice connection closed."));
safeUpdate($interaction, MessageBuilder::new()->setContent("⚠️ Voice connection closed."));
}
});
}
} else {
echo "Failed to fetch stream URL for $url. Code: $code\nError Output: $errorOutput\n";
// Strip ANSI escape codes from error output for cleaner matching
$cleanError = preg_replace('/\x1B\[[0-9;]*[JKmsu]/', '', $errorOutput);
logToDb("Failed to fetch stream URL for $url. Code: $code. Error: " . substr($cleanError, 0, 500), 'error');
echo "Failed to fetch stream URL for $url. Code: $code\nError Output: $errorOutput\n";
$errorMessage = "❌ Failed to fetch audio. Link may be invalid or blocked.";
if (stripos($cleanError, 'Video unavailable') !== false || stripos($cleanError, 'not available') !== false) {
$errorMessage = "❌ Video unavailable. It might be private, deleted, or region-locked.";
} else if (stripos($cleanError, 'Private video') !== false) {
$errorMessage = "❌ This video is private and cannot be played.";
} else if (stripos($cleanError, 'blocked') !== false || stripos($cleanError, '403') !== false || stripos($cleanError, 'Sign in to confirm') !== false || stripos($cleanError, 'confirm your age') !== false) {
} else if (stripos($cleanError, 'blocked') !== false || stripos($cleanError, '403') !== false || stripos($cleanError, 'Sign in to confirm') !== false || stripos($cleanError, 'confirm your age') !== false || stripos($cleanError, 'bot') !== false) {
$errorMessage = "❌ This video is restricted or the bot is being rate-limited. Try another link or a shorter video.";
} else if (stripos($cleanError, 'Incomplete YouTube ID') !== false) {
$errorMessage = "❌ Invalid YouTube link or ID. Please check the URL.";
} else if (stripos($cleanError, 'confirm your age') !== false || stripos($cleanError, 'age restricted') !== false) {
$errorMessage = "❌ This video is age-restricted and requires a sign-in.";
} else {
// If it's a generic error but we have output, maybe it's something else
logToDb("Generic yt-dlp error for $url: $cleanError", 'error');
}
if ($interaction) {
$interaction->updateOriginalResponse(MessageBuilder::new()->setContent($errorMessage));
safeUpdate($interaction, MessageBuilder::new()->setContent($errorMessage));
}
}
});
@ -502,7 +567,10 @@ function playSahur(Discord $discord, $vcId) {
$vc->once('ready', $playAction);
$vc->discord->getLoop()->addTimer(10.0, function() use ($vc, $playAction) {
$isReady = method_exists($vc, 'isReady') ? $vc->isReady() : ($vc->ready ?? false);
if (!$isReady) $playAction();
if (!$isReady) {
echo "DEBUG: 10s timer reached for Sahur, VC still not ready. Attempting playAction anyway.\n";
$playAction();
}
});
}
});
@ -514,15 +582,21 @@ function playAlarm(Discord $discord, $alarm) {
safeJoin($discord, $channel, null, function($vc) use ($alarm) {
$isReady = method_exists($vc, 'isReady') ? $vc->isReady() : ($vc->ready ?? false);
if ($isReady) {
$playAction = function() use ($vc, $alarm) {
streamAudio($vc, $alarm['audio_url']);
};
if ($isReady) {
$playAction();
} else {
$vc->once('ready', function() use ($vc, $alarm) {
streamAudio($vc, $alarm['audio_url']);
});
$vc->discord->getLoop()->addTimer(10.0, function() use ($vc, $alarm) {
$vc->once('ready', $playAction);
$vc->discord->getLoop()->addTimer(10.0, function() use ($vc, $playAction) {
$isReady = method_exists($vc, 'isReady') ? $vc->isReady() : ($vc->ready ?? false);
if (!$isReady) streamAudio($vc, $alarm['audio_url']);
if (!$isReady) {
echo "DEBUG: 10s timer reached for Alarm, VC still not ready. Attempting playAction anyway.\n";
$playAction();
}
});
}
});
@ -546,11 +620,11 @@ $discord->on(Event::INTERACTION_CREATE, function (Interaction $interaction, Disc
try {
switch ($command) {
case 'ping':
$interaction->updateOriginalResponse(MessageBuilder::new()->setContent("Pong! 🏓"));
safeUpdate($interaction, MessageBuilder::new()->setContent("Pong! 🏓"));
break;
case 'help':
$interaction->updateOriginalResponse(MessageBuilder::new()->setContent(
safeUpdate($interaction, MessageBuilder::new()->setContent(
"**AsepSahur Bot Commands:**\n" .
"`/join` - Join your voice channel\n" .
"`/play [url]` - Play music from URL\n" .
@ -576,7 +650,7 @@ $discord->on(Event::INTERACTION_CREATE, function (Interaction $interaction, Disc
$status .= "⏰ **Sahur Time:** " . $sahurTime . "\n";
$status .= "🛠 **FFmpeg:** " . ($ffmpegPath ? "" : "") . "\n";
$interaction->updateOriginalResponse(MessageBuilder::new()->setContent($status));
safeUpdate($interaction, MessageBuilder::new()->setContent($status));
break;
case 'where':
@ -599,26 +673,13 @@ $discord->on(Event::INTERACTION_CREATE, function (Interaction $interaction, Disc
$msg .= "🔊 **VoiceClient state:** No active connection ❌";
}
$interaction->updateOriginalResponse(MessageBuilder::new()->setContent($msg));
safeUpdate($interaction, MessageBuilder::new()->setContent($msg));
break;
case 'reset':
global $joiningGuilds;
$joiningGuilds = [];
$vc = $discord->getVoiceClient($interaction->guild_id);
if ($vc) {
try { $vc->close(); } catch (\Throwable $e) {}
}
$discord->getLoop()->addTimer(0.5, function() use ($discord, $interaction) {
$interaction->updateOriginalResponse(MessageBuilder::new()->setContent("🔄 **Hard Reset complete.** Voice states cleared. Try `/join` again."));
});
break;
case 'rejoin':
case 'join':
$userChannel = $interaction->member->getVoiceChannel();
if (!$userChannel) {
$interaction->updateOriginalResponse(MessageBuilder::new()->setContent("❌ You must be in a voice channel!"));
safeUpdate($interaction, MessageBuilder::new()->setContent("❌ You must be in a voice channel!"));
return;
}
@ -628,12 +689,10 @@ $discord->on(Event::INTERACTION_CREATE, function (Interaction $interaction, Disc
unset($joiningGuilds[$interaction->guild_id]);
}
$interaction->updateOriginalResponse(MessageBuilder::new()->setContent("⏳ Joining " . $userChannel->name . "..."));
safeUpdate($interaction, MessageBuilder::new()->setContent("⏳ Joining " . $userChannel->name . "..."));
safeJoin($discord, $userChannel, $interaction, function($vc) use ($interaction) {
try {
$interaction->updateOriginalResponse(MessageBuilder::new()->setContent("✅ Successfully joined " . $vc->channel->name));
} catch (\Throwable $e) {}
safeUpdate($interaction, MessageBuilder::new()->setContent("✅ Successfully joined " . $vc->channel->name));
});
break;
@ -641,21 +700,19 @@ $discord->on(Event::INTERACTION_CREATE, function (Interaction $interaction, Disc
$opts = $interaction->data->options;
$url = getOptionValue($opts, 'url');
if (!$url) {
$interaction->updateOriginalResponse(MessageBuilder::new()->setContent("❌ URL is missing!"));
safeUpdate($interaction, MessageBuilder::new()->setContent("❌ URL is missing!"));
return;
}
$userChannel = $interaction->member->getVoiceChannel();
if (!$userChannel) {
$interaction->updateOriginalResponse(MessageBuilder::new()->setContent("❌ Join a VC first!"));
safeUpdate($interaction, MessageBuilder::new()->setContent("❌ Join a VC first!"));
return;
}
$interaction->updateOriginalResponse(MessageBuilder::new()->setContent("⏳ Joining and preparing audio..."));
safeUpdate($interaction, MessageBuilder::new()->setContent("⏳ Joining and preparing audio..."));
safeJoin($discord, $userChannel, $interaction, function($vc) use ($url, $interaction) {
try {
$interaction->updateOriginalResponse(MessageBuilder::new()->setContent("✅ Connected to voice! Now loading audio..."));
} catch (\Throwable $e) {}
safeUpdate($interaction, MessageBuilder::new()->setContent("✅ Connected to voice! Now loading audio..."));
$vc->discord->getLoop()->addTimer(0.5, function() use ($vc, $url, $interaction) {
streamAudio($vc, $url, $interaction);
@ -667,9 +724,9 @@ $discord->on(Event::INTERACTION_CREATE, function (Interaction $interaction, Disc
$vc = $discord->getVoiceClient($interaction->guild_id);
if ($vc) {
$vc->stop();
$interaction->updateOriginalResponse(MessageBuilder::new()->setContent("Stopped playback."));
safeUpdate($interaction, MessageBuilder::new()->setContent("Stopped playback."));
} else {
$interaction->updateOriginalResponse(MessageBuilder::new()->setContent("Nothing is playing."));
safeUpdate($interaction, MessageBuilder::new()->setContent("Nothing is playing."));
}
break;
@ -681,20 +738,54 @@ $discord->on(Event::INTERACTION_CREATE, function (Interaction $interaction, Disc
if ($vc) {
try {
$vc->close();
$interaction->updateOriginalResponse(MessageBuilder::new()->setContent("✅ Left voice channel."));
safeUpdate($interaction, MessageBuilder::new()->setContent("✅ Left voice channel."));
} catch (\Throwable $e) {
$interaction->updateOriginalResponse(MessageBuilder::new()->setContent("✅ Left with error: " . $e->getMessage()));
$msg = $e->getMessage();
// If it's already disconnected, that's fine
if (stripos($msg, 'not connected') !== false || stripos($msg, 'Voice Client') !== false || stripos($msg, 'already closed') !== false) {
safeUpdate($interaction, MessageBuilder::new()->setContent("✅ Disconnected from voice channel."));
} else {
safeUpdate($interaction, MessageBuilder::new()->setContent("✅ Left with message: " . $msg));
}
}
} else {
$interaction->updateOriginalResponse(MessageBuilder::new()->setContent("💨 Requested to leave voice channel."));
safeUpdate($interaction, MessageBuilder::new()->setContent("💨 No active voice connection found."));
}
break;
case 'reset':
global $joiningGuilds;
unset($joiningGuilds[$interaction->guild_id]);
$vc = $discord->getVoiceClient($interaction->guild_id);
if ($vc) {
try { $vc->close(); } catch (\Throwable $e) {}
}
// Also force clear the voice state via gateway if possible
try {
$guild = $discord->guilds->get('id', $interaction->guild_id);
if ($guild) {
$discord->send([
'op' => 4,
'd' => [
'guild_id' => $interaction->guild_id,
'channel_id' => null,
'self_mute' => false,
'self_deaf' => false,
],
]);
}
} catch (\Throwable $e) {}
$discord->getLoop()->addTimer(1.0, function() use ($interaction) {
safeUpdate($interaction, MessageBuilder::new()->setContent("🔄 **Hard Reset complete.** Voice state cleared. You can try `/join` again now."));
});
break;
case 'settime':
$opts = $interaction->data->options;
$time = getOptionValue($opts, 'time');
if (!$time || !preg_match('/^([01]?[0-9]|2[0-3]):[0-5][0-9]$/', $time)) {
$interaction->updateOriginalResponse(MessageBuilder::new()->setContent("❌ Invalid format. Use HH:MM (e.g. 03:00)"));
safeUpdate($interaction, MessageBuilder::new()->setContent("❌ Invalid format. Use HH:MM (e.g. 03:00)"));
return;
}
$userId = (string)$interaction->member->id;
@ -703,7 +794,7 @@ $discord->on(Event::INTERACTION_CREATE, function (Interaction $interaction, Disc
$channelId = (string)($channel->id ?? '');
if (empty($channelId)) {
$interaction->updateOriginalResponse(MessageBuilder::new()->setContent("❌ Join a voice channel first!"));
safeUpdate($interaction, MessageBuilder::new()->setContent("❌ Join a voice channel first!"));
return;
}
@ -712,14 +803,14 @@ $discord->on(Event::INTERACTION_CREATE, function (Interaction $interaction, Disc
VALUES (?, ?, ?, ?, 'sahur.mp3')
ON DUPLICATE KEY UPDATE alarm_time = ?, guild_id = ?, channel_id = ?");
$stmt->execute([$userId, $guildId, $channelId, $time, $time, $guildId, $channelId]);
$interaction->updateOriginalResponse(MessageBuilder::new()->setContent("✅ Alarm set to $time in " . $channel->name));
safeUpdate($interaction, MessageBuilder::new()->setContent("✅ Alarm set to $time in " . $channel->name));
break;
case 'setalarm':
$opts = $interaction->data->options;
$link = getOptionValue($opts, 'link');
if (!$link) {
$interaction->updateOriginalResponse(MessageBuilder::new()->setContent("❌ Link is missing!"));
safeUpdate($interaction, MessageBuilder::new()->setContent("❌ Link is missing!"));
return;
}
$userId = (string)$interaction->member->id;
@ -728,7 +819,7 @@ $discord->on(Event::INTERACTION_CREATE, function (Interaction $interaction, Disc
$channelId = (string)($channel->id ?? '');
if (empty($channelId)) {
$interaction->updateOriginalResponse(MessageBuilder::new()->setContent("❌ Join a voice channel first!"));
safeUpdate($interaction, MessageBuilder::new()->setContent("❌ Join a voice channel first!"));
return;
}
@ -737,7 +828,7 @@ $discord->on(Event::INTERACTION_CREATE, function (Interaction $interaction, Disc
VALUES (?, ?, ?, '03:00', ?)
ON DUPLICATE KEY UPDATE audio_url = ?, guild_id = ?, channel_id = ?");
$stmt->execute([$userId, $guildId, $channelId, $link, $link, $guildId, $channelId]);
$interaction->updateOriginalResponse(MessageBuilder::new()->setContent("✅ Alarm audio updated."));
safeUpdate($interaction, MessageBuilder::new()->setContent("✅ Alarm audio updated."));
break;
}
} catch (\Throwable $e) {

View File

@ -1 +1 @@
80933
84322

View File

@ -1,87 +1,385 @@
[2026-02-15T02:47:51.964698+00:00] DiscordPHP.DEBUG: Initializing DiscordPHP v10.46.0 (DiscordPHP-Http: v10.8.0 & Gateway: v10) on PHP 8.2.29
[2026-02-15T02:47:52.246189+00:00] DiscordPHP.DEBUG: BUCKET getapplications/@me queued REQ GET applications/@me
[2026-02-15T02:47:52.247988+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":0,"empty":true}
[2026-02-15T02:47:52.480436+00:00] DiscordPHP.DEBUG: BUCKET getgateway/bot queued REQ GET gateway/bot
[2026-02-15T02:47:52.480524+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":1,"empty":true}
[2026-02-15T02:47:54.472447+00:00] DiscordPHP.DEBUG: REQ GET applications/@me successful
[2026-02-15T02:47:54.472608+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":1,"empty":true}
[2026-02-15T02:47:54.473685+00:00] DiscordPHP.DEBUG: REQ GET gateway/bot successful
[2026-02-15T02:47:54.473775+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":0,"empty":true}
[2026-02-15T02:47:54.475294+00:00] DiscordPHP.INFO: gateway retrieved and set {"gateway":"wss://gateway.discord.gg/?v=10&encoding=json&compress=zlib-stream","session":{"total":1000,"remaining":931,"reset_after":52832415,"max_concurrency":1}}
[2026-02-15T02:47:54.475369+00:00] DiscordPHP.DEBUG: session data received {"session":{"total":1000,"remaining":931,"reset_after":52832415,"max_concurrency":1}}
[2026-02-15T02:47:54.475397+00:00] DiscordPHP.INFO: starting connection to websocket {"gateway":"wss://gateway.discord.gg/?v=10&encoding=json&compress=zlib-stream"}
[2026-02-15T02:47:55.977992+00:00] DiscordPHP.INFO: websocket connection has been created
[2026-02-15T02:47:55.984006+00:00] DiscordPHP.INFO: received hello
[2026-02-15T02:47:55.984166+00:00] DiscordPHP.DEBUG: sending heartbeat {"seq":null}
[2026-02-15T02:47:55.984925+00:00] DiscordPHP.INFO: heartbeat timer initialized {"interval":41250.0}
[2026-02-15T02:47:55.985376+00:00] DiscordPHP.INFO: identifying {"payload":{"op":2,"d":{"token":"*****","properties":{"os":"Linux","browser":"DiscordBot (https://github.com/discord-php/DiscordPHP-HTTP, v10.8.0)","device":"DiscordBot (https://github.com/discord-php/DiscordPHP-HTTP, v10.8.0)","referrer":"https://github.com/discord-php/DiscordPHP","referring_domain":"https://github.com/discord-php/DiscordPHP"},"compress":true,"intents":53608189}}}
[2026-02-15T02:47:56.216005+00:00] DiscordPHP.DEBUG: received heartbeat ack {"response_time":231.0769557952881}
[2026-02-15T02:47:56.216418+00:00] DiscordPHP.DEBUG: ready packet received
[2026-02-15T02:47:56.216482+00:00] DiscordPHP.DEBUG: resume_gateway_url received {"url":"wss://gateway-us-east1-d.discord.gg"}
[2026-02-15T02:47:56.216525+00:00] DiscordPHP.DEBUG: discord trace received {"trace":["[\"gateway-prd-arm-us-east1-d-w99h\",{\"micros\":120955,\"calls\":[\"id_created\",{\"micros\":450,\"calls\":[]},\"session_lookup_time\",{\"micros\":2207,\"calls\":[]},\"session_lookup_finished\",{\"micros\":12,\"calls\":[]},\"discord-sessions-prd-2-3\",{\"micros\":117944,\"calls\":[\"start_session\",{\"micros\":107718,\"calls\":[\"discord-api-rpc-66c79f4bd4-snj2r\",{\"micros\":40801,\"calls\":[\"get_user\",{\"micros\":7553},\"get_guilds\",{\"micros\":3341},\"send_scheduled_deletion_message\",{\"micros\":28},\"guild_join_requests\",{\"micros\":5},\"authorized_ip_coro\",{\"micros\":10},\"pending_payments\",{\"micros\":1512},\"apex_experiments\",{\"micros\":39829},\"sessions_experiments\",{\"micros\":6},\"user_activities\",{\"micros\":3},\"played_application_ids\",{\"micros\":3},\"linked_users\",{\"micros\":2},\"ad_personalization_toggles_disabled\",{\"micros\":3},\"regional_feature_config\",{\"micros\":2}]}]},\"starting_guild_connect\",{\"micros\":36,\"calls\":[]},\"presence_started\",{\"micros\":1083,\"calls\":[]},\"guilds_started\",{\"micros\":68,\"calls\":[]},\"lobbies_started\",{\"micros\":1,\"calls\":[]},\"guilds_connect\",{\"micros\":1,\"calls\":[]},\"presence_connect\",{\"micros\":8997,\"calls\":[]},\"connect_finished\",{\"micros\":9023,\"calls\":[]},\"build_ready\",{\"micros\":13,\"calls\":[]},\"clean_ready\",{\"micros\":0,\"calls\":[]},\"optimize_ready\",{\"micros\":1,\"calls\":[]},\"split_ready\",{\"micros\":0,\"calls\":[]}]}]}]"]}
[2026-02-15T02:47:56.219419+00:00] DiscordPHP.DEBUG: client created and session id stored {"session_id":"8d1d0094377dfff0dbd66e78d1e15721","user":{"id":"1471909193886859294","username":"AsepSahur","discriminator":"6954","global_name":null,"avatar":"https://cdn.discordapp.com/avatars/1471909193886859294/8a88b0710fa41f7eef469c3dedc30e27.webp?size=1024","bot":true,"system":null,"mfa_enabled":false,"banner":null,"accent_color":null,"locale":null,"verified":true,"email":null,"flags":0,"premium_type":null,"public_flags":null,"avatar_decoration_data":null,"collectibles":null,"primary_guild":null}}
[2026-02-15T02:47:56.227405+00:00] DiscordPHP.INFO: stored guilds {"count":0,"unavailable":1}
[2026-02-15T02:47:56.969529+00:00] DiscordPHP.DEBUG: guild available {"guild":"1428530728706117632","unavailable":1}
[2026-02-15T02:47:56.970058+00:00] DiscordPHP.INFO: all guilds are now available {"count":1}
[2026-02-15T02:47:56.970193+00:00] DiscordPHP.INFO: loadAllMembers option is disabled, not setting chunking up
[2026-02-15T02:47:56.971736+00:00] DiscordPHP.INFO: voice class initialized
[2026-02-15T02:47:56.972357+00:00] DiscordPHP.INFO: client is ready
[2026-02-15T02:47:56.972429+00:00] DiscordPHP.INFO: The 'ready' event is deprecated and will be removed in a future version of DiscordPHP. Please use 'init' instead.
[2026-02-15T03:26:20.146878+00:00] DiscordPHP.DEBUG: Initializing DiscordPHP v10.46.0 (DiscordPHP-Http: v10.8.0 & Gateway: v10) on PHP 8.2.29
[2026-02-15T03:26:20.669148+00:00] DiscordPHP.DEBUG: BUCKET getapplications/@me queued REQ GET applications/@me
[2026-02-15T03:26:20.669300+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":0,"empty":true}
[2026-02-15T03:26:20.907609+00:00] DiscordPHP.DEBUG: BUCKET getgateway/bot queued REQ GET gateway/bot
[2026-02-15T03:26:20.907702+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":1,"empty":true}
[2026-02-15T03:26:23.153044+00:00] DiscordPHP.DEBUG: REQ GET gateway/bot successful
[2026-02-15T03:26:23.153166+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":1,"empty":true}
[2026-02-15T03:26:23.156750+00:00] DiscordPHP.INFO: gateway retrieved and set {"gateway":"wss://gateway.discord.gg/?v=10&encoding=json&compress=zlib-stream","session":{"total":1000,"remaining":925,"reset_after":50523763,"max_concurrency":1}}
[2026-02-15T03:26:23.156876+00:00] DiscordPHP.DEBUG: session data received {"session":{"total":1000,"remaining":925,"reset_after":50523763,"max_concurrency":1}}
[2026-02-15T03:26:23.156924+00:00] DiscordPHP.INFO: starting connection to websocket {"gateway":"wss://gateway.discord.gg/?v=10&encoding=json&compress=zlib-stream"}
[2026-02-15T03:26:23.162053+00:00] DiscordPHP.DEBUG: REQ GET applications/@me successful
[2026-02-15T03:26:23.162158+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":0,"empty":true}
[2026-02-15T03:26:24.902186+00:00] DiscordPHP.INFO: websocket connection has been created
[2026-02-15T03:26:24.905287+00:00] DiscordPHP.INFO: received hello
[2026-02-15T03:26:24.905404+00:00] DiscordPHP.DEBUG: sending heartbeat {"seq":null}
[2026-02-15T03:26:24.905558+00:00] DiscordPHP.INFO: heartbeat timer initialized {"interval":41250.0}
[2026-02-15T03:26:24.905623+00:00] DiscordPHP.INFO: identifying {"payload":{"op":2,"d":{"token":"*****","properties":{"os":"Linux","browser":"DiscordBot (https://github.com/discord-php/DiscordPHP-HTTP, v10.8.0)","device":"DiscordBot (https://github.com/discord-php/DiscordPHP-HTTP, v10.8.0)","referrer":"https://github.com/discord-php/DiscordPHP","referring_domain":"https://github.com/discord-php/DiscordPHP"},"compress":true,"intents":53608189}}}
[2026-02-15T03:26:25.140725+00:00] DiscordPHP.DEBUG: received heartbeat ack {"response_time":235.15605926513672}
[2026-02-15T03:26:25.141022+00:00] DiscordPHP.DEBUG: ready packet received
[2026-02-15T03:26:25.141085+00:00] DiscordPHP.DEBUG: resume_gateway_url received {"url":"wss://gateway-us-east1-d.discord.gg"}
[2026-02-15T03:26:25.141150+00:00] DiscordPHP.DEBUG: discord trace received {"trace":["[\"gateway-prd-arm-us-east1-d-nskz\",{\"micros\":125940,\"calls\":[\"id_created\",{\"micros\":437,\"calls\":[]},\"session_lookup_time\",{\"micros\":1718,\"calls\":[]},\"session_lookup_finished\",{\"micros\":11,\"calls\":[]},\"discord-sessions-prd-2-165\",{\"micros\":123358,\"calls\":[\"start_session\",{\"micros\":96364,\"calls\":[\"discord-api-rpc-66c79f4bd4-b2g6s\",{\"micros\":33489,\"calls\":[\"get_user\",{\"micros\":6049},\"get_guilds\",{\"micros\":4852},\"send_scheduled_deletion_message\",{\"micros\":28},\"guild_join_requests\",{\"micros\":4},\"authorized_ip_coro\",{\"micros\":13},\"pending_payments\",{\"micros\":1490},\"apex_experiments\",{\"micros\":54026},\"sessions_experiments\",{\"micros\":38},\"user_activities\",{\"micros\":5},\"played_application_ids\",{\"micros\":3},\"linked_users\",{\"micros\":3},\"ad_personalization_toggles_disabled\",{\"micros\":3},\"regional_feature_config\",{\"micros\":8}]}]},\"starting_guild_connect\",{\"micros\":30,\"calls\":[]},\"presence_started\",{\"micros\":295,\"calls\":[]},\"guilds_started\",{\"micros\":52,\"calls\":[]},\"lobbies_started\",{\"micros\":1,\"calls\":[]},\"guilds_connect\",{\"micros\":2,\"calls\":[]},\"presence_connect\",{\"micros\":26576,\"calls\":[]},\"connect_finished\",{\"micros\":26603,\"calls\":[]},\"build_ready\",{\"micros\":11,\"calls\":[]},\"clean_ready\",{\"micros\":1,\"calls\":[]},\"optimize_ready\",{\"micros\":0,\"calls\":[]},\"split_ready\",{\"micros\":0,\"calls\":[]}]}]}]"]}
[2026-02-15T03:26:25.142928+00:00] DiscordPHP.DEBUG: client created and session id stored {"session_id":"b5e86c4be0d6b68bbdc63f31fe2aa60b","user":{"id":"1471909193886859294","username":"AsepSahur","discriminator":"6954","global_name":null,"avatar":"https://cdn.discordapp.com/avatars/1471909193886859294/8a88b0710fa41f7eef469c3dedc30e27.webp?size=1024","bot":true,"system":null,"mfa_enabled":false,"banner":null,"accent_color":null,"locale":null,"verified":true,"email":null,"flags":0,"premium_type":null,"public_flags":null,"avatar_decoration_data":null,"collectibles":null,"primary_guild":null}}
[2026-02-15T03:26:25.149052+00:00] DiscordPHP.INFO: stored guilds {"count":0,"unavailable":1}
[2026-02-15T03:26:25.424392+00:00] DiscordPHP.DEBUG: guild available {"guild":"1428530728706117632","unavailable":1}
[2026-02-15T03:26:25.424538+00:00] DiscordPHP.INFO: all guilds are now available {"count":1}
[2026-02-15T03:26:25.424580+00:00] DiscordPHP.INFO: loadAllMembers option is disabled, not setting chunking up
[2026-02-15T03:26:25.642245+00:00] DiscordPHP.INFO: voice class initialized
[2026-02-15T03:26:25.642360+00:00] DiscordPHP.INFO: client is ready
[2026-02-15T03:26:25.642402+00:00] DiscordPHP.INFO: The 'ready' event is deprecated and will be removed in a future version of DiscordPHP. Please use 'init' instead.
Bot is ready as AsepSahur#6954
[2026-02-15 02:47:56] [info] Bot is online and ready: AsepSahur
[2026-02-15T02:47:56.994986+00:00] DiscordPHP.DEBUG: BUCKET postapplications/:application_id/commands queued REQ POST applications/1471909193886859294/commands
[2026-02-15T02:47:57.213094+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":0,"empty":true}
[2026-02-15T02:47:57.214161+00:00] DiscordPHP.DEBUG: BUCKET postapplications/:application_id/commands queued REQ POST applications/1471909193886859294/commands
[2026-02-15T02:47:57.214314+00:00] DiscordPHP.DEBUG: BUCKET postapplications/:application_id/commands queued REQ POST applications/1471909193886859294/commands
[2026-02-15T02:47:57.214402+00:00] DiscordPHP.DEBUG: BUCKET postapplications/:application_id/commands queued REQ POST applications/1471909193886859294/commands
[2026-02-15T02:47:57.214597+00:00] DiscordPHP.DEBUG: BUCKET postapplications/:application_id/commands queued REQ POST applications/1471909193886859294/commands
[2026-02-15T02:47:57.214700+00:00] DiscordPHP.DEBUG: BUCKET postapplications/:application_id/commands queued REQ POST applications/1471909193886859294/commands
[2026-02-15T02:47:57.214829+00:00] DiscordPHP.DEBUG: BUCKET postapplications/:application_id/commands queued REQ POST applications/1471909193886859294/commands
[2026-02-15T02:47:57.214944+00:00] DiscordPHP.DEBUG: BUCKET postapplications/:application_id/commands queued REQ POST applications/1471909193886859294/commands
[2026-02-15T02:47:57.215053+00:00] DiscordPHP.DEBUG: BUCKET postapplications/:application_id/commands queued REQ POST applications/1471909193886859294/commands
[2026-02-15T02:47:57.215158+00:00] DiscordPHP.DEBUG: BUCKET postapplications/:application_id/commands queued REQ POST applications/1471909193886859294/commands
[2026-02-15T02:47:57.215242+00:00] DiscordPHP.DEBUG: BUCKET postapplications/:application_id/commands queued REQ POST applications/1471909193886859294/commands
[2026-02-15T02:47:57.215338+00:00] DiscordPHP.DEBUG: BUCKET postapplications/:application_id/commands queued REQ POST applications/1471909193886859294/commands
[2026-02-15 03:26:25] [info] Bot is online and ready: AsepSahur
[2026-02-15T03:26:25.654739+00:00] DiscordPHP.DEBUG: BUCKET postapplications/:application_id/commands queued REQ POST applications/1471909193886859294/commands
[2026-02-15T03:26:25.654872+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":0,"empty":true}
[2026-02-15T03:26:25.655535+00:00] DiscordPHP.DEBUG: BUCKET postapplications/:application_id/commands queued REQ POST applications/1471909193886859294/commands
[2026-02-15T03:26:25.655681+00:00] DiscordPHP.DEBUG: BUCKET postapplications/:application_id/commands queued REQ POST applications/1471909193886859294/commands
[2026-02-15T03:26:25.655767+00:00] DiscordPHP.DEBUG: BUCKET postapplications/:application_id/commands queued REQ POST applications/1471909193886859294/commands
[2026-02-15T03:26:25.655938+00:00] DiscordPHP.DEBUG: BUCKET postapplications/:application_id/commands queued REQ POST applications/1471909193886859294/commands
[2026-02-15T03:26:25.656022+00:00] DiscordPHP.DEBUG: BUCKET postapplications/:application_id/commands queued REQ POST applications/1471909193886859294/commands
[2026-02-15T03:26:25.656163+00:00] DiscordPHP.DEBUG: BUCKET postapplications/:application_id/commands queued REQ POST applications/1471909193886859294/commands
[2026-02-15T03:26:25.656353+00:00] DiscordPHP.DEBUG: BUCKET postapplications/:application_id/commands queued REQ POST applications/1471909193886859294/commands
[2026-02-15T03:26:25.656481+00:00] DiscordPHP.DEBUG: BUCKET postapplications/:application_id/commands queued REQ POST applications/1471909193886859294/commands
[2026-02-15T03:26:25.656557+00:00] DiscordPHP.DEBUG: BUCKET postapplications/:application_id/commands queued REQ POST applications/1471909193886859294/commands
[2026-02-15T03:26:25.656630+00:00] DiscordPHP.DEBUG: BUCKET postapplications/:application_id/commands queued REQ POST applications/1471909193886859294/commands
[2026-02-15T03:26:25.656701+00:00] DiscordPHP.DEBUG: BUCKET postapplications/:application_id/commands queued REQ POST applications/1471909193886859294/commands
Commands registration updated.
[2026-02-15T02:47:58.466405+00:00] DiscordPHP.DEBUG: REQ POST applications/1471909193886859294/commands successful
[2026-02-15T02:47:58.466569+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":0,"empty":true}
[2026-02-15T02:47:58.466676+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":0,"empty":true}
[2026-02-15T02:47:58.715042+00:00] DiscordPHP.DEBUG: REQ POST applications/1471909193886859294/commands successful
[2026-02-15T02:47:58.715228+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":0,"empty":true}
[2026-02-15T02:47:58.715361+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":0,"empty":true}
[2026-02-15T02:47:58.964511+00:00] DiscordPHP.DEBUG: REQ POST applications/1471909193886859294/commands successful
[2026-02-15T02:47:58.964650+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":0,"empty":true}
[2026-02-15T02:47:58.964779+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":0,"empty":true}
[2026-02-15T02:47:59.213584+00:00] DiscordPHP.DEBUG: REQ POST applications/1471909193886859294/commands successful
[2026-02-15T02:47:59.213726+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":0,"empty":true}
[2026-02-15T02:47:59.213824+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":0,"empty":true}
[2026-02-15T02:47:59.463768+00:00] DiscordPHP.DEBUG: REQ POST applications/1471909193886859294/commands successful
[2026-02-15T02:47:59.463920+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":0,"empty":true}
[2026-02-15T02:47:59.464295+00:00] DiscordPHP.INFO: BUCKET postapplications/:application_id/commands expecting rate limit, timer interval 18996 ms
[2026-02-15T02:48:18.479280+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":0,"empty":true}
[2026-02-15T02:48:19.714622+00:00] DiscordPHP.DEBUG: REQ POST applications/1471909193886859294/commands successful
[2026-02-15T02:48:19.714778+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":0,"empty":true}
[2026-02-15T02:48:19.714883+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":0,"empty":true}
[2026-02-15T02:48:19.962682+00:00] DiscordPHP.DEBUG: REQ POST applications/1471909193886859294/commands successful
[2026-02-15T02:48:19.963480+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":0,"empty":true}
[2026-02-15T02:48:19.963686+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":0,"empty":true}
[2026-02-15T02:48:20.213968+00:00] DiscordPHP.DEBUG: REQ POST applications/1471909193886859294/commands successful
[2026-02-15T02:48:20.214111+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":0,"empty":true}
[2026-02-15T02:48:20.214208+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":0,"empty":true}
[2026-02-15T02:48:20.314041+00:00] DiscordPHP.DEBUG: REQ POST applications/1471909193886859294/commands successful
[2026-02-15T02:48:20.314203+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":0,"empty":true}
[2026-02-15T02:48:20.314323+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":0,"empty":true}
[2026-02-15T02:48:20.465239+00:00] DiscordPHP.DEBUG: REQ POST applications/1471909193886859294/commands successful
[2026-02-15T02:48:20.465389+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":0,"empty":true}
[2026-02-15T02:48:20.465473+00:00] DiscordPHP.INFO: BUCKET postapplications/:application_id/commands expecting rate limit, timer interval 19138 ms
[2026-02-15T02:48:37.238919+00:00] DiscordPHP.DEBUG: sending heartbeat {"seq":5}
[2026-02-15T02:48:37.291601+00:00] DiscordPHP.DEBUG: received heartbeat ack {"response_time":52.453041076660156}
[2026-02-15T02:48:39.606040+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":0,"empty":true}
[2026-02-15T02:48:39.840775+00:00] DiscordPHP.DEBUG: REQ POST applications/1471909193886859294/commands successful
[2026-02-15T02:48:39.840933+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":0,"empty":true}
[2026-02-15T02:48:39.841051+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":0,"empty":true}
[2026-02-15T02:48:39.949476+00:00] DiscordPHP.DEBUG: REQ POST applications/1471909193886859294/commands successful
[2026-02-15T02:48:39.949630+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":0,"empty":true}
[2026-02-15T02:48:55.986421+00:00] DiscordPHP.DEBUG: resetting payload count {"count":3}
[2026-02-15T02:49:18.529634+00:00] DiscordPHP.DEBUG: sending heartbeat {"seq":5}
[2026-02-15T02:49:18.583507+00:00] DiscordPHP.DEBUG: received heartbeat ack {"response_time":53.45296859741211}
[2026-02-15T03:26:26.892979+00:00] DiscordPHP.DEBUG: REQ POST applications/1471909193886859294/commands successful
[2026-02-15T03:26:26.893128+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":0,"empty":true}
[2026-02-15T03:26:26.893235+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":0,"empty":true}
[2026-02-15T03:26:27.140831+00:00] DiscordPHP.DEBUG: REQ POST applications/1471909193886859294/commands successful
[2026-02-15T03:26:27.140982+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":0,"empty":true}
[2026-02-15T03:26:27.141089+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":0,"empty":true}
[2026-02-15T03:26:27.270311+00:00] DiscordPHP.DEBUG: REQ POST applications/1471909193886859294/commands successful
[2026-02-15T03:26:27.270439+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":0,"empty":true}
[2026-02-15T03:26:27.270532+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":0,"empty":true}
[2026-02-15T03:26:27.395383+00:00] DiscordPHP.DEBUG: REQ POST applications/1471909193886859294/commands successful
[2026-02-15T03:26:27.395498+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":0,"empty":true}
[2026-02-15T03:26:27.395596+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":0,"empty":true}
[2026-02-15T03:26:27.527896+00:00] DiscordPHP.DEBUG: REQ POST applications/1471909193886859294/commands successful
[2026-02-15T03:26:27.528038+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":0,"empty":true}
[2026-02-15T03:26:27.528159+00:00] DiscordPHP.INFO: BUCKET postapplications/:application_id/commands expecting rate limit, timer interval 19306 ms
[2026-02-15T03:26:46.887758+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":0,"empty":true}
[2026-02-15T03:26:47.889762+00:00] DiscordPHP.DEBUG: REQ POST applications/1471909193886859294/commands successful
[2026-02-15T03:26:47.889915+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":0,"empty":true}
[2026-02-15T03:26:47.890015+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":0,"empty":true}
[2026-02-15T03:26:48.140409+00:00] DiscordPHP.DEBUG: REQ POST applications/1471909193886859294/commands successful
[2026-02-15T03:26:48.140534+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":0,"empty":true}
[2026-02-15T03:26:48.140645+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":0,"empty":true}
[2026-02-15T03:26:48.388816+00:00] DiscordPHP.DEBUG: REQ POST applications/1471909193886859294/commands successful
[2026-02-15T03:26:48.388937+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":0,"empty":true}
[2026-02-15T03:26:48.389040+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":0,"empty":true}
[2026-02-15T03:26:48.640704+00:00] DiscordPHP.DEBUG: REQ POST applications/1471909193886859294/commands successful
[2026-02-15T03:26:48.640848+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":0,"empty":true}
[2026-02-15T03:26:48.640966+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":0,"empty":true}
[2026-02-15T03:26:48.892616+00:00] DiscordPHP.DEBUG: REQ POST applications/1471909193886859294/commands successful
[2026-02-15T03:26:48.892742+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":0,"empty":true}
[2026-02-15T03:26:48.892832+00:00] DiscordPHP.INFO: BUCKET postapplications/:application_id/commands expecting rate limit, timer interval 18996 ms
[2026-02-15T03:27:06.165337+00:00] DiscordPHP.DEBUG: sending heartbeat {"seq":2}
[2026-02-15T03:27:06.215528+00:00] DiscordPHP.DEBUG: received heartbeat ack {"response_time":49.82709884643555}
[2026-02-15T03:27:07.889925+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":0,"empty":true}
[2026-02-15T03:27:08.131420+00:00] DiscordPHP.DEBUG: REQ POST applications/1471909193886859294/commands successful
[2026-02-15T03:27:08.131582+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":0,"empty":true}
[2026-02-15T03:27:08.131694+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":0,"empty":true}
[2026-02-15T03:27:08.233661+00:00] DiscordPHP.DEBUG: REQ POST applications/1471909193886859294/commands successful
[2026-02-15T03:27:08.233794+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":0,"empty":true}
[2026-02-15T03:27:24.902718+00:00] DiscordPHP.DEBUG: resetting payload count {"count":3}
[2026-02-15T03:27:47.440033+00:00] DiscordPHP.DEBUG: sending heartbeat {"seq":5}
[2026-02-15T03:27:47.481185+00:00] DiscordPHP.DEBUG: received heartbeat ack {"response_time":40.801048278808594}
DEBUG: Interaction received: join
[2026-02-15T03:28:16.543184+00:00] DiscordPHP.DEBUG: BUCKET postinteractions/:interaction_id/:interaction_token/callback queued REQ POST interactions/1472434311989956813/aW50ZXJhY3Rpb246MTQ3MjQzNDMxMTk4OTk1NjgxMzp1UWR6ZTNYcFpnRDNnNDNxQzREWEQ3NkQ0M0JjejJTeW5IWkVrSEtYN1ZwU05tWFhkaVdFWnRkOWJwUzFvTzVQNnA5R0ZHeHlCdnUzQnhQeW9HVnJEZW9JbmVhUldmN2VQNmRBNzA2STAyZEllWlNOMWlydXBJSUhFR1J2d1lVWQ/callback
[2026-02-15T03:28:16.543311+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":0,"empty":true}
DEBUG: Interaction acknowledged
[2026-02-15 03:28:16] [info] Received interaction: join from rio.xmc
[2026-02-15T03:28:16.550481+00:00] DiscordPHP.DEBUG: BUCKET patchwebhooks/:application_id/:interaction_token/messages/@original queued REQ PATCH webhooks/1471909193886859294/aW50ZXJhY3Rpb246MTQ3MjQzNDMxMTk4OTk1NjgxMzp1UWR6ZTNYcFpnRDNnNDNxQzREWEQ3NkQ0M0JjejJTeW5IWkVrSEtYN1ZwU05tWFhkaVdFWnRkOWJwUzFvTzVQNnA5R0ZHeHlCdnUzQnhQeW9HVnJEZW9JbmVhUldmN2VQNmRBNzA2STAyZEllWlNOMWlydXBJSUhFR1J2d1lVWQ/messages/@original
[2026-02-15T03:28:16.550692+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":1,"empty":true}
DEBUG: safeJoin called for guild 1428530728706117632, channel Staff voice
[2026-02-15T03:28:16.551733+00:00] DiscordPHP.DEBUG: BUCKET patchwebhooks/:application_id/:interaction_token/messages/@original queued REQ PATCH webhooks/1471909193886859294/aW50ZXJhY3Rpb246MTQ3MjQzNDMxMTk4OTk1NjgxMzp1UWR6ZTNYcFpnRDNnNDNxQzREWEQ3NkQ0M0JjejJTeW5IWkVrSEtYN1ZwU05tWFhkaVdFWnRkOWJwUzFvTzVQNnA5R0ZHeHlCdnUzQnhQeW9HVnJEZW9JbmVhUldmN2VQNmRBNzA2STAyZEllWlNOMWlydXBJSUhFR1J2d1lVWQ/messages/@original
[2026-02-15 03:28:16] [info] Executing joinVoiceChannel for guild 1428530728706117632, channel Staff voice
[2026-02-15 03:28:16] [info] Bot voice state updated: Channel=Staff voice
[2026-02-15T03:28:16.712708+00:00] DiscordPHP.INFO: received session id for voice session {"guild":"1428530728706117632","session_id":"b5e86c4be0d6b68bbdc63f31fe2aa60b"}
[2026-02-15T03:28:16.860075+00:00] DiscordPHP.INFO: received token and endpoint for voice session {"guild":"1428530728706117632","token":"*****","endpoint":"c-fra20-5f509e9b.discord.media:2083"}
[2026-02-15T03:28:16.866535+00:00] DiscordPHP.DEBUG: Creating new voice websocket {"endpoint":"c-fra20-5f509e9b.discord.media:2083"}
[2026-02-15T03:28:17.157976+00:00] DiscordPHP.DEBUG: REQ POST interactions/1472434311989956813/aW50ZXJhY3Rpb246MTQ3MjQzNDMxMTk4OTk1NjgxMzp1UWR6ZTNYcFpnRDNnNDNxQzREWEQ3NkQ0M0JjejJTeW5IWkVrSEtYN1ZwU05tWFhkaVdFWnRkOWJwUzFvTzVQNnA5R0ZHeHlCdnUzQnhQeW9HVnJEZW9JbmVhUldmN2VQNmRBNzA2STAyZEllWlNOMWlydXBJSUhFR1J2d1lVWQ/callback successful
[2026-02-15T03:28:17.158212+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":1,"empty":true}
[2026-02-15T03:28:17.452060+00:00] DiscordPHP.DEBUG: connected to voice websocket
[2026-02-15T03:28:17.455157+00:00] DiscordPHP.DEBUG: sending identify {"packet":{"op":0,"d":{"server_id":"1428530728706117632","user_id":"1471909193886859294","token":"*****","max_dave_protocol_version":0,"session_id":"b5e86c4be0d6b68bbdc63f31fe2aa60b"}}}
[2026-02-15T03:28:17.456875+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:28:17.459114+00:00] DiscordPHP.DEBUG: REQ PATCH webhooks/1471909193886859294/aW50ZXJhY3Rpb246MTQ3MjQzNDMxMTk4OTk1NjgxMzp1UWR6ZTNYcFpnRDNnNDNxQzREWEQ3NkQ0M0JjejJTeW5IWkVrSEtYN1ZwU05tWFhkaVdFWnRkOWJwUzFvTzVQNnA5R0ZHeHlCdnUzQnhQeW9HVnJEZW9JbmVhUldmN2VQNmRBNzA2STAyZEllWlNOMWlydXBJSUhFR1J2d1lVWQ/messages/@original successful
[2026-02-15T03:28:17.459261+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":0,"empty":true}
[2026-02-15T03:28:17.459404+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":0,"empty":true}
[2026-02-15T03:28:17.573330+00:00] DiscordPHP.DEBUG: received voice ready packet {"data":{"streams":[{"type":"video","ssrc":4514,"rtx_ssrc":4515,"rid":"","quality":0,"active":false}],"ssrc":4513,"port":19314,"modes":["aead_aes256_gcm_rtpsize","aead_xchacha20_poly1305_rtpsize"],"ip":"104.29.147.190","experiments":["fixed_keyframe_interval"]}}
[2026-02-15T03:28:17.582129+00:00] DiscordPHP.DEBUG: received heartbeat ack {"response_time":582.0839405059814}
[2026-02-15T03:28:17.582548+00:00] DiscordPHP.DEBUG: received client connect packet {"data":{"Discord\\WebSockets\\Payload":{"op":11,"d":{"user_ids":["235088799074484224","830530156048285716","906246223504240641","923944350612848700","1414108278354608278"]}}}}
[2026-02-15T03:28:17.584912+00:00] DiscordPHP.DEBUG: received speaking packet {"data":{"user_id":"235088799074484224","ssrc":228,"speaking":1}}
[2026-02-15T03:28:17.585220+00:00] DiscordPHP.DEBUG: received speaking packet {"data":{"user_id":"830530156048285716","ssrc":243,"speaking":1}}
[2026-02-15T03:28:17.586541+00:00] DiscordPHP.DEBUG: received flags packet {"data":{"attributes":{"user_id":"235088799074484224","flags":null},"created":true,"class":"Discord\\Voice\\Flags"}}
[2026-02-15T03:28:17.586745+00:00] DiscordPHP.DEBUG: received flags packet {"data":{"attributes":{"user_id":"830530156048285716","flags":null},"created":true,"class":"Discord\\Voice\\Flags"}}
[2026-02-15T03:28:17.586903+00:00] DiscordPHP.DEBUG: received flags packet {"data":{"attributes":{"user_id":"906246223504240641","flags":null},"created":true,"class":"Discord\\Voice\\Flags"}}
[2026-02-15T03:28:17.587193+00:00] DiscordPHP.DEBUG: received flags packet {"data":{"attributes":{"user_id":"923944350612848700","flags":2},"created":true,"class":"Discord\\Voice\\Flags"}}
[2026-02-15T03:28:17.587721+00:00] DiscordPHP.DEBUG: received flags packet {"data":{"attributes":{"user_id":"1414108278354608278","flags":2},"created":true,"class":"Discord\\Voice\\Flags"}}
[2026-02-15T03:28:17.588952+00:00] DiscordPHP.DEBUG: received platform packet {"data":{"attributes":{"user_id":"235088799074484224","platform":null},"created":true,"class":"Discord\\Voice\\Platform"}}
[2026-02-15T03:28:17.589262+00:00] DiscordPHP.DEBUG: received platform packet {"data":{"attributes":{"user_id":"830530156048285716","platform":null},"created":true,"class":"Discord\\Voice\\Platform"}}
[2026-02-15T03:28:17.672985+00:00] DiscordPHP.DEBUG: received platform packet {"data":{"attributes":{"user_id":"906246223504240641","platform":null},"created":true,"class":"Discord\\Voice\\Platform"}}
[2026-02-15T03:28:17.673253+00:00] DiscordPHP.DEBUG: received platform packet {"data":{"attributes":{"user_id":"923944350612848700","platform":1},"created":true,"class":"Discord\\Voice\\Platform"}}
[2026-02-15T03:28:17.673343+00:00] DiscordPHP.DEBUG: received platform packet {"data":{"attributes":{"user_id":"1414108278354608278","platform":1},"created":true,"class":"Discord\\Voice\\Platform"}}
[2026-02-15T03:28:17.727246+00:00] DiscordPHP.DEBUG: REQ PATCH webhooks/1471909193886859294/aW50ZXJhY3Rpb246MTQ3MjQzNDMxMTk4OTk1NjgxMzp1UWR6ZTNYcFpnRDNnNDNxQzREWEQ3NkQ0M0JjejJTeW5IWkVrSEtYN1ZwU05tWFhkaVdFWnRkOWJwUzFvTzVQNnA5R0ZHeHlCdnUzQnhQeW9HVnJEZW9JbmVhUldmN2VQNmRBNzA2STAyZEllWlNOMWlydXBJSUhFR1J2d1lVWQ/messages/@original successful
[2026-02-15T03:28:17.727396+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":0,"empty":true}
[2026-02-15T03:28:17.795107+00:00] DiscordPHP.DEBUG: received our IP and port {"ip":"34.16.53.23","port":2944}
[2026-02-15T03:28:17.912572+00:00] DiscordPHP.DEBUG: received description packet, vc ready {"data":{"video_codec":"H264","secure_frames_version":0,"secret_key":"*****","mode":"aead_aes256_gcm_rtpsize","media_session_id":"208aefde4d8f4e84527d8d3adce568cc","dave_protocol_version":0,"audio_codec":"opus"}}
[2026-02-15T03:28:17.912739+00:00] DiscordPHP.INFO: voice manager is ready
[2026-02-15 03:28:17] [info] Joined channel Staff voice. Waiting for ready state...
[2026-02-15 03:28:17] [info] VoiceClient is ready for Staff voice
[2026-02-15T03:28:17.916004+00:00] DiscordPHP.DEBUG: BUCKET patchwebhooks/:application_id/:interaction_token/messages/@original queued REQ PATCH webhooks/1471909193886859294/aW50ZXJhY3Rpb246MTQ3MjQzNDMxMTk4OTk1NjgxMzp1UWR6ZTNYcFpnRDNnNDNxQzREWEQ3NkQ0M0JjejJTeW5IWkVrSEtYN1ZwU05tWFhkaVdFWnRkOWJwUzFvTzVQNnA5R0ZHeHlCdnUzQnhQeW9HVnJEZW9JbmVhUldmN2VQNmRBNzA2STAyZEllWlNOMWlydXBJSUhFR1J2d1lVWQ/messages/@original
[2026-02-15T03:28:17.916149+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":0,"empty":true}
[2026-02-15T03:28:17.916994+00:00] DiscordPHP.INFO: voice client is ready
[2026-02-15T03:28:17.917304+00:00] DiscordPHP.INFO: set voice client bitrate {"bitrate":64000}
[2026-02-15T03:28:17.918460+00:00] DiscordPHP.DEBUG: received any packet {"data":{"attributes":{"any":0},"created":true,"class":"Discord\\Voice\\Any"}}
[2026-02-15 03:28:17] [info] Bot voice state updated: Channel=None
[2026-02-15 03:28:17] [info] Bot was disconnected from voice channel. Cleaning up...
[2026-02-15T03:28:17.975042+00:00] DiscordPHP.WARNING: voice websocket closed {"op":1000,"reason":""}
[2026-02-15T03:28:17.975288+00:00] DiscordPHP.WARNING: closing UDP client
[2026-02-15T03:28:17.975470+00:00] DiscordPHP.WARNING: received critical opcode - not reconnecting {"op":1000,"reason":""}
[2026-02-15T03:28:17.975548+00:00] DiscordPHP.WARNING: voice manager closed
[2026-02-15T03:28:17.975631+00:00] DiscordPHP.WARNING: voice client closed
[2026-02-15T03:28:18.251125+00:00] DiscordPHP.DEBUG: REQ PATCH webhooks/1471909193886859294/aW50ZXJhY3Rpb246MTQ3MjQzNDMxMTk4OTk1NjgxMzp1UWR6ZTNYcFpnRDNnNDNxQzREWEQ3NkQ0M0JjejJTeW5IWkVrSEtYN1ZwU05tWFhkaVdFWnRkOWJwUzFvTzVQNnA5R0ZHeHlCdnUzQnhQeW9HVnJEZW9JbmVhUldmN2VQNmRBNzA2STAyZEllWlNOMWlydXBJSUhFR1J2d1lVWQ/messages/@original successful
[2026-02-15T03:28:18.251299+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":0,"empty":true}
[2026-02-15T03:28:24.906743+00:00] DiscordPHP.DEBUG: resetting payload count {"count":5}
[2026-02-15T03:28:28.694308+00:00] DiscordPHP.DEBUG: sending heartbeat {"seq":13}
[2026-02-15T03:28:28.739533+00:00] DiscordPHP.DEBUG: received heartbeat ack {"response_time":44.91400718688965}
[2026-02-15T03:28:31.209767+00:00] DiscordPHP.DEBUG: sending heartbeat
DEBUG: Interaction received: join
[2026-02-15T03:28:34.419694+00:00] DiscordPHP.DEBUG: BUCKET postinteractions/:interaction_id/:interaction_token/callback queued REQ POST interactions/1472434386904285278/aW50ZXJhY3Rpb246MTQ3MjQzNDM4NjkwNDI4NTI3ODpSS1lqSUl5OWZmd3RhTmhvR3FuQnJZdThmZEsxc3JtSTlEeU1UZHlIc0RPVEVRTkMyRnR4Y3UyRGs3NDJyVHBJTDFNNTY2bzlHS2NYTDg4SmQ4OVVPWllyUE9iRnJ0QkhiOFM5R0RaQ05qM2l5S0kwQm9qM0F1eDdTRWNwT0FNbg/callback
[2026-02-15T03:28:34.419803+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":0,"empty":true}
DEBUG: Interaction acknowledged
[2026-02-15 03:28:34] [info] Received interaction: join from rio.xmc
[2026-02-15T03:28:34.425542+00:00] DiscordPHP.DEBUG: BUCKET patchwebhooks/:application_id/:interaction_token/messages/@original queued REQ PATCH webhooks/1471909193886859294/aW50ZXJhY3Rpb246MTQ3MjQzNDM4NjkwNDI4NTI3ODpSS1lqSUl5OWZmd3RhTmhvR3FuQnJZdThmZEsxc3JtSTlEeU1UZHlIc0RPVEVRTkMyRnR4Y3UyRGs3NDJyVHBJTDFNNTY2bzlHS2NYTDg4SmQ4OVVPWllyUE9iRnJ0QkhiOFM5R0RaQ05qM2l5S0kwQm9qM0F1eDdTRWNwT0FNbg/messages/@original
[2026-02-15T03:28:34.425775+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":1,"empty":true}
DEBUG: safeJoin called for guild 1428530728706117632, channel Staff voice
[2026-02-15T03:28:34.427175+00:00] DiscordPHP.DEBUG: BUCKET patchwebhooks/:application_id/:interaction_token/messages/@original queued REQ PATCH webhooks/1471909193886859294/aW50ZXJhY3Rpb246MTQ3MjQzNDM4NjkwNDI4NTI3ODpSS1lqSUl5OWZmd3RhTmhvR3FuQnJZdThmZEsxc3JtSTlEeU1UZHlIc0RPVEVRTkMyRnR4Y3UyRGs3NDJyVHBJTDFNNTY2bzlHS2NYTDg4SmQ4OVVPWllyUE9iRnJ0QkhiOFM5R0RaQ05qM2l5S0kwQm9qM0F1eDdTRWNwT0FNbg/messages/@original
[2026-02-15 03:28:34] [info] Executing joinVoiceChannel for guild 1428530728706117632, channel Staff voice
[2026-02-15 03:28:34] [info] Bot voice state updated: Channel=Staff voice
[2026-02-15T03:28:34.521060+00:00] DiscordPHP.INFO: received session id for voice session {"guild":"1428530728706117632","session_id":"b5e86c4be0d6b68bbdc63f31fe2aa60b"}
[2026-02-15T03:28:34.521275+00:00] DiscordPHP.INFO: received session id for voice session {"guild":"1428530728706117632","session_id":"b5e86c4be0d6b68bbdc63f31fe2aa60b"}
[2026-02-15T03:28:34.706547+00:00] DiscordPHP.INFO: received token and endpoint for voice session {"guild":"1428530728706117632","token":"*****","endpoint":"c-fra20-5f509e9b.discord.media:2083"}
[2026-02-15T03:28:34.708841+00:00] DiscordPHP.DEBUG: Creating new voice websocket {"endpoint":"c-fra20-5f509e9b.discord.media:2083"}
[2026-02-15T03:28:34.709886+00:00] DiscordPHP.INFO: received token and endpoint for voice session {"guild":"1428530728706117632","token":"*****","endpoint":"c-fra20-5f509e9b.discord.media:2083"}
[2026-02-15T03:28:34.711750+00:00] DiscordPHP.DEBUG: Creating new voice websocket {"endpoint":"c-fra20-5f509e9b.discord.media:2083"}
[2026-02-15T03:28:34.911834+00:00] DiscordPHP.DEBUG: REQ POST interactions/1472434386904285278/aW50ZXJhY3Rpb246MTQ3MjQzNDM4NjkwNDI4NTI3ODpSS1lqSUl5OWZmd3RhTmhvR3FuQnJZdThmZEsxc3JtSTlEeU1UZHlIc0RPVEVRTkMyRnR4Y3UyRGs3NDJyVHBJTDFNNTY2bzlHS2NYTDg4SmQ4OVVPWllyUE9iRnJ0QkhiOFM5R0RaQ05qM2l5S0kwQm9qM0F1eDdTRWNwT0FNbg/callback successful
[2026-02-15T03:28:34.911979+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":1,"empty":true}
[2026-02-15T03:28:35.268858+00:00] DiscordPHP.DEBUG: REQ PATCH webhooks/1471909193886859294/aW50ZXJhY3Rpb246MTQ3MjQzNDM4NjkwNDI4NTI3ODpSS1lqSUl5OWZmd3RhTmhvR3FuQnJZdThmZEsxc3JtSTlEeU1UZHlIc0RPVEVRTkMyRnR4Y3UyRGs3NDJyVHBJTDFNNTY2bzlHS2NYTDg4SmQ4OVVPWllyUE9iRnJ0QkhiOFM5R0RaQ05qM2l5S0kwQm9qM0F1eDdTRWNwT0FNbg/messages/@original successful
[2026-02-15T03:28:35.269027+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":0,"empty":true}
[2026-02-15T03:28:35.269142+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":0,"empty":true}
[2026-02-15T03:28:35.309445+00:00] DiscordPHP.DEBUG: connected to voice websocket
[2026-02-15T03:28:35.309846+00:00] DiscordPHP.DEBUG: sending identify {"packet":{"op":0,"d":{"server_id":"1428530728706117632","user_id":"1471909193886859294","token":"*****","max_dave_protocol_version":0,"session_id":"b5e86c4be0d6b68bbdc63f31fe2aa60b"}}}
[2026-02-15T03:28:35.310565+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:28:35.317888+00:00] DiscordPHP.DEBUG: connected to voice websocket
[2026-02-15T03:28:35.318152+00:00] DiscordPHP.DEBUG: sending identify {"packet":{"op":0,"d":{"server_id":"1428530728706117632","user_id":"1471909193886859294","token":"*****","max_dave_protocol_version":0,"session_id":"b5e86c4be0d6b68bbdc63f31fe2aa60b"}}}
[2026-02-15T03:28:35.318414+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:28:35.440883+00:00] DiscordPHP.DEBUG: received voice ready packet {"data":{"streams":[{"type":"video","ssrc":4517,"rtx_ssrc":4518,"rid":"","quality":0,"active":false}],"ssrc":4516,"port":19314,"modes":["aead_aes256_gcm_rtpsize","aead_xchacha20_poly1305_rtpsize"],"ip":"104.29.147.190","experiments":["fixed_keyframe_interval"]}}
[2026-02-15T03:28:35.441369+00:00] DiscordPHP.DEBUG: received heartbeat ack {"response_time":441.35594367980957}
[2026-02-15T03:28:35.441698+00:00] DiscordPHP.DEBUG: received client connect packet {"data":{"Discord\\WebSockets\\Payload":{"op":11,"d":{"user_ids":["235088799074484224","830530156048285716","906246223504240641","923944350612848700","1414108278354608278"]}}}}
[2026-02-15T03:28:35.441896+00:00] DiscordPHP.DEBUG: received speaking packet {"data":{"user_id":"235088799074484224","ssrc":228,"speaking":1}}
[2026-02-15T03:28:35.442026+00:00] DiscordPHP.DEBUG: received speaking packet {"data":{"user_id":"830530156048285716","ssrc":243,"speaking":1}}
[2026-02-15T03:28:35.442137+00:00] DiscordPHP.DEBUG: received flags packet {"data":{"attributes":{"user_id":"235088799074484224","flags":null},"created":true,"class":"Discord\\Voice\\Flags"}}
[2026-02-15T03:28:35.442216+00:00] DiscordPHP.DEBUG: received flags packet {"data":{"attributes":{"user_id":"830530156048285716","flags":null},"created":true,"class":"Discord\\Voice\\Flags"}}
[2026-02-15T03:28:35.442290+00:00] DiscordPHP.DEBUG: received flags packet {"data":{"attributes":{"user_id":"906246223504240641","flags":null},"created":true,"class":"Discord\\Voice\\Flags"}}
[2026-02-15T03:28:35.442402+00:00] DiscordPHP.DEBUG: received flags packet {"data":{"attributes":{"user_id":"923944350612848700","flags":2},"created":true,"class":"Discord\\Voice\\Flags"}}
[2026-02-15T03:28:35.442487+00:00] DiscordPHP.DEBUG: received flags packet {"data":{"attributes":{"user_id":"1414108278354608278","flags":2},"created":true,"class":"Discord\\Voice\\Flags"}}
[2026-02-15T03:28:35.442570+00:00] DiscordPHP.DEBUG: received platform packet {"data":{"attributes":{"user_id":"235088799074484224","platform":null},"created":true,"class":"Discord\\Voice\\Platform"}}
[2026-02-15T03:28:35.451210+00:00] DiscordPHP.DEBUG: received voice ready packet {"data":{"streams":[{"type":"video","ssrc":4520,"rtx_ssrc":4521,"rid":"","quality":0,"active":false}],"ssrc":4519,"port":19314,"modes":["aead_aes256_gcm_rtpsize","aead_xchacha20_poly1305_rtpsize"],"ip":"104.29.147.190","experiments":["fixed_keyframe_interval"]}}
[2026-02-15T03:28:35.451971+00:00] DiscordPHP.DEBUG: received heartbeat ack {"response_time":451.94005966186523}
[2026-02-15T03:28:35.452369+00:00] DiscordPHP.DEBUG: received client connect packet {"data":{"Discord\\WebSockets\\Payload":{"op":11,"d":{"user_ids":["235088799074484224","830530156048285716","906246223504240641","923944350612848700","1414108278354608278"]}}}}
[2026-02-15T03:28:35.452673+00:00] DiscordPHP.DEBUG: received speaking packet {"data":{"user_id":"235088799074484224","ssrc":228,"speaking":1}}
[2026-02-15T03:28:35.452913+00:00] DiscordPHP.DEBUG: received speaking packet {"data":{"user_id":"830530156048285716","ssrc":243,"speaking":1}}
[2026-02-15T03:28:35.453161+00:00] DiscordPHP.DEBUG: received flags packet {"data":{"attributes":{"user_id":"235088799074484224","flags":null},"created":true,"class":"Discord\\Voice\\Flags"}}
[2026-02-15T03:28:35.453270+00:00] DiscordPHP.DEBUG: received flags packet {"data":{"attributes":{"user_id":"830530156048285716","flags":null},"created":true,"class":"Discord\\Voice\\Flags"}}
[2026-02-15T03:28:35.453340+00:00] DiscordPHP.DEBUG: received flags packet {"data":{"attributes":{"user_id":"906246223504240641","flags":null},"created":true,"class":"Discord\\Voice\\Flags"}}
[2026-02-15T03:28:35.453411+00:00] DiscordPHP.DEBUG: received flags packet {"data":{"attributes":{"user_id":"923944350612848700","flags":2},"created":true,"class":"Discord\\Voice\\Flags"}}
[2026-02-15T03:28:35.453474+00:00] DiscordPHP.DEBUG: received flags packet {"data":{"attributes":{"user_id":"1414108278354608278","flags":2},"created":true,"class":"Discord\\Voice\\Flags"}}
[2026-02-15T03:28:35.471922+00:00] DiscordPHP.DEBUG: REQ PATCH webhooks/1471909193886859294/aW50ZXJhY3Rpb246MTQ3MjQzNDM4NjkwNDI4NTI3ODpSS1lqSUl5OWZmd3RhTmhvR3FuQnJZdThmZEsxc3JtSTlEeU1UZHlIc0RPVEVRTkMyRnR4Y3UyRGs3NDJyVHBJTDFNNTY2bzlHS2NYTDg4SmQ4OVVPWllyUE9iRnJ0QkhiOFM5R0RaQ05qM2l5S0kwQm9qM0F1eDdTRWNwT0FNbg/messages/@original successful
[2026-02-15T03:28:35.472119+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":0,"empty":true}
[2026-02-15T03:28:35.547222+00:00] DiscordPHP.DEBUG: received platform packet {"data":{"attributes":{"user_id":"235088799074484224","platform":null},"created":true,"class":"Discord\\Voice\\Platform"}}
[2026-02-15T03:28:35.547465+00:00] DiscordPHP.DEBUG: received platform packet {"data":{"attributes":{"user_id":"830530156048285716","platform":null},"created":true,"class":"Discord\\Voice\\Platform"}}
[2026-02-15T03:28:35.547547+00:00] DiscordPHP.DEBUG: received platform packet {"data":{"attributes":{"user_id":"906246223504240641","platform":null},"created":true,"class":"Discord\\Voice\\Platform"}}
[2026-02-15T03:28:35.547613+00:00] DiscordPHP.DEBUG: received platform packet {"data":{"attributes":{"user_id":"923944350612848700","platform":1},"created":true,"class":"Discord\\Voice\\Platform"}}
[2026-02-15T03:28:35.547679+00:00] DiscordPHP.DEBUG: received platform packet {"data":{"attributes":{"user_id":"1414108278354608278","platform":1},"created":true,"class":"Discord\\Voice\\Platform"}}
[2026-02-15T03:28:35.548219+00:00] DiscordPHP.DEBUG: received platform packet {"data":{"attributes":{"user_id":"830530156048285716","platform":null},"created":true,"class":"Discord\\Voice\\Platform"}}
[2026-02-15T03:28:35.548407+00:00] DiscordPHP.DEBUG: received platform packet {"data":{"attributes":{"user_id":"906246223504240641","platform":null},"created":true,"class":"Discord\\Voice\\Platform"}}
[2026-02-15T03:28:35.548495+00:00] DiscordPHP.DEBUG: received platform packet {"data":{"attributes":{"user_id":"923944350612848700","platform":1},"created":true,"class":"Discord\\Voice\\Platform"}}
[2026-02-15T03:28:35.548710+00:00] DiscordPHP.DEBUG: received platform packet {"data":{"attributes":{"user_id":"1414108278354608278","platform":1},"created":true,"class":"Discord\\Voice\\Platform"}}
[2026-02-15T03:28:35.548945+00:00] DiscordPHP.WARNING: voice websocket closed {"op":4006,"reason":"Session is no longer valid."}
[2026-02-15T03:28:35.549077+00:00] DiscordPHP.WARNING: closing UDP client
[2026-02-15T03:28:35.549373+00:00] DiscordPHP.WARNING: received critical opcode - not reconnecting {"op":4006,"reason":"Session is no longer valid."}
[2026-02-15T03:28:35.549536+00:00] DiscordPHP.DEBUG: sessions {"voice_sessions":{"1428530728706117632":null}}
[2026-02-15T03:28:35.657655+00:00] DiscordPHP.DEBUG: received our IP and port {"ip":"34.16.53.23","port":2945}
[2026-02-15T03:28:44.969064+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:28:49.065205+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:28:49.068686+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:28:49.182889+00:00] DiscordPHP.DEBUG: received heartbeat ack {"response_time":182.86609649658203}
[2026-02-15T03:28:49.191620+00:00] DiscordPHP.DEBUG: sent UDP heartbeat
DEBUG: Interaction received: play
[2026-02-15T03:28:52.609233+00:00] DiscordPHP.DEBUG: BUCKET postinteractions/:interaction_id/:interaction_token/callback queued REQ POST interactions/1472434463286755348/aW50ZXJhY3Rpb246MTQ3MjQzNDQ2MzI4Njc1NTM0ODpNZlkxaEp1NENGNjMzdTJUckpVT0htcFpDQ3V0ZWgzV3c5bHl0b3FwUHNzTWlmcXhsVThuYmFBeXlYTEtZNG9FdkRtWWJ3amFoU2J6ZmJKbWg1Q3VIMWNYb0lkOFJJOWV1czR4QlZtYjdzdDQzSDhzdEJmSGV0clhSeEg3Q3pSNQ/callback
[2026-02-15T03:28:52.609365+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":0,"empty":true}
DEBUG: Interaction acknowledged
[2026-02-15 03:28:52] [info] Received interaction: play from rio.xmc
[2026-02-15T03:28:52.615773+00:00] DiscordPHP.DEBUG: BUCKET patchwebhooks/:application_id/:interaction_token/messages/@original queued REQ PATCH webhooks/1471909193886859294/aW50ZXJhY3Rpb246MTQ3MjQzNDQ2MzI4Njc1NTM0ODpNZlkxaEp1NENGNjMzdTJUckpVT0htcFpDQ3V0ZWgzV3c5bHl0b3FwUHNzTWlmcXhsVThuYmFBeXlYTEtZNG9FdkRtWWJ3amFoU2J6ZmJKbWg1Q3VIMWNYb0lkOFJJOWV1czR4QlZtYjdzdDQzSDhzdEJmSGV0clhSeEg3Q3pSNQ/messages/@original
[2026-02-15T03:28:52.616034+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":1,"empty":true}
DEBUG: safeJoin called for guild 1428530728706117632, channel Staff voice
[2026-02-15 03:28:52] [info] Join already in progress for guild 1428530728706117632
[2026-02-15T03:28:52.619416+00:00] DiscordPHP.DEBUG: BUCKET patchwebhooks/:application_id/:interaction_token/messages/@original queued REQ PATCH webhooks/1471909193886859294/aW50ZXJhY3Rpb246MTQ3MjQzNDQ2MzI4Njc1NTM0ODpNZlkxaEp1NENGNjMzdTJUckpVT0htcFpDQ3V0ZWgzV3c5bHl0b3FwUHNzTWlmcXhsVThuYmFBeXlYTEtZNG9FdkRtWWJ3amFoU2J6ZmJKbWg1Q3VIMWNYb0lkOFJJOWV1czR4QlZtYjdzdDQzSDhzdEJmSGV0clhSeEg3Q3pSNQ/messages/@original
[2026-02-15T03:28:53.000086+00:00] DiscordPHP.DEBUG: REQ POST interactions/1472434463286755348/aW50ZXJhY3Rpb246MTQ3MjQzNDQ2MzI4Njc1NTM0ODpNZlkxaEp1NENGNjMzdTJUckpVT0htcFpDQ3V0ZWgzV3c5bHl0b3FwUHNzTWlmcXhsVThuYmFBeXlYTEtZNG9FdkRtWWJ3amFoU2J6ZmJKbWg1Q3VIMWNYb0lkOFJJOWV1czR4QlZtYjdzdDQzSDhzdEJmSGV0clhSeEg3Q3pSNQ/callback successful
[2026-02-15T03:28:53.000252+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":1,"empty":true}
[2026-02-15T03:28:53.287393+00:00] DiscordPHP.DEBUG: REQ PATCH webhooks/1471909193886859294/aW50ZXJhY3Rpb246MTQ3MjQzNDQ2MzI4Njc1NTM0ODpNZlkxaEp1NENGNjMzdTJUckpVT0htcFpDQ3V0ZWgzV3c5bHl0b3FwUHNzTWlmcXhsVThuYmFBeXlYTEtZNG9FdkRtWWJ3amFoU2J6ZmJKbWg1Q3VIMWNYb0lkOFJJOWV1czR4QlZtYjdzdDQzSDhzdEJmSGV0clhSeEg3Q3pSNQ/messages/@original successful
[2026-02-15T03:28:53.287566+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":0,"empty":true}
[2026-02-15T03:28:53.287685+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":0,"empty":true}
[2026-02-15T03:28:53.506215+00:00] DiscordPHP.DEBUG: REQ PATCH webhooks/1471909193886859294/aW50ZXJhY3Rpb246MTQ3MjQzNDQ2MzI4Njc1NTM0ODpNZlkxaEp1NENGNjMzdTJUckpVT0htcFpDQ3V0ZWgzV3c5bHl0b3FwUHNzTWlmcXhsVThuYmFBeXlYTEtZNG9FdkRtWWJ3amFoU2J6ZmJKbWg1Q3VIMWNYb0lkOFJJOWV1czR4QlZtYjdzdDQzSDhzdEJmSGV0clhSeEg3Q3pSNQ/messages/@original successful
[2026-02-15T03:28:53.506419+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":0,"empty":true}
[2026-02-15T03:28:58.720324+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:29:02.819687+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:29:02.819858+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:29:02.937031+00:00] DiscordPHP.DEBUG: received heartbeat ack {"response_time":937.0129108428955}
[2026-02-15T03:29:02.941675+00:00] DiscordPHP.DEBUG: sent UDP heartbeat
[2026-02-15T03:29:09.950211+00:00] DiscordPHP.DEBUG: sending heartbeat {"seq":23}
[2026-02-15T03:29:09.991870+00:00] DiscordPHP.DEBUG: received heartbeat ack {"response_time":41.3210391998291}
[2026-02-15T03:29:12.472861+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:29:16.570368+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:29:16.570557+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:29:16.685530+00:00] DiscordPHP.DEBUG: received heartbeat ack {"response_time":685.4979991912842}
[2026-02-15T03:29:16.691883+00:00] DiscordPHP.DEBUG: sent UDP heartbeat
[2026-02-15 03:29:19] [info] Safety timeout: Clearing stuck join state for guild 1428530728706117632
[2026-02-15T03:29:19.433351+00:00] DiscordPHP.DEBUG: BUCKET patchwebhooks/:application_id/:interaction_token/messages/@original queued REQ PATCH webhooks/1471909193886859294/aW50ZXJhY3Rpb246MTQ3MjQzNDM4NjkwNDI4NTI3ODpSS1lqSUl5OWZmd3RhTmhvR3FuQnJZdThmZEsxc3JtSTlEeU1UZHlIc0RPVEVRTkMyRnR4Y3UyRGs3NDJyVHBJTDFNNTY2bzlHS2NYTDg4SmQ4OVVPWllyUE9iRnJ0QkhiOFM5R0RaQ05qM2l5S0kwQm9qM0F1eDdTRWNwT0FNbg/messages/@original
[2026-02-15T03:29:19.433464+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":0,"empty":true}
[2026-02-15T03:29:19.758873+00:00] DiscordPHP.DEBUG: REQ PATCH webhooks/1471909193886859294/aW50ZXJhY3Rpb246MTQ3MjQzNDM4NjkwNDI4NTI3ODpSS1lqSUl5OWZmd3RhTmhvR3FuQnJZdThmZEsxc3JtSTlEeU1UZHlIc0RPVEVRTkMyRnR4Y3UyRGs3NDJyVHBJTDFNNTY2bzlHS2NYTDg4SmQ4OVVPWllyUE9iRnJ0QkhiOFM5R0RaQ05qM2l5S0kwQm9qM0F1eDdTRWNwT0FNbg/messages/@original successful
[2026-02-15T03:29:19.759097+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":0,"empty":true}
[2026-02-15T03:29:24.908855+00:00] DiscordPHP.DEBUG: resetting payload count {"count":3}
[2026-02-15T03:29:26.224881+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:29:30.325158+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:29:30.325357+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:29:30.442147+00:00] DiscordPHP.DEBUG: sent UDP heartbeat
[2026-02-15T03:29:30.455700+00:00] DiscordPHP.DEBUG: received heartbeat ack {"response_time":455.66797256469727}
DEBUG: Interaction received: status
[2026-02-15T03:29:32.652389+00:00] DiscordPHP.DEBUG: BUCKET postinteractions/:interaction_id/:interaction_token/callback queued REQ POST interactions/1472434631117901926/aW50ZXJhY3Rpb246MTQ3MjQzNDYzMTExNzkwMTkyNjo0UmFPOFR2bG95eGRuNTBqRDh6V3J5ZEVXTHFyTmVLVjBlczhiNXg5d2NZUndBZ3dXTTU3a3RNRGp2UDJKazBaOWNrTDVOZ2xlWElScFVWV3hsb1JOZzV5dHJ3RTdOOFE5aEJTZnNDbjdoTGlmaFNiVkI3UEZoS0ZmS2xWVEllSA/callback
[2026-02-15T03:29:32.652512+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":0,"empty":true}
DEBUG: Interaction acknowledged
[2026-02-15 03:29:32] [info] Received interaction: status from rio.xmc
[2026-02-15T03:29:32.657826+00:00] DiscordPHP.DEBUG: BUCKET patchwebhooks/:application_id/:interaction_token/messages/@original queued REQ PATCH webhooks/1471909193886859294/aW50ZXJhY3Rpb246MTQ3MjQzNDYzMTExNzkwMTkyNjo0UmFPOFR2bG95eGRuNTBqRDh6V3J5ZEVXTHFyTmVLVjBlczhiNXg5d2NZUndBZ3dXTTU3a3RNRGp2UDJKazBaOWNrTDVOZ2xlWElScFVWV3hsb1JOZzV5dHJ3RTdOOFE5aEJTZnNDbjdoTGlmaFNiVkI3UEZoS0ZmS2xWVEllSA/messages/@original
[2026-02-15T03:29:32.657941+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":1,"empty":true}
[2026-02-15T03:29:33.103742+00:00] DiscordPHP.DEBUG: REQ POST interactions/1472434631117901926/aW50ZXJhY3Rpb246MTQ3MjQzNDYzMTExNzkwMTkyNjo0UmFPOFR2bG95eGRuNTBqRDh6V3J5ZEVXTHFyTmVLVjBlczhiNXg5d2NZUndBZ3dXTTU3a3RNRGp2UDJKazBaOWNrTDVOZ2xlWElScFVWV3hsb1JOZzV5dHJ3RTdOOFE5aEJTZnNDbjdoTGlmaFNiVkI3UEZoS0ZmS2xWVEllSA/callback successful
[2026-02-15T03:29:33.103907+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":1,"empty":true}
[2026-02-15T03:29:33.397627+00:00] DiscordPHP.DEBUG: REQ PATCH webhooks/1471909193886859294/aW50ZXJhY3Rpb246MTQ3MjQzNDYzMTExNzkwMTkyNjo0UmFPOFR2bG95eGRuNTBqRDh6V3J5ZEVXTHFyTmVLVjBlczhiNXg5d2NZUndBZ3dXTTU3a3RNRGp2UDJKazBaOWNrTDVOZ2xlWElScFVWV3hsb1JOZzV5dHJ3RTdOOFE5aEJTZnNDbjdoTGlmaFNiVkI3UEZoS0ZmS2xWVEllSA/messages/@original successful
[2026-02-15T03:29:33.397811+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":0,"empty":true}
DEBUG: Interaction received: out
[2026-02-15T03:29:39.853437+00:00] DiscordPHP.DEBUG: BUCKET postinteractions/:interaction_id/:interaction_token/callback queued REQ POST interactions/1472434661375611093/aW50ZXJhY3Rpb246MTQ3MjQzNDY2MTM3NTYxMTA5MzpZU094M0t0dFJrMDByTVRHMU03cjREdVk3VzV6aDJ6dXZPTjJRbkNWWlNqTURjMHVwUEFEUFBDOTVCa3p0bjlod09MbmNzUkFIdXhseFZwWGFUNGRWR3NZMEw0UDdWRGN2c1BsODlBc1RtNEJLYmNrQU9LbkE1dmlHb0dFMXlWOA/callback
[2026-02-15T03:29:39.853556+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":0,"empty":true}
DEBUG: Interaction acknowledged
[2026-02-15 03:29:39] [info] Received interaction: out from rio.xmc
[2026-02-15T03:29:39.858138+00:00] DiscordPHP.DEBUG: BUCKET patchwebhooks/:application_id/:interaction_token/messages/@original queued REQ PATCH webhooks/1471909193886859294/aW50ZXJhY3Rpb246MTQ3MjQzNDY2MTM3NTYxMTA5MzpZU094M0t0dFJrMDByTVRHMU03cjREdVk3VzV6aDJ6dXZPTjJRbkNWWlNqTURjMHVwUEFEUFBDOTVCa3p0bjlod09MbmNzUkFIdXhseFZwWGFUNGRWR3NZMEw0UDdWRGN2c1BsODlBc1RtNEJLYmNrQU9LbkE1dmlHb0dFMXlWOA/messages/@original
[2026-02-15T03:29:39.858265+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":1,"empty":true}
[2026-02-15T03:29:39.975094+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:29:40.411789+00:00] DiscordPHP.DEBUG: REQ POST interactions/1472434661375611093/aW50ZXJhY3Rpb246MTQ3MjQzNDY2MTM3NTYxMTA5MzpZU094M0t0dFJrMDByTVRHMU03cjREdVk3VzV6aDJ6dXZPTjJRbkNWWlNqTURjMHVwUEFEUFBDOTVCa3p0bjlod09MbmNzUkFIdXhseFZwWGFUNGRWR3NZMEw0UDdWRGN2c1BsODlBc1RtNEJLYmNrQU9LbkE1dmlHb0dFMXlWOA/callback successful
[2026-02-15T03:29:40.411999+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":1,"empty":true}
[2026-02-15T03:29:41.996892+00:00] DiscordPHP.DEBUG: REQ PATCH webhooks/1471909193886859294/aW50ZXJhY3Rpb246MTQ3MjQzNDY2MTM3NTYxMTA5MzpZU094M0t0dFJrMDByTVRHMU03cjREdVk3VzV6aDJ6dXZPTjJRbkNWWlNqTURjMHVwUEFEUFBDOTVCa3p0bjlod09MbmNzUkFIdXhseFZwWGFUNGRWR3NZMEw0UDdWRGN2c1BsODlBc1RtNEJLYmNrQU9LbkE1dmlHb0dFMXlWOA/messages/@original successful
[2026-02-15T03:29:41.997051+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":0,"empty":true}
[2026-02-15T03:29:44.075543+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:29:44.075697+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:29:44.192453+00:00] DiscordPHP.DEBUG: sent UDP heartbeat
[2026-02-15T03:29:44.193313+00:00] DiscordPHP.DEBUG: received heartbeat ack {"response_time":193.29404830932617}
DEBUG: Interaction received: out
[2026-02-15T03:29:47.152202+00:00] DiscordPHP.DEBUG: BUCKET postinteractions/:interaction_id/:interaction_token/callback queued REQ POST interactions/1472434692086300713/aW50ZXJhY3Rpb246MTQ3MjQzNDY5MjA4NjMwMDcxMzpvb2FZeE10bWdmVnBUSVJUSkZwaXd5Z1V4TG85NDExS21wYTlnVTNVYzRyZnFCZUpvS3N4eEh1ZHlBSTZObGtxQmI1RDhTS2ZsNmQ4ejhkWlZ6SVdNcFQyMnFXUDVOcWFiMHRueURpWnFxTnRpTnlBTVlxZWlZUE1SN1lSbFhpMg/callback
[2026-02-15T03:29:47.152381+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":0,"empty":true}
DEBUG: Interaction acknowledged
[2026-02-15 03:29:47] [info] Received interaction: out from rio.xmc
[2026-02-15T03:29:47.155334+00:00] DiscordPHP.DEBUG: BUCKET patchwebhooks/:application_id/:interaction_token/messages/@original queued REQ PATCH webhooks/1471909193886859294/aW50ZXJhY3Rpb246MTQ3MjQzNDY5MjA4NjMwMDcxMzpvb2FZeE10bWdmVnBUSVJUSkZwaXd5Z1V4TG85NDExS21wYTlnVTNVYzRyZnFCZUpvS3N4eEh1ZHlBSTZObGtxQmI1RDhTS2ZsNmQ4ejhkWlZ6SVdNcFQyMnFXUDVOcWFiMHRueURpWnFxTnRpTnlBTVlxZWlZUE1SN1lSbFhpMg/messages/@original
[2026-02-15T03:29:47.155485+00:00] DiscordPHP.DEBUG: http not checking interaction queue {"waiting":1,"empty":true}
[2026-02-15T03:29:47.727737+00:00] DiscordPHP.DEBUG: REQ POST interactions/1472434692086300713/aW50ZXJhY3Rpb246MTQ3MjQzNDY5MjA4NjMwMDcxMzpvb2FZeE10bWdmVnBUSVJUSkZwaXd5Z1V4TG85NDExS21wYTlnVTNVYzRyZnFCZUpvS3N4eEh1ZHlBSTZObGtxQmI1RDhTS2ZsNmQ4ejhkWlZ6SVdNcFQyMnFXUDVOcWFiMHRueURpWnFxTnRpTnlBTVlxZWlZUE1SN1lSbFhpMg/callback successful
[2026-02-15T03:29:47.727975+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":1,"empty":true}
[2026-02-15T03:29:48.028250+00:00] DiscordPHP.DEBUG: REQ PATCH webhooks/1471909193886859294/aW50ZXJhY3Rpb246MTQ3MjQzNDY5MjA4NjMwMDcxMzpvb2FZeE10bWdmVnBUSVJUSkZwaXd5Z1V4TG85NDExS21wYTlnVTNVYzRyZnFCZUpvS3N4eEh1ZHlBSTZObGtxQmI1RDhTS2ZsNmQ4ejhkWlZ6SVdNcFQyMnFXUDVOcWFiMHRueURpWnFxTnRpTnlBTVlxZWlZUE1SN1lSbFhpMg/messages/@original successful
[2026-02-15T03:29:48.028423+00:00] DiscordPHP.DEBUG: http not checking queue {"waiting":0,"empty":true}
[2026-02-15T03:29:51.203120+00:00] DiscordPHP.DEBUG: sending heartbeat {"seq":33}
[2026-02-15T03:29:51.245193+00:00] DiscordPHP.DEBUG: received heartbeat ack {"response_time":41.7628288269043}
[2026-02-15T03:29:53.727712+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:29:57.829729+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:29:57.830012+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:29:57.942696+00:00] DiscordPHP.DEBUG: sent UDP heartbeat
[2026-02-15T03:29:57.944615+00:00] DiscordPHP.DEBUG: received heartbeat ack {"response_time":944.5939064025879}
[2026-02-15T03:30:07.480506+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:30:11.584667+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:30:11.584897+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:30:11.693053+00:00] DiscordPHP.DEBUG: sent UDP heartbeat
[2026-02-15T03:30:11.700464+00:00] DiscordPHP.DEBUG: received heartbeat ack {"response_time":700.4449367523193}
[2026-02-15T03:30:21.238817+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:30:24.912481+00:00] DiscordPHP.DEBUG: resetting payload count {"count":1}
[2026-02-15T03:30:25.335410+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:30:25.335594+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:30:25.443280+00:00] DiscordPHP.DEBUG: sent UDP heartbeat
[2026-02-15T03:30:25.450392+00:00] DiscordPHP.DEBUG: received heartbeat ack {"response_time":450.3750801086426}
[2026-02-15T03:30:32.458701+00:00] DiscordPHP.DEBUG: sending heartbeat {"seq":36}
[2026-02-15T03:30:32.523958+00:00] DiscordPHP.DEBUG: received heartbeat ack {"response_time":64.94998931884766}
[2026-02-15T03:30:34.989175+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:30:39.088612+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:30:39.088830+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:30:39.193527+00:00] DiscordPHP.DEBUG: sent UDP heartbeat
[2026-02-15T03:30:39.203347+00:00] DiscordPHP.DEBUG: received heartbeat ack {"response_time":203.31597328186035}
[2026-02-15T03:30:48.748616+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:30:52.843432+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:30:52.848927+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:30:52.963523+00:00] DiscordPHP.DEBUG: sent UDP heartbeat
[2026-02-15T03:30:52.999276+00:00] DiscordPHP.DEBUG: received heartbeat ack {"response_time":999.2470741271973}
[2026-02-15T03:31:02.506009+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:31:06.752983+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:31:06.753099+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:31:06.753167+00:00] DiscordPHP.DEBUG: sent UDP heartbeat
[2026-02-15T03:31:07.005979+00:00] DiscordPHP.DEBUG: received heartbeat ack {"response_time":1005.9559345245361}
[2026-02-15T03:31:13.716659+00:00] DiscordPHP.DEBUG: sending heartbeat {"seq":36}
[2026-02-15T03:31:13.810053+00:00] DiscordPHP.DEBUG: received heartbeat ack {"response_time":84.32507514953613}
[2026-02-15T03:31:16.257583+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:31:20.508388+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:31:20.508556+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:31:20.508637+00:00] DiscordPHP.DEBUG: sent UDP heartbeat
[2026-02-15T03:31:20.625022+00:00] DiscordPHP.DEBUG: received heartbeat ack {"response_time":625.0040531158447}
[2026-02-15T03:31:24.918665+00:00] DiscordPHP.DEBUG: resetting payload count {"count":2}
[2026-02-15T03:31:30.149898+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:31:34.262629+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:31:34.262880+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:31:34.263043+00:00] DiscordPHP.DEBUG: sent UDP heartbeat
[2026-02-15T03:31:34.380328+00:00] DiscordPHP.DEBUG: received heartbeat ack {"response_time":380.2371025085449}
[2026-02-15T03:31:44.016884+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:31:48.016809+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:31:48.016972+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:31:48.017055+00:00] DiscordPHP.DEBUG: sent UDP heartbeat
[2026-02-15T03:31:48.263625+00:00] DiscordPHP.DEBUG: received heartbeat ack {"response_time":263.60201835632324}
[2026-02-15T03:31:55.012807+00:00] DiscordPHP.DEBUG: sending heartbeat {"seq":36}
[2026-02-15T03:31:55.267059+00:00] DiscordPHP.DEBUG: received heartbeat ack {"response_time":254.00090217590332}
[2026-02-15T03:31:57.769111+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:32:01.768548+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:32:01.768741+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:32:01.768823+00:00] DiscordPHP.DEBUG: sent UDP heartbeat
[2026-02-15T03:32:02.013668+00:00] DiscordPHP.DEBUG: received heartbeat ack {"response_time":1013.6449337005615}
[2026-02-15T03:32:11.522916+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:32:15.522434+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:32:15.522673+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:32:15.522757+00:00] DiscordPHP.DEBUG: sent UDP heartbeat
[2026-02-15T03:32:15.762900+00:00] DiscordPHP.DEBUG: received heartbeat ack {"response_time":762.8660202026367}
[2026-02-15T03:32:25.013142+00:00] DiscordPHP.DEBUG: resetting payload count {"count":1}
[2026-02-15T03:32:25.273583+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:32:29.277015+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:32:29.277451+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:32:29.277663+00:00] DiscordPHP.DEBUG: sent UDP heartbeat
[2026-02-15T03:32:29.513881+00:00] DiscordPHP.DEBUG: received heartbeat ack {"response_time":513.8580799102783}
[2026-02-15T03:32:36.269698+00:00] DiscordPHP.DEBUG: sending heartbeat {"seq":39}
[2026-02-15T03:32:36.514151+00:00] DiscordPHP.DEBUG: received heartbeat ack {"response_time":244.13704872131348}
[2026-02-15T03:32:39.026228+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:32:43.029372+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:32:43.029519+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:32:43.029627+00:00] DiscordPHP.DEBUG: sent UDP heartbeat
[2026-02-15T03:32:43.265014+00:00] DiscordPHP.DEBUG: received heartbeat ack {"response_time":264.99199867248535}
[2026-02-15T03:32:52.785647+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:32:56.784111+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:32:56.784362+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:32:56.784450+00:00] DiscordPHP.DEBUG: sent UDP heartbeat
[2026-02-15T03:32:56.900392+00:00] DiscordPHP.DEBUG: received heartbeat ack {"response_time":900.3729820251465}
[2026-02-15T03:33:06.762815+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:33:10.536124+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:33:10.536321+00:00] DiscordPHP.DEBUG: sending heartbeat
[2026-02-15T03:33:10.536401+00:00] DiscordPHP.DEBUG: sent UDP heartbeat
[2026-02-15T03:33:10.763048+00:00] DiscordPHP.DEBUG: received heartbeat ack {"response_time":763.0250453948975}