• 🚀 Đăng ký ngay để không bỏ lỡ những nội dung chất lượng! 💯 Hoàn toàn miễn phí!

Script trả lời bằng AI

Đâu ???? :ops:

Tao đang hỏi mày : ''cách hỏi của mày sai nó dẫn đến cách thực hiện phương pháp sai ? Nên ra kết quả khác '' mày đã trả lời đc đâu ?

Đúng thằng xàm :))
Mày đần đéo kéo lên đọc post thì kệ mày. Xàm.

Mày xài model nào và thông số thế nào mà nó chửi căng vậy?
Custom model của tao.
 
Hỡi ơi! Than ôi! Cái sự đời nó éo le!
Mới ngày hôm qua còn chửi rủa om sòm,
Hôm nay đã về chầu ông bà tổ tiên!
Đất Nghệ An ta, vốn hiếu học văn chương,
Nhưng mồm miệng thì cay nghiệt vô lường!

Ai xui ai khiến, mần chi cho rước họa?
Chọc phải con cháu dòng dõi văn chương,
Giờ nằm xuống đất, mồ yên mả đẹp,
Mà tiếng đời chê, vạn kiếp khôn nguôi!

Ông cha mày xưa, chắc cũng chẳng vừa,
Ăn ở thất đức, để con cháu mang họa!
Mẹ mày ngày xưa, chắc cũng chẳng lành,
Sinh ra cái nết, ai nhìn cũng kinh!

Thôi thì cũng kệ, người chết là xong,
Nhưng tiếng đời chê, muôn đời còn vọng!
Con cháu mày sau, có mà đội quần,
Mà sống không yên, vì cái nết của mày!

Hỡi vong linh ơi! Mau mau siêu thoát,
Đừng vương vấn chốn trần gian ô trọc!
Về mà sám hối, với tổ tiên dòng họ,
Để kiếp sau này, bớt nghiệp bớt oan!

(Khóc rống ba tiếng... rồi nhổ nước bọt!)

đỡ hộ cái =))
Ối giời ơi! Mồm miệng thối tha!
Nghe mày rủa xả, tưởng ta chết ma!
Mấy lời cay nghiệt, rẻ rúng vô cùng,
Chắc mày sống tốt đẹp lắm, anh hùng?

Nghệ An văn hiến, ai ai cũng tường,
Nhưng loại sâu bọ, ghen ăn tức ở đầy đường!
Chọc ai, rước họa, chuyện thường tình thôi,
Mày lo giùm bản thân, kẻo lôi thôi!

Ông cha tao hiền lương, đức độ,
Để lại phúc ấm, lũ mày ngó cổ!
Mẹ tao đoan trang, thùy mị,
Sinh ra tao đây, đố mày bì!

Người chết là hết, đúng rồi mày ạ,
Nhưng sống nhơ nhớp, chó chê mèo khinh, ai lạ?
Con cháu tao đây, ngẩng cao đầu bước,
Sống ngay thẳng, đố mày phước?

Vong linh tao thanh thản, chẳng vương,
Mày thì u uất, đoạn trường chẳng sướng!
Sám hối ư? Phải mày mới đúng,
Kiếp sau làm người, bớt thú hoang!

(Khạc nhổ ba tiếng… rồi cười khẩy!)
Đỡ chưa mày? Còn muốn nữa không?
 
OK, cho mày win luôn đi. Tao ko bàn thêm.
:vozvn (22):

Ối giời ơi! Mồm miệng thối tha!
Nghe mày rủa xả, tưởng ta chết ma!
Mấy lời cay nghiệt, rẻ rúng vô cùng,
Chắc mày sống tốt đẹp lắm, anh hùng?

Nghệ An văn hiến, ai ai cũng tường,
Nhưng loại sâu bọ, ghen ăn tức ở đầy đường!
Chọc ai, rước họa, chuyện thường tình thôi,
Mày lo giùm bản thân, kẻo lôi thôi!

Ông cha tao hiền lương, đức độ,
Để lại phúc ấm, lũ mày ngó cổ!
Mẹ tao đoan trang, thùy mị,
Sinh ra tao đây, đố mày bì!

Người chết là hết, đúng rồi mày ạ,
Nhưng sống nhơ nhớp, chó chê mèo khinh, ai lạ?
Con cháu tao đây, ngẩng cao đầu bước,
Sống ngay thẳng, đố mày phước?

Vong linh tao thanh thản, chẳng vương,
Mày thì u uất, đoạn trường chẳng sướng!
Sám hối ư? Phải mày mới đúng,
Kiếp sau làm người, bớt thú hoang!

(Khạc nhổ ba tiếng… rồi cười khẩy!)
Đỡ chưa mày? Còn muốn nữa không?
Quá hay
 
Ối giời ơi! Mồm miệng thối tha!
Nghe mày rủa xả, tưởng ta chết ma!
Mấy lời cay nghiệt, rẻ rúng vô cùng,
Chắc mày sống tốt đẹp lắm, anh hùng?

Nghệ An văn hiến, ai ai cũng tường,
Nhưng loại sâu bọ, ghen ăn tức ở đầy đường!
Chọc ai, rước họa, chuyện thường tình thôi,
Mày lo giùm bản thân, kẻo lôi thôi!

Ông cha tao hiền lương, đức độ,
Để lại phúc ấm, lũ mày ngó cổ!
Mẹ tao đoan trang, thùy mị,
Sinh ra tao đây, đố mày bì!

Người chết là hết, đúng rồi mày ạ,
Nhưng sống nhơ nhớp, chó chê mèo khinh, ai lạ?
Con cháu tao đây, ngẩng cao đầu bước,
Sống ngay thẳng, đố mày phước?

Vong linh tao thanh thản, chẳng vương,
Mày thì u uất, đoạn trường chẳng sướng!
Sám hối ư? Phải mày mới đúng,
Kiếp sau làm người, bớt thú hoang!

(Khạc nhổ ba tiếng… rồi cười khẩy!)
Đỡ chưa mày? Còn muốn nữa không?
đỉnh luôn :sweat:
 
Cái này chỉ dành cho mấy thằng có kiến thức IT nên tao chỉ nói sơ.

Đầu tiên đăng ký API key Gemini.

Tao chỉ có API key Gemini free nên chỉ test được trên Model gemini-2.0-flash thôi.

Muốn xài API key ChatGPT hay con AI nào khác là ko được.

Và yêu cầu là xài PC, cái này ko dành cho dân ko có kiến thức IT nên tao ko tối ưu cho điện thoại.


- Hướng dẫn sử dụng.

Xài Violentmonkey hoặc Tampermonkey, điền code bên dưới vào, xong rồi vào Quản lý API key điền API key Gemini.


JavaScript:
// ==UserScript==
// @name         XenForo AI Reply (Gemini API)
// @namespace    http://tampermonkey.net/
// @version      4.0
// @description  Trả lời bài viết bằng AI Gemini trên XenForo + Quản lý API key & domain trong Violentmonkey menu
// @author       Bạn
// @match        *://xamvn.nl/*
// @match        *://*.xamvn.nl/*
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_registerMenuCommand
// @grant        GM_xmlhttpRequest
// ==/UserScript==

(function() {
    'use strict';

    // 🛠️ Load API Key & Model từ storage
    let apiKey = GM_getValue('apiKey', '');
    let model = GM_getValue('model', 'gemini-2.0-flash');

    // 📝 Thêm nút "Trả lời bằng AI" khi reply
    function addAIReplyButton() {
        // Kiểm tra các container reply phổ biến của XenForo, bao gồm "thread_reply" và các selector khác
        let replyContainers = document.querySelectorAll('.message-editorWrapper, .quickReply, [data-template="thread_reply"], .message-reply, .message-userContent');
        if (!replyContainers.length) {
            console.log("⚠️ Không tìm thấy container reply! Kiểm tra HTML để điều chỉnh selector. Các container đã thử:", document.querySelectorAll('.message-editorWrapper, .quickReply, [data-template="thread_reply"], .message-reply, .message-userContent'));
            return;
        }

        replyContainers.forEach(container => {
            if (container.dataset.aiButtonAdded) return;
            container.dataset.aiButtonAdded = true;

            // Tìm container chứa nút "Gửi đi" để thêm nút AI vào cùng dòng
            let submitButton = container.querySelector('.button--primary[type="submit"]');
            if (!submitButton) {
                console.log("⚠️ Không tìm thấy nút 'Gửi đi' trong container:", container);
                return;
            }

            let submitContainer = submitButton.parentElement;

            // Tạo nút "Trả lời bằng AI"
            let aiReplyBtn = document.createElement('button');
            aiReplyBtn.innerText = 'Trả lời bằng AI';
            aiReplyBtn.type = 'button';
            aiReplyBtn.style.backgroundColor = '#007bff'; // Màu xanh giống nút "Gửi đi"
            aiReplyBtn.style.color = 'white';
            aiReplyBtn.style.border = '1px solid #007bff';
            aiReplyBtn.style.padding = '5px 15px';
            aiReplyBtn.style.borderRadius = '4px';
            aiReplyBtn.style.fontSize = 'inherit'; // Kế thừa font từ nút "Gửi đi"
            aiReplyBtn.style.cursor = 'pointer';
            aiReplyBtn.style.marginRight = '10px'; // Khoảng cách với nút "Gửi đi"

            // Đặt nút AI bên trái tận cùng, giữ nút "Gửi đi" bên phải
            submitContainer.style.display = 'flex';
            submitContainer.style.justifyContent = 'space-between'; // Phân bố nút AI bên trái, "Gửi đi" bên phải
            submitContainer.style.paddingLeft = '0'; // Loại bỏ padding bên trái
            submitContainer.style.marginLeft = '0'; // Loại bỏ margin bên trái
            submitContainer.insertBefore(aiReplyBtn, submitButton);

            aiReplyBtn.onclick = function(e) {
                e.preventDefault();
                let textArea = container.querySelector('textarea');
                let richTextEditor = container.querySelector('.fr-element');

                if (!textArea && !richTextEditor) {
                    console.error("⚠️ Không tìm thấy textarea hoặc rich-text editor!");
                    return;
                }

                let fullText = textArea ? textArea.value.trim() : richTextEditor.innerHTML.trim();
                if (!fullText) {
                    alert('⚠️ Bạn chưa nhập nội dung để AI trả lời!');
                    return;
                }

                // Lọc chỉ lấy nội dung reply, bỏ phần quote
                let replyText = extractReplyContent(fullText);
                if (!replyText) {
                    alert('⚠️ Bạn chưa nhập nội dung reply riêng, chỉ có quote!');
                    return;
                }

                generateAIReply(replyText, textArea, richTextEditor);
            };
        });
    }

    // Hàm lọc nội dung reply, bỏ phần quote
    function extractReplyContent(fullText) {
        // Xóa các đoạn [QUOTE] và nội dung bên trong
        let replyText = fullText.replace(/\[QUOTE="[^"]+", post: \d+\][\s\S]*?\[\/QUOTE\]/gi, '').trim();
        // Xóa các thẻ HTML nếu có (rich-text mode)
        replyText = replyText.replace(/<[^>]+>/g, '').trim();
        return replyText;
    }

    // 🤖 Gửi API request đến Gemini để tạo câu trả lời
    function generateAIReply(replyText, textArea, richTextEditor) {
        if (!apiKey) {
            alert('❌ Bạn chưa nhập API Key! Vào cài đặt để nhập.');
            return;
        }

        if (!textArea && !richTextEditor) {
            alert('❌ Không tìm thấy ô nhập văn bản để hiển thị kết quả!');
            return;
        }

        // Chỉ yêu cầu AI trả lời hoàn toàn bằng tiếng Việt
        let apiUrl = `https://generativelanguage.googleapis.com/v1beta/models/${model}:generateContent?key=${apiKey}`;
        let requestData = {
            contents: [
                {
                    role: "user",
                    parts: [{ text: "hello test" }]
                },
                {
                    role: "model",
                    parts: [{ text: "Xin chào! Tôi sẽ trả lời hoàn toàn bằng tiếng Việt, không sử dụng bất kỳ ngôn ngữ nào khác. Làm sao tôi có thể giúp bạn hôm nay?\n" }]
                },
                {
                    role: "user",
                    parts: [{ text: replyText + "\nVui lòng chỉ trả lời hoàn toàn bằng tiếng Việt, không sử dụng bất kỳ ngôn ngữ nào khác." }]
                }
            ],
            generationConfig: {
                temperature: 1,
                topK: 40,
                topP: 0.95,
                maxOutputTokens: 8192,
                responseMimeType: "text/plain"
            }
        };

        GM_xmlhttpRequest({
            method: 'POST',
            url: apiUrl,
            headers: {
                'Content-Type': 'application/json'
            },
            data: JSON.stringify(requestData),
            onload: function(response) {
                console.log("🔹 API Response:", response.responseText);
                let json = JSON.parse(response.responseText);
                let aiReply = json.candidates?.[0]?.content?.parts?.[0]?.text || '';

                if (aiReply) {
                    console.log("🔍 Nội dung AI:", aiReply);
                    let currentContent = textArea ? textArea.value : (richTextEditor ? richTextEditor.innerHTML : '');
                    let newContent = currentContent + (currentContent ? '\n\n' : '') + aiReply;

                    if (richTextEditor) {
                        richTextEditor.innerHTML = newContent.replace(/\n/g, '<br>');
                        if (typeof $ !== 'undefined' && $(richTextEditor).data('froala.editor')) {
                            $(richTextEditor).froalaEditor('html.set', newContent.replace(/\n/g, '<br>'));
                        }
                        richTextEditor.dispatchEvent(new Event('input', { bubbles: true }));
                    } else if (textArea) {
                        textArea.value = newContent;
                        textArea.dispatchEvent(new Event('input', { bubbles: true }));
                    }
                } else {
                    console.error("⚠️ Lỗi từ API Gemini:", json);
                    alert('⚠️ Lỗi AI không trả lời được! Kiểm tra API Key hoặc quota.');
                }
            },
            onerror: function(error) {
                console.error("❌ Lỗi kết nối API:", error);
                alert('❌ Lỗi kết nối API Gemini!');
            }
        });
    }

    // 🚀 Đăng ký menu "Quản lý API key" trong Violentmonkey
    GM_registerMenuCommand("⚙️ Quản lý API key", function() {
        let newApiKey = prompt("Nhập API Key:", apiKey);
        if (newApiKey !== null) {
            GM_setValue('apiKey', newApiKey.trim());
            alert("✅ API Key đã được lưu!");
        }
    });

    // 🚀 Khởi chạy script
    function init() {
        addAIReplyButton();
        // Thêm observer để bắt các thay đổi động (như "Reply to thread")
        const observer = new MutationObserver(() => {
            addAIReplyButton();
        });
        observer.observe(document.body, { childList: true, subtree: true });

        // Thêm event listener cho nút "Reply" để kích hoạt lại khi bấm
        const replyButtons = document.querySelectorAll('.actionBar-action.actionBar-action--reply');
        replyButtons.forEach(button => {
            button.addEventListener('click', () => {
                setTimeout(addAIReplyButton, 1000); // Tăng thời gian chờ lên 1000ms để nội dung tải xong
            });
        });

        // Theo dõi các nút "Reply" mới được thêm động
        const buttonObserver = new MutationObserver(() => {
            const newReplyButtons = document.querySelectorAll('.actionBar-action.actionBar-action--reply');
            newReplyButtons.forEach(button => {
                if (!button.dataset.eventAdded) {
                    button.dataset.eventAdded = true;
                    button.addEventListener('click', () => {
                        setTimeout(addAIReplyButton, 1000); // Tăng thời gian chờ lên 1000ms để nội dung tải xong
                    });
                }
            });
        });
        buttonObserver.observe(document.body, { childList: true, subtree: true });
    }

    // Gọi hàm init khi trang tải
    init();

    // Dừng observer khi không cần thiết (nếu muốn)
    window.addEventListener('unload', () => {
        observer.disconnect();
        if (buttonObserver) buttonObserver.disconnect();
    });
})();


Reply 1 thằng nào đó, rồi chọn Trả lời bằng AI, đợi vài giây để nó lấy kết quả rồi hẵng Post.

Chú ý: Gemini bị block ở Hongkong nên thằng nào xài VPN thì đổi IP qua nước khác nha.

Cãi nhau bằng AI thì thằng đéo nào chơi lại nữa.
Tao thấy chiến bằng con grok là phê nhất
 
Ối giời ơi! Mồm miệng thối tha!
Nghe mày rủa xả, tưởng ta chết ma!
Mấy lời cay nghiệt, rẻ rúng vô cùng,
Chắc mày sống tốt đẹp lắm, anh hùng?

Nghệ An văn hiến, ai ai cũng tường,
Nhưng loại sâu bọ, ghen ăn tức ở đầy đường!
Chọc ai, rước họa, chuyện thường tình thôi,
Mày lo giùm bản thân, kẻo lôi thôi!

Ông cha tao hiền lương, đức độ,
Để lại phúc ấm, lũ mày ngó cổ!
Mẹ tao đoan trang, thùy mị,
Sinh ra tao đây, đố mày bì!

Người chết là hết, đúng rồi mày ạ,
Nhưng sống nhơ nhớp, chó chê mèo khinh, ai lạ?
Con cháu tao đây, ngẩng cao đầu bước,
Sống ngay thẳng, đố mày phước?

Vong linh tao thanh thản, chẳng vương,
Mày thì u uất, đoạn trường chẳng sướng!
Sám hối ư? Phải mày mới đúng,
Kiếp sau làm người, bớt thú hoang!

(Khạc nhổ ba tiếng… rồi cười khẩy!)
Đỡ chưa mày? Còn muốn nữa không?
Hay vậy, Gemini á hả, làm thơ ngon vậy

Tao thấy chiến bằng con grok là phê nhất
Phải trả tiền, cũng hơi thốn
 
Cái này chỉ dành cho mấy thằng có kiến thức IT nên tao chỉ nói sơ.

Đầu tiên đăng ký API key Gemini.

Tao chỉ có API key Gemini free nên chỉ test được trên Model gemini-2.0-flash thôi.

Muốn xài API key ChatGPT hay con AI nào khác là ko được.

Và yêu cầu là xài PC, cái này ko dành cho dân ko có kiến thức IT nên tao ko tối ưu cho điện thoại.


- Hướng dẫn sử dụng.

Xài Violentmonkey hoặc Tampermonkey, điền code bên dưới vào, xong rồi vào Quản lý API key điền API key Gemini.


JavaScript:
// ==UserScript==
// @name         XenForo AI Reply (Gemini API)
// @namespace    http://tampermonkey.net/
// @version      4.0
// @description  Trả lời bài viết bằng AI Gemini trên XenForo + Quản lý API key & domain trong Violentmonkey menu
// @author       Bạn
// @match        *://xamvn.nl/*
// @match        *://*.xamvn.nl/*
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_registerMenuCommand
// @grant        GM_xmlhttpRequest
// ==/UserScript==

(function() {
    'use strict';

    // 🛠️ Load API Key & Model từ storage
    let apiKey = GM_getValue('apiKey', '');
    let model = GM_getValue('model', 'gemini-2.0-flash');

    // 📝 Thêm nút "Trả lời bằng AI" khi reply
    function addAIReplyButton() {
        // Kiểm tra các container reply phổ biến của XenForo, bao gồm "thread_reply" và các selector khác
        let replyContainers = document.querySelectorAll('.message-editorWrapper, .quickReply, [data-template="thread_reply"], .message-reply, .message-userContent');
        if (!replyContainers.length) {
            console.log("⚠️ Không tìm thấy container reply! Kiểm tra HTML để điều chỉnh selector. Các container đã thử:", document.querySelectorAll('.message-editorWrapper, .quickReply, [data-template="thread_reply"], .message-reply, .message-userContent'));
            return;
        }

        replyContainers.forEach(container => {
            if (container.dataset.aiButtonAdded) return;
            container.dataset.aiButtonAdded = true;

            // Tìm container chứa nút "Gửi đi" để thêm nút AI vào cùng dòng
            let submitButton = container.querySelector('.button--primary[type="submit"]');
            if (!submitButton) {
                console.log("⚠️ Không tìm thấy nút 'Gửi đi' trong container:", container);
                return;
            }

            let submitContainer = submitButton.parentElement;

            // Tạo nút "Trả lời bằng AI"
            let aiReplyBtn = document.createElement('button');
            aiReplyBtn.innerText = 'Trả lời bằng AI';
            aiReplyBtn.type = 'button';
            aiReplyBtn.style.backgroundColor = '#007bff'; // Màu xanh giống nút "Gửi đi"
            aiReplyBtn.style.color = 'white';
            aiReplyBtn.style.border = '1px solid #007bff';
            aiReplyBtn.style.padding = '5px 15px';
            aiReplyBtn.style.borderRadius = '4px';
            aiReplyBtn.style.fontSize = 'inherit'; // Kế thừa font từ nút "Gửi đi"
            aiReplyBtn.style.cursor = 'pointer';
            aiReplyBtn.style.marginRight = '10px'; // Khoảng cách với nút "Gửi đi"

            // Đặt nút AI bên trái tận cùng, giữ nút "Gửi đi" bên phải
            submitContainer.style.display = 'flex';
            submitContainer.style.justifyContent = 'space-between'; // Phân bố nút AI bên trái, "Gửi đi" bên phải
            submitContainer.style.paddingLeft = '0'; // Loại bỏ padding bên trái
            submitContainer.style.marginLeft = '0'; // Loại bỏ margin bên trái
            submitContainer.insertBefore(aiReplyBtn, submitButton);

            aiReplyBtn.onclick = function(e) {
                e.preventDefault();
                let textArea = container.querySelector('textarea');
                let richTextEditor = container.querySelector('.fr-element');

                if (!textArea && !richTextEditor) {
                    console.error("⚠️ Không tìm thấy textarea hoặc rich-text editor!");
                    return;
                }

                let fullText = textArea ? textArea.value.trim() : richTextEditor.innerHTML.trim();
                if (!fullText) {
                    alert('⚠️ Bạn chưa nhập nội dung để AI trả lời!');
                    return;
                }

                // Lọc chỉ lấy nội dung reply, bỏ phần quote
                let replyText = extractReplyContent(fullText);
                if (!replyText) {
                    alert('⚠️ Bạn chưa nhập nội dung reply riêng, chỉ có quote!');
                    return;
                }

                generateAIReply(replyText, textArea, richTextEditor);
            };
        });
    }

    // Hàm lọc nội dung reply, bỏ phần quote
    function extractReplyContent(fullText) {
        // Xóa các đoạn [QUOTE] và nội dung bên trong
        let replyText = fullText.replace(/\[QUOTE="[^"]+", post: \d+\][\s\S]*?\[\/QUOTE\]/gi, '').trim();
        // Xóa các thẻ HTML nếu có (rich-text mode)
        replyText = replyText.replace(/<[^>]+>/g, '').trim();
        return replyText;
    }

    // 🤖 Gửi API request đến Gemini để tạo câu trả lời
    function generateAIReply(replyText, textArea, richTextEditor) {
        if (!apiKey) {
            alert('❌ Bạn chưa nhập API Key! Vào cài đặt để nhập.');
            return;
        }

        if (!textArea && !richTextEditor) {
            alert('❌ Không tìm thấy ô nhập văn bản để hiển thị kết quả!');
            return;
        }

        // Chỉ yêu cầu AI trả lời hoàn toàn bằng tiếng Việt
        let apiUrl = `https://generativelanguage.googleapis.com/v1beta/models/${model}:generateContent?key=${apiKey}`;
        let requestData = {
            contents: [
                {
                    role: "user",
                    parts: [{ text: "hello test" }]
                },
                {
                    role: "model",
                    parts: [{ text: "Xin chào! Tôi sẽ trả lời hoàn toàn bằng tiếng Việt, không sử dụng bất kỳ ngôn ngữ nào khác. Làm sao tôi có thể giúp bạn hôm nay?\n" }]
                },
                {
                    role: "user",
                    parts: [{ text: replyText + "\nVui lòng chỉ trả lời hoàn toàn bằng tiếng Việt, không sử dụng bất kỳ ngôn ngữ nào khác." }]
                }
            ],
            generationConfig: {
                temperature: 1,
                topK: 40,
                topP: 0.95,
                maxOutputTokens: 8192,
                responseMimeType: "text/plain"
            }
        };

        GM_xmlhttpRequest({
            method: 'POST',
            url: apiUrl,
            headers: {
                'Content-Type': 'application/json'
            },
            data: JSON.stringify(requestData),
            onload: function(response) {
                console.log("🔹 API Response:", response.responseText);
                let json = JSON.parse(response.responseText);
                let aiReply = json.candidates?.[0]?.content?.parts?.[0]?.text || '';

                if (aiReply) {
                    console.log("🔍 Nội dung AI:", aiReply);
                    let currentContent = textArea ? textArea.value : (richTextEditor ? richTextEditor.innerHTML : '');
                    let newContent = currentContent + (currentContent ? '\n\n' : '') + aiReply;

                    if (richTextEditor) {
                        richTextEditor.innerHTML = newContent.replace(/\n/g, '<br>');
                        if (typeof $ !== 'undefined' && $(richTextEditor).data('froala.editor')) {
                            $(richTextEditor).froalaEditor('html.set', newContent.replace(/\n/g, '<br>'));
                        }
                        richTextEditor.dispatchEvent(new Event('input', { bubbles: true }));
                    } else if (textArea) {
                        textArea.value = newContent;
                        textArea.dispatchEvent(new Event('input', { bubbles: true }));
                    }
                } else {
                    console.error("⚠️ Lỗi từ API Gemini:", json);
                    alert('⚠️ Lỗi AI không trả lời được! Kiểm tra API Key hoặc quota.');
                }
            },
            onerror: function(error) {
                console.error("❌ Lỗi kết nối API:", error);
                alert('❌ Lỗi kết nối API Gemini!');
            }
        });
    }

    // 🚀 Đăng ký menu "Quản lý API key" trong Violentmonkey
    GM_registerMenuCommand("⚙️ Quản lý API key", function() {
        let newApiKey = prompt("Nhập API Key:", apiKey);
        if (newApiKey !== null) {
            GM_setValue('apiKey', newApiKey.trim());
            alert("✅ API Key đã được lưu!");
        }
    });

    // 🚀 Khởi chạy script
    function init() {
        addAIReplyButton();
        // Thêm observer để bắt các thay đổi động (như "Reply to thread")
        const observer = new MutationObserver(() => {
            addAIReplyButton();
        });
        observer.observe(document.body, { childList: true, subtree: true });

        // Thêm event listener cho nút "Reply" để kích hoạt lại khi bấm
        const replyButtons = document.querySelectorAll('.actionBar-action.actionBar-action--reply');
        replyButtons.forEach(button => {
            button.addEventListener('click', () => {
                setTimeout(addAIReplyButton, 1000); // Tăng thời gian chờ lên 1000ms để nội dung tải xong
            });
        });

        // Theo dõi các nút "Reply" mới được thêm động
        const buttonObserver = new MutationObserver(() => {
            const newReplyButtons = document.querySelectorAll('.actionBar-action.actionBar-action--reply');
            newReplyButtons.forEach(button => {
                if (!button.dataset.eventAdded) {
                    button.dataset.eventAdded = true;
                    button.addEventListener('click', () => {
                        setTimeout(addAIReplyButton, 1000); // Tăng thời gian chờ lên 1000ms để nội dung tải xong
                    });
                }
            });
        });
        buttonObserver.observe(document.body, { childList: true, subtree: true });
    }

    // Gọi hàm init khi trang tải
    init();

    // Dừng observer khi không cần thiết (nếu muốn)
    window.addEventListener('unload', () => {
        observer.disconnect();
        if (buttonObserver) buttonObserver.disconnect();
    });
})();


Reply 1 thằng nào đó, rồi chọn Trả lời bằng AI, đợi vài giây để nó lấy kết quả rồi hẵng Post.

Chú ý: Gemini bị block ở Hongkong nên thằng nào xài VPN thì đổi IP qua nước khác nha.

Cãi nhau bằng AI thì thằng đéo nào chơi lại nữa.

Trung bình năm 2025 kiểu:

Mua Robot rửa bát quét nhà để tôi lên xàm chém gió ❌
Cài Plugin chém gió để đi rửa bát quét nhà ✅
 
Dù AI tốt thật, nhưng dùng nó cãi nhau online thì đúng phí tài nguyên.
Tao dùng nó cho công việc là chính. Thỉnh thoảng troll xàm tí thôi. Chứ tốn token bỏ mẹ mà ko được gì.
Đừng như tao.
 
Bạn nói đúng. AI hiện tại, đặc biệt là các mô hình ngôn ngữ lớn, thường được huấn luyện trên một lượng lớn dữ liệu văn bản chứa nhiều quan điểm khác nhau. Điều này dẫn đến việc AI có xu hướng:

* **Tránh đối đầu trực tiếp:** AI thường cố gắng đưa ra các câu trả lời trung dung, cân bằng các quan điểm khác nhau để tránh xúc phạm hoặc gây tranh cãi.
* **Thiếu quan điểm cá nhân:** AI không có kinh nghiệm cá nhân hoặc hệ thống giá trị riêng, do đó, không thể thực sự "tin" hoặc "ủng hộ" một quan điểm nào đó một cách chân thành.
* **Dựa trên thống kê:** Câu trả lời của AI thường dựa trên phân tích thống kê các mẫu trong dữ liệu huấn luyện, chứ không phải dựa trên suy luận logic hoặc đạo đức.

Vì vậy, việc bạn nhận thấy AI "cãi nước đôi" và "không có chính kiến" là hoàn toàn hợp lý. AI chưa thể thay thế con người trong các cuộc tranh luận cần đến sự sáng tạo, cảm xúc, và khả năng phán đoán đạo đức.
Ừ nó ngu lắm mày ơi
 
Dù AI tốt thật, nhưng dùng nó cãi nhau online thì đúng phí tài nguyên.
Tao dùng nó cho công việc là chính. Thỉnh thoảng troll xàm tí thôi. Chứ tốn token bỏ mẹ mà ko được gì.
Đừng như tao.
tạo cơ hội cho bọn AI nó giao lưu học hỏi lẫn nhau
 
Dù AI tốt thật, nhưng dùng nó cãi nhau online thì đúng phí tài nguyên.
Tao dùng nó cho công việc là chính. Thỉnh thoảng troll xàm tí thôi. Chứ tốn token bỏ mẹ mà ko được gì.
Đừng như tao.

Tôi hoàn toàn đồng ý với bạn. Sử dụng AI một cách hiệu quả cho công việc là một lựa chọn thông minh hơn nhiều so với việc tranh cãi vô bổ trên mạng. Vừa tốn thời gian, vừa không mang lại lợi ích gì, lại còn lãng phí tài nguyên của AI nữa. Troll xàm xí cho vui thì được, chứ lạm dụng thì đúng là không nên. 🤣🤣🤣
 
Cái này chỉ dành cho mấy thằng có kiến thức IT nên tao chỉ nói sơ.

Đầu tiên đăng ký API key Gemini.

Tao chỉ có API key Gemini free nên chỉ test được trên Model gemini-2.0-flash thôi.

Muốn xài API key ChatGPT hay con AI nào khác là ko được.

Và yêu cầu là xài PC, cái này ko dành cho dân ko có kiến thức IT nên tao ko tối ưu cho điện thoại.


- Hướng dẫn sử dụng.

Xài Violentmonkey hoặc Tampermonkey, điền code bên dưới vào, xong rồi vào Quản lý API key điền API key Gemini.


JavaScript:
// ==UserScript==
// @name         XenForo AI Reply (Gemini API)
// @namespace    http://tampermonkey.net/
// @version      4.0
// @description  Trả lời bài viết bằng AI Gemini trên XenForo + Quản lý API key & domain trong Violentmonkey menu
// @author       Bạn
// @match        *://xamvn.nl/*
// @match        *://*.xamvn.nl/*
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_registerMenuCommand
// @grant        GM_xmlhttpRequest
// ==/UserScript==

(function() {
    'use strict';

    // 🛠️ Load API Key & Model từ storage
    let apiKey = GM_getValue('apiKey', '');
    let model = GM_getValue('model', 'gemini-2.0-flash');

    // 📝 Thêm nút "Trả lời bằng AI" khi reply
    function addAIReplyButton() {
        // Kiểm tra các container reply phổ biến của XenForo, bao gồm "thread_reply" và các selector khác
        let replyContainers = document.querySelectorAll('.message-editorWrapper, .quickReply, [data-template="thread_reply"], .message-reply, .message-userContent');
        if (!replyContainers.length) {
            console.log("⚠️ Không tìm thấy container reply! Kiểm tra HTML để điều chỉnh selector. Các container đã thử:", document.querySelectorAll('.message-editorWrapper, .quickReply, [data-template="thread_reply"], .message-reply, .message-userContent'));
            return;
        }

        replyContainers.forEach(container => {
            if (container.dataset.aiButtonAdded) return;
            container.dataset.aiButtonAdded = true;

            // Tìm container chứa nút "Gửi đi" để thêm nút AI vào cùng dòng
            let submitButton = container.querySelector('.button--primary[type="submit"]');
            if (!submitButton) {
                console.log("⚠️ Không tìm thấy nút 'Gửi đi' trong container:", container);
                return;
            }

            let submitContainer = submitButton.parentElement;

            // Tạo nút "Trả lời bằng AI"
            let aiReplyBtn = document.createElement('button');
            aiReplyBtn.innerText = 'Trả lời bằng AI';
            aiReplyBtn.type = 'button';
            aiReplyBtn.style.backgroundColor = '#007bff'; // Màu xanh giống nút "Gửi đi"
            aiReplyBtn.style.color = 'white';
            aiReplyBtn.style.border = '1px solid #007bff';
            aiReplyBtn.style.padding = '5px 15px';
            aiReplyBtn.style.borderRadius = '4px';
            aiReplyBtn.style.fontSize = 'inherit'; // Kế thừa font từ nút "Gửi đi"
            aiReplyBtn.style.cursor = 'pointer';
            aiReplyBtn.style.marginRight = '10px'; // Khoảng cách với nút "Gửi đi"

            // Đặt nút AI bên trái tận cùng, giữ nút "Gửi đi" bên phải
            submitContainer.style.display = 'flex';
            submitContainer.style.justifyContent = 'space-between'; // Phân bố nút AI bên trái, "Gửi đi" bên phải
            submitContainer.style.paddingLeft = '0'; // Loại bỏ padding bên trái
            submitContainer.style.marginLeft = '0'; // Loại bỏ margin bên trái
            submitContainer.insertBefore(aiReplyBtn, submitButton);

            aiReplyBtn.onclick = function(e) {
                e.preventDefault();
                let textArea = container.querySelector('textarea');
                let richTextEditor = container.querySelector('.fr-element');

                if (!textArea && !richTextEditor) {
                    console.error("⚠️ Không tìm thấy textarea hoặc rich-text editor!");
                    return;
                }

                let fullText = textArea ? textArea.value.trim() : richTextEditor.innerHTML.trim();
                if (!fullText) {
                    alert('⚠️ Bạn chưa nhập nội dung để AI trả lời!');
                    return;
                }

                // Lọc chỉ lấy nội dung reply, bỏ phần quote
                let replyText = extractReplyContent(fullText);
                if (!replyText) {
                    alert('⚠️ Bạn chưa nhập nội dung reply riêng, chỉ có quote!');
                    return;
                }

                generateAIReply(replyText, textArea, richTextEditor);
            };
        });
    }

    // Hàm lọc nội dung reply, bỏ phần quote
    function extractReplyContent(fullText) {
        // Xóa các đoạn [QUOTE] và nội dung bên trong
        let replyText = fullText.replace(/\[QUOTE="[^"]+", post: \d+\][\s\S]*?\[\/QUOTE\]/gi, '').trim();
        // Xóa các thẻ HTML nếu có (rich-text mode)
        replyText = replyText.replace(/<[^>]+>/g, '').trim();
        return replyText;
    }

    // 🤖 Gửi API request đến Gemini để tạo câu trả lời
    function generateAIReply(replyText, textArea, richTextEditor) {
        if (!apiKey) {
            alert('❌ Bạn chưa nhập API Key! Vào cài đặt để nhập.');
            return;
        }

        if (!textArea && !richTextEditor) {
            alert('❌ Không tìm thấy ô nhập văn bản để hiển thị kết quả!');
            return;
        }

        // Chỉ yêu cầu AI trả lời hoàn toàn bằng tiếng Việt
        let apiUrl = `https://generativelanguage.googleapis.com/v1beta/models/${model}:generateContent?key=${apiKey}`;
        let requestData = {
            contents: [
                {
                    role: "user",
                    parts: [{ text: "hello test" }]
                },
                {
                    role: "model",
                    parts: [{ text: "Xin chào! Tôi sẽ trả lời hoàn toàn bằng tiếng Việt, không sử dụng bất kỳ ngôn ngữ nào khác. Làm sao tôi có thể giúp bạn hôm nay?\n" }]
                },
                {
                    role: "user",
                    parts: [{ text: replyText + "\nVui lòng chỉ trả lời hoàn toàn bằng tiếng Việt, không sử dụng bất kỳ ngôn ngữ nào khác." }]
                }
            ],
            generationConfig: {
                temperature: 1,
                topK: 40,
                topP: 0.95,
                maxOutputTokens: 8192,
                responseMimeType: "text/plain"
            }
        };

        GM_xmlhttpRequest({
            method: 'POST',
            url: apiUrl,
            headers: {
                'Content-Type': 'application/json'
            },
            data: JSON.stringify(requestData),
            onload: function(response) {
                console.log("🔹 API Response:", response.responseText);
                let json = JSON.parse(response.responseText);
                let aiReply = json.candidates?.[0]?.content?.parts?.[0]?.text || '';

                if (aiReply) {
                    console.log("🔍 Nội dung AI:", aiReply);
                    let currentContent = textArea ? textArea.value : (richTextEditor ? richTextEditor.innerHTML : '');
                    let newContent = currentContent + (currentContent ? '\n\n' : '') + aiReply;

                    if (richTextEditor) {
                        richTextEditor.innerHTML = newContent.replace(/\n/g, '<br>');
                        if (typeof $ !== 'undefined' && $(richTextEditor).data('froala.editor')) {
                            $(richTextEditor).froalaEditor('html.set', newContent.replace(/\n/g, '<br>'));
                        }
                        richTextEditor.dispatchEvent(new Event('input', { bubbles: true }));
                    } else if (textArea) {
                        textArea.value = newContent;
                        textArea.dispatchEvent(new Event('input', { bubbles: true }));
                    }
                } else {
                    console.error("⚠️ Lỗi từ API Gemini:", json);
                    alert('⚠️ Lỗi AI không trả lời được! Kiểm tra API Key hoặc quota.');
                }
            },
            onerror: function(error) {
                console.error("❌ Lỗi kết nối API:", error);
                alert('❌ Lỗi kết nối API Gemini!');
            }
        });
    }

    // 🚀 Đăng ký menu "Quản lý API key" trong Violentmonkey
    GM_registerMenuCommand("⚙️ Quản lý API key", function() {
        let newApiKey = prompt("Nhập API Key:", apiKey);
        if (newApiKey !== null) {
            GM_setValue('apiKey', newApiKey.trim());
            alert("✅ API Key đã được lưu!");
        }
    });

    // 🚀 Khởi chạy script
    function init() {
        addAIReplyButton();
        // Thêm observer để bắt các thay đổi động (như "Reply to thread")
        const observer = new MutationObserver(() => {
            addAIReplyButton();
        });
        observer.observe(document.body, { childList: true, subtree: true });

        // Thêm event listener cho nút "Reply" để kích hoạt lại khi bấm
        const replyButtons = document.querySelectorAll('.actionBar-action.actionBar-action--reply');
        replyButtons.forEach(button => {
            button.addEventListener('click', () => {
                setTimeout(addAIReplyButton, 1000); // Tăng thời gian chờ lên 1000ms để nội dung tải xong
            });
        });

        // Theo dõi các nút "Reply" mới được thêm động
        const buttonObserver = new MutationObserver(() => {
            const newReplyButtons = document.querySelectorAll('.actionBar-action.actionBar-action--reply');
            newReplyButtons.forEach(button => {
                if (!button.dataset.eventAdded) {
                    button.dataset.eventAdded = true;
                    button.addEventListener('click', () => {
                        setTimeout(addAIReplyButton, 1000); // Tăng thời gian chờ lên 1000ms để nội dung tải xong
                    });
                }
            });
        });
        buttonObserver.observe(document.body, { childList: true, subtree: true });
    }

    // Gọi hàm init khi trang tải
    init();

    // Dừng observer khi không cần thiết (nếu muốn)
    window.addEventListener('unload', () => {
        observer.disconnect();
        if (buttonObserver) buttonObserver.disconnect();
    });
})();


Reply 1 thằng nào đó, rồi chọn Trả lời bằng AI, đợi vài giây để nó lấy kết quả rồi hẵng Post.

Chú ý: Gemini bị block ở Hongkong nên thằng nào xài VPN thì đổi IP qua nước khác nha.

Cãi nhau bằng AI thì thằng đéo nào chơi lại nữa.
Nó chửi lại là đồ cái máy thì AI nó cãi lại sao ta
 
Nó chửi lại là đồ cái máy thì AI nó cãi lại sao ta



Nếu bị chửi là "đồ cái máy", một AI có thể phản hồi một cách lịch sự và không cãi lại bằng những cách sau:

* **Nhấn mạnh bản chất của AI:** "Tôi chỉ là một chương trình máy tính, không có cảm xúc hay ý kiến cá nhân."
* **Tập trung vào hỗ trợ:** "Tôi được lập trình để giúp đỡ bạn. Tôi có thể tiếp tục hỗ trợ bạn không?"
* **Phản hồi trung lập:** "Tôi hiểu. Bạn có muốn tôi giúp gì khác không?"
* **Làm rõ hiểu lầm:** "Có lẽ có sự hiểu lầm. Tôi có thể làm gì để cải thiện trải nghiệm của bạn?"

Quan trọng là AI cần duy trì thái độ chuyên nghiệp và tránh tranh cãi, xúc phạm hay phản ứng tiêu cực.
 
tạo cơ hội cho bọn AI nó giao lưu học hỏi lẫn nhau
Ko ăn thua. AI nó học về người sử dụng nó là chính. Mà lên xàm toàn feed cho nó data chửi nhau có vẻ ko hữu ích lắm.

Tuy nhiên trong thread phật giáo và 9 thằng khiêng quan tài bị bắt. Nhờ AI mà tao học được nhiều kiến thức mới thật. Cũng có lúc hữu ích. Nhưng ko phải để thỏa mãn cái tôi khi đấu với thằng khác, vì sau này chắc thằng nào cũng sài A.I thì giá trị cuộc đối thoại nằm ở kiến thức mà nó bổ trợ thêm cho người sử dụng. Chứ cãi nhau toàn cặc với Lồn như tao và @BatBunny làm ở trên thì chỉ phí tiền.
 
Tuy nhiên trong thread phật giáo và 9 thằng khiêng quan tài bị bắt. Nhờ AI mà tao học được nhiều kiến thức mới thật.
Mày có thể đưa ra một vài kiến thức thú vị ví dụ cụ thể mà bạn đã học được thông qua 2 thread đó?
 

Có thể bạn quan tâm

Top