PDA

Просмотр полной версии : ERROR:asyncio:Task was destroyed but it is pending! (Telethon | Asyncio)


_Rem1X_
21.01.2024, 23:47
Я пытаюсь запрограммировать телеграм-бота, который получает доступ к клиенту Telegram, используя библиотеку Telethon. При запуске кода процедура Telegram Auth запускается через терминал. Пытался через Future обойти, чтобы я мог войти в клиент с помощью Python (без необходимости вводить в терминале), но столкнулся с проблемой "Задача была уничтожена, но она ожидает выполнения!", голову ломаю, но не могу найти причину ошибки.

Сам код:

handlers.py:






@router.message(InputEditActiveAcc.password)
async def edit_acc_time(msg: Message, state: FSMContext):
await state.update_data(password=msg.text)
await msg.delete()
await editacc_message.edit_text("Укажите интервал:")
await state.set_state(InputEditActiveAcc.time)

@router.message(InputEditActiveAcc.time)
async def edit_acc_done(msg: Message, state: FSMContext):
global time, basedata

time = 0 if isActive else msg.text
await state.update_data(time=int(time))
await msg.delete()
data = await state.get_data()
await state.clear()

user_id = msg.from_user.id
user = await db.get_user(user_id)
db_data = user[2]

data_list = db_data.split("\n")
for item in data_list:
basedata = json.loads(item)
if basedata['number'] == data['edit_number']:
future_code = Future()
events[user_id] = future_code

asyncio.create_task(
create_session(
basedata["client_name"],
data['edit_number'],
data["password"],
basedata['api_id'],
basedata['api_hash'],
future_code
))
break

await editacc_message.edit_text(
text="""
⚙️ На аккаунт пришел код!
[1] Вводите код по одной цифре в каждом сообщении:
"""
)
await state.set_state(ClientCode.get_code_1)

@router.message(ClientCode.get_code_1)
. . .

@router.message(ClientCode.get_code_5)
async def generate_code5(msg: Message, state: FSMContext):
await state.update_data(get_code_5=msg.text)
data = state.get_data()
await state.clear()
await process_create(msg=msg, data=data)

async def process_create(msg: Message, data):
num_1 = data["get_code_1"]
num_2 = data["get_code_2"]
num_3 = data["get_code_3"]
num_4 = data["get_code_4"]
num_5 = data["get_code_5"]
code = num_1 + num_2 + num_3 + num_4 + num_5

user_id = msg.from_user.id
future_code = events.get(user_id)

if future_code:
future_code.set_result(code)
del events[user_id]
else:
await editacc_message.edit_text("❌ Ошибка: событие не найдено.")
return

new_data = json_deactive(basedata, basedata['number'], int(time))
await db.update_data(user_id, new_data)

await editacc_message.edit_text(f"Статус аккаунта изменён!")

async def create_session(client_name, phone, password, api_id, api_hash, future_code):

client = TelegramClient(client_name, api_id, api_hash)
await client.connect()

if not await client.is_user_authorized():
try:
await client.send_code_request(phone)
code = await asyncio.wait_for(future_code, timeout=300)
try:
await client.sign_in(
phone=phone,
code=code,
)
await client.disconnect()
...




Код ошибки:

Ошибка:






ERROR:asyncio:Task was destroyed but it is pending!
task: wait_for=>