Не могу получить элемент с словаря python
Есть словарь, который в функции создается сам:
message = {
'from_user': {'id': call.message.chat.id},
'chat': {'id': call.message.chat.id}
}
При выводе словаря получаю:
# print(message)
# print(type(message))
{'from_user': {'id': 00000000}, 'chat': {'id': 00000000}}
<class 'dict'>
Но попытавшись использовать этот словарь в другой функции, получаю ошибку:
Task exception was never retrieved
future: <Task finished name='Task-24' coro=<Dispatcher._process_polling_updates() done, defined at C:\Users\Maxim\AppData\Local\Programs\Python\Python39\lib\site-packages\aiogram\dispatcher\dispatcher.py:409> exception=AttributeError("'dict' object has no attribute 'from_user'")>
Traceback (most recent call last):
File "C:\Users\Maxim\AppData\Local\Programs\Python\Python39\lib\site-packages\aiogram\dispatcher\dispatcher.py", line 417, in _process_polling_updates
for responses in itertools.chain.from_iterable(await self.process_updates(updates, fast)):
File "C:\Users\Maxim\AppData\Local\Programs\Python\Python39\lib\site-packages\aiogram\dispatcher\dispatcher.py", line 238, in process_updates
return await asyncio.gather(*tasks)
File "C:\Users\Maxim\AppData\Local\Programs\Python\Python39\lib\site-packages\aiogram\dispatcher\handler.py", line 116, in notify
response = await handler_obj.handler(*args, **partial_data)
File "C:\Users\Maxim\AppData\Local\Programs\Python\Python39\lib\site-packages\aiogram\dispatcher\dispatcher.py", line 286, in process_update
return await self.callback_query_handlers.notify(update.callback_query)
File "C:\Users\Maxim\AppData\Local\Programs\Python\Python39\lib\site-packages\aiogram\dispatcher\handler.py", line 116, in notify
response = await handler_obj.handler(*args, **partial_data)
File "c:\Users\Maxim\Desktop\englishbot\englishbot.py", line 100, in callback_handler
await userAnswerCheckWord(call)
File "c:\Users\Maxim\Desktop\englishbot\englishbot.py", line 151, in userAnswerCheckWord
await sendNewWord(message)
File "c:\Users\Maxim\Desktop\englishbot\englishbot.py", line 74, in sendNewWord
keyboard, message_text, image_link = await generate_message(message)
File "c:\Users\Maxim\Desktop\englishbot\gen_message.py", line 9, in generate_message
if (await connect.get_user_stateAction(message)) == 'lwords':
File "c:\Users\Maxim\Desktop\englishbot\sqlite_connector.py", line 153, in get_user_stateAction
userId = message.from_user.id
AttributeError: 'dict' object has no attribute 'from_user'
Функция которая обращается к словарю:
async def get_user_stateAction(message):
userId = message.from_user.id
sql.execute(f"""SELECT action FROM users_states WHERE userId = '{userId}'""")
if sql.fetchone()[0] == 'lwords':
return 'lwords'
else:
return 'none'
По просьбе одного из пользователей, код который вызывает функцию get_user_stateAction:
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton
from kreekly_parser import get_word
from sqlite_connector import connect
from random import randint
import asyncio
async def generate_message(message):
if (await connect.get_user_stateAction(message)) == 'lwords':
select_eng_word, select_rus_word, eng_words, rus_words, image_link, action, audio, response_status = await get_word()
if response_status == 200:
# генерация клавиатуры
keyboard = InlineKeyboardMarkup()
for button in range(len(eng_words)):
keyboard.add(InlineKeyboardButton(text=eng_words[button], callback_data=f'SELECTED_WORD:{eng_words[button]}'))
# передача правильных слов
await connect.setRightWord(message, select_eng_word, select_rus_word)
# передача аудио
await connect.setNewAudio(message, audio)
# передача неправильных слов
wrongWords = eng_words
inn = wrongWords.index(select_eng_word)
del wrongWords[inn]
await connect.setWrongUserWords(message, wrongWords=wrongWords)
# генерация текста сообщения
message_text = (
f"Как переводится {select_rus_word}?"
)
return keyboard, message_text, image_link
else:
pass
else:
pass
Ответы (2 шт):
Автор решения: Maxim Chyorny
→ Ссылка
Я просто сделал так:
async def get_user_stateAction(message):
try:
userId = message["from_user"]["id"]
except:
userId = message.from_user.id
finally:
sql.execute(f"""SELECT action FROM users_states WHERE userId = '{userId}'""")
if sql.fetchone()[0] == 'lwords':
return 'lwords'
else:
return 'none'