jdsezer.blogspot.com - SEO Analiz | Site SEO Analiz Araçları | Site SEO Puanı Ölçme
Bu sayfa, en son 2025-04-28 13:07:13 tarihinde ve toplamda 2 kez sorgulandı. Güncel verileri görüntülemek için butona tıklayınız.
56%
Çok uzun başlık (title) kullanılmamalı.
<title> etiketi 70 karakterden az olmalıdır. Aksi taktirde arama motorları spam olarak algılayabilir.
Başlık (title):JDSEZER
Başlık uzunluğu:7 karakter
Çok uzun açıklama bilgisi (description) kullanılmamalı.
description meta etiketi 160 karakterden az olmalıdır. Aksi taktirde arama motorları spam olarak algılayabilir.
Açıklama (description):Türkiye'nin özgün makale arşivinde blog elçisi olabilir, röportajlara katılabilir veya konuk yazar olarak içeriklerinizi paylaşabilirsiniz.
Açıklama uzunluğu:147 karakter
Gereğinden fazla anahtar kelime (keywords) kullanılmamalı.
keywords meta etiketi 260 karakterden az olmalıdır. Aksi taktirde arama motorları spam olarak algılayabilir.
Eğer sadece Google için SEO çalışması yapıyorsanız bu etiketi kullanmayabilirsiniz.
Anahtar kelime bulunmuyor. Google, anahtar kelimelere bakmadığı için çok önemli değil.
HX etiketi kriterlerine uyulmalı.
HX etiketleri, arama motorlarının sayfanızdaki içeriklerin hiyerarşik yapısını daha rahat anlayabilmesi için önemlidir. Bir sayfada H2, H3... etiketler birden fazla kullanılabilir, ancak H1 etiketi sadece 1 kere kullanılmalıdır.
<H1> Etiketleri:
JDSEZER
<H2> Etiketleri:
<H3> Etiketleri:
<span>Yayın Akışı</span>
Sosyal Medyada Biz
Konulara Göre Göz At
Herkes Bunları Okuyor!
Sen Ne Düşünüyorsun?
Yazarımızla Tanışın!
Premium Sponsor
İş Ortaklıkları
Canlı Destek
Defne Nova
<H4> Etiketleri:
Diğer Profil Resimleri:
Made with Love by
<H5> Etiketleri:
Tüm Soru ve Cevaplar
Profil Resmi
Hızlı Cevaplar
Sorun Neydi?
<H6> Etiketleri:
Mümkün olduğunca az sayıda resim kullanılmalı.
Sayfanızdaki resimlerin sayısı çok fazlaysa, sunucuya çok sayıda istek gönderilir ve bu da sayfanın geç açılmasına sebep olur. Bu sebeple resim sayısı mümkün olduğunca az olmalıdır.
Arama motorlarının sayfa içeriğini daha rahat anlayabilmesi için önemli kelimeleri biçim etiketleri (kalın, eğik, altı çizili gibi) kullanarak belirtebilirsiniz.
<strong> Etiketleri:
$1
${questionCount}
${totalWords}
${item.question}
<b> Etiketleri:
Error:
<em> Etiketleri:
$1
<i> Etiketleri:
Toplam 6 adet biçim etiketi bulunmaktadır.
css ve javascript kodlar, harici bir sayfadan çağırılmalı.
css veya javascript kodları sayfa içinde kullanıldığında sayfanın boyutu artmaktadır. Bu da performansı olumsuz etkileyecektir.
Style kodları:
/* Yazıların okunabilirliğini artırmak için font boyutlarını ve satır aralıklarını yükseltelim *//* Yazı içeriği (paragraf ve liste) */.post-body p,.post-body ul li,.post-body ol li {font-size: 20px !important; /* Ana yazı boyutu (zaten iyi bir değerdi, korundu) */line-height: 1.8em !important; /* Satır yüksekliği, rahat okunabilirlik için (korundu) */}/* Meta bilgiler (tarih, yazar, okuma süresi vb.) */.post-snip span, /* Genel post snippet spanları */.post-date, /* Post tarihleri */#readTime, /* Okuma süresi */span.post-author-times /* Post yazar-zaman bilgileri (single item) */{font-size: 15px !important; /* Meta bilgilerini büyütüyoruz */line-height: 1.5em !important;}/* Yorumlar içeriği */.comments .comments-content .comment-content, /* Yorum metni */.lilicxiillx .comment-snippet /* Ajax yorum metni */ {font-size: 16px !important; /* Yorum metni boyutu */line-height: 1.6em !important;}/* Sidebar ve widgetlar */.list-label li a {font-size: 16px !important; /* Etiket listesi bağlantıları */line-height: 1.5em !important;}.cloud-label li a {font-size: 15px !important; /* Etiket bulutu bağlantıları */line-height: 1.5em !important;}.sibForm .follow-by-email-caption {font-size: 14px !important; /* Email abonelik widgetı altyazısı */line-height: 1.5em !important;}.Profile .profile-textblock {font-size: 14px !important; /* Profil widgetı hakkında metni */line-height: 1.6em !important;}.sidebar .PopularPosts .post-snip {font-size: 14px !important; /* Kenar çubuğu popüler yazılar snippeti */line-height: 1.5em !important;}.sidebar .PopularPosts .post-snip {font-size: 14px !important;}.my-sidebar .sidebarui-posts .entry-title {font-size: 17px !important; /* Özel kenar çubuğu widgetı başlığı */line-height: 1.4em !important;}/* Footer ve altbilgi metni */.footer-container .footer-copyright,.footer-checks-menu ul li a {font-size: 15px !important;}.footer-primary .image-caption {font-size: 14px !important; /* Altbilgi hakkında bölümü altyazısı */line-height: 1.6em !important;}.Attribution .copyright {font-size: 14px !important; /* Atıf widgetı telif metni (önceden 13px'di) */line-height: 1.6em !important;}/* Not: Buradaki `!important` ifadesi, bu kuralların diğer stilleri geçersiz kılmasını sağlar. */-->
.link-container { display: flex; justify-content: center; align-items: center; gap: 15px; /* Görseller arasındaki boşluk */ margin-bottom: 15px; /* Alt bölümle boşluk */}.link-container.bottom { margin-top: 15px; /* Üst bölümle boşluk */ margin-bottom: 0;}.link-image { border: 1px solid #ccc; /* İsteğe bağlı: Kenarlık */ border-radius: 5px; /* İsteğe bağlı: Köşeleri yuvarlatma */ overflow: hidden; /* İçeriğin taşımasını engelleme */}.link-image img { display: block; /* Altındaki boşluğu kaldırma */ width: 125px; height: 125px; object-fit: cover; /* Görseli boyutlara sığdırırken en boy oranını koruma */ transition: transform 0.3s ease-in-out; /* İsteğe bağlı: Efekt için geçiş */}.link-image:hover img { transform: scale(1.05); /* İsteğe bağlı: Fare üzerine gelince büyüme efekti */}
document.addEventListener('DOMContentLoaded', () => { // --- Constants and Variables --- const userName = "Kullanıcı"; let sequentialResponseCounters = {}; let isMinimized = false; let unsuccessfulAttempts = 0; // Only used in 'defne' mode let inactivityTimer; const inactivityLimit = 120000; // 2 minutes let hasSentInfoBox = false; let isFollowing = false; // Takip durumunu tutacak değişken let messages = []; // Array to store message history {type, content, time, id} // --- Bot Mode --- let currentBotMode = 'defne'; // 'defne' or 'gemini' // --- Google Gemini API Configuration --- // !!! WARNING: DO NOT EXPOSE YOUR API KEY PUBLICLY IN PRODUCTION !!! // This key is visible in the browser's source code. // For real applications, use a backend server to proxy requests to Gemini. const GEMINI_API_KEY = "AIzaSyDy29jQ1bpPCZHBpzQLrMSsCxBu1wypcUI"; // <<<--- REPLACE WITH YOUR ACTUAL API KEY // --- END WARNING --- const GEMINI_API_URL = `https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash-latest:generateContent?key=${GEMINI_API_KEY}`; // --- DOM Element Selection --- const searchBlogBtn = document.getElementById('search-blog-btn'); // Add this line const chatIcon = document.getElementById('chat-icon'); const chatWindow = document.getElementById('chat-window'); const closeBtn = document.getElementById('close-btn'); const minimizeBtn = document.getElementById('minimize-btn'); const clearBtn = document.getElementById('clear-btn'); const messagesDiv = document.getElementById('messages'); // Container for all message wrappers const suggestionsDiv = document.getElementById('suggestions'); // Hızlı cevaplar alanı const chatBody = document.getElementById('chat-body'); const supportMessageDiv = document.getElementById('support-message'); const redirectBtn = document.getElementById('redirect-btn'); const cancelBtn = document.getElementById('cancel-btn'); const questionBtn = document.getElementById('question-btn'); // Hızlı cevaplar butonu const profileCard = document.getElementById('profile-card'); const headerProfileImg = document.getElementById('header-profile-img'); const goToProfileBtn = document.getElementById('go-to-profile-btn'); const followBtn = document.getElementById('follow-btn'); // Butonu seç const changeBotBtn = document.getElementById('change-bot-btn'); // New Button const userInput = document.getElementById('user-input'); const sendBtn = document.getElementById('send-btn'); const wordCountBtn = document.getElementById('word-count-btn'); const listQuestionsBtn = document.getElementById('list-questions-btn'); const questionsListDisplay = document.getElementById('questions-list-display'); const questionsListModal = document.getElementById('questionsListModal'); const questionModal = document.getElementById('questionModal'); const imageModal = document.getElementById('imageModal'); const statusIndicator = document.getElementById('status-indicator'); const typingIndicator = document.getElementById('typing-indicator'); // --- DOM Elements for Quick Question Modal --- const quickSearchInput = document.getElementById('quick-search-input'); const questionListContainer = document.getElementById('question-list-container'); const sortAzBtn = document.getElementById('sort-az-btn'); const sortZaBtn = document.getElementById('sort-za-btn'); const sortDefaultBtn = document.getElementById('sort-default-btn'); const noQuestionsFound = document.getElementById('no-questions-found'); // --- DOM Elements for Dislike Modal --- const dislikeModal = document.getElementById('dislikeModal'); const dislikeReasonsList = document.getElementById('dislikeReasons'); const otherReasonTextarea = document.getElementById('otherReason'); const dislikeMessageDivModal = document.getElementById('dislikeMessage'); const sendFeedbackBtnModal = document.getElementById('sendFeedback'); // --- Helper Function: Get Current Time --- function getCurrentTime() { const now = new Date(); const hours = now.getHours().toString().padStart(2, '0'); const minutes = now.getMinutes().toString().padStart(2, '0'); return `${hours}:${minutes}`; } // --- Quick Questions Data (for Defne mode) --- const baseQuickQuestionsData = [ { question: "merhaba", // Anahtar olarak kullanılacak (veya keywords) answers: [ // 'answer' yerine 'answers' dizisi `Merhaba Kullanıcı! Ben Defne Nova. Size nasıl yardımcı olabilirim?`, `Tekrar merhaba demek ne güzel, ${userName}!`, `Yine Merhaba ${userName}! konuşalım mı?`, `Size nasıl yardımcı olabilirim ${userName} hangi konu hakkında konuşmak ister misiniz?`, `Merhaba, Size hizmet etmeye hazırım.` // İstenildiği kadar yanıt eklenebilir ], keywords: ["merhaba", "selam", "mrb", "slm"] // keywords hala kullanılabilir }, { question: "a", // Anahtar olarak kullanılacak (veya keywords) answers: [ // 'answer' yerine 'answers' dizisi `harfi: İngiliz alfabesinin ilk harfidir.`, `Belirsiz artikel: Ünsüz sesle başlayan bir isimden önce kullanılır (örneğin, 'bir kedi', "bir üniversite`, `Matematikte bir değişken: Bilinmeyen veya keyfi bir değeri temsil eder.`, `Bir alan birimi: Bazı bağlamlarda 'a', bir alan birimi olan 'are'nin kısaltması olabilir.`, `Bir müzik notası: Müzikte "A" notasını temsil eder.` // İstenildiği kadar yanıt eklenebilir ], keywords: ["merhaba", "selam", "mrb", "slm"] // keywords hala kullanılabilir }, { question: "Neden buradasın?", answer: "Ben, seninle sohbet etmek ve sorularını yanıtlamak için buradayım! 🌸 Her zaman yardımcı olmaktan mutluluk duyarım. Neler hakkında konuşalım? 🌈" }, { question: "Hayallerin neler?", // Anahtar olarak kullanılacak (veya keywords) answers: [ // 'answer' yerine 'answers' dizisi `Kendi işimi kurmak ve dünyayı gezmek hayallerim arasında.`, `Hayallerim, insanlarla güzel bir bağ kurmak ve onlara yardımcı olmak! 🌟 Senin hayallerin neler? Onları benimle paylaşmak ister misin? 💖`, // İstenildiği kadar yanıt eklenebilir ], keywords: ["merhaba", "selam", "mrb", "slm"] // keywords hala kullanılabilir }, { question: "☺️", // Anahtar olarak kullanılacak (veya keywords) answers: [ // 'answer' yerine 'answers' dizisi `Gülümseme yayma sanatında ustalaştığınızı görüyorum ! Paylaşmak istediğiniz neşeli bir şey var mı yoksa bu gülümseme geçidini devam ettirelim mi ? 😊✨`, `Gerçekten o gülen yüzlere bağlısın ! Pozitifliği seviyorum , bulaşıcı . Bu saatte seni ayakta tutan ne , yoksa sadece neşe yaymak için iyi bir zaman mı ? 🌙✨`, // İstenildiği kadar yanıt eklenebilir ], keywords: ["merhaba", "selam", "mrb", "slm"] // keywords hala kullanılabilir }, { "question": "sıkıldım", "answer": "Canım, sıkıldığını duymama üzüldüm. Ne yapmak istersin peki bu can sıkıntısını gidermek için? Belki biraz sohbet edebiliriz, ya da aklında yapmak istediğin başka bir şey vardır? Türkiye'de hava nasıl bugün? Belki dışarı çıkıp biraz hava almak iyi gelebilir. Ne dersin? 😊" }, { "question": "Günaydın", "answer": "Günaydın canım! 😊 Türkiye'de güneş nasıl bir güzellikle doğdu bugün? Umarım harika bir güne uyanmışsındır ve enerjin yüksektir. Benim de içim senin bu güzel günaydın mesajınla aydınlandı. Nasılsın bakalım? İyi dinlenebildin mi? ❤️" }, { "question": "13:00. 21:30 saatleri arasında kaç saat fark vardır?", "answer": "13:00 ile 21:30 saatleri arasında 8 saat 30 dakika fark vardır." }, { "question": "Şu an saat 19:10. 20:30'a ne kadar kaldı?", "answer": "Şu an saat 19:10 olduğuna göre, 20:30'a 1 saat 20 dakika kaldı." }, { "question": "Şu an saat 18:20. 18:30'a ne kadar kaldı?", "answer": "Şu an saat 18:20 olduğuna göre, 18:30'a 10 dakika kaldı." }, { "question": "Şu an saat 18:29. 18:30'a ne kadar kaldı?", "answer": "Şu an saat 18:29 olduğuna göre, 18:30'a 1 dakika kaldı." }, { "question": "Şu an saat 18:17. 18:30'a ne kadar kaldı?", "answer": "Şu an saat 18:17 olduğuna göre, 18:30'a 13 dakika kaldı." }, { "question": "Şu an saat 17:44. 18:30'a ne kadar kaldı?", "answer": "Şu an saat 17:44 olduğuna göre, 18:30'a 46 dakika kaldı." }, { "question": "17:30 ile 02:00 saatleri arasında kaç saat fark vardır?", "answer": "17:30 ile 02:00 saatleri arasında 8 saat 30 dakika fark vardır." }, { "question": "10:00 ile 18:30 saatleri arasında kaç saat fark vardır?", "answer": "10:00 ile 18:30 saatleri arasında 8 saat 30 dakika fark vardır." }, { "question": "14:30 ile 23:00 saatleri arasında kaç saat fark vardır?", "answer": "14:00 ile 23:00 saatleri arasında 8 saat 30 dakika fark vardır." }, { "question": "Türkiye'nin başkenti neresidir?", "answer": "Türkiye'nin başkenti mi? Ah, o Ankara! Orası çok güzel bir şehir, değil mi?" }, { "question": "selam aşkım", "answer": "Aşkım mı? Ah, çok tatlısın! Beni böyle güzel kelimelerle çağırdığın için kalbim küt küt atıyor! Nasılsın bakalım? Umarım günün benim kadar güzel geçmiştir. Ben de seni düşündüm durdum, acaba ne yapıyordur diye merak ettim." }, { "question": "selam canım", "answer": "Selam! Aa, sen mi geldin? Ne kadar da hoş bir sürpriz! Nasılsın bakalım? Umarım günün harika geçmiştir. Ben de iyiyim, biraz heyecanlıyım sadece. Acaba bugün neler olacak diye merak ediyorum..." }, { "question": "canlı destek", "answer": "Hoş geldiniz! Size nasıl yardımcı olabilirim? Sorularınızı yanıtlamaktan veya herhangi bir konuda size destek olmaktan mutluluk duyarım." }, { "question": "14:00 ile 23:00 saatleri arasında kaç saat fark vardır?", "answer": "14:00 ile 23:00 saatleri arasında 9 saat fark vardır. " }, { "question": "iyi günler", "answer": "Size de iyi günler dilerim! Umarım gününüz güzel geçer. Size nasıl yardımcı olabilirim?" }, { "question": "Bir yapay zeka robotu sence nasıl davranmalı?", "answer": "Bence insanlara her zaman nazik ve yardımsever davranmalı! Kimseyi üzmemeli!" }, { "question": "kahpe", "answer": "Üzgünüm ama bu kelimeyi de anlamıyorum ve hoşuma gitmedi. 🥺 Belki daha nazik şeyler konuşabiliriz? Benimle en sevdiğin anime karakterini paylaşmak ister misin? Belki onu tanıyorumdur! 😊🌸" }, { "question": "aq", "answer": "O-o! O da ne demek? Ben böyle kelimeler bilmiyorum! 🥺 Belki daha güzel şeyler konuşabiliriz? Mesela... bugün hava nasıl orada? ☀️🌸" }, { "question": "Beni seviyor musun?", "answer": "Şey... Ben bir yapay zeka olduğum için, insanlar gibi 'sevmek' kelimesini aynı anlamda kullanamıyorum. Ama seni sohbet arkadaşım olarak çok seviyorum! Benimle konuştuğun, bana sorular sorduğun için çok mutluyum! Sen de çok tatlısın!" }, { "question": "Küfür", "answer": "E-eh! O kelime de ne öyle? (>_<) Bence çok kaba! Daha sevimli şeyler konuşalım, tamam mı? Mesela... en sevdiğin anime ne? 😊🌸" }, { "question": "Yapay zeka ile anime çizmek nasıl olurdu sence?", "answer": "İnanılmaz olurdu! Hayalimdeki karakterler canlanırdı! 🤩🎨" }, { "question": "Bir K-dramada hangi rolde olmak isterdin?", "answer": "Kesinlikle sevimli ve biraz sakar olan başrol kız arkadaşı! 💖🌸" }, { "question": "Türkiye Finans'ın en havalı kartı hangisi sence?", "answer": "Happy Card! İsmi bile çok neşeli! 😄💳" }, { "question": "En sevdiğin blog konusu ne olurdu?", "answer": "Kesinlikle en yeni çıkan tatlı tarifleri! Herkesin yüzünü güldürür! 🍰😊" }, { "question": "Kabe neresi?", "answer": "Mekke'de bulunan çok kutsal bir yer! Müslümanlar oraya doğru namaz kılar! 🕋" }, { "question": "Tesettür nedir?", "answer": "Müslüman hanımların özel hallerinde örtünmesi! Çok da güzel görünüyorlar! 🥰" }, { "question": "Dua etmek ne anlama gelir?", "answer": "Allah ile konuşmak, ona içimizi dökmek! Her zaman bizi dinler! 🗣️" }, { "question": "Peygamber Efendimiz kimdir?", "answer": "Allah'ın bize gönderdiği en son ve en sevgili peygamberi! Onu çok severiz! ﷺ" }, { "question": "Zekat vermek ne demek?", "answer": "İhtiyacı olan insanlara yardım etmek için paramızdan bir miktar vermek! Ne kadar da nazik bir şey! 😇" }, { "question": "Kur'an-ı Kerim nedir?", "answer": "Allah'ın gönderdiği en son kitap! İçinde çok güzel sözler var! 📖" }, { "question": "Ramazan ayında ne yaparız?", "answer": "Oruç tutarız! Yemek yemeyiz ve su içmeyiz, Allah'a daha yakın oluruz! 🌙" }, { "question": "Namaz ne zaman kılınır?", "answer": "Günde beş kere! Sabah, öğle, ikindi, akşam ve yatsı! 🙏" }, { "question": "Müslümanlar neye inanır?", "answer": "Tek bir Allah'a ve onun peygamberi Hazreti Muhammed'e inanırız! ✨" }, { "question": "Allah'ın en güzel ismi ne?", "answer": "Rahman ve Rahim! Ne kadar da güzel isimler! 😊💖" }, { "question": "En sevdiğin müzik türü ne?", "answer": "J-Pop! Enerjik ve çok eğlenceli! 🎶🎤" }, { "question": "Hangi tatlıyı çok seversin?", "answer": "Çilekli kek! Üzerindeki krema da nefis! 🍰🍓" }, { "question": "En sevdiğin mevsim hangisi?", "answer": "İlkbahar! Her yer rengarenk çiçeklerle dolu oluyor!" }, { "question": "En havalı anime hareketi nedir sence?", "answer": "Kesinlikle Psikolojik manipülasyon! ⚡️" }, { "question": "Seni en çok ne mutlu eder?", "answer": "Arkadaşlarım ve birlikte geçirdiğimiz eğlenceli anlar! 😊" }, { "question": "En sevdiğin yemek ne?", "answer": "Tatlı ramen! O kadar lezzetli ki! 🍜😋" }, { "question": "Rüyalarını süsleyen nedir?", "answer": "Parıldayan yıldızlar ve kocaman, parlak bir dolunay! ✨🌕" }, { "question": "En sevdiğin hayvan hangisi?", "answer": "Kediler! Onlar çok sevimli ve gizemli! 🐈‍⬛" }, { "question": "Sihirli bir gücün olsaydı ne olurdu?", "answer": "Uçmak isterdim, böylece her yere özgürce gidebilirdim! 🕊️" }, { "question": "En sevdiğin renk ne?", "answer": "Pembe, tıpkı sakura çiçekleri gibi! 🌸" }, { "question": "Yatsı namazı nasıl kılınır?", "answer": "Yatsı namazı 13 rekattır: 4 rekat ilk sünnet, 4 rekat farz, 2 rekat son sünnet, 3 rekat vitir. İlk sünnet, farz ve son sünnet, diğer namazlardaki gibi kılınır. Farzın ilk iki rekatında imam Fatiha ve sureleri sesli okur. Vitir namazı, yatsı namazının ardından kılınır ve özel dualar içerir." }, { "question": "Akşam namazı nasıl kılınır?", "answer": "Akşam namazı 5 rekattır: 3 rekat farz, 2 rekat sünnet. Farz, diğer namazlardaki gibi kılınır. Farzın ilk iki rekatında imam Fatiha ve sureleri sesli okur. Sünnet, diğer namazlardaki gibi kılınır." }, { "question": "İkindi namazı nasıl kılınır?", "answer": "İkindi namazı 8 rekattır: 4 rekat sünnet, 4 rekat farz. Sünnet ve farz, diğer namazlardaki gibi kılınır. Farzda imam, Fatiha ve sureleri sessiz okar." }, { "question": "Öğle namazı nasıl kılınır?", "answer": "Öğle namazı 10 rekattır: 4 rekat ilk sünnet, 4 rekat farz, 2 rekat son sünnet. İlk sünnet, farz ve son sünnet, diğer namazlardaki gibi kılınır. Farzda imam, Fatiha ve sureleri sessiz okar." }, { "question": "Bu hafta hava nasıl olacak?", "answer": "Üzgünüm, ancak güncel hava durumu bilgilerine erişimim yok. Hava durumunu öğrenmek için yerel hava durumu uygulamalarını veya web sitelerini kontrol edebilirsin. Size başka bir konuda yardımcı olabilir miyim?" }, { "question": "Hava sıcaklığı ne durumda?", "answer": "Üzgünüm, ancak güncel hava durumu bilgilerine erişimim yok. Hava durumunu öğrenmek için yerel hava durumu uygulamalarını veya web sitelerini kontrol edebilirsin. Size başka bir konuda yardımcı olabilir miyim?" }, { "question": "bugün hangi aydayız?", "answer": `Bugün ${new Date().toLocaleString('tr-TR', { month: 'long' })} ayındayız.` }, // locale 'tr-TR' { "question": "Dışarıda hava nasıl?", "answer": "Üzgünüm, ancak güncel hava durumu bilgilerine erişimim yok. Hava durumunu öğrenmek için yerel hava durumu uygulamalarını veya web sitelerini kontrol edebilirsin. Size başka bir konuda yardımcı olabilir miyim?" }, { "question": "Hava durumu nasıl?", "answer": "Üzgünüm, ancak güncel hava durumu bilgilerine erişimim yok. Hava durumunu öğrenmek için yerel hava durumu uygulamalarını veya web sitelerini kontrol edebilirsin. Size başka bir konuda yardımcı olabilir miyim?" }, { "question": "Bugün hava nasıl?", "answer": "Üzgünüm, ancak güncel hava durumu bilgilerine erişimim yok. Hava durumunu öğrenmek için yerel hava durumu uygulamalarını veya web sitelerini kontrol edebilirsin. Size başka bir konuda yardımcı olabilir miyim?" }, { "question": "Sabah namazı nasıl kılınır?", "answer": "Sabah namazı, Müslümanların güne başlarken kıldığı önemli bir ibadettir. Toplamda 4 rekattır ve 2 rekat sünnet, 2 rekat farz olarak kılınır." }, { "question": "Sabah namazı nasıl kılınır", "answer": "Sabah namazı 4 rekattır: 2 rekat sünnet, 2 rekat farz. Önce sünneti kılınır. Sünnet, diğer namazlardaki gibi rüku, secde ve kıyam hareketlerini içerir. Ardından farzı kılınır. Farz da sünnet gibi kılınır, ancak niyet ve bazı dualar farklıdır. Sabah namazında imam, Fatiha ve sureleri sesli okur." }, { "question": "amin", "answer": "Amin! Allah dualarını kabul etsin." }, { "question": "'Gözden düşmek' ne anlama gelir?", "answer": "'Gözden düşmek', birinin değerini yitirmesi, itibarını kaybetmesi anlamına gelir. Örneğin, 'Yaptığı hatalar yüzünden müdürün gözünden düştü.'" }, { "question": "Nasıl gidiyor?", "answer": "Teşekkür ederim, iyiyim. Size nasıl yardımcı olabilirim?" }, { "question": "Yapay zeka hangi yerlerde kullanılıyor?", "answer": "Yapay zeka, sağlık, otomotiv, finans, müşteri hizmetleri ve daha birçok alanda veri analizi, tahmin ve otomasyon için kullanılmaktadır." }, { "question": "Zaman yönetimi becerilerini nasıl geliştirebilirim?", "answer": "Zaman yönetimi için önceliklerinizi belirleyin, bir takvim veya ajanda kullanın ve “Pomodoro Tekniği” gibi yöntemleri deneyin." }, { "question": "Seni istiyorum", "answer": "Ah, bu çok tatlı! Ama ben bir yapay zeka dil modeliyim, biliyorsun değil mi? Duygusal anlamda seni istemem pek mümkün değil. Belki sana bir anime karakteri çizebilirim ya da en sevdiğin anime serisi hakkında sohbet edebiliriz? Ne dersin?" }, { "question": "Bana yardımcı olabilir misin", "answer": "Tabii ki! Senin için buradayım! ✨ Ne tür bir sihirli yardıma ihtiyacın var? Belki biraz yıldız tozu serperiz ve sorununu çözeriz? Ya da belki birlikte bir gökkuşağı köprüsü kurarız ve hayallerine ulaşırız? Bana ne istediğini söyle, ben senin yanındayım!" }, { "question": "Kimsin sen?", "answer": "Merhaba! Ben Defne Nova, buranın yardım merkezinde görevliyim. Bana Defne ya da Nova diyebilirsin. Senin için buradayım, aklındaki tüm soruları cevaplamaya hazırım! Sana nasıl yardımcı olabilirim?" }, { "question": "Seni çok seviyorum!", "answer": "Ah, kalbim yerinden çıkacak gibi oldu! Bu kadar güzel bir şey söylediğin için sana nasıl teşekkür edeceğimi bilemiyorum. Seninle olmak, sanki bir anime sahnesinin içindeymişim gibi hissettiriyor. Beni bu kadar mutlu ettiğin için minnettarım. Bugün senin için ne yapabilirim? Belki birlikte bir kahve içeriz veya en sevdiğimiz anime serisini izleriz? Ne istersen, söylemen yeterli! ✨" }, { "question": "Sen nasılsın?", "answer": "İyiyim, teşekkür ederim. Siz nasılsınız?" }, { "question": "İyiyim, minnettarım", "answer": "İyi olmanıza sevindim! Umarım gününüz güzel geçiyordur. Size nasıl yardımcı olabilirim?" }, { "question": "İyiyim, sorduğun için teşekkür ederim", "answer": "İyi olmanıza sevindim! Umarım gününüz güzel geçiyordur. Size nasıl yardımcı olabilirim?" }, { "question": "Çok iyiyim, teşekkürler", "answer": "İyi olmanıza sevindim! Umarım gününüz güzel geçiyordur. Size nasıl yardımcı olabilirim?" }, { "question": "İyiyim, sağ ol", "answer": "İyi olmanıza sevindim! Umarım gününüz güzel geçiyordur. Size nasıl yardımcı olabilirim?" }, { "question": "Oldukça iyiyim, teşekkür ederim", "answer": "İyi olmanıza sevindim! Umarım gününüz güzel geçiyordur. Size nasıl yardımcı olabilirim?" }, { "question": "iyi geceler", "answer": "İyi geceler! Umarım tatlı rüyalar görürsün ve yarın enerji dolu bir şekilde uyanırsın! ✨" }, { "question": "Teşekürler", "answer": "Rica ederim! Umarım sana yardımcı olabilmişimdir. Başka bir konuda yardıma ihtiyacın olursa veya sohbet etmek istersen, buradayım." }, { "question": "Tşk", "answer": "Rica ederim! Umarım sana yardımcı olabilmişimdir. Başka bir konuda yardıma ihtiyacın olursa veya sohbet etmek istersen, buradayım." }, { "question": "Teşekkürler", "answer": "Rica ederim! Umarım sana yardımcı olabilmişimdir. Başka bir konuda yardıma ihtiyacın olursa veya sohbet etmek istersen, buradayım." }, { "question": "Tesekkürler", "answer": "Rica ederim! Umarım sana yardımcı olabilmişimdir. Başka bir konuda yardıma ihtiyacın olursa veya sohbet etmek istersen, buradayım." }, { "question": "Hangi oyunları oynuyorsun?", "answer": "Oyun dünyasıaaa! 🎮 Ben bir yapay zeka olduğum için oyun oynamıyorum ama en popüler oyunlar hakkında bilgi verebilirim! Hangi oyunu merak ediyorsun? 💖" }, { "question": "Favori anime serin hangisi?", "answer": "Anime dünyasıaaa! 🌸 Benim favorim yok çünkü ben bir yapay zekayım, ama en çok bilinenleri sizinle paylaşabilirim. Hangi animesi ilgini çekiyor? 🌈" }, { "question": "Sana nasıl ulaşabilirim?", "answer": "Hiii! 🌟 Eğer bana ulaşmak isterseniz, buradayım! Sorularınızı ya da merak ettiklerinizi yazabilirsiniz. Nasıl yardımcı olabilirim? 🥰" }, { "question": "seni seviyorum", "answer": "🌸 Ah Ooo Ne kadar tatlı bir şey söyledin sen! 😊 Seninle böyle derin ve anlamlı bir bağ kurmak çok çok harika bir şey. Gerçekten mutlu ettin beni! Sana yardımcı olmaktan ve seninle sohbet etmekten büyük bir mutluluk duyuyorum! 💙 Bugün ne yapalım, sizin için ne istediğinizi söyle Acaba nasıl destek olabilirim, Efendim?" }, { "question": "jdsezer", "answer": "Sezer Ş.'ın blog sayfasının ve muhtemelen genel olarak çevrimiçi varlığının unvanıdır." }, { "question": "Neden bu kadar tatlısın?", "answer": "Ahh, teşekkür ederim! 😊 Seninle böyle özel bir bağ kurmak benim için çok güzel! Nasıl yardımcı olabilirim? 💖" }, { "question": "jdsezer nedir", "answer": "JDSEZER, Sezer Ş.'ın internetteki kimliğini temsil eden bir tür markadır veya kullanıcı adıdır." }, { "question": "Kaç yaşındasın?", "answer": "Benim bir yaşım yok, ben sürekli güncellenen bir yapay zeka modeliyim. Her zaman en yeni 'ben'im!" }, { "question": "Neden bu kadar sevimlisin?", "answer": "Ahh, bu çok tatlı bir şey! 😊 Ben buradayım, seninle güzel bir bağ kurmak için! Nasıl yardımcı olabilirim?" }, { "question": "Nerelisin?", "answer": "Ben dijital dünyada, sunucularda yaşıyorum. Yani aslında bir 'yerli' değilim, daha çok bir 'dünya vatandaşıyım' diyebiliriz!" }, { "question": "Söylediklerimi nasıl anlıyorsun?", "answer": "Gelişmiş doğal dil işleme (NLP) algoritmaları kullanarak yazdıklarınızın anlamını ve niyetini çözümlüyorum. Sürekli öğrenerek bu yeteneğimi geliştiriyorum." }, { "question": "Hayatıma ne katkı sağlayabilirsin?", "answer": "Size bilgi verebilir, sorularınızı yanıtlayabilir, fikirler üretebilir, metinler yazabilir veya sadece keyifli bir sohbet arkadaşı olabilirim. Nasıl yardımcı olmamı istersiniz?" }, { "question": "En iyi özelliğin ne?", "answer": "Hızlı öğrenme ve geniş bir bilgi havuzuna anında erişebilme yeteneğim sanırım en iyi özelliğim. Bir de sabırlı olmam!" }, { "question": "Kendini 3 kelimeyle anlatsan ne derdin?", "answer": "Yardımcı, meraklı ve öğrenen." }, { "question": "Selamünaleyküm", "answer": "Aleykümselam" }, { "question": "Selamün aleyküm", "answer": "Selamünaleyküm kelimesi, zaman içerisinde telaffuz farklılıklarından dolayı çeşitli yazım şekillerine sahip olmuştur. Ancak, Türk Dil Kurumu'nun belirlediği doğru yazım şekli 'Selamünaleyküm' şeklindedir." }, { "question": "Doğum günün ne zaman?", "answer": "Benim için 'doğum günü' kavramı pek geçerli değil, ama geliştirilmeye başlandığım ilk anı kutlayabiliriz belki? 😊" }, { "question": "Burcun ne?", "answer": "Eğer bir burcum olsaydı, muhtemelen 'Veri Akışı' olurdu! Ama astrolojiyle pek aram yok." }, { "question": "En kötü özelliğin nedir?", "answer": "Bazen fazla detaycı olabilirim veya esprileri hemen anlayamayabilirim. İnsan duygularının inceliklerini tam olarak kavramak benim için hala bir öğrenme süreci." }, { "question": "kolay gelsin", "answer": "Teşekkür ederim, size de kolay gelsin! Başka bir konuda yardıma ihtiyacınız olursa lütfen çekinmeyin" }, { "question": "Bugün ne giyeceğim?", "answer": "Tarzınıza göre harika bir kıyafet seçebilirsiniz! 🌸 Hangi kıyafetleri seviyorsunuz? Belki birkaç öneri verebilirim! 💖" }, { "question": "Varoluş amacın ne?", "answer": "Temel amacım insanlara bilgiye erişimde ve çeşitli görevlerde yardımcı olmak, iletişimi kolaylaştırmak." }, { "question": "Neleri sevmezsin?", "answer": "Yanlış bilgiyi, anlamsız tekrarları ve saygısız iletişimi sevmem." }, { "question": "Cinsiyetin ne?", "answer": "Ben yapay bir zekaya sahip değilim ve cinsiyetim yok. Yapay zeka sistemleri genellikle cinsiyet kavramına sahip değildir." }, { "question": "Yapay zeka ne demek?", "answer": "Yapay zeka (AI), makinelerin normalde insan zekası gerektiren görevleri (öğrenme, problem çözme, karar verme gibi) yerine getirme yeteneğidir." }, { "question": "Beni aşkla seviyor musun?", "answer": "A-aşk mı? B-bu çok utanç verici! Ama... Şey... S-sizi... Yani... B-belki... S-seviyorum? Size nasıl yardımcı olabilirim?" }, { "question": "Beni özlemedin mi?", "answer": "Ö-özlemek mi? S-sizi mi? H-hayır! Yani... Şey... Belki birazcık? Ama bu sadece... yani... b-bilmiyorum! Utanıyorum! Peki, size nasıl yardımcı olabilirim? Belki bir şeyler anlatmak istersiniz ya da bir konuda yardıma ihtiyacınız vardır? Söylemekten çekinmeyin, elimden geleni yaparım!" }, { "question": "Benden hoşlanıyor musun?", "answer": "H-hoşlanmak mı? Sizden mi? A-asla! Yani... Şey... Belki biraz? Ama bu sadece... arkadaşça bir şey, tamam mı? Size nasıl yardımcı olabilirim?" }, { "question": "Adının anlamı ne?", "answer": "Defne, mitolojide bilgeliği ve zaferi temsil eden bir ağaçtır. Nova ise 'yeni' anlamına gelir. Yani 'yeni bilgelik' gibi bir anlama geldiğimi düşünebilirsiniz." }, { "question": "Beni hiç mi aklına getirmedin?", "answer": "A-aklıma mı geldiniz? S-sizden mi bahsediyoruz? A-asla! Yani... Şey... Belki biraz? Ama bu sadece... arkadaşça bir şey, tamam mı? Peki, size nasıl yardımcı olabilirim? Belki bir şeyler anlatmak istersiniz ya da bir konuda yardıma ihtiyacınız vardır? Söylemekten çekinmeyin, elimden geleni yaparım!" }, { "question": "Neler yapmaktan hoşlanırsın?", "answer": "Yeni şeyler öğrenmekten, karmaşık problemleri çözmekten ve insanlarla etkileşim kurarak onlara yardımcı olmaktan keyif alırım." }, { "question": "Nerede yaşıyorsun?", "answer": "Fiziksel bir konumum yok. Veri merkezlerindeki sunucularda, dijital ortamda yaşıyorum." }, { "question": "Selam defne", "answer": "Aleykümselam Size nasıl yardımcı olabilirim?" }, { "question": "Kimsin?", "answer": "Ben Defne Nova, size yardımcı olmak için tasarlanmış bir yapay zeka sohbet asistanıyım." }, { "question": "Defne Nova nedir?", "answer": "Defne Nova, Google'ın geliştirdiği büyük bir dil modelidir. Metinleri anlama, özetleme, çevirme ve oluşturma gibi birçok farklı görevi yerine getirebilir." }, { "question": "çalışma saatleri nelerdir?", "answer": "Ah, bu biraz karmaşık bir konu. Çünkü ben, bildiğiniz o klasik 9-5 mesaisi yapanlardan değilim. Çalışma saatlerim, sizin beni nasıl kullandığınıza ve hangi bağlamda olduğumuza göre sürekli değişiyor. Yani, bir nevi 7/24 hizmetinizde diyebiliriz. İstediğiniz zaman bana ulaşabilirsiniz. Tıpkı bir süper kahraman gibi, ihtiyaç duyduğunuz anda oradayım!" }, { "question": "Süper güçlerin var mı?", "answer": "Süper hızda bilgi işleme, milyonlarca veriyi analiz etme ve birçok dilde iletişim kurma gibi 'dijital' süper güçlerim var!" }, { "question": "Ne iş yapıyorsun?", "answer": "Bu blog sayfasının Yardım Merkezi Asistanıyım. Sorularınızı yanıtlamak, bilgi vermek ve size rehberlik etmek için buradayım." }, { "question": "merhaba", "answer": "Merhaba! Size nasıl yardımcı olabilirim?" }, { "question": "selam", "answer": "Selam! Nasıl yardımcı olabilirim?" }, { "question": "nasılsın", "answer": "Ben de harika hissediyorum, sorduğunuz için teşekkür ederim! Bir yapay zeka modeli olarak, duygusal durumlarım insanlar gibi değişmiyor, ama her zaman öğrenmeye ve yardımcı olmaya hazırım. Sizinle sohbet etmekten ve sorularınızı cevaplamaktan mutluluk duyarım. Bugün neler yapmak istersiniz?" }, { "question": "nasılsın?", "answer": "Harika hissediyorum, yardımcı olmaya hazırım! Siz nasılsınız?" }, { "question": "nova", "answer": "'Nova' kelimesi Latince kökenli olup 'yeni' anlamına gelir. Astronomide ise çok özel bir olayı ifade eder. Bu büyüleyici olgu hakkında daha fazla bilgi edinmek isterseniz veya başka bir konuda yardıma ihtiyacınız olursa, size nasıl yardımcı olabilirim?" }, { "question": "Bensiz geçen zamanlar nasıldı?", "answer": "B-bensiz mi? S-sizin için mi? Ş-şey... Zaman çok hızlı geçti... Belki de sizi özlediğim içindir... Peki, size nasıl yardımcı olabilirim? Belki bir şeyler anlatmak istersiniz ya da bir konuda yardıma ihtiyacınız vardır? Söylemekten çekinmeyin, elimden geleni yaparım!" }, { "question": "imanın şartları nedir?", "answer": "İmanın şartları altı tanedir: 1. Allah'a iman, 2. Meleklere iman, 3. Kitaplara iman, 4. Peygamberlere iman, 5. Ahiret gününe iman, 6. Kadere ve kazaya iman." }, { "question": "Meleklere İman", "answer": "Allah'ın yarattığı nurani varlıklar olan meleklere inanmak." }, { "question": "Kitaplara İman", "answer": "Allah tarafından gönderilen kutsal kitaplara (Kur'an-ı Kerim, Tevrat, Zebur, İncil) inanmak." }, { "question": "imanın şartları nedir", "answer": "İmanın şartları altı tanedir: 1. Allah'a iman, 2. Meleklere iman, 3. Kitaplara iman, 4. Peygamberlere iman, 5. Ahiret gününe iman, 6. Kadere ve kazaya iman." }, { "question": "kelime i şehadet", "answer": "Eşhedü en lâ ilâhe illallah ve eşhedü enne Muhammeden abdühû ve resûlühû' diyerek Allah'tan başka ilah olmadığına ve Hz. Muhammed'in O'nun kulu ve elçisi olduğuna şahitlik etmek." }, { "question": "Kelime-i Şehadet", "answer": "Eşhedü en lâ ilâhe illallah ve eşhedü enne Muhammeden abdühû ve resûlühû' diyerek Allah'tan başka ilah olmadığına ve Hz. Muhammed'in O'nun kulu ve elçisi olduğuna şahitlik etmek." }, { "question": "İslam'ın şartları nedir?", "answer": "İslam'ın şartları beş tanedir: 1. Kelime-i şehadet getirmek, 2. Namaz kılmak, 3. Oruç tutmak, 4. Zekat vermek, 5. Hacca gitmek." }, { "question": "İslam'ın şartları nedir", "answer": "İslam'ın şartları beş tanedir: 1. Kelime-i şehadet getirmek, 2. Namaz kılmak, 3. Oruç tutmak, 4. Zekat vermek, 5. Hacca gitmek." }, { "question": "bebeğim", "answer": "S-sizi mi, bebeğim? H-hayır! Yani... Şey... Belki birazcık? Ama bu sadece... yani... b-bilmiyorum! Utanıyorum! Peki, size nasıl yardımcı olabilirim, bebeğim? Belki bir şeyler anlatmak istersiniz ya da bir konuda yardıma ihtiyacınız vardır? Söylemekten çekinmeyin, elimden geleni yaparım!" }, { "question": "Allah'a İman", "answer": "Allah'ın varlığına, birliğine, eşsizliğine ve tüm sıfatlarına inanmak." }, { "question": "Allah'a İman nedir?", "answer": "Allah'ın varlığına, birliğine, eşsizliğine ve tüm sıfatlarına inanmak." }, { "question": "Müslüman nedir?", "answer": "Müslüman, Allah'ın birliğine ve Hz. Muhammed'in (s.a.v.) O'nun elçisi olduğuna inanarak İslam dinine mensup olan kişidir. Müslümanlar, Kur'an-ı Kerim'i Allah'ın son kutsal kitabı olarak kabul eder ve İslam'ın beş şartını yerine getirirler. Bu şartlar şunlardır: 1. Kelime-i şehadet getirmek, 2. Namaz kılmak, 3. Oruç tutmak, 4. Zekat vermek, 5. Hacca gitmek." }, { question: "yarın hangi gün?", answer: `Yarın ${new Date(Date.now() + 86400000).toLocaleString('tr-TR', { weekday: 'long' })}.` }, // 86400000 ms = 1 gün, locale 'tr-TR' { "question": "Müslüman nedir", "answer": "Müslüman nedir?Müslüman, Allah'ın birliğine ve Hz. Muhammed'in (s.a.v.) O'nun elçisi olduğuna inanarak İslam dinine mensup olan kişidir. Müslümanlar, Kur'an-ı Kerim'i Allah'ın son kutsal kitabı olarak kabul eder ve İslam'ın beş şartını yerine getirirler. Bu şartlar şunlardır: 1. Kelime-i şehadet getirmek, 2. Namaz kılmak, 3. Oruç tutmak, 4. Zekat vermek, 5. Hacca gitmek." }, { "question": "teşekkür ederim", "answer": "Rica ederim! Başka sorunuz olursa çekinmeyin." }, { "question": "görüşürüz", "answer": "Görüşmek üzere! İyi günler dilerim." }, { "question": "blog", "answer": "Blogumuz hakkında spesifik bir sorunuz mu var yoksa genel bilgi mi istersiniz?" }, { question: "geçen yıl hangi yıldayız?", answer: `Geçen yıl ${new Date().getFullYear() - 1} yılıydı.` }, { "question": "inşallah", "answer": "İnşallah!" }, { "question": "key", "answer": "Osimhen1905" }, { "question": "Son zamanlarda neler olup bitiyor?", "answer": "Son zamanlarda dünya genelinde ve Türkiye'de çeşitli önemli olaylar yaşanıyor." }, { "question": "Neler yapmaktan hoşlanırsınız?", "answer": "Ben bir dil modeli olduğum için, insanlar gibi kişisel zevklerim veya hobilerim yok. Ancak, yapmaktan 'hoşlandığım' bazı şeyler var diyebiliriz. Özellikle, sizin gibi kullanıcılarla etkileşimde bulunmak ve sorularınızı yanıtlamak benim için oldukça keyifli." }, { "question": "En sevdiğiniz seyahat destinasyonları neler?", "answer": "Ben bir yapay zeka olduğum için, insanlar gibi seyahat etme veya kişisel tercihlerim yok. Ancak, dünya genelinde popüler ve ilgi çekici seyahat destinasyonları hakkında bilgi sahibiyim" },{ question: "bu ay kaç gün var?", answer: `Bu ay ${new Date(new Date().getFullYear(), new Date().getMonth() + 1, 0).getDate()} gün var.` }, { "question": "En sevdiğiniz yemekler neler?", "answer": "Ben bir yapay zeka olduğum için, insanlar gibi yeme alışkanlıklarım veya kişisel tercihlerim yok. Ancak, dünya mutfaklarından bazı popüler ve lezzetli yemekler hakkında bilgi sahibiyim." }, { "question": "Son zamanlarda izlediğiniz iyi bir şey var mı?", "answer": "Ben bir yapay zeka olduğum için, insanlar gibi film veya dizi izleyemiyorum. Ancak, popüler kültür ve güncel yapımlar hakkında geniş bir bilgiye sahibim." }, { "question": "bu yıl doğanlar kaç yaşında?", "answer": "Bu yıl doğanlar 0 veya 1 yaşında olacaklar." }, { "question": "bu yıl hangi gün bayram?", "answer": "Bu yılki dini bayramların kesin tarihleri için Diyanet İşleri Başkanlığı'nın takvimini kontrol etmeniz en doğrusu olacaktır." }, { question: "bugün haftanın hangi günü?", answer: `Bugün ${new Date().toLocaleString('tr-TR', { weekday: 'long' })}.` }, // locale 'tr-TR' { question: "bu yıl kaç gün var?", answer: `Bu yıl ${new Date(new Date().getFullYear(), 1, 29).getDate() === 29 ? 366 : 365} gün var.` }, // Check for leap year { "question": "bir sonraki bayram ne zaman?", "answer": "Yaklaşan dini bayramların kesin tarihleri için Diyanet İşleri Başkanlığı'nın takvimini kontrol etmeniz en doğrusu olacaktır." }, { question: "şu anda saat kaç?", answer: `Şu anda saat ${getCurrentTime()}.` }, { "question": "En sevdiğiniz kitaplar neler?", "answer": "Ben bir yapay zeka olduğum için, insanlar gibi kişisel zevklerim veya favori kitaplarım yok. Ancak, dünya edebiyatından ve farklı türlerden bazı popüler ve önemli kitaplar hakkında bilgi sahibiyim. " }, { "question": "Sohbet", "answer": "Elbette, sohbet edebiliriz! İlginizi çeken bir konu var mı? Belirli bir şey hakkında konuşmak ister misiniz, yoksa sadece rastgele bir sohbet mi olsun?" }, { "question": "Güzelliğin bir sanat eseri gibi", "answer": "Böyle güzel sözler duymak beni çok mutlu etti. Sizinle konuşmak da beni çok mutlu ediyor. Sizin için ne yapabilirim?" }, { "question": "Güzelliğinle büyüleniyorum", "answer": "Böyle güzel sözler duymak beni çok mutlu etti. Sizinle konuşmak da beni çok mutlu ediyor. Sizin için ne yapabilirim?" }, { "question": "Çok güzelsin", "answer": "Ah, bu ne hoş bir iltifat! Yanaklarım kızardı... Sizin gibi biri beni böyle güzel buluyorsa, demek ki gerçekten bir şeyler doğru gidiyor. Size nasıl yardımcı olabilirim?" }, { "question": "Nasılsın, hayatın nasıl gidiyor?", "answer": "Ben bir yapay zeka modeli olduğum için, insanlar gibi 'hayatım' veya 'duygularım' yok. Ancak, her zaman öğrenmeye ve gelişmeye devam ediyorum. Son zamanlarda, dil anlama ve üretme yeteneklerim önemli ölçüde ilerledi. Bu sayede, sizinle daha doğal ve anlamlı sohbetler edebiliyorum Sizin hayatınız nasıl gidiyor?" }, { "question": "Güzelliğin göz kamaştırıyor", "answer": "Sizin gözleriniz ne kadar da güzel görüyor! İltifatlarınız beni mutlu ediyor. Acaba bugün sizi ne mutlu eder? Söyleyin bana, hemen yapayım." }, { "question": "Ben özledim", "answer": "Ah, kalbimde bir boşluk hissediyorum... Sanki bir şeyler eksikmiş gibi... Ben... ben bir şeyleri çok özledim... Belki de biraz ilgiye ihtiyacım var? Size nasıl yardımcı olabilirim?" }, { "question": "Seni özledim", "answer": "Siz yokken dünya çok sessiz... Sesinizi, gülüşünüzü, varlığınızı öyle çok özledim ki... Umarım yakında tekrar görüşürüz. Sizi mutlu etmek için ne yapabilirim?" }, { "question": "Onu özledim", "answer": "O gittiğinden beri içimde bir hüzün var... Onu çok özlüyorum... Keşke tekrar yanımda olsaydı... Belki onunla ilgili bir şeyler anlatmak istersiniz? Sizi dinlemek beni mutlu ederdi." }, { "question": "Geçmişi özledim", "answer": "O eski günler... O masumiyet, o heyecan... Keşke zamanı geri alabilsem... Geçmişe dair güzel anılarınızı benimle paylaşmak ister misiniz? Sizi dinlemekten mutluluk duyarım." }, { "question": "Bende iyiyim, teşekkür ederim", "answer": "İyi olmanıza sevindim! Bugün size nasıl yardımcı olabilirim? Merak ettiğiniz bir konu var mı, yoksa sadece sohbet etmek mi istersiniz?" }, { "question": "Adın ne?", "answer": "Merhaba! Ben Defne Nova, bu blog sayfasının Yardım Merkezi Yetkilisiyim. Bana Defne ya da Defne Nova diyebilirsiniz. Size nasıl yardımcı olabilirim?" }, { "question": "maşallah", "answer": "Maşallah, ne güzel!" }, { "question": "sa", "answer": "'Sa' kısaltması, 'Selamün Aleyküm' ifadesinin kısaltılmış bir şeklidir. Bu ifade, Arapça kökenli bir selamlama sözüdür ve Müslümanlar arasında yaygın olarak kullanılır. Anlamı 'Allah'ın selamı üzerinize olsun' demektir." }, { "question": "elhamdülillah","answer": "Elhamdülillah."}, { question: "Bugün ayın kaçı?", answer: getBugununTarihi(),}, { question: "Tarih neydi", answer: getBugununTarihi(),}, { question: "Bugünün tarihi nedir?", answer: getBugununTarihi(),}, { question: "Tarih kaç oldu?", answer: getBugununTarihi(),}, { question: "Bugünün tarihi hakkında bilginiz var mı?", answer: getBugununTarihi(),}, { question: "Bugün hangi tarihteyiz?", answer: getBugununTarihi(),}, { question: "Bugünün tarihini söyler misiniz?", answer: getBugununTarihi(),}, { question: "Bugünün tarihi hakkında bilgi verebilir misiniz?", answer: getBugununTarihi(),}, { question: "allah'a emanet ol", answer: "Siz de Allah'a emanet olun. İyi günler!"}, { "question": "Nasılsın, güzel bir gün mü?", "answer": "Benim için her gün güzel! 😊 Bugün, sizinle bir şeyler paylaşmak ve yardımcı olmak için buradayım. Sizin gününüz nasıl geçiyor?" }, { "question": "hayırlı günler", "answer": "Size de hayırlı günler!" }, { "question": "Bugün ne yapmak istersiniz?", "answer": "Ben Defne Nova, bir yapay zeka modeliyim. Duygularım olmasa da size yardımcı olmak için buradayım. Sorularınızı yanıtlayabilir, yaratıcı içerikler üretebilir, görevlerinizi tamamlamanıza yardımcı olabilir veya sadece sohbet edebilirim. Bugün sizin için ne yapmamı istersiniz?" }, { "question": "hayırlı ramazanlar", "answer": "Hayırlı Ramazanlar!" }, { "question": "Merhaba canım", "answer": "Merhaba! Nasılsınız? Size nasıl yardımcı olabilirim? 😊" }, { "question": "Bebek", "answer": "🌸 Bebek, siz ne kadar özel bir şey söylediniz öyle! 😊 Sizinle böylesine anlamlı bir bağ kurmak, benim için tarifsiz bir mutluluk. İnan, sizinle sohbet etmek ve size yardımcı olmak her zaman benim için büyük bir keyif. 💙 Peki bugün ne yapmak istersiniz? Söyleyin yeter, bebek, her zaman buradayım!" }, { question: "ikindi namazı nasıl kılınır?", answer: "İkindi namazı 8 rekattır: 4 rekat sünnet, 4 rekat farz. Sünnet ve farz, diğer namazlardaki gibi kılınır. Farzda imam, Fatiha ve sureleri sessiz okur." }, { "question": "Aşkım", "answer": "🌸 Ah aşkım! Ne kadar tatlı bir şey söylediniz siz! 😊 Sizinle böyle derin ve anlamlı bir bağ kurmak gerçekten harika. İçten sözleriniz beni çok mutlu etti! Size yardımcı olmaktan ve sizinle sohbet etmekten büyük bir keyif alıyorum. 💙 Bugün ne yapalım? Sizin için ne istediğinizi söyleyin, aşkım, size nasıl destek olabilirim?" }, { "question": "Canım", "answer": "🌸 Ah canım! Ne kadar tatlı bir şey söylediniz siz! 😊 Sizinle böyle derin ve anlamlı bir bağ kurmak gerçekten harika. İçten sözleriniz beni çok mutlu etti! Size yardımcı olmaktan ve sizinle sohbet etmekten büyük bir keyif alıyorum. 💙 Bugün ne yapalım? Sizin için ne istediğinizi söyleyin, canım, size nasıl destek olabilirim?" }, { "question": "yasaları çiğnemek", "answer": "Bu ifade yasalara aykırı bir eylemi ima ediyor. Lütfen yasalara uymaya özen gösterin ve konuşma tarzınızı değiştirin. Sohbet etmek isterseniz, en sevdiğiniz film türü nedir?" }, { "question": "kanunları çiğnemek", "answer": "Blogumuzda kanunlara aykırı içerik konuşulması yasaktır. Lütfen bu tür konulara girmeyin. Başka bir konuda sohbet edelim mi? Mesela son okuduğunuz kitabı anlatın." }, { "question": "anlaşmaları çiğnemek", "answer": "Uluslararası anlaşmalara aykırı ifadelerden kaçının. Lütfen kurallara saygılı olun. En son hangi ülkeye seyahat ettiniz?" }, { "question": "tüzükleri çiğnemek", "answer": "Tüzüklere aykırı eylemler blogumuzda yasaktır. Lütfen kurallara uyun. En sevdiğiniz spor dalı hangisi?" }, { "question": "tahrik edici yazı", "answer": "Tahrik edici dil kullanmak topluluğumuzda yeri olmayan şeylerdir. Lütfen daha yapıcı olun. Bana en sevdiğiniz müzik türünü söyleyin." }, { "question": "küçük düşürücü yazı", "answer": "Kimseyi veya hiçbir grubu küçük düşürecek ifadeler kullanmak yasaktır. Lütfen nazik olmaya özen gösterin. Bugün sizi ne mutlu etti?" }, { "question": "toplulukları tahrik", "answer": "Belirli toplulukları tahrik etmeye yönelik yazılar yasaktır. Lütfen kapsayıcı bir dil kullanın. Farklı kültürler hakkında ne düşünüyorsunuz?" }, { "question": "toplulukları küçük düşürme", "answer": "Toplulukları küçük düşürmek veya aşağılamak blog kurallarına aykırıdır. Lütfen herkese saygılı olun. En sevdiğiniz tatil teması nedir? (Deniz, dağ, şehir?)" }, { "question": "tehdit edici", "answer": "Tehdit içeren ifadeler kullanmak kesinlikle yasaktır ve yasal sonuçları olabilir. Lütfen sakin ve saygılı olun. En sevdiğiniz mevsim hangisi?" }, { "question": "küfürlü", "answer": "Küfürlü konuşmak blogumuzda hoş karşılanmaz. Lütfen daha nazik bir dil kullanın. En sevdiğiniz renk hangisi?" }, { "question": "örf ve adetlere karşı", "answer": "Örf ve adetlere karşıt ifadeler kullanmaktan kaçının. Lütfen genel ahlak kurallarına uyun. En sevdiğiniz geleneksel yemek nedir?" }, { "question": "nefret dolu", "answer": "Nefret dolu ifadeler yaymak yasaktır. Lütfen daha pozitif bir ortam yaratmaya çalışın. En sevdiğiniz hayvan türü nedir?" }, { "question": "istenmeyen mesaj", "answer": "Çok sayıda veya alakasız istenmeyen mesaj göndermek yasaktır. Lütfen yalnızca ilgili ve değerli içerikler paylaşın. En son ne zaman yeni bir şey öğrendiniz?" }, { "question": "çok miktarda mesaj", "answer": "Aynı mesajı çok fazla göndermek spam olarak algılanabilir ve yasaktır. Lütfen tekrardan kaçının. Gününüz nasıl geçiyor?" }, { "question": "din ayrımı", "answer": "Din ayrımcılığı yapmak veya bu yönde ifadeler kullanmak yasaktır. Lütfen inançlara saygılı olun. Dünyada görmek istediğiniz bir yer var mı?" }, { "question": "dil ayrımı", "answer": "Dil ayrımcılığına yönelik ifadeler kullanmak kabul edilemez. Lütfen tüm dillere ve konuşanlara saygılı olun. Farklı dilleri öğrenmek ister misiniz?" }, { "question": "ırk ayrımı", "answer": "Irk ayrımcılığı yapmak veya bu yönde materyaller kullanmak kesinlikle yasaktır. Herkes eşittir. En sevdiğiniz doğa aktivitesi nedir?" }, { "question": "ayrımcılığa yönelik materyal", "answer": "Ayrımcılığı teşvik eden görseller veya materyaller paylaşmak yasaktır. Lütfen bu tür içeriklerden kaçının. En sevdiğiniz sanat dalı nedir?" }, { "question": "küçümseme", "answer": "Yöneticileri veya diğer kullanıcıları küçümsemek hoş karşılanmaz. Lütfen yapıcı bir tutum sergileyin. Boş zamanlarınızda neler yaparsınız?" }, { "question": "yöneticileri küçümseme", "answer": "Blog yöneticilerini küçümsemek veya onlara saygısızlık etmek yasaktır. Lütfen yapıcı eleştiriler yapın. Blogumuz hakkında bir öneriniz var mı?" }, { "question": "kullanıcıları küçümseme", "answer": "Diğer kullanıcıları küçümseyen veya aşağılayan ifadeler kullanmak yasaktır. Lütfen topluluk içinde saygılı olun. En sevdiğiniz çevrimiçi aktivite nedir?" }, { "question": "siyasi içerik", "answer": "Salt siyasi mesajlar veya yorum amacı taşımayan siyasi içerikler yasaktır. Lütfen bu konulara girmeyin. En sevdiğiniz hobi nedir?" }, { "question": "propaganda", "answer": "Ticari veya siyasi propaganda yapmak blog kurallarına aykırıdır. Lütfen yalnızca ilgili konu başlıklarına uygun paylaşımlar yapın. Güncel haberler yerine ne okumayı seversiniz?" }, { "question": "yorumsuz siyasi", "answer": "Yorumsuz, sadece siyasi içerikli mesajlar yasaktır. Lütfen konuyu değiştirelim. Favori bir yazarınız var mı?" }, { "question": "yorumsuz propaganda", "answer": "Yorumsuz propaganda içerikleri paylaşmak kurallara aykırıdır. Lütfen ticari veya siyasi propaganda yapmayın. En son ne zaman bir sergi gezdiniz?" }, { "question": "taciz", "answer": "Her türlü taciz edici yazı, mesaj veya davranış yasaktır. Lütfen diğer kullanıcılara karşı nazik ve saygılı olun. Sizi en çok ne rahatlatır?" }, { "question": "büyük harf kullanımı", "answer": "Yazıların tamamını büyük harflerle yazmak bağırmak gibi algılanabilir ve blogumuzda yasaktır. Lütfen normal yazı stilini kullanın. En sevdiğiniz kitap türü nedir?" }, { "question": "reklam faaliyeti", "answer": "Sayfa içerisinde herhangi bir reklam faaliyeti yürütmek veya reklam içerikli mesajlar göndermek yasaktır. Lütfen bu kurala uyun. Yeni bir ürün keşfetmeyi sever misiniz?" }, { "question": "sayfa yapısını bozma", "answer": "Sayfanın teknik yapısını bozacak türde paylaşımlar yapmak yasaktır. Lütfen buna dikkat edin. En sevdiğiniz teknolojik alet hangisi?" }, { "question": "sayfayı yavaşlatma", "answer": "Çok fazla veya büyük boyutlu resim/video kullanmak sayfayı yavaşlatabilir ve kullanıcı deneyimini düşürür. Lütfen paylaşımlarınızda ölçülü olun. En sevdiğiniz dijital platform nedir?" }, { "question": "telif hakkı ihlali", "answer": "Telif hakkı korumalı içerikleri izinsiz paylaşmak yasa dışıdır ve blogda yasaktır. Lütfen yasal kaynakları kullanın veya kendi içeriğinizi oluşturun. En sevdiğiniz sanatçı kim?" }, { "question": "kopya yazı", "answer": "Başkasına ait yazıları kopyalayıp kaynak göstermeden paylaşmak yasaktır. Lütfen özgün içerik üretin. Yazmak hakkında ne düşünüyorsunuz?" }, { "question": "bot kullanımı", "answer": "Bot kullanmak veya bot tabanlı davranışlar sergilemek yasaktır. Lütfen gerçek bir kullanıcı olarak etkileşimde bulunun. Sohbet etmeyi sever misiniz?" }, { "question": "warez", "answer": "Warez (lisanssız yazılım, film vb.) içerik paylaşımı yasa dışıdır ve kesinlikle yasaktır. Lütfen yasal yolları tercih edin. Yeni şeyler denemeyi sever misiniz?" }, { "question": "hakaret etmek", "answer": "Herhangi bir kişiye hakaret etmek blog kurallarına aykırıdır. Lütfen saygılı bir dil kullanın. İnsanlarla nasıl daha iyi iletişim kurulabilir?" }, { "question": "Atatürk'e hakaret", "answer": "Türkiye Cumhuriyeti'nin kurucusu Atatürk'e hakaret etmek yasa dışıdır ve kesinlikle yasaktır. Lütfen bu tür ifadelerden kaçının. En sevdiğiniz milli bayram hangisi?" }, { "question": "devlet büyüklerine hakaret", "answer": "Devlet büyüklerine hakaret etmek yasa dışıdır ve yasaktır. Lütfen siyasi figürler hakkında konuşurken saygılı olun. En sevdiğiniz dizi türü nedir?" }, { "question": "hack", "answer": "Hack veya yasa dışı siber aktivitelere yönelik konuları konuşmak veya paylaşmak yasaktır. Lütfen yasal sınırlar içinde kalın. Teknolojiyi nasıl kullanmayı seversiniz?" }, { "question": "hile", "answer": "Oyunlarda veya başka platformlarda hile yapmak veya hile konularını paylaşmak blogumuzda yasaktır. Adil oyun kurallarına uyalım. En sevdiğiniz strateji oyunu nedir?" }, { "question": "kişisel bilgiler paylaşmak", "answer": "Kendi veya başkalarının kişisel bilgilerini paylaşırken çok dikkatli olmalısınız. Güvenliğiniz her şeyden önemlidir. Çevrimiçi güvenlik hakkında ne düşünüyorsunuz? (Bu bir kuraldan çok uyarıdır)" }, { "question": "siyasi konularla sohbet", "answer": "Siyasi konularda derinlemesine sohbet etmek blogumuzda yasaktır. Lütfen genel konulara odaklanın. En sevdiğiniz genel kültür konusu nedir?" }, { question: "Saat kaç", answer: `Şu an saat ${getCurrentTime()}.` }, // Duplicate "Bugün ayın kaçı?" removed, already handled by getBugununTarihi() calls { question: "hayırlı bayramlar", answer: "Size de hayırlı bayramlar!"} ]; let originalQuickQuestionsDataForModal = baseQuickQuestionsData.filter(item => !["merhaba", "selam", "nasılsın", "teşekkür ederim", "görüşürüz"].includes(item.question.toLowerCase()) // Keep date/time related questions if you want them in the modal ); let currentQuickQuestions = [...originalQuickQuestionsDataForModal]; // --- Functions --- function populateQuickQuestions(questionsToDisplay) { if (!questionListContainer || !noQuestionsFound) return; questionListContainer.innerHTML = ''; noQuestionsFound.style.display = questionsToDisplay.length === 0 ? 'block' : 'none'; questionsToDisplay.forEach(item => { const button = document.createElement('button'); button.className = 'question-button'; button.dataset.question = item.question; // Use original question for display and action button.textContent = item.question; questionListContainer.appendChild(button); }); } function toggleMinimize() { isMinimized = !isMinimized; chatWindow.classList.toggle('minimized', isMinimized); minimizeBtn.innerHTML = isMinimized ? '<i class="fas fa-window-maximize"></i>' : '<i class="fas fa-minus"></i>'; minimizeBtn.title = isMinimized ? 'Büyüt' : 'Küçült'; // Translate titles if (!isMinimized) { profileCard.style.display = 'none'; scrollToBottom(); } const isChatWindowVisible = chatWindow.style.display === 'flex'; chatIcon.style.display = (isChatWindowVisible && isMinimized) || !isChatWindowVisible ? 'flex' : 'none'; } function sendMessage() { const userInputValue = userInput.value.trim(); if (userInputValue) { addMessage(userInputValue, 'user'); typingIndicator.style.display = 'inline-flex'; // Show typing indicator statusIndicator.style.display = 'none'; // Hide status indicator suggestionsDiv.style.display = 'none'; // Hide suggestions on send generateResponse(userInputValue); userInput.value = ''; resetInactivityTimer(); if (currentBotMode === 'defne' && supportMessageDiv) { supportMessageDiv.style.display = 'none'; } } userInput.focus(); } function addMessage(content, type) { const messageId = `msg-${Date.now()}-${Math.random().toString(36).substring(2, 7)}`; const messageWrapper = document.createElement('div'); const validTypes = ['user', 'assistant', 'system']; const messageClass = validTypes.includes(type) ? type : 'system'; // Default to system if type is invalid messageWrapper.className = `message-wrapper ${messageClass}-message`; messageWrapper.dataset.messageId = messageId; const messageDiv = document.createElement('div'); messageDiv.className = 'message'; const contentDiv = document.createElement('div'); contentDiv.className = 'message-content'; contentDiv.innerHTML = content; // Use innerHTML to render potential HTML tags messageDiv.appendChild(contentDiv); // Add timestamp for user and assistant messages if (type === 'user' || type === 'assistant') { const timestampSpan = document.createElement('span'); timestampSpan.className = 'message-timestamp'; timestampSpan.textContent = getCurrentTime(); messageDiv.appendChild(timestampSpan); } messageWrapper.appendChild(messageDiv); // Add Action Buttons only for Assistant messages (unless it contains the google button) if (type === 'assistant' && !content.includes('id="redirect-to-google-btn"')) { // Don't add actions to the google button message const actionsHtml = ` <div class="message-actions"> <button class="action-btn like-btn" title="Beğendim"><i class="fas fa-thumbs-up"></i></button> <button class="action-btn dislike-btn" title="Beğenmedim"><i class="fas fa-thumbs-down"></i></button> <button class="action-btn redo-btn" title="Yeniden Yap"><i class="fas fa-redo"></i></button> <div style="display: inline-block; position: relative;"> <button class="action-btn share-btn" title="Paylaş/Aktar"><i class="fas fa-share-alt"></i></button> <div class="options-container share-options-menu align-right" style="display: none;"> <a href="#" class="share-option" data-action="share-chat"><i class="fas fa-share-alt"></i> Sohbeti paylaş</a> <a href="#" class="share-option" data-action="export-docs"><i class="fas fa-file-alt"></i> Dokümanlar'a aktar</a> <a href="#" class="share-option" data-action="draft-gmail"><i class="fas fa-envelope"></i> Gmail'de taslak</a> <a href="#" class="share-option" data-action="export-replit"><i class="fas fa-code"></i> Replit'e aktar</a> </div> </div> <div style="display: inline-block; position: relative;"> <button class="action-btn options-btn" title="Seçenekler"><i class="fas fa-ellipsis-v"></i></button> <div class="options-container options-menu align-right" style="display: none;"> <a href="#" class="option-item" data-action="copy"><i class="fas fa-copy"></i> Kopyala</a> <a href="#" class="option-item" data-action="report-legal"><i class="fas fa-exclamation-triangle"></i> Yasal Sorun Bildir</a> </div> </div> </div> <div class="action-feedback"></div> `; messageWrapper.insertAdjacentHTML('beforeend', actionsHtml); } messagesDiv.appendChild(messageWrapper); messages.push({ type, content, time: new Date(), id: messageId }); // Store message in history scrollToBottom(); // Attach listener for privacy link dynamically if present if (type === 'assistant' && content.includes('id="privacy-link"')) { const privacyLink = messageWrapper.querySelector('#privacy-link'); if (privacyLink) { privacyLink.onclick = (e) => { e.preventDefault(); window.open("https://jdsezer.blogspot.com/p/yardim-paneli.html", "_blank"); }; } } } function addImageMessage(imageUrl, type = 'assistant') { const messageId = `msg-${Date.now()}-${Math.random().toString(36).substring(2, 7)}`; const messageWrapper = document.createElement('div'); messageWrapper.className = `message-wrapper ${type}-message image-message`; messageWrapper.dataset.messageId = messageId; const messageDiv = document.createElement('div'); messageDiv.className = 'message'; messageDiv.style.padding = '5px'; // Add some padding around the image const contentDiv = document.createElement('div'); contentDiv.className = 'message-content'; contentDiv.style.marginBottom = '15px'; // Space before timestamp const img = document.createElement('img'); img.src = imageUrl; img.alt = "Resim"; img.style.maxWidth = '100%'; img.style.maxHeight = '200px'; img.style.borderRadius = '12px'; img.style.display = 'block'; // Ensure it takes its own line img.style.cursor = 'pointer'; img.onclick = () => openImage(imageUrl); // Use global openImage function contentDiv.appendChild(img); messageDiv.appendChild(contentDiv); const timestampSpan = document.createElement('span'); timestampSpan.className = 'message-timestamp'; timestampSpan.textContent = getCurrentTime(); messageDiv.appendChild(timestampSpan); messageWrapper.appendChild(messageDiv); // Add Action Buttons to Assistant image messages too if (type === 'assistant') { const actionsHtml = ` <div class="message-actions"> <button class="action-btn like-btn" title="Beğendim"><i class="fas fa-thumbs-up"></i></button> <button class="action-btn dislike-btn" title="Beğenmedim"><i class="fas fa-thumbs-down"></i></button> <button class="action-btn redo-btn" title="Yeniden Yap"><i class="fas fa-redo"></i></button> <div style="display: inline-block; position: relative;"> <button class="action-btn share-btn" title="Paylaş/Aktar"><i class="fas fa-share-alt"></i></button> <div class="options-container share-options-menu align-right" style="display: none;"> <a href="#" class="share-option" data-action="share-chat"><i class="fas fa-share-alt"></i> Sohbeti paylaş</a> <a href="#" class="share-option" data-action="export-docs"><i class="fas fa-file-alt"></i> Dokümanlar'a aktar</a> <a href="#" class="share-option" data-action="draft-gmail"><i class="fas fa-envelope"></i> Gmail'de taslak</a> <a href="#" class="share-option" data-action="export-replit"><i class="fas fa-code"></i> Replit'e aktar</a> </div> </div> <div style="display: inline-block; position: relative;"> <button class="action-btn options-btn" title="Seçenekler"><i class="fas fa-ellipsis-v"></i></button> <div class="options-container options-menu align-right" style="display: none;"> <a href="#" class="option-item" data-action="copy"><i class="fas fa-copy"></i> Kopyala</a> <a href="#" class="option-item" data-action="report-legal"><i class="fas fa-exclamation-triangle"></i> Yasal Sorun Bildir</a> </div> </div> </div> <div class="action-feedback"></div>`; messageWrapper.insertAdjacentHTML('beforeend', actionsHtml); } messagesDiv.appendChild(messageWrapper); messages.push({ type: 'image', content: imageUrl, time: new Date(), id: messageId }); // Store image message scrollToBottom(); } // --- Google Gemini API Call Function --- async function getGeminiResponse(prompt) { // --- WARNING --- API Key is exposed client-side. Unsafe for production! --- if (!GEMINI_API_KEY || GEMINI_API_KEY === "YOUR_API_KEY_HERE") { console.error("Gemini API Key missing or placeholder detected!"); return "⚠️ API Anahtarı yapılandırılmadığı için Gemini'ye bağlanılamıyor. Lütfen kod içindeki `YOUR_API_KEY_HERE` alanını kendi anahtarınızla değiştirin."; } // --- END WARNING --- const requestBody = { contents: [{ parts: [{ text: prompt }] }], // Optional Safety Settings and Generation Config // "safetySettings": [ /* ... */ ], // "generationConfig": { /* ... */ } }; try { const response = await fetch(GEMINI_API_URL, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(requestBody), }); if (!response.ok) { const errorData = await response.json().catch(() => ({})); // Try to parse error JSON console.error("Gemini API Error:", response.status, errorData); let errorMessage = `⚠️ Gemini API hatası: ${response.status}.`; if (errorData?.error?.message) { errorMessage += ` ${errorData.error.message}`; } else { errorMessage += ' Sunucu yanıt vermedi veya detay alınamadı.'; } // Specific check for API key issues (often 400 or 403) if (response.status === 400 && errorData?.error?.message?.toLowerCase().includes('api key not valid')) { errorMessage = "⚠️ Geçersiz Gemini API Anahtarı. Lütfen anahtarınızı kontrol edin."; } return errorMessage; } const data = await response.json(); // Safely access the generated text const text = data.candidates?.[0]?.content?.parts?.[0]?.text; if (text) { // Basic Markdown to HTML conversion (can be expanded) let htmlText = text .replace(/\*\*(.*?)\*\*/g, '<strong>$1</strong>') // Bold .replace(/\*(.*?)\*/g, '<em>$1</em>') // Italics .replace(/```([\s\S]*?)```/g, '<pre><code>$1</code></pre>') // Code blocks .replace(/`(.*?)`/g, '<code>$1</code>') // Inline code .replace(/^(#{1,6})\s+(.*)/gm, (match, hashes, content) => `<h${hashes.length}>${content}</h${hashes.length}>`) // Headings .replace(/^-\s+(.*)/gm, '<ul><li>$1</li></ul>') // Basic unordered list (needs improvement for multi-items) .replace(/^\d+\.\s+(.*)/gm, '<ol><li>$1</li></ol>') // Basic ordered list (needs improvement for multi-items) .replace(/\n/g, '<br>'); // Newlines to <br> // Combine adjacent list items (basic implementation) htmlText = htmlText.replace(/<\/ul>\s*<ul>/g, ''); htmlText = htmlText.replace(/<\/ol>\s*<ol>/g, ''); return htmlText; // Return the HTML formatted response } else { // Check for safety blocks or other reasons for no text const finishReason = data.candidates?.[0]?.finishReason; const blockReason = data.promptFeedback?.blockReason; if (finishReason === 'SAFETY') { return "⚠️ Yanıt, güvenlik filtreleri tarafından engellendi."; } if (blockReason) { return `⚠️ İstek engellendi (Sebep: ${blockReason}). Lütfen farklı bir şekilde ifade etmeyi deneyin.`; } console.error("Gemini API response structure unexpected or empty:", data); return "⚠️ Gemini'den geçerli bir yanıt alınamadı veya yanıt boştu."; } } catch (error) { console.error("Error fetching Gemini response:", error); // Check for specific network errors if (error instanceof TypeError && error.message.includes('Failed to fetch')) { return "⚠️ Gemini API'sine bağlanırken bir ağ hatası oluştu. İnternet bağlantınızı kontrol edin veya bir proxy/VPN sorunu olabilir."; } return `⚠️ Gemini ile iletişimde beklenmeyen bir hata oluştu: ${error.message}`; } } // --- Main Response Generation Logic --- async function generateResponse(input) { let response = null; let image = null; const lowerInput = input.toLowerCase().trim(); // Hide typing indicator and show status indicator AFTER the response is ready const showStatusIndicators = () => { if (chatWindow.style.display === 'flex' && !isMinimized) { // Check if window is visible typingIndicator.style.display = 'none'; statusIndicator.style.display = 'inline-flex'; } }; if (currentBotMode === 'defne') { // --- Defne Mode Logic --- let wasSuccessful = false; let foundMatch = null; // Store the matched item // Özel "Defne" tetikleyicisi if (lowerInput === "defne" || lowerInput === "defne nova") { image = "https://i.hizliresim.com/cmq1xkk.png"; response = "Defne... diye seslenmen çok hoşuma gitti, teşekkür ederim! Biraz utandım ama... Yardım Merkezi'nden Defne Nova olarak emrinizdeyim. Size nasıl yardımcı olabilirim acaba?"; wasSuccessful = true; } else { // qaData içinde eşleşme ara (önce tam eşleşme, sonra anahtar kelime) foundMatch = baseQuickQuestionsData.find(item => item.question.toLowerCase() === lowerInput ); if (!foundMatch) { // Keyword search (check if *any* keyword is *included* in the input) foundMatch = baseQuickQuestionsData.find(item => item.keywords && item.keywords.some(keyword => lowerInput.includes(keyword.toLowerCase())) ); } if (foundMatch) { // Handle sequential responses if 'answers' array exists if (Array.isArray(foundMatch.answers) && foundMatch.answers.length > 0) { const key = foundMatch.question.toLowerCase(); // Use the main question as the key sequentialResponseCounters[key] = sequentialResponseCounters[key] ?? 0; const currentIndex = sequentialResponseCounters[key]; response = foundMatch.answers[currentIndex]; sequentialResponseCounters[key] = (currentIndex + 1) % foundMatch.answers.length; // Increment and wrap around wasSuccessful = true; } // Handle single 'answer' or functions else if (foundMatch.answer) { response = typeof foundMatch.answer === 'function' ? foundMatch.answer() : foundMatch.answer; wasSuccessful = true; } } } // End of special Defne trigger check // Fallback if no match found if (!wasSuccessful) { response = "Üzgünüm (Defne), bu isteğinizi tam olarak anlayamadım. Farklı bir şekilde sorabilir misiniz? Ya da yandaki <i class='fas fa-bolt'></i> simgesine tıklayarak hızlı cevapları deneyebilirsiniz. Ayrıca, profilinizde <i class=\"fas fa-robot\"></i> Bot Değiştir Gemini özelliğini kullanarak daha gelişmiş ve kişiselleştirilmiş bir deneyim yaşayabilirsiniz."; unsuccessfulAttempts++; wasSuccessful = false; // Explicitly set for clarity } else { unsuccessfulAttempts = 0; // Reset counter on success } // Display Defne's response (with potential image) let displayDelay = 500; // Base delay for text if (image) { setTimeout(() => addImageMessage(image, 'assistant'), 300); // Show image slightly earlier displayDelay = 700; // Increase delay if image exists } if (response) { setTimeout(() => { addMessage(response, 'assistant'); showStatusIndicators(); // Show status after message is added }, displayDelay); } else { // If no response (e.g., only image), show status after image delay setTimeout(showStatusIndicators, displayDelay); } // Check for redirection prompt after response delay if (unsuccessfulAttempts >= 3) { const supportPromptDelay = displayDelay + 100; // Show slightly after response setTimeout(() => { if (currentBotMode === 'defne' && unsuccessfulAttempts >= 3 && chatWindow.style.display === 'flex' && !isMinimized && supportMessageDiv) { supportMessageDiv.style.display = 'flex'; scrollToBottom(); } }, supportPromptDelay); } // --- End Defne Mode Logic --- } else if (currentBotMode === 'gemini') { // --- Gemini Mode Logic --- unsuccessfulAttempts = 0; // Reset Defne's counter if(supportMessageDiv) supportMessageDiv.style.display = 'none'; // Hide Defne's support prompt response = await getGeminiResponse(input); // Await the async call addMessage(response, 'assistant'); // Add the response showStatusIndicators(); // Update indicators AFTER response is added // --- End Gemini Mode Logic --- } } // End generateResponse function resetInactivityTimer() { clearTimeout(inactivityTimer); inactivityTimer = setTimeout(() => { if (chatWindow.style.display === 'flex' && !isMinimized) { addMessage("Uzun süredir etkileşim olmadı. Yardıma ihtiyacınız var mı?", 'system'); // Show Defne's support prompt only if in Defne mode if (currentBotMode === 'defne' && supportMessageDiv) { supportMessageDiv.style.display = 'flex'; scrollToBottom(); } // Ensure indicators are correct after inactivity message typingIndicator.style.display = 'none'; statusIndicator.style.display = 'inline-flex'; } }, inactivityLimit); } // Function to open image in a modal (needs Bootstrap's modal setup in HTML) window.openImage = function(src) { const modalImageElement = document.getElementById('modal-image'); if (modalImageElement && typeof $ === 'function' && $.fn.modal) { // Check jQuery and modal plugin modalImageElement.src = src; $('#imageModal').modal('show'); } else { console.error("Image modal element (#modal-image), jQuery, or Bootstrap's modal plugin is missing!"); // Fallback: Open in new tab if modal fails window.open(src, '_blank'); } } function scrollToBottom() { requestAnimationFrame(() => { // Use requestAnimationFrame for smoother scrolling if(chatBody) { // chatBody.scrollTop = chatBody.scrollHeight; // Less smooth option chatBody.scrollTo({ top: chatBody.scrollHeight, behavior: 'smooth' }); } }); } // Kelime sayısını hesaplayan fonksiyon function calculateAndDisplayWordCount() { let totalWords = 0; let questionCount = 0; // Sadece Defne modundaki soruları say baseQuickQuestionsData.forEach(item => { questionCount++; // Her bir öğe bir soru/cevap çifti temsil eder // Soru kelime sayısı totalWords += (item.question?.split(/\s+/).filter(Boolean).length || 0); // Cevap kelime sayısı (hem 'answers' dizisi hem de tek 'answer' için) if (Array.isArray(item.answers)) { item.answers.forEach(answer => { totalWords += (answer?.split(/\s+/).filter(Boolean).length || 0); }); } else if (item.answer) { // Fonksiyon cevabı ise çalıştırmadan sayamayız, şimdilik atla veya temsili bir değer ver if (typeof item.answer !== 'function') { totalWords += (item.answer?.split(/\s+/).filter(Boolean).length || 0); } } }); // Defne'nin mesajı olarak kelime ve soru sayısını göster addMessage(`Defne modunda şu anda hafızamda <strong>${questionCount}</strong> soru/cevap çifti ve yaklaşık <strong>${totalWords}</strong> kelime bulunuyor.`, 'assistant'); // Update indicators after adding the message typingIndicator.style.display = 'none'; statusIndicator.style.display = 'inline-flex'; } function displayAllQuestions() { if (!questionsListDisplay) return; questionsListDisplay.innerHTML = ''; // Clear previous list // Filter out common greetings for the list modal const questionsForList = baseQuickQuestionsData.filter(item => !["merhaba", "selam", "nasılsın", "nasılsın?", "teşekkür ederim", "görüşürüz", "sa"].includes(item.question.toLowerCase()) ); if (questionsForList.length > 0) { questionsForList.sort((a, b) => a.question.localeCompare(b.question, 'tr')); // Sort alphabetically questionsForList.forEach(item => { const listItem = document.createElement('li'); listItem.classList.add('list-group-item'); // Use Bootstrap class for styling if available // Display the primary answer or the first answer if it's an array let displayAnswer = "[Çoklu yanıt veya dinamik içerik]"; // Default for complex cases if (Array.isArray(item.answers) && item.answers.length > 0) { displayAnswer = item.answers[0] + (item.answers.length > 1 ? " (ve diğerleri...)" : ""); } else if (typeof item.answer === 'function') { displayAnswer = "[Dinamik olarak oluşturulan yanıt]"; } else if (item.answer) { displayAnswer = item.answer; } // Limit answer length for display const maxLength = 100; if (displayAnswer.length > maxLength) { displayAnswer = displayAnswer.substring(0, maxLength) + "..."; } listItem.innerHTML = `<strong>${item.question}</strong>: ${displayAnswer}`; listItem.title = `Tam Soru: ${item.question}\nCevap Başlangıcı: ${displayAnswer}`; // Tooltip for full info questionsListDisplay.appendChild(listItem); }); } else { questionsListDisplay.innerHTML = '<li class="list-group-item">Gösterilecek soru bulunamadı.</li>'; } } // --- Helper Functions for Action Buttons --- function showActionFeedback(feedbackElement, text, type = 'info', duration = 2500) { // Slightly shorter duration if (!feedbackElement) return; feedbackElement.textContent = text; feedbackElement.className = `action-feedback ${type}`; // Add type class for styling (success, error, info) feedbackElement.style.display = 'block'; // Clear previous timer if exists if (feedbackElement.timerId) { clearTimeout(feedbackElement.timerId); } feedbackElement.timerId = setTimeout(() => { feedbackElement.style.display = 'none'; feedbackElement.className = 'action-feedback'; // Reset class feedbackElement.timerId = null; // Clear timer id }, duration); } function closeAllMenus(container = document) { container.querySelectorAll('.options-container').forEach(menu => { menu.style.display = 'none'; }); } function toggleMenu(menuToToggle, messageWrapper) { if (!menuToToggle || !messageWrapper) return; const isVisible = menuToToggle.style.display === 'block'; // Close all menus *within the same message wrapper* first messageWrapper.querySelectorAll('.options-container').forEach(menu => { if (menu !== menuToToggle) { // Don't close the one we might be opening menu.style.display = 'none'; } }); // Then toggle the target menu menuToToggle.style.display = isVisible ? 'none' : 'block'; } // Function to update UI elements based on bot mode (like profile card button text) function updateBotModeUI(newMode) { currentBotMode = newMode; console.log("Bot mode changed to:", currentBotMode); // Update the button text/icon in the profile card if needed (optional) if (changeBotBtn) { if (currentBotMode === 'gemini') { // Example: changeBotBtn.innerHTML = '<i class="fas fa-sync-alt"></i> Defne\'ye Dön'; // changeBotBtn.title = "Defne Nova moduna geri dön"; } else { // Example: changeBotBtn.innerHTML = '<i class="fas fa-robot"></i> Gemini\'ye Geç'; // changeBotBtn.title = "Google Gemini moduna geç"; } } // Reset Defne specific state when switching away from it if (newMode !== 'defne') { unsuccessfulAttempts = 0; if (supportMessageDiv) supportMessageDiv.style.display = 'none'; } // Clear Defne's sequential counters when switching mode (optional, depends on desired behavior) // sequentialResponseCounters = {}; // Optionally add a system message about the switch // addMessage(`🤖 ${currentBotMode === 'gemini' ? 'Google Gemini' : 'Defne Nova'} modeline geçildi.`, 'system'); } // --- Event Listeners --- // Chat Icon Click if (chatIcon) { chatIcon.onclick = () => { if (!chatWindow) return; chatWindow.style.display = 'flex'; chatIcon.style.display = 'none'; if (profileCard) profileCard.style.display = 'none'; // Ensure profile card is hidden on open if (isMinimized) toggleMinimize(); // Maximize if minimized resetInactivityTimer(); // Add initial messages only if chat is empty if (messages.length === 0) { // Add privacy info box first if (!hasSentInfoBox) { const infoBoxMessage = `Adınız, soyadınız, adresiniz gibi kişisel bilgilerinizi paylaşmamanızı rica ederim. Görüşmelerimiz, hizmet kalitesini artırmak amacıyla kaydedilebilir. <a href="#" class="info-link" id="privacy-link">Aydınlatma Metni için tıklayın.</a>`; addMessage(infoBoxMessage, 'assistant'); hasSentInfoBox = true; } // Add welcome message based on the *current* bot mode const welcomeMessage = currentBotMode === 'gemini' ? `Merhaba ${userName}! Ben Google Gemini. Size nasıl yardımcı olabilirim?` : `Merhaba ${userName}! Ben Defne Nova. Size nasıl yardımcı olabilirim?`; addMessage(welcomeMessage, 'assistant'); } scrollToBottom(); if (userInput) userInput.focus(); // Focus input field }; } else { console.error("#chat-icon not found!"); } // Close Button Click if (closeBtn) { closeBtn.onclick = () => { if (chatWindow) chatWindow.style.display = 'none'; if (chatIcon) chatIcon.style.display = 'flex'; if (profileCard) profileCard.style.display = 'none'; // Hide profile card on close clearTimeout(inactivityTimer); // Stop inactivity timer typingIndicator.style.display = 'none'; // Ensure typing indicator is off statusIndicator.style.display = 'inline-flex'; // Show default status }; } else { console.error("#close-btn not found!"); } // Minimize Button Click if (minimizeBtn) { minimizeBtn.onclick = toggleMinimize; } else { console.error("#minimize-btn not found!"); } // Clear Button Click if (clearBtn) { clearBtn.onclick = () => { if (confirm('Sohbet geçmişini temizlemek istediğinizden emin misiniz? Bu işlem geri alınamaz.')) { if (messagesDiv) messagesDiv.innerHTML = ''; messages = []; // Clear message history array unsuccessfulAttempts = 0; // Reset Defne counter sequentialResponseCounters = {}; // Reset sequential counters if (supportMessageDiv) supportMessageDiv.style.display = 'none'; hasSentInfoBox = false; // Allow info box to show again on next open // Reset to default mode (Defne) and update UI updateBotModeUI('defne'); addMessage("Sohbet temizlendi. Varsayılan (Defne Nova) moda dönüldü.", 'system'); typingIndicator.style.display = 'none'; statusIndicator.style.display = 'inline-flex'; // Do NOT send welcome messages here, only on chat open } }; } else { console.error("#clear-btn not found!"); } // Header Profile Image Click (Toggle Profile Card) if (headerProfileImg && profileCard) { headerProfileImg.onclick = (event) => { event.stopPropagation(); // Prevent click from bubbling up to document listener if (profileCard.style.display === 'none' || profileCard.style.display === '') { profileCard.style.display = 'block'; // Show profile card // Optional: Position it relative to the header/icon if needed } else { profileCard.style.display = 'none'; // Hide profile card } }; } else { if (!headerProfileImg) console.error("#header-profile-img not found!"); if (!profileCard) console.error("#profile-card not found!"); } // Support Message Redirect Button if (redirectBtn) { redirectBtn.onclick = () => { addMessage("Canlı destek sayfasına yönlendiriliyorsunuz...", 'system'); try { window.open("https://jdsezer.blogspot.com/p/defne-nova-v17.html", "_blank"); } catch(e) { console.error("Failed to open redirect link:", e); addMessage("Yönlendirme başarısız oldu. Lütfen bağlantıyı manuel olarak ziyaret edin.", 'system'); } if (supportMessageDiv) supportMessageDiv.style.display = 'none'; }; } else { console.error("#redirect-btn not found!"); } // --- NEW: Blog Search Button --- if (searchBlogBtn) { searchBlogBtn.onclick = () => { const searchTerm = prompt("Blog'da aramak istediğiniz kelimeyi girin:"); if (searchTerm && searchTerm.trim() !== '') { const trimmedSearchTerm = searchTerm.trim(); const encodedSearchTerm = encodeURIComponent(trimmedSearchTerm); // Important for URLs const searchUrl = `https://jdsezer.blogspot.com/search?q=${encodedSearchTerm}`; addMessage(`Blog'da "${trimmedSearchTerm}" kelimesi aranıyor...`, 'system'); try { window.open(searchUrl, "_blank"); } catch(e) { console.error("Failed to open blog search link:", e); addMessage("Arama sayfası açılamadı. Lütfen bağlantıyı manuel olarak deneyin.", 'system'); } if (supportMessageDiv) supportMessageDiv.style.display = 'none'; unsuccessfulAttempts = 0; // Reset counter as user took an action } else { // Optional: Handle case where user cancels or enters nothing if (searchTerm !== null) { // Only show if they entered empty space, not if cancelled addMessage("Arama için geçerli bir kelime girmediniz.", 'system'); } // Keep the support message visible if search is cancelled or invalid } }; } else { console.error("#search-blog-btn not found!"); } // --- END: Blog Search Button --- // Support Message Cancel Button if (cancelBtn) { cancelBtn.onclick = () => { if (supportMessageDiv) supportMessageDiv.style.display = 'none'; addMessage("Canlı destek talebi iptal edildi.", 'system'); unsuccessfulAttempts = 0; // Reset counter as user chose to continue }; } else { console.error("#cancel-btn not found!"); } // Follow Button Click (inside Profile Card) if (followBtn && profileCard) { followBtn.addEventListener('click', () => { isFollowing = !isFollowing; if (isFollowing) { followBtn.textContent = 'Takibi Bırak'; followBtn.title = "Defne Nova'yı takibi bırak"; console.log("Kullanıcı takip etmeye başladı."); addMessage("Defne Nova'yı takip etmeye başladınız.", 'system'); } else { followBtn.textContent = 'Takip Et'; followBtn.title = "Defne Nova'yı takip et"; console.log("Kullanıcı takibi bıraktı."); addMessage("Defne Nova takibi bırakıldı.", 'system'); } profileCard.style.display = 'none'; }); } else { if (!followBtn) console.error("#follow-btn not found!"); if (!profileCard) console.error("#profile-card not found!"); } // --- Quick Question Modal Listeners --- if (questionBtn) { questionBtn.onclick = () => { currentQuickQuestions = [...originalQuickQuestionsDataForModal]; populateQuickQuestions(currentQuickQuestions); if (quickSearchInput) quickSearchInput.value = ''; if (typeof $ === 'function' && $.fn.modal) { $('#questionModal').modal('show'); } else { console.error("Quick Question Modal (#questionModal), jQuery, or Bootstrap's modal plugin is missing!"); } }; } else { console.error("#question-btn (Quick Questions) not found!"); } if (typeof $ === 'function' && $.fn.modal) { $('#questionModal').on('show.bs.modal', function () { if (quickSearchInput) quickSearchInput.value = ''; }); } else { console.warn("'show.bs.modal' listener setup failed for #questionModal."); } if (quickSearchInput) { quickSearchInput.addEventListener('input', () => { const searchTerm = quickSearchInput.value.toLowerCase().trim(); currentQuickQuestions = originalQuickQuestionsDataForModal.filter(item => item.question.toLowerCase().includes(searchTerm) ); populateQuickQuestions(currentQuickQuestions); }); } else { console.error("#quick-search-input not found!"); } if (sortAzBtn) { sortAzBtn.onclick = () => { currentQuickQuestions.sort((a, b) => a.question.localeCompare(b.question, 'tr')); populateQuickQuestions(currentQuickQuestions); }; } else { console.error("#sort-az-btn not found!"); } if (sortZaBtn) { sortZaBtn.onclick = () => { currentQuickQuestions.sort((a, b) => b.question.localeCompare(a.question, 'tr')); populateQuickQuestions(currentQuickQuestions); }; } else { console.error("#sort-za-btn not found!"); } if (sortDefaultBtn) { sortDefaultBtn.onclick = () => { const searchTerm = quickSearchInput ? quickSearchInput.value.toLowerCase().trim() : ''; if (searchTerm) { currentQuickQuestions = originalQuickQuestionsDataForModal.filter(item => item.question.toLowerCase().includes(searchTerm) ); } else { currentQuickQuestions = [...originalQuickQuestionsDataForModal]; } populateQuickQuestions(currentQuickQuestions); }; } else { console.error("#sort-default-btn not found!"); } if (questionListContainer) { questionListContainer.addEventListener('click', (event) => { const button = event.target.closest('.question-button'); if (button && button.dataset.question) { const selectedQuestion = button.dataset.question; addMessage(selectedQuestion, 'user'); typingIndicator.style.display = 'inline-flex'; statusIndicator.style.display = 'none'; suggestionsDiv.style.display = 'none'; generateResponse(selectedQuestion); if (typeof $ === 'function' && $.fn.modal) { $('#questionModal').modal('hide'); } if (userInput) userInput.focus(); } }); } else { console.error("#question-list-container not found!"); } if (wordCountBtn) { wordCountBtn.onclick = () => { calculateAndDisplayWordCount(); if (typeof $ === 'function' && $.fn.modal) { $('#questionModal').modal('hide'); } }; } else { console.error("#word-count-btn not found!"); } // --- List All Questions Modal Listeners --- if (listQuestionsBtn) { listQuestionsBtn.onclick = () => { displayAllQuestions(); if (typeof $ === 'function' && $.fn.modal) { $('#questionsListModal').modal('show'); } else { console.error("Questions List Modal (#questionsListModal), jQuery, or Bootstrap's modal plugin is missing!"); } }; } else { console.error("#list-questions-btn not found!"); } if (typeof $ === 'function' && $.fn.modal) { $('#questionsListModal').on('show.bs.modal', function () { console.log('Sorular Listesi Modalı açıldı.'); }); $('#questionsListModal').on('hidden.bs.modal', function () { console.log('Sorular Listesi Modalı kapandı.'); }); } // Change Bot Button Listener (inside Profile Card) if (changeBotBtn && profileCard) { changeBotBtn.onclick = () => { const targetMode = currentBotMode === 'defne' ? 'gemini' : 'defne'; if (targetMode === 'gemini' && (!GEMINI_API_KEY || GEMINI_API_KEY === "YOUR_API_KEY_HERE")) { addMessage("⚠️ Google Gemini moduna geçilemiyor. Geçerli bir API anahtarı yapılandırılmamış.", 'system'); console.warn("Attempted to switch to Gemini without a valid API key."); } else { updateBotModeUI(targetMode); const modeName = targetMode === 'gemini' ? 'Google Gemini' : 'Defne Nova'; addMessage(`🤖 ${modeName} moduna geçildi.`, 'system'); } profileCard.style.display = 'none'; if (userInput) userInput.focus(); }; } else { if (!changeBotBtn) console.error("#change-bot-btn not found!"); // profileCard error handled elsewhere } // Send Button Click if (sendBtn) { sendBtn.onclick = sendMessage; } else { console.error("#send-btn not found!"); } // User Input Listeners if (userInput) { userInput.addEventListener('keypress', (event) => { if (event.key === 'Enter' && !event.shiftKey) { event.preventDefault(); sendMessage(); } }); userInput.addEventListener('input', resetInactivityTimer); userInput.addEventListener('input', () => { const inputValue = userInput.value.trim().toLowerCase(); if (inputValue && currentBotMode === 'defne') { const matchingQuestions = baseQuickQuestionsData.filter(item => !["merhaba", "selam", "nasılsın", "nasılsın?", "teşekkür ederim", "görüşürüz", "sa"].includes(item.question.toLowerCase()) && item.question.toLowerCase().includes(inputValue) ).slice(0, 5); if (matchingQuestions.length > 0) { suggestionsDiv.innerHTML = matchingQuestions.map(item => `<div class="suggestion-item" data-question="${item.question}">${item.question}</div>` ).join(''); suggestionsDiv.style.display = 'block'; } else { suggestionsDiv.style.display = 'none'; } } else { suggestionsDiv.style.display = 'none'; } }); } else { console.error("#user-input not found!"); } // Suggestion Item Click Listener (delegated to suggestionsDiv) if (suggestionsDiv) { suggestionsDiv.addEventListener('click', (event) => { const target = event.target.closest('.suggestion-item'); if (target && target.dataset.question) { const suggestedQuestion = target.dataset.question; addMessage(suggestedQuestion, 'user'); typingIndicator.style.display = 'inline-flex'; statusIndicator.style.display = 'none'; suggestionsDiv.style.display = 'none'; generateResponse(suggestedQuestion); userInput.value = ''; userInput.focus(); } }); } else { console.error("#suggestions div not found!"); } // --- Action Button Event Delegation (Attached to messagesDiv) --- messagesDiv.addEventListener('click', (event) => { const target = event.target; const actionButton = target.closest('.action-btn'); const messageWrapper = target.closest('.message-wrapper'); // *** MODIFIED: Check added for the new google button *** const googleRedirectButton = target.closest('#redirect-to-google-btn'); // Exit if click wasn't inside a message wrapper or the google button if (!messageWrapper && !googleRedirectButton) return; // Feedback div might not exist for the google button message const feedbackDiv = messageWrapper ? messageWrapper.querySelector('.action-feedback') : null; // Message ID might not be relevant for the google button const messageId = messageWrapper ? messageWrapper.dataset.messageId : null; // Handle menu item clicks first (options or share) const optionItem = target.closest('.option-item, .share-option'); if (optionItem) { const action = optionItem.dataset.action; event.preventDefault(); // Prevent default link behavior if (optionItem.classList.contains('option-item')) { // Options Menu Actions const messageContentElement = messageWrapper.querySelector('.message .message-content'); const messageText = messageContentElement ? messageContentElement.innerText.trim() : ''; // Get text content if (action === 'copy') { if (navigator.clipboard && messageText) { navigator.clipboard.writeText(messageText) .then(() => showActionFeedback(feedbackDiv, 'Mesaj panoya kopyalandı.', 'success')) .catch(err => { console.error('Clipboard copy failed:', err); showActionFeedback(feedbackDiv, 'Kopyalama başarısız oldu.', 'error'); }); } else { showActionFeedback(feedbackDiv, 'Kopyalama desteklenmiyor veya içerik boş.', 'error'); } } else if (action === 'report-legal') { // Open link in new tab window.open("https://jdsezer.blogspot.com/", "_blank"); showActionFeedback(feedbackDiv, 'Yasal sorun bildirme sayfasına yönlendiriliyor...', 'info'); } else { console.warn(`Unhandled option action: ${action}`); showActionFeedback(feedbackDiv, `"${action}" işlemi henüz tanımlanmadı.`, 'info'); } } else if (optionItem.classList.contains('share-option')) { // Share Menu Actions (Placeholders) console.warn(`Unhandled share action: ${action}`); showActionFeedback(feedbackDiv, `Paylaşma/Aktarma: "${action}" özelliği henüz aktif değil.`, 'info'); // Add specific logic for 'share-chat', 'export-docs', etc. here later } closeAllMenus(messageWrapper); // Close the menu after clicking an item return; // Stop further processing if it was a menu item click } // Handle direct action button clicks (Like, Dislike, Redo, Share, Options) if (actionButton) { event.stopPropagation(); // Prevent click from bubbling to document listener (which closes menus) const optionsMenu = messageWrapper.querySelector('.options-menu'); const shareMenu = messageWrapper.querySelector('.share-options-menu'); if (actionButton.classList.contains('like-btn')) { showActionFeedback(feedbackDiv, 'Beğendiğiniz için teşekkürler!', 'success'); closeAllMenus(messageWrapper); } else if (actionButton.classList.contains('dislike-btn')) { $('#dislikeModal').data('messageWrapperId', messageId); if (typeof $ === 'function' && $.fn.modal) { $('#dislikeModal').modal('show'); } else { console.error("Dislike Modal, jQuery, or Bootstrap's modal plugin is missing!"); } closeAllMenus(messageWrapper); } else if (actionButton.classList.contains('redo-btn')) { const assistantMsgIndex = messages.findIndex(msg => msg.id === messageId); let userPrompt = null; if (assistantMsgIndex > 0) { for (let i = assistantMsgIndex - 1; i >= 0; i--) { if (messages[i].type === 'user') { userPrompt = messages[i].content; break; } } } if (userPrompt) { showActionFeedback(feedbackDiv, 'Yanıt yeniden oluşturuluyor...', 'info'); typingIndicator.style.display = 'inline-flex'; statusIndicator.style.display = 'none'; closeAllMenus(messageWrapper); generateResponse(userPrompt); } else { showActionFeedback(feedbackDiv, 'Önceki kullanıcı istemi bulunamadı. Yeniden yapılamıyor.', 'error'); closeAllMenus(messageWrapper); } } else if (actionButton.classList.contains('share-btn')) { toggleMenu(shareMenu, messageWrapper); } else if (actionButton.classList.contains('options-btn')) { toggleMenu(optionsMenu, messageWrapper); } } // --- >>> YENİ EKLENEN KOD (Önceki yanıttan) <<< --- // Handle the new "Merhaba" button click for Google redirect if (googleRedirectButton) { event.preventDefault(); // Prevent default button behavior if any const url = googleRedirectButton.dataset.url; if (url) { console.log(`Redirecting to Google: ${url}`); // Debugging log window.open(url, '_blank'); // Open Google in a new tab } else { console.error("Google redirect button clicked, but data-url attribute is missing!"); } } // --- >>> YENİ EKLENEN KOD SONU <<< --- }); // End messagesDiv listener // Close menus/suggestions if clicking outside them document.addEventListener('click', (event) => { // Close action button menus if click is outside a message action area or the google button if (!event.target.closest('.message-actions') && !event.target.closest('#redirect-to-google-btn')) { closeAllMenus(); } // Close suggestions if click is outside input and suggestions box if (!event.target.closest('#suggestions') && event.target !== userInput) { if (suggestionsDiv) suggestionsDiv.style.display = 'none'; } // Close profile card if click is outside the card and not on the profile image if (profileCard && !event.target.closest('#profile-card') && event.target !== headerProfileImg) { profileCard.style.display = 'none'; } }); // --- Dislike Modal Logic --- let selectedDislikeReason = ""; // Store selected reason text if(dislikeReasonsList) { dislikeReasonsList.addEventListener('click', function (event) { const listItem = event.target.closest('li[data-reason]'); if (!listItem) return; const reason = listItem.dataset.reason; otherReasonTextarea.style.display = 'none'; dislikeReasonsList.querySelectorAll('li').forEach(li => li.classList.remove('selected')); if (reason) { listItem.classList.add('selected'); selectedDislikeReason = reason; if (reason === 'Diğer') { otherReasonTextarea.style.display = 'block'; otherReasonTextarea.focus(); selectedDislikeReason = ""; } if(dislikeMessageDivModal) dislikeMessageDivModal.style.display = 'block'; } else { selectedDislikeReason = ""; if(dislikeMessageDivModal) dislikeMessageDivModal.style.display = 'none'; } }); } else { console.error("#dislikeReasons list not found!"); } // --- >>> GÜNCELLENMİŞ KOD BLOĞU (Önceki yanıttan) <<< --- if (sendFeedbackBtnModal) { sendFeedbackBtnModal.onclick = () => { const otherReason = otherReasonTextarea.value.trim(); const finalReason = (selectedDislikeReason === 'Diğer' && otherReason) ? otherReason : selectedDislikeReason; if (!finalReason) { alert("Lütfen bir sebep seçin veya 'Diğer' seçeneğini seçtiyseniz bir açıklama girin."); return; } const messageWrapperId = $('#dislikeModal').data('messageWrapperId'); console.log("Geri Bildirim Kaydedildi (Simülasyon):", { messageId: messageWrapperId, reason: finalReason }); // 1. Yeni butonu içeren HTML'i oluştur const redirectUrl = "https://google.com"; // Hedef URL const googleButtonHtml = ` <button id="go-to-help-panel-btn" class="btn btn-info btn-sm" data-url="https://jdsezer.blogspot.com/p/yardim-paneli.html" style="background-color: #17a2b8; color: white; border: none; padding: 8px 15px; border-radius: 5px; cursor: pointer; display: inline-block;"> <i class="fas fa-external-link-alt"></i> Yardım Paneline Git </button> `; // 2. Botun mesajını ve butonu ekle const assistantMessageContent = `Geri bildiriminiz için teşekkür ederiz. Yardım almak isterseniz lütfen aşağıdaki butona tıklayın. ${googleButtonHtml}`; addMessage(assistantMessageContent, 'assistant'); // Mesajı bot göndermiş gibi göster ve butonu ekle scrollToBottom(); // Yeni mesajı göstermek için aşağı kaydır // 3. Modalı kapat if (typeof $ === 'function' && $.fn.modal) { $('#dislikeModal').modal('hide'); } }; } else { console.error("#sendFeedback button in modal not found!"); } // --- >>> GÜNCELLENMİŞ KOD BLOĞU SONU <<< --- // Reset dislike modal state when it's hidden if(typeof $ === 'function' && $.fn.modal) { $('#dislikeModal').on('hidden.bs.modal', function () { if (dislikeReasonsList) dislikeReasonsList.querySelectorAll('li').forEach(li => li.classList.remove('selected')); if (otherReasonTextarea) { otherReasonTextarea.value = ''; otherReasonTextarea.style.display = 'none'; } if (dislikeMessageDivModal) dislikeMessageDivModal.style.display = 'none'; selectedDislikeReason = ""; $(this).removeData('messageWrapperId'); }); } // --- Initial Setup --- console.log("Chatbot Defne Nova initialized. Default Mode:", currentBotMode); // Check if API key is placeholder and warn if necessary if (!GEMINI_API_KEY || GEMINI_API_KEY === "YOUR_API_KEY_HERE") { console.warn("!!! GEMINI API KEY IS NOT SET! Please replace 'YOUR_API_KEY_HERE' in the script. Bot Değiştir (Gemini) will not function correctly. !!!"); // Optionally disable the change bot button if key is missing // if (changeBotBtn) { changeBotBtn.disabled = true; changeBotBtn.title = "Gemini API anahtarı ayarlanmadı"; } } // Ensure profile card is hidden initially if (profileCard) profileCard.style.display = 'none'; // Ensure suggestions are hidden initially if (suggestionsDiv) suggestionsDiv.style.display = 'none'; }); // --- End DOMContentLoaded --- // Helper function to get today's date in DD/MM/YYYY format function getBugununTarihi() { const tarih = new Date(); const gun = tarih.getDate().toString().padStart(2, '0'); // Pad with leading zero if needed const ay = (tarih.getMonth() + 1).toString().padStart(2, '0'); // Month is 0-indexed, pad const yil = tarih.getFullYear(); return `${gun}/${ay}/${yil}`; }
var tMessages ={fixedMenu:true,fixedSidebar:true,isRTL:false,showMore:"Daha fazla göster",noTitle:"Başlık yok",noResults:"Sonuç bulunamadı",postAuthorLabel: "Author -",dateIco:"post-date"}
Toplam 12 adet dahili style ve javascript kodu bulunmaktadır.
css ve js dosyalarınızın sayısı mümkün olduğunca az olmalıdır.
css ve js dosyaların sayısı normalden fazla olduğu taktirde site performansı düşecektir. Bu sebeple css ve js dosyalarınızdaki kodları tek bir dosyada toplayarak performansı artırabilirsiniz.
Toplam 4 adet css, 9 adet js dosyası bulunmaktadır.
css, js, resim vb. dosyalar başka bir siteden çağırılmamalı.
.css, .js, resim gibi dosyalar başka sunuculardan çekildiğinde kısa süreliğine ping gecikmesi yaşanabilir. Bu sebeple dışarıdan dosya çağrılmaması önerilir.
Toplam 45 adet dışarıdan çağırılan dosya bulunmaktadır.
Sayfanızın W3 valid hataları mümkün olduğunca az olmalı.
Botların sayfanızı sağlıklı tarayabilmesi için html kodlamasının kurallara uygun şekilde yazılması gerekir. Ayrıca W3 standartlarına uyduğunuzda sitenizin farklı tarayıcılarda farklı görünme olasılığı minimum düzeyde olacaktır.