Spaces:
Build error
Build error
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 | |
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 --- | |
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()) |