Разработайте шлюз с помощью библиотеки Telethon - (Telegram) - PullRequest
1 голос
/ 17 мая 2019

Мне нужно разработать шлюз с помощью библиотеки Telethon: https://github.com/LonamiWebs/Telethon

Шлюз должен создать серверный сокет, к которому подключен клиент телеграммы. Когда шлюз получает сообщение от сокета (клиентом), он отправляет конкретное сообщение на сервер Telegram (через Telethon). Когда он получает обновление от сервера telegram, он отправляет сообщение клиенту через сокет.

Я начал с этим кодом:

async def main(socket):    
              client = await TelegramClient(session_name, api_id, api_hash).start()

           @client.on(events.NewMessage)
           async def handler(event):
                 #new message, sending to the socket...
                 try:
                   mess = event.message.message
                   message = (mess).encode()
                   socket.send(message)
                 except Exception as e: 
                   print("Exception: ",e)

            await client.run_until_disconnected()

MAIN ->

print("Start program...")    
HOST = '127.0.0.1'
PORT = 65436
print("Waiting connection at the port: ",PORT)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(5)
conn, addr = s.accept()
print("Connection OK!")    
asyncio.get_event_loop().run_until_complete(main(conn))

Этот код при получении нового сообщения от сервера телеграммы правильно отправит сообщение (через сокет) клиенту телеграммы. Проблема в том, что я не знаю, как прослушивать сокет и, когда я получаю сообщение (от клиента сокета), отправляю его на сервер телеграммы.

P.S. После строки ожидайте client.run_until_disconnected () Я ничего не могу сделать.

Большое спасибо !!!

1 Ответ

1 голос
/ 17 мая 2019

Извините, моя проблема заключается в следующем:

async def main(socket):    
client = await TelegramClient(session_name, api_id, api_hash).start()

@client.on(events.NewMessage)
async def handler(event):
    #new message, sending to the socket...
    try:
        mess = event.message.message
        message = (mess).encode()
        socket.send(message)
    except Exception as e: 
        print("Exception: ",e)

await client.run_until_disconnected()

while(1):
        print("Waiting message from the client...")
        data = socket.recv(1024)
        mess = data.decode("utf-8")
        print("Message Received: ",mess)
        #self.telegramClient.send_message('PHONE', mess)

, если name == " main ":

print("Start program...")    
HOST = '127.0.0.1'
PORT = 65431
print("Waiting connection at the port: ",PORT)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(5)
conn, addr = s.accept()
print("Connection OK!")    
asyncio.get_event_loop().run_until_complete(main(conn))

проблема в этой строке: await client.run_until_disconnected ()

Без этого мой обработчик не получает загрузку.Но если я вставлю эту строку, я не смогу дождаться сообщения из сокета.

Я надеюсь, что хорошо объяснил свою проблему ...

большое спасибо !!

...