Autosave: 20260215-170412
This commit is contained in:
parent
001690b707
commit
1440c83ccf
@ -1486,11 +1486,21 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
}
|
}
|
||||||
if (msg.is_pinned) div.classList.add('pinned');
|
if (msg.is_pinned) div.classList.add('pinned');
|
||||||
|
|
||||||
const ytRegex = /(?:https?:\/\/)?(?:www\.)?(?:youtube\.com\/watch\?v=|youtu\.be\/)([a-zA-Z0-9_-]{11})/;
|
const ytRegex = /(?:https?:\/\/)?(?:www\.)?(?:youtube\.com\/(?:watch\?v=|shorts\/)|youtu\.be\/)([a-zA-Z0-9_-]{11})/;
|
||||||
|
const dmRegex = /(?:https?:\/\/)?(?:www\.)?(?:dailymotion\.com\/video\/|dai\.ly\/)([a-zA-Z0-9]+)/;
|
||||||
|
const vimeoRegex = /(?:https?:\/\/)?(?:www\.)?vimeo\.com\/(\d+)/;
|
||||||
|
|
||||||
const ytMatch = msg.content.match(ytRegex);
|
const ytMatch = msg.content.match(ytRegex);
|
||||||
let ytHtml = '';
|
const dmMatch = msg.content.match(dmRegex);
|
||||||
|
const vimeoMatch = msg.content.match(vimeoRegex);
|
||||||
|
|
||||||
|
let videoHtml = '';
|
||||||
if (ytMatch && ytMatch[1]) {
|
if (ytMatch && ytMatch[1]) {
|
||||||
ytHtml = `<div class="youtube-embed mt-2"><iframe width="100%" height="315" src="https://www.youtube.com/embed/${ytMatch[1]}" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen style="border-radius: 8px; max-width: 560px;"></iframe></div>`;
|
videoHtml = `<div class="video-embed mt-2"><iframe width="100%" height="315" src="https://www.youtube.com/embed/${ytMatch[1]}" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen style="border-radius: 8px; max-width: 560px;"></iframe></div>`;
|
||||||
|
} else if (dmMatch && dmMatch[1]) {
|
||||||
|
videoHtml = `<div class="video-embed mt-2"><iframe width="100%" height="315" src="https://www.dailymotion.com/embed/video/${dmMatch[1]}" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen style="border-radius: 8px; max-width: 560px;"></iframe></div>`;
|
||||||
|
} else if (vimeoMatch && vimeoMatch[1]) {
|
||||||
|
videoHtml = `<div class="video-embed mt-2"><iframe width="100%" height="315" src="https://player.vimeo.com/video/${vimeoMatch[1]}" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen style="border-radius: 8px; max-width: 560px;"></iframe></div>`;
|
||||||
}
|
}
|
||||||
|
|
||||||
const authorStyle = msg.role_color ? `color: ${msg.role_color};` : '';
|
const authorStyle = msg.role_color ? `color: ${msg.role_color};` : '';
|
||||||
@ -1506,8 +1516,8 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
<div class="message-text">
|
<div class="message-text">
|
||||||
${escapeHTML(msg.content).replace(/\n/g, '<br>').replace(mentionRegex, `<span class="mention">@${window.currentUsername}</span>`)}
|
${escapeHTML(msg.content).replace(/\n/g, '<br>').replace(mentionRegex, `<span class="mention">@${window.currentUsername}</span>`)}
|
||||||
${attachmentHtml}
|
${attachmentHtml}
|
||||||
${ytHtml}
|
${videoHtml}
|
||||||
${ytHtml ? '' : embedHtml}
|
${videoHtml ? '' : embedHtml}
|
||||||
</div>
|
</div>
|
||||||
<div class="message-reactions mt-1" data-message-id="${msg.id}">
|
<div class="message-reactions mt-1" data-message-id="${msg.id}">
|
||||||
<span class="add-reaction-btn" title="Add Reaction">+</span>
|
<span class="add-reaction-btn" title="Add Reaction">+</span>
|
||||||
|
|||||||
BIN
assets/pasted-20260215-164921-daccb69a.png
Normal file
BIN
assets/pasted-20260215-164921-daccb69a.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 162 KiB |
@ -4,9 +4,15 @@ require_once __DIR__ . '/../ai/LocalAIApi.php';
|
|||||||
function moderateContent($content) {
|
function moderateContent($content) {
|
||||||
if (empty(trim($content))) return ['is_safe' => true];
|
if (empty(trim($content))) return ['is_safe' => true];
|
||||||
|
|
||||||
|
// Bypass moderation for video platforms as they are handled by their own safety measures
|
||||||
|
// and often trigger false positives in AI moderation due to "lack of context".
|
||||||
|
if (preg_match('/(?:https?:\/\/)?(?:www\.)?(?:youtube\.com|youtu\.be|dailymotion\.com|dai\.ly|vimeo\.com)\//i', $content)) {
|
||||||
|
return ['is_safe' => true];
|
||||||
|
}
|
||||||
|
|
||||||
$resp = LocalAIApi::createResponse([
|
$resp = LocalAIApi::createResponse([
|
||||||
'input' => [
|
'input' => [
|
||||||
['role' => 'system', 'content' => 'You are a content moderator. Analyze the message and return a JSON object with "is_safe" (boolean) and "reason" (string, optional). Safe means no hate speech, extreme violence, or explicit sexual content.'],
|
['role' => 'system', 'content' => 'You are a content moderator. Analyze the message and return a JSON object with "is_safe" (boolean) and "reason" (string, optional). Safe means no hate speech, extreme violence, or explicit sexual content. Do not flag URLs as unsafe simply because you cannot see the content behind them.'],
|
||||||
['role' => 'user', 'content' => $content],
|
['role' => 'user', 'content' => $content],
|
||||||
],
|
],
|
||||||
]);
|
]);
|
||||||
|
|||||||
@ -11,6 +11,7 @@ function fetchOpenGraphData($url) {
|
|||||||
curl_close($ch);
|
curl_close($ch);
|
||||||
|
|
||||||
if (!$html || $info['http_code'] !== 200) return null;
|
if (!$html || $info['http_code'] !== 200) return null;
|
||||||
|
if (!class_exists('DOMDocument')) return null;
|
||||||
|
|
||||||
$doc = new DOMDocument();
|
$doc = new DOMDocument();
|
||||||
@$doc->loadHTML($html);
|
@$doc->loadHTML($html);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user