Selamlar sevgili üstatlar,
Telegrama bağlanıp bir takım işler yapmak için kendimce uğraşıyorum ancak çözemediğim bir hata var, bunun üstesinden nasıl gelebilirim ?
İstemci başarıyla oluşturuldu.
f:\Education\Telegram-Message\TelegrtamData.py:25: RuntimeWarning: coroutine 'UserMethods.is_user_authorized' was never awaited
if not istemci.is_user_authorized():
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
PS F:\Education\Telegram-Message>
Farklı olarak x forumlarına baktım ancak tek bir örnek verilimiş ve bende hiçbir halt anlamadım
Boyle semptomatik, suraya async koyalim, buraya await koyalim ile cozulecek is degil. (Aslinda tam olarak bu sekilde cozulecek is, ama: ) Coroutine kullanan asenkron programlarin yapilarina hakim olmak lazim. Atla deve bir sey degil; bi tane run'a bakiyo aslinda ama en azindan asyncio modul dokumentasyonunu okumadan atlayinca boyle hata kovalattiriyor insana.
Veya sifirdan yazmak yerine dokumentasyondaki koddan git. Yukaridaki kodda main bile yok.
Hocam olayı ben kısmen bir şekilde çözdüm. Mesela kendi numaramızla girip (veya botla) dilediğimiz kişiye mesaj atabiliyoruz, hatta kişinin telegram kullanıp kullanmadığını vs sorgulayabiliyorum. Ama ben daha o ‘async’ vs konularına gelmedim. Yeni geçtim nesne yönelimli programlar konusuna. Modullerdede hiç yoktu öyle bir şey (en azından yazbel python dokumanlarında). Biliyorum tek bir yerden ilerlemek doğru değil, ama benimde kendimce izlediğim bazı yollar var. Çünkü ben teknik seviyede ingilizce biliyorum, en azından yazbelden kapabildiğimi kapıp, daha sonra geniş çaplı bir araştırma yaparım diye düşünüyorum. E tabi insan bir şeylerde yapmak istiyor bu süre zarfında :d Daha öncede söylemiştim; yazmayınca unutuyorum ben öğrendiğimi. O yüzden bir şeyler yapmak istiyorum. Neyse konuyu cok uzattım. Olayı bazı konularda yardım alarak şöyle çözdüm ;
config.ini
[Telegram]
# Bu bilgileri telegram API girişinden alabiliriz.
api_id = 1111111111111111
api_hash = ccccccccccccccccc
# ülke kodu dahil telefon numarası
phone = +905352xxxxx
kullanici_adi = 'Einsatzgrup'
src klasörü;
CalculatePing.py
import time
class timer:
def zamaniBaslat(self):
#. Zamanı saniye olarak alıyoruz.
self.baslat = time.perf_counter() # Detay için ; https://www.geeksforgeeks.org/time-perf_counter-function-in-python/
def zamaniDurdur(self):
#. Zamanı saniye olarak alıyoruz bitis değerine atıyoruz.
self.bitir = time.perf_counter()
#. Baslat ile bitir arasındaki farkı milisaniyeye çevirmek için 1000 ile çarpıyoruz.
milisaniye = (self.bitir - self.baslat) * 1000
return milisaniye
Conditions.py
forbiddenCharacter = 'abcçdefgğhıijklmnoöprsştuüvyzqwx'
def CheckNumber(number):
for i in number:
if i in forbiddenCharacter:
print('Telefon numarası içinde karakter dizisi olamaz.')
break
if not number:
print("Numara boş olamaz.")
elif not number.startswith('+9'):
return '+9' + number[0:]
elif len(number) < 11:
print("Girdiğiniz numarayı tekrar kontrol edin.")
Telegram.py
import configparser
from logging import exception
from telethon import TelegramClient, client
from telethon.errors import SessionPasswordNeededError
from telethon.errors.rpcerrorlist import StartParamEmptyError
from telethon.tl.types.contacts import Contacts
from telethon.tl.functions.contacts import GetContactsRequest, ResolveUsernameRequest
import telethon.sync
import time
import Conditions
import CalculatePing as ping
# . Yapılandırmaları oku.
config = configparser.ConfigParser()
config.read("config\config.ini")
# . Yapılandırma değerleri
api_id = config['Telegram']['api_id']
api_hash = config['Telegram']['api_hash']
api_hash = str(api_hash)
phone = config['Telegram']['phone']
kullanici_adi = config['Telegram']['kullanici_adi']
# . İstemci oluştur:
client = TelegramClient(kullanici_adi, api_id, api_hash)
# . Bağlan/Başlat.
milisaniye = ping.timer()
try:
milisaniye.zamaniBaslat()
client.start()
ms = milisaniye.zamaniDurdur()
ms = str(ms)
print("\n"*15)
print("Bağlantı sağlandı. ({} ms) ".format(ms[4:6]))
except ConnectionError as baglantiHatasi:
print(f"Bağlantı sağlanamadı. İnternet bağlantınızı kontrol edin.")
except RuntimeError as kodHatasi:
print("Üst üste Giriş denemeleri başarısız oldu. Bu yüzden 'Telegram' sunucusu tarafından engellendiniz.\
\n3 dakika sonra giriş isteği tekrar otomatik gönderilecek kodunuzu tekrar kontrol edin.")
time.sleep(180)
client.start()
# . Cep tel no.
def numara():
return input("Mesaj gönderilecek telefon numarası : ")
# . İletilecek mesaj ;
def mesaj():
return input("Göndermek istediğiniz mesaj : ")
def mesajGonder(t_kAdiNo, t_mesaj):
with TelegramClient('TEST-YAZILIMI', api_id, api_hash) as client:
try:
client.send_message(t_kAdiNo, t_mesaj)
print("İletiniz başarıyla gönderildi.")
except ValueError as k_bulunamadi:
print(
f"Girdiğiniz '{t_kAdiNo}' kişisi bulunamadı. Bu kişi telegram kullanıyor mu?")
def calistir():
number = numara()
sentence = mesaj()
mesajGonder(Conditions.CheckNumber(number), sentence)
Şuan mesaj göndermede vs pek sorun yok, masallahı var Sadece detaylıca kontroller sağlanmalı, illa bir yerinde patlak vardır
Ben bu şekilde böldüm hepsini parça parça, doğru mu yaptım onuda bilmiyorum karışık oldu sanki