- 3
- 0
Я пытаюсь запрограммировать телеграм-бота, который получает доступ к клиенту 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="""
⚙️ <b>На аккаунт пришел код!</b>
[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("❌ <b>Ошибка:</b> событие не найдено.")
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: <Task pending name='Task-26' coro=<create_session() done, defined at c:\Users\meles\Projects\TGBot\handlers.py:321> wait_for=<Future cancelled>>