@Alecxandrys

Как получить результат из корутины (coroutines)?

День добрый,
Возникла проблема в данном коде
Код
# -*- coding: utf-8 -*-
import asyncio
from telethon import TelegramClient, sync, events
from telethon.tl.types import PeerChannel
from datetime import datetime
from telethon.tl.functions.channels import GetFullChannelRequest,JoinChannelRequest
import pytz
import cherrypy
import json

api_id = # API ID (получается при регистрации приложения на my.telegram.org)
api_hash = # API Hash (оттуда же)
phone_number =   # Номер телефона аккаунта, с которого будет выполняться код

# Необходимо предварительно авторизоваться, чтобы был создан файл second_account,
# содержащий данные об аутентификации клиента.
client = TelegramClient('Name',api_id, api_hash)

class AddChannel(object):
    @cherrypy.expose
    def index(self,name=''):
        loop = asyncio.new_event_loop()
        asyncio.set_event_loop(loop)
        channel=loop.run_until_complete(client.get_entity(PeerChannel(name)))
        client(JoinChannelRequest(channel))
        return "add_"+name

class GetChannelMemberCount(object):
    @cherrypy.expose
    def index(self,id=0):
        loop = asyncio.new_event_loop()
        asyncio.set_event_loop(loop)
        peer=PeerChannel(int(id))
        print("peer= ")
        print(peer)
        dialog=client.get_input_entity(peer)
        print("dialog= ")
        print(dialog)
        channel=GetFullChannelRequest(channel=dialog)
        print("channel= ")
        print(channel)
        title=client(channel)
        print(title)
        return json.dumps({'count':title.full_chat.participants_count,'title':title.full_chat.about})

async def main():
    await client.connect()
    print('(Press Ctrl+C twice to stop this)')
    if not await client.is_user_authorized():
        client.send_code_request(phone_number)
        me = client.sign_in(phone_number, input('Enter code: '))
    cherrypy.config.update({'server.socket_port': 3001})
    cherrypy.tree.mount(AddChannel(), '/add')
    cherrypy.tree.mount(GetChannelMemberCount(), '/update')
    cherrypy.engine.start()
    cherrypy.engine.block()

asyncio.get_event_loop().run_until_complete(main())

А именно title=client(channel) никогда не завершается, в результате сервер не отвечает на запрос
Перемена на title=loop.run_until_complete(client(channel))не несёт изменении

Как поправить код, чтобы корутина телеграмма исполнилась и сервер ответил на запрос?
  • Вопрос задан
  • 222 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы