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

Ошибка в боте в Телеграм. Библиотека aiogram. Почему не работает create_task?

Это код. Снизу ошибка, которую не могу исправить.
import config
import logging
import asyncio
from datetime import datetime

from aiogram import Bot, Dispatcher, executor, types
from sqlighter import SQLighter 

from stopgame import StopGame

# Configure logging
logging.basicConfig(level = logging.INFO)

# Initialize bot and dispatcher
bot = Bot(token = config.API_TOKEN)
dp = Dispatcher(bot)

# Initialize connect
db = SQLighter('db.db')

# Команда активации подписки
@dp.message_handler(commands = ['subscribe'])
async def subscribe(message: types.Message):
	if(not db.subscriber_exists(message.from_user.id)):
		db.add_subscriber(message.from_user.id)
	else:
		db.update_subscribtions(message.from_user.id, True)

	await message.answer("Вы успешно подписались на рассылку!\nЖдите, скоро выйдут новые обзоры и вы узнаете о них первыми :)")

# команда отписки
@dp.message_handler(commands = ['unsubscribe'])
async def unsubscribe(message: types.Message):
	if(not db.subscriber_exists(message.from_user.id)):
		db.add_subsriber(message.from_user.id, False)
		await message.answer("Вы итак не подписаны")
	else:
		db.update_subscribtions(message.from_user.id, False)
		await message.answer("Вы успешно отписались от рассылки")

# проверяем наличие новых игр и делаем рассылки
async def scheduled(wait_for):
	while True:
		await asyncio.sleep(wait_for)

	# проверяем наличие новых игр
	new_games = sg.new_games()

	if(new_games):
		new_games.reverse()

		for ng in new_games:
			nfo = sg.game_info(ng)

		subscriptions = db.get_subscriptions()

		# делаем рассылку
		with open(sg.download_image(nfo['image']), 'rb') as photo:
			for s in subscriptions:
				await bot.send_photo(
					s[1],
					photo,
					caption = nfo['title'] + "\n" + "Оценка: " + nfo['score'] + "\n" + nfo['exerpt'] + "\n\n" + nfo['link'],
					disable_notification = True
				)
		sg.update_lastkey(nfo['id'])

# long pooling
if __name__ == '__main__':
	dp.loop.create_task(scheduled(10)) # пока что оставим 10 секунд (в качестве теста)
	executor.start_polling(dp, skip_updates=True)


# long pooling
if __name__ == '__main__':
	dp.loop.create_task(scheduled(10)) # ВОТ ТУТ НЕ РАБОТАЕТ create_task
	executor.start_polling(dp, skip_updates=True)


Выходит ошибка:
AttributeError: 'NoneType' object has no attribute 'create_task'

Если нужно еще парсер могу скинуть
  • Вопрос задан
  • 5966 просмотров
Подписаться 1 Простой 3 комментария
Пригласить эксперта
Ответы на вопрос 6
MaksQ
@MaksQ
loop = asyncio.get_event_loop()
loop.create_task(scheduled(10))
Ответ написан
@bubaleh1337
О, тоже от Хауди? :D
Ответ написан
Комментировать
@kalenikov
Попробуйте так:
async def my():
    now = datetime.utcnow()
    print(f"{now}")

def repeat(coro, loop):
    asyncio.ensure_future(coro(), loop=loop)
    loop.call_later(DELAY, repeat, coro, loop)

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.call_later(DELAY, repeat, my, loop)
    executor.start_polling(dp, skip_updates=True, loop=loop)
Ответ написан
@zaharovmail
Возможно тебе поможет это https://ru.stackoverflow.com/questions/1144849/Как...
Ответ написан
Комментировать
@Mountlander
закомментить "dp.loop.create_task(scheduled(10)) # ВОТ ТУТ НЕ РАБОТАЕТ create_task"
Ответ написан
Комментировать
@Kirozen1
а вы не знаете почему каждый раз он записывает меня заново в базу данных ?
я все проверил вроде все правильно переписал
ответе пожалуйста
Ответ написан
Ваш ответ на вопрос

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

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