import sqlite3 import logging from telethon import TelegramClient, events from telethon.tl.custom import Button # --- KİMLİK VE DOSYA BİLGİLERİ --- API_ID = 28102996 API_HASH = '61d2c7a9e8413bcb1545d4cbaad14e48' DB_FILE_PATH = 'directory_data.sqlite' TABLE_NAME = 'kisiler' # ---------------------------------------------------- logging.basicConfig(format='[%(levelname)s] %(asctime)s - %(message)s', level=logging.INFO) logger = logging.getLogger(__name__) client = TelegramClient('anon', API_ID, API_HASH) def veritabaninda_hedefli_ara(sutun: str, arama_terimi: str) -> list: """Belirtilen tek bir sütunda arama yapar.""" sonuclar = [] try: conn = sqlite3.connect(DB_FILE_PATH) conn.row_factory = sqlite3.Row cursor = conn.cursor() if sutun not in ['telefon', 'ad_soyad', 'adres']: raise ValueError("Geçersiz sütun adı") query = f"SELECT * FROM {TABLE_NAME} WHERE {sutun} LIKE ?" arama_parametresi = f"%{arama_terimi}%" cursor.execute(query, (arama_parametresi,)) sonuclar = cursor.fetchall() except Exception as err: logger.error(f"Veritabanı Hatası: {err}") return [] finally: if 'conn' in locals(): conn.close() return sonuclar @client.on(events.NewMessage(pattern='/start')) async def start_handler(event): buttons = [ [Button.inline("📞 Telefon Numarası ile Ara", b'ara_telefon')], [Button.inline("👤 İsim/Soyisim ile Ara", b'ara_ad_soyad')], [Button.inline("🏠 Adres ile Ara", b'ara_adres')] ] await event.respond("Arama paneline hoş geldiniz! Lütfen arama türünü seçin:", buttons=buttons) # --- HATASI GİDERİLMİŞ CALLBACK HANDLER --- @client.on(events.CallbackQuery) async def callback_handler(event): data = event.data.decode('utf-8') if data.startswith('ara_'): arama_tipi = data.split('_', 1)[1] tur_mesajlari = { 'telefon': 'Lütfen aramak istediğiniz telefon numarasını yazın:', 'ad_soyad': 'Lütfen aramak istediğiniz adı ve soyadı yazın:', 'adres': 'Lütfen aramak istediğiniz adresi yazın:' } try: async with client.conversation(event.sender_id, timeout=60) as conv: await conv.send_message(tur_mesajlari[arama_tipi]) arama_terimi_mesaji = await conv.get_response() arama_terimi = arama_terimi_mesaji.text await conv.send_message(f"🔎 '{arama_terimi}' için **{arama_tipi}** sütununda aranıyor...") kayitlar = veritabaninda_hedefli_ara(arama_tipi, arama_terimi) if not kayitlar: await conv.send_message("❌ Bu kritere uygun kayıt bulunamadı.") return await conv.send_message(f"✅ {len(kayitlar)} adet sonuç bulundu:") for kayit in kayitlar: try: # SORUNUN ÇÖZÜLDÜĞÜ YER: Artık .get() metodu yok! # Doğrudan köşeli parantez [] kullanıyoruz. # `kayit['sutun_adi'] or 'N/A'` ifadesi, eğer sütun boşsa 'N/A' yazdırır. yanit_mesaji = ( f"👤 **Ad Soyad:** {kayit['ad_soyad'] or 'N/A'}\n\n" f"📞 **Telefon:** `{kayit['telefon'] or 'N/A'}`\n" f"🏠 **Adres:** {kayit['adres'] or 'N/A'}\n" f"📜 **Pasaport:** {kayit['pasaport'] or 'N/A'}\n" f"🗓️ **Doğum Yeri:** {kayit['dogum_yeri'] or 'N/A'}\n" f"📄 **Sim ID:** `{kayit['sim_id'] or 'N/A'}`" ) await conv.send_message(yanit_mesaji, parse_mode='md', link_preview=False) except Exception as e: # Bu blok, beklenmedik bir sütun adı hatası olursa diye hala duruyor. logger.error(f"Bir kaydı formatlarken hata oluştu: {e}") await conv.send_message(f"❗️ Bir sonuç formatlanırken hata oluştu. Lütfen geliştiriciyle iletişime geçin.") except Exception as e: logger.error(f"Genel bir hata oluştu: {e}") await event.answer("Bir hata oluştu, lütfen tekrar deneyin.", alert=True) async def main(): await client.start() me = await client.get_me() print(f"'{me.first_name}' olarak giriş yapıldı. Bot arayüzü aktif.") await client.run_until_disconnected() with client: client.loop.run_until_complete(main())