• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

Как сделать бота который будет скидывать сообщение в группу по расписанию?

Ali_Pythonist

Member
21.02.2024
14
0
BIT
101
Ребята помогите пожалуйста решить задачу нужно что бы бот скидывал в чат группы сообщение в 21:31 но код не работает GPT тоже не помогает так как скидывает уже неактуальный код к библиотеке aiogram пробовал гуглить тоже не помогло вот код ниже

Так же вот скрин кода
1710963429848.png



Python:
import aioschedule
import asyncio
from aiogram.filters import Command
from aiogram import Bot, Dispatcher, types
from NA_Bot_Project.Token_Bot import token

bot = Bot(token=token)
dp = Dispatcher()

async def bot_answer():
    await bot.send_message(chat_id=-4169981440, text='Таймер.')

async def timer():
    aioschedule.every().day.at("21:31").do(bot_answer)
    while True:
        await aioschedule.run_pending()
        await asyncio.sleep(1)

async def start():
    asyncio.create_task(timer())

if __name__ == '__main__':
   asyncio.run(dp.start_polling(bot))
   asyncio.run(start())
 

Exited3n

Red Team
10.05.2022
712
257
BIT
619
Aiogram 3.4.1

Python:
import asyncio
import sys
import logging
from aiogram import Bot, Dispatcher, Router
from aiogram.filters import Command
from aiogram.types import Message
from aiogram import BaseMiddleware
from apscheduler.schedulers.asyncio import AsyncIOScheduler


TOKEN = 'token'

hello_router = Router(name='hello')


# позволяет доставать scheduler из агрументов фунции
class SchedulerMiddleware(BaseMiddleware):
    def __init__(self, scheduler: AsyncIOScheduler):
        super().__init__()
        self._scheduler = scheduler

    async def __call__(self, handler, event, data):
        # прокидываем в словарь состояния scheduler
        data["scheduler"] = self._scheduler
        return await handler(event, data)


@hello_router.message(Command(commands=["remind"]))
# middleware просовывает для нас sheduler в аргументы функции
async def hello(message: Message, bot: Bot, scheduler: AsyncIOScheduler):
    id = 539491282
    await message.answer(
        text="Бот будет напоминать каждые 30 секунд и каждый день в 00.32"
    )
    # задаём выполнение задачи в равные промежутки времени
    scheduler.add_job(bot.send_message, 'interval', seconds=30, args=(id, "Я напоминаю каждые 30 секунд"))
    # задаём выполнение задачи по cron - гибкий способ задавать расписание.
    scheduler.add_job(bot.send_message, 'cron', hour=00, minute=34, args=(id, "Я напомнил в 00.32 по Москве"))


async def main():
    # для работы с временем нужно указывать часовой пояс. По дефолту Лондон :)
    scheduler = AsyncIOScheduler(timezone='Europe/Moscow')
    scheduler.start()
    bot = Bot(TOKEN)
    dp = Dispatcher()
    # регистрируем middleware c scheduler
    dp.update.middleware(
        SchedulerMiddleware(scheduler=scheduler),
    )
    dp.include_routers(hello_router)
    await dp.start_polling(bot)


if __name__ == '__main__':
    logging.basicConfig(
        level=logging.INFO,
        stream=sys.stdout,
        format="%(asctime)s - [%(levelname)s] -  %(name)s - "
               "(%(filename)s).%(funcName)s(%(lineno)d) - %(message)s"
    )
    asyncio.run(main())

1710970455826.png
 

Ali_Pythonist

Member
21.02.2024
14
0
BIT
101
Aiogram 3.4.1

Python:
import asyncio
import sys
import logging
from aiogram import Bot, Dispatcher, Router
from aiogram.filters import Command
from aiogram.types import Message
from aiogram import BaseMiddleware
from apscheduler.schedulers.asyncio import AsyncIOScheduler


TOKEN = 'token'

hello_router = Router(name='hello')


# позволяет доставать scheduler из агрументов фунции
class SchedulerMiddleware(BaseMiddleware):
    def __init__(self, scheduler: AsyncIOScheduler):
        super().__init__()
        self._scheduler = scheduler

    async def __call__(self, handler, event, data):
        # прокидываем в словарь состояния scheduler
        data["scheduler"] = self._scheduler
        return await handler(event, data)


@hello_router.message(Command(commands=["remind"]))
# middleware просовывает для нас sheduler в аргументы функции
async def hello(message: Message, bot: Bot, scheduler: AsyncIOScheduler):
    id = 539491282
    await message.answer(
        text="Бот будет напоминать каждые 30 секунд и каждый день в 00.32"
    )
    # задаём выполнение задачи в равные промежутки времени
    scheduler.add_job(bot.send_message, 'interval', seconds=30, args=(id, "Я напоминаю каждые 30 секунд"))
    # задаём выполнение задачи по cron - гибкий способ задавать расписание.
    scheduler.add_job(bot.send_message, 'cron', hour=00, minute=34, args=(id, "Я напомнил в 00.32 по Москве"))


async def main():
    # для работы с временем нужно указывать часовой пояс. По дефолту Лондон :)
    scheduler = AsyncIOScheduler(timezone='Europe/Moscow')
    scheduler.start()
    bot = Bot(TOKEN)
    dp = Dispatcher()
    # регистрируем middleware c scheduler
    dp.update.middleware(
        SchedulerMiddleware(scheduler=scheduler),
    )
    dp.include_routers(hello_router)
    await dp.start_polling(bot)


if __name__ == '__main__':
    logging.basicConfig(
        level=logging.INFO,
        stream=sys.stdout,
        format="%(asctime)s - [%(levelname)s] -  %(name)s - "
               "(%(filename)s).%(funcName)s(%(lineno)d) - %(message)s"
    )
    asyncio.run(main())

Посмотреть вложение 74348
Спасибо ты очень сильно помог
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!