tmcellbot / a.py
zyyaratorazov's picture
Upload a.py
a2586fe verified
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())