Задать вопрос
@reversedebil

Как исправить данную ошибку (Aiogram, Python)?

Код ошибки:
Task exception was never retrieved
future: <Task finished coro=<Dispatcher._process_polling_updates() done, defined at C:\Users\admin\AppData\Local\Programs\Python\Python37\lib\site-packages\aiogram\dispatcher\dispatcher.py:395> exception=AttributeError("'coroutine' object has no attribute 'users'")>
Traceback (most recent call last):
  File "C:\Users\admin\AppData\Local\Programs\Python\Python37\lib\site-packages\aiogram\dispatcher\dispatcher.py", line 403, in _process_polling_updates
    for responses in itertools.chain.from_iterable(await self.process_updates(updates, fast)):
  File "C:\Users\admin\AppData\Local\Programs\Python\Python37\lib\site-packages\aiogram\dispatcher\dispatcher.py", line 232, in process_updates
    return await asyncio.gather(*tasks)
  File "C:\Users\admin\AppData\Local\Programs\Python\Python37\lib\site-packages\aiogram\dispatcher\handler.py", line 117, in notify
    response = await handler_obj.handler(*args, **partial_data)
  File "C:\Users\admin\AppData\Local\Programs\Python\Python37\lib\site-packages\aiogram\dispatcher\dispatcher.py", line 253, in process_update
    return await self.message_handlers.notify(update.message)
  File "C:\Users\admin\AppData\Local\Programs\Python\Python37\lib\site-packages\aiogram\dispatcher\handler.py", line 117, in notify
    response = await handler_obj.handler(*args, **partial_data)
  File "main.py", line 86, in main
    text = await check(message.text)
  File "main.py", line 63, in check
    if b.users != []:
AttributeError: 'coroutine' object has no attribute 'users'
C:\Users\admin\AppData\Local\Programs\Python\Python37\lib\asyncio\base_events.py:1772: RuntimeWarning: coroutine 'UserMethods.__call__' was never awaited
  handle = None  # Needed to break cycles when an exception occurs.
RuntimeWarning: Enable tracemalloc to get the object allocation traceback


Код бота:
from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor
import sqlite3
import telethon, random, time, socks, sys,  asyncio
from telethon.sync import TelegramClient
from telethon import TelegramClient, events, errors, functions, types,sync
from telethon.errors import SessionPasswordNeededError
from telethon.tl.functions.users import GetFullUserRequest
from telethon.tl.functions.messages import AddChatUserRequest, ImportChatInviteRequest
from telethon.tl.types import PeerUser, PeerChat, PeerChannel, InputPhoneContact
from telethon.tl.functions.channels import InviteToChannelRequest, JoinChannelRequest
from telethon.tl.functions.contacts import ImportContactsRequest, DeleteContactsRequest, GetContactsRequest 

bot = Bot(token='121212')
dp = Dispatcher(bot)

api_id = 1
api_hash = '2'
try:
    client = TelegramClient('user', api_id, api_hash)
except:
    print('Добавьте прокси или включите VPN и перезагрузите программу.')
    proxy_ip = input('Socks5 IP: ')
    proxy_port = int(input('Socks5 PORT: '))
    client = TelegramClient('user', api_id, api_hash, proxy=(socks.SOCKS5, proxy_ip, proxy_port))

client.connect()
if not client.is_user_authorized():
    try:
        print('Введите номер телефона (вместе с +):', end='')
        phone_number = input(' ')
        client.send_code_request(phone_number)
        print('Введите код:', end='')
        client.sign_in(phone_number, input(' '))
    except telethon.errors.rpcerrorlist.SessionPasswordNeededError:
        print('\nОтключите двухэтапную аутентификацию. Попробуйте еще раз.\n')
        input('Нажмите Enter чтобы продолжить')
    except telethon.errors.rpcerrorlist.FloodWaitError as e:
        try:
            print('\nСлишком много попыток. Попробуйте через ' + (f"{e.seconds}") + ' секунд.')
            input('Нажмите Enter чтобы продолжить')
        finally:
            e = None
            del e

    except telethon.errors.rpcerrorlist.PhoneNumberInvalidError:
        print('\nНеправильный номер. Попробуйте еще раз.\n')
        input('Нажмите Enter чтобы продолжить')
    except TypeError:
        print('\nНеправильный номер. Попробуйте еще раз.\n')
        input('Нажмите Enter чтобы продолжить')
    except telethon.errors.rpcerrorlist.PhoneCodeInvalidError:
        print('\nНеправильный код. Попробуйте еще раз.\n')
        input('Нажмите Enter чтобы продолжить')

async def check(number):
    contact = InputPhoneContact(client_id=0, phone=number, first_name=number, last_name='')
    try:
        a = client(ImportContactsRequest([contact]))
        b = client(GetContactsRequest(hash=0))
        if b.users != []:
            for inf in b.users:
                if inf.phone == number[1:]:
                    aasas = client(DeleteContactsRequest(id=[inf.id]))
                    data = client.get_entity(inf.id)
                    return f"Номер телефона: +{inf.phone}\nID: {inf.id}\nFirst Name: {data.first_name}\nLast Name: {data.last_name}\nUsername: @{inf.username}"
                else:
                    return f"{number} отсутствует в телеграме."
        else:
            return f"{number} отсутствует в телеграме."
    except telethon.errors.rpcerrorlist.FloodWaitError as e:
        try:
            print('Превышен лимит. Программа продолжит работу через ' + (f"{e.seconds}") + ' секунд(ы). Ждите...')
            time.sleep(e.seconds + 10)
            return f"Произошла ошибка в сервере Телеграм. Попробуйте через 20-30 секунд..."
        except Exception as e:
            print(repr(e))

@dp.message_handler(content_types=['text'])
async def main(message : types.Message):
    if message.text == '/start':
        await bot.send_message(message.from_user.id, 'Добро пожаловать!')
    elif message.text.startswith('+'):
        text = await check(message.text)
        await bot.send_message(message.chat.id, text)
    else:
        pass

if __name__ == '__main__':
    executor.start_polling(dp)
    loop = asyncio.get_event_loop()
client.run_until_disconnected()
  • Вопрос задан
  • 2746 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
@tshipenchko
aiogram и telethon асинхронные библиотеки
Советую лучше ознакомиться с асинхронностью в python
Что бы понимать азы сойдет любая статья, например эта
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы