我需要使用Telethon库开发网关:
https://github.com/LonamiWebs/Telethon
网关必须创建一个连接电报客户端的服务器套接字。
网关从套接字(由客户端)接收到消息时,它将特定消息(通过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()
主要->
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))
当从电报服务器接收到新消息时,此代码将正确地(通过套接字)将消息发送给电报客户端。
问题是我不知道如何也从套接字监听,并且当我收到消息(由套接字客户端)时,将其发送到电报服务器。
附言在行等待client.run_until_disconnected()之后,我什么也不能做。
非常感谢你!!!
最佳答案
抱歉,我的问题如下:
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))
问题是此行:
等待client.run_until_disconnected()
没有这个,我的处理程序将无法接收上传。但是,如果我插入此行,我将等不及来自套接字的消息。
我希望我已经很好地解释了我的问题...
非常感谢你!!