@LordOfTheNetwork

Прошу помоч решить проблему с TypeError: Message.answer() missing 1 required positional argument: 'self'.?

Доброго времени суток! Не судите строго, изучаю Python, боты и вот пришел к планировщикам задач.

from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor
from config import TOKEN
from aiogram.contrib.fsm_storage.memory import MemoryStorage
import logging
from apscheduler.schedulers.asyncio import AsyncIOScheduler
from datetime import datetime, timedelta

logging.basicConfig(level=logging.INFO)
bot = Bot(token=TOKEN)
storage = MemoryStorage()
dp = Dispatcher(bot = bot, storage=storage)


async def send_message_time(message: types.Message):
    await message.answer(text='Это сообщение отправляется через несколько секунд после запуска бота')


@dp.message_handler(commands=['start'])
async def process_start_command(message: types.Message):
    schedule = AsyncIOScheduler(timezone="Europe/Moscow")
    schedule.add_job(send_message_time, trigger='date', run_date=datetime.now() + timedelta(seconds=5), kwargs={'message': types.Message})
    schedule.start()
    await message.answer("Здрасьте!")

if __name__ == '__main__':
    logging.info("Starting bot...")
    executor.start_polling(dp)


суть в том, что я пытаюсь реализовать запуск задачи при запуске бота "/start"
вроде логически верно построил но выходит ошибка:

TypeError: Message.answer() missing 1 required positional argument: 'self'


Т.е. он просит добавить какой то обязательный аргумент в Message.answer? До этого он говорил добавить аргумент text, хотя я не был уверен что это обязательно, в других скриптах у меня он не используется, я добавил аргумент text, сейчас просит еще какой то аргумент... перерыл интернет и все что я нашел, это добавить SELF в аргумент.. ну бред какой то.

полный Traceback:
spoiler

Traceback (most recent call last):
  File "C:\Program Files\Python311\Lib\site-packages\apscheduler\executors\base_py3.py", line 30, in run_coroutine_job
    retval = await job.func(*job.args, **job.kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\*******\Desktop\*******************\********************\*****************\******************\************\tgbot3\bot.py", line 17, in send_message_time
    await message.answer(text='Это сообщение отправляется через несколько секунд после запуска бота')
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: Message.answer() missing 1 required positional argument: 'self'

  • Вопрос задан
  • 120 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev
Седой и строгий
Вы в функцию send_message_time передаёте класс, а не объект. Соответственно метод answer вызываете не у объекта, а у класса. Всё равно, что попытка съездить в магазин за покупками на чертеже автомобиля.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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