python - 使用 Telethon 库开发网关 - (Telegram)
问题描述
我需要使用 Telethon 库开发网关: https ://github.com/LonamiWebs/Telethon
网关必须创建一个连接电报客户端的服务器套接字。当网关(通过客户端)从套接字接收到消息时,它会将特定消息发送到 Telegram 服务器(通过 Telethon)。当它从电报服务器接收到更新时,它通过套接字将消息发送给客户端。
我从这段代码开始:
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))
此代码在从电报服务器接收到新消息时,将正确地将消息(通过套接字)发送到电报客户端。问题是我不知道如何也从套接字监听,当我(通过套接字客户端)收到一条消息时,将它发送到电报服务器。
PS 在等待 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)
如果名称== “主要”:
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()
没有这个,我的处理程序不会收到上传。但是如果我插入这一行,我就不能等待来自套接字的消息。
我希望我已经很好地解释了我的问题......
非常感谢您!!
推荐阅读
- forms - bootstrap 4中form-group的用途是什么?
- .net - 是否有与 log4net 的 BufferingForwardingAppender 等效的 SeriLog 仅用于详细记录警告/错误?
- c++ - 将 MQ4 气体传感器粒子光子代码分离为 .h 和 .cpp 文件
- maven - 如何在 gitlab-ci 中使用 maven 分离测试和构建阶段?
- python-3.x - python 3d A* 寻路无限循环
- scala - 如何动态地将列添加到 DataFrame?
- google-chrome-extension - 每次重新启动 Chrome 时,解压缩的扩展程序都会自动卸载,我怎样才能始终安装它?
- java - 匿名内部类排序
- javascript - 数组的索引?
- asp.net-mvc - 我无法在 IIS 的虚拟目录中显示/浏览我的图像