Telegram Bağlantı Problemi

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 ?

Örnek kod ;

import configparser

import json

from telethon import TelegramClient

from telethon.errors import SessionPasswordNeededError

#. Yapılandırmaları oku.

config = configparser.ConfigParser()

config.read("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 ve bağlan.

istemci = TelegramClient(kullanici_adi, api_id, api_hash)

istemci.start()

print("İstemci başarıyla oluşturuldu.")

#. Yetki kontrolü.

if not istemci.is_user_authorized():

    istemci.send_code_request(phone)

    try:

        istemci.sign_in(phone, input('Telegram Kodunuzu girin : '))

    except SessionPasswordNeededError:

        istemci.sign_in(password=input('Şifreniz :  '))

Hata :

İ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 :smiley:

Bu bir coroutine olduğu için await edilmesi gerekiyor. Şöyle deneyin bir isterseniz:

authorized = await istemci.is_user_authorized()
if authorized:
    await istemci.send_code_request(phone)

Hatta TelegramClient'i şöyle çalıştırmanız da gerekiyor olabilir:

async with TelegramClient(kullanici_adi, api_id, api_hash) as istemci:
    authorized = await istemci.send_code_request(phone)
    if not authorized:
        [...]
1 Beğeni

Hocam evet, telethon da bu cevabınıza benzer bir döküman oluşturmuş ama hata veriyor bir şekilde. Mesela vermiş olduğunuz 1. yanıtta
Yani ;

Burada ‘await istemci’ kısmından itibaren hata veriyor.

  1. örnektede aynı durum geçerli.
    ‘“await” allowed only within async function’

async def main(): diye fonksiyon oluşturulup çağırılmış x bir örnekte ancak oda geçersiz

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.

2 Beğeni

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 :slight_smile: Sadece detaylıca kontroller sağlanmalı, illa bir yerinde patlak vardır :slight_smile:

Ben bu şekilde böldüm hepsini parça parça, doğru mu yaptım onuda bilmiyorum karışık oldu sanki :slight_smile:

1 Beğeni

Cok guzel {saygi duyan emoji geldiginde buraya koyunuz} O zaman hic uzatmiyorum, gordugum bariz bir yanlisi gosterip gidiyorum:

Gelmissin ki burada konusuyoruz, cozuyoruz.

1 Beğeni

Hocam gelmedim derken yani yazbelde oraya kadar ilerlemedim. Telegram apilerine bulaştığım zaman gördüm :smiley: ondan sonra buradan yardım istedim :smiley: