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

Проблемы с aiogram в Python, как пофиксить ошибку(она и код в деталях)?

Я взял код с одного ресурса, для решения ЦДЗ в МЭШе(кто знает про эту тему не пишите то что тестовый юзер уже не работает, сейчас у меня ошибка с aiogram), он использует aiogram вот код:

import asyncio
import json
import logging
import re

import requests
from aiogram import Bot, Dispatcher, types

import options

logging.basicConfig(level=logging.INFO)

bot = Bot(token=options.token)
bot.parse_mode = 'html'
dp = Dispatcher()

async def main():
    await dp.start_polling(bot)



def get_answers(type_of_test, test_id):
    url = 'https://uchebnik.mos.ru/exam/rest/secure/testplayer/group'
    payload = json.dumps(
        {'test_type': 'training_test', 'generation_context_type': type_of_test, 'generation_by_id': test_id})
    headers = {'Content-type': 'application/json', 'Cookie': options.cookie}
    response = requests.request("POST", url, headers=headers, data=payload)
    return response.json()


@dp.message._handler()
async def test(message: types.Message):
    link_to_test = re.findall(r'(selftest/spec|training_spec|test_by_binding)/([\w]+)', message.text)

    type_of_test, test_id = link_to_test[0]
    type_of_test = 'homework' if type_of_test == 'test_by_binding' else 'spec'

    response = get_answers(type_of_test, test_id)
    if 'error' in response:
        return await message.answer("ERROR")

    await message.answer(f'Номер теста <b>{test_id}</b>\nРешаем.. :P')

    print(response)

    for task in response['training_tasks']:
        test_task = task['test_task']
        question = test_task['question_elements'][0]['text']
        type_of_question = test_task['answer']['type']
        right_answer = test_task['answer']['right_answer']
        if type_of_question == 'answer/number':
            right_answer = right_answer['number']
        elif type_of_question == 'answer/string':
            right_answer = right_answer['string']
        elif type_of_question == 'answer/single':
            variants = test_task['answer']['options']
            for i in variants:
                if i['id'] in right_answer['id']:
                    right_answer = i['text']
                    break
        else:
            continue
        await message.answer(f'<b>{question}</b>\n\nОТВЕТ: <i>{right_answer}</i>')


if __name__ == '__main__':
    asyncio.run(main())


Тут были правки тк Диспатчер не работал, и вот ошибка:
Traceback (most recent call last):
  File "C:\Users\Asus\Downloads\MASHCheats\main.py", line 31, in <module>
    @dp.message._handler()
     ^^^^^^^^^^^^^^^^^^^^^
TypeError: 'HandlerObject' object is not callable

Как её решать я не знаю, я перебрал все функции которые в подсказках даёт, но те которые логически могли работать не работают.
  • Вопрос задан
  • 24 просмотра
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
Lord_of_Rings
@Lord_of_Rings
Дунадан - северный странник. Злой, но очень добрый
Точка лишняя. Т. е. надо@dp.message_handler() или может быть даже просто @dp.message() Точно не уверен, надо доки читать
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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