document.addEventListener('DOMContentLoaded', () => { // --- Configuration --- const API_URL = xtvlinkChat.rest_url; const NONCE = xtvlinkChat.nonce; const CHAT_DELAY = xtvlinkChat.chat_delay; // --- Element Refs --- const chatContainer = document.getElementById('xtvlink-chat-container'); const chatToggle = document.getElementById('xtvlink-chat-toggle'); const chatClose = document.getElementById('xtvlink-chat-close'); const chatMessages = document.getElementById('xtvlink-chat-messages'); const chatInput = document.getElementById('xtvlink-chat-input'); const chatSend = document.getElementById('xtvlink-chat-send'); // --- Initial State --- setTimeout(() => { if (chatToggle) { chatToggle.classList.remove('xtvlink-chat-hidden'); chatToggle.style.opacity = '1'; } }, CHAT_DELAY); // --- Event Listeners --- if (chatToggle) { chatToggle.addEventListener('click', () => { chatContainer.classList.remove('xtvlink-chat-hidden'); chatContainer.style.opacity = '1'; chatToggle.classList.add('xtvlink-chat-hidden'); chatToggle.style.opacity = '0'; }); } if (chatClose) { chatClose.addEventListener('click', () => { chatContainer.classList.add('xtvlink-chat-hidden'); chatContainer.style.opacity = '0'; chatToggle.classList.remove('xtvlink-chat-hidden'); chatToggle.style.opacity = '1'; }); } if (chatSend) { chatSend.addEventListener('click', sendMessage); } if (chatInput) { chatInput.addEventListener('keydown', (e) => { if (e.key === 'Enter') { e.preventDefault(); sendMessage(); } }); } // --- Core Functions --- function sendMessage() { const question = chatInput.value.trim(); if (question === '') { return; } addMessage(question, 'user'); chatInput.value = ''; addMessage('...', 'ai', 'xtvlink-chat-thinking'); fetch(API_URL, { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-WP-Nonce': NONCE }, body: JSON.stringify({ question: question }) }) .then(response => { if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } return response.json(); }) .then(data => { removeThinkingMessage(); addMessage(data.answer, 'ai'); }) .catch(error => { removeThinkingMessage(); addMessage('I apologize, but I\'m having trouble connecting at the moment. Please try again in a bit.', 'ai'); console.error('Chat Error:', error); }); } function removeThinkingMessage() { const thinkingMsg = document.getElementById('xtvlink-chat-thinking'); if (thinkingMsg) { thinkingMsg.remove(); } } /** * --- NEW PARSER (v4) --- * Safely parses AI text for display. * This version REMOVES the bare-link parser to prevent conflicts. */ function addMessage(text, sender, id = null) { const messageDiv = document.createElement('div'); messageDiv.classList.add('xtvlink-chat-message', `xtvlink-chat-${sender}`); if (id) { messageDiv.id = id; } const textSpan = document.createElement('span'); // 1. Sanitize the entire input by setting textContent. // This converts any HTML tags (like ) into safe, visible text // (e.g., <a href...>). This is the correct base. textSpan.textContent = text; // 2. Get the escaped HTML back. let safeHtml = textSpan.innerHTML; // 3. Convert Markdown links: [text](url) // This regex looks for [text](http... or www...) // We MUST run this on the escaped HTML. const mdLinkRegex = /\[(.*?)\]\(((https?:\/\/|www\.)[^\s\)]+)\)/g; safeHtml = safeHtml.replace(mdLinkRegex, (match, linkText, fullUrl, protocolOrWww) => { // Un-escape ampersands in the URL that textContent might have escaped let cleanUrl = fullUrl.replace(/&/g, '&'); const properUrl = cleanUrl.startsWith('www.') ? 'https://' + cleanUrl : cleanUrl; // linkText is already safely escaped by the textContent step. return `${linkText}`; }); // 4. --- BARE LINK PARSER (which caused the bug) IS NOW GONE --- // This simplifies the logic and removes the bug source. // If the AI fails to follow the prompt and sends a bare link, // it will just render as unclickable text. This is safe. // 5. Convert Bold: **text** safeHtml = safeHtml.replace(/\*\*(.*?)\*\*/g, '$1'); // 6. Convert Lists safeHtml = parseAdvancedLists(safeHtml); // 7. Set the final, parsed, and safe HTML textSpan.innerHTML = safeHtml; messageDiv.appendChild(textSpan); chatMessages.appendChild(messageDiv); chatMessages.scrollTop = chatMessages.scrollHeight; } /** * Fixes broken AI list formatting (e.g., orphaned bullets). */ function parseAdvancedLists(text) { // Split by newlines (which textContent converted to
) const lines = text.split(//); const processedLines = []; // Regex for bullet chars (including escaped •) const bulletChars = '[\\-\\*\\•\\🔴]|•'; const normalBulletRegex = new RegExp(`^(\\s*(${bulletChars})\\s+)(.*)`); for (let line of lines) { const trimmedLine = line.trim(); if (trimmedLine === '') { processedLines.push(''); continue; } const match = trimmedLine.match(normalBulletRegex); if (match) { // match[3] is the text *after* the bullet const textContent = match[3]; processedLines.push(' ' + textContent); } else { processedLines.push(line); } } // Join with
for HTML newlines return processedLines.join('
'); } }); 1 Month IPTV Subscription -
Sale
(3 customer reviews)

Original price was: €18.00.Current price is: €15.00.

All Smart Devices Are Supported.

  • 15K+ Live Channels
  • Premium Sports
  • HQ Catch Up
  • 12K+ VOD & Series
  • TV Guide (EPG) & Logo
  • Lifetime Update
  • Free Support

In stock

Description

Our 1 Month IPTV Subscription is the ultimate, no-risk pass to a world of premium entertainment. This plan is perfectly designed for anyone who wants to test the quality, stability, and vast selection of our streaming service. On a single device of your choice, you’ll unlock a complete entertainment package that transforms how you watch television.

What’s Included in Your 1-Month IPTV Subscription?

This is more than just live TV. Your monthly pass gives you instant access to our entire platform, featuring:

  • A Massive VOD Library: Dive into thousands of movies and series on-demand, from Hollywood blockbusters to timeless classics, all updated daily.

  • Premium Live TV Channels: Access a huge selection of channels covering everything from premium sports and 24/7 news to kids’ entertainment and international programming.

  • Full HD & 4K Streaming: Experience buffer-free, high-quality streams that make every detail crystal clear.

  • Integrated TV Guide (EPG): Easily browse what’s on now and what’s coming up next with our user-friendly Electronic Program Guide.

Why Choose a Monthly IPTV Plan?

1 Month IPTV Subscription offers incredible flexibility. It’s the perfect choice if you want to:

  • Test Our Service: Experience our streaming quality firsthand before committing to a longer plan.

  • Watch a Specific Event: Get access for a specific sports tournament, season finale, or live event without a long-term contract.

  • Have No Commitments: Enjoy a simple, one-time payment with no recurring bills or contracts to worry about.

Get started today with the best 1 Month IPTV Subscription on the market and discover a better way to watch TV.

3 reviews for 1 Month IPTV Subscription

  1. Avatar of Roster M

    Roster M

    Unlike my previous provider, the ISP barred me from continuing to use IPTV; nonetheless, support assisted me in using the service using a VPN. Kudos

  2. Avatar of Mitch

    Mitch

    Good service, best quality. thx

  3. Avatar of Pauline

    Pauline

    First time to use this iptv service. Very simple, fast, and flawless.

Add a review

Your email address will not be published. Required fields are marked *

×

A Little Thank You!

To help cover your transaction fees for crypto payments, we’ve automatically applied a €1.50 discount to your cart!

Happy shopping!