Python: Telebot - создание отложенных постов

Доброго времени суток!

Пытаюсь написать скрипт(бота в тг) который будет создавать пост в чате телеграмм, но не публиковать его сразу, а отправлять в отложенные посты на заданные дату и время. Использую библиотеку Telebot, но не могу найти подходящий метод, мб кто решал такую задачу уже, или есть идеи как такое можно реализовать?

Реализовать бота который бы работал в фоне, и отправлял посты с задержкой - не вариант.(так же как отдавать скрипт планировщику). Т.е. нужно реализовать так, что бы скрипт был запущен, созданы 5-10 заранее заданных, отложенных поста, в чате тг.

Спасибо.

P.S. Знаний у меня маловато, только начал учить яп. Практикуюсь в написании простеньких вещей, которые мог бы использовать и крутить сам.

введите сюда описание изображения


Ответы (2 шт):

Автор решения: RaFox

Вариант решения через pyrogram:

from pyrogram import Client, types, raw
from settings import *
from _datetime import datetime

app = Client(name=name_uset_admin, api_id=api_id, api_hash=api_hash)

async def main(image, date):
    async with app:
        await app.send_photo(channel, photo=image, caption="Set Total", schedule_date=date)

date = datetime(year=2022, month=6, day=17, hour=00, minute=9)
image = "url image"

app.run(main(image, date))
→ Ссылка
Автор решения: Олег

Сейчас решал такую задачу, если твой бот должен отправлять в ответ на сообщение пользователя сообщение (текст или текст + картинку), то можно решить задачу через asyncio или time.sleep.

Если твой бот должен помимо того, чтобы отправлять сообщения с задержкой, делать что-то ещё (фоновые процессы), то можешь использовать такую конструкцию:

import threading
import time

def send_message(chat_id, text):
    bot.send_message(chat_id, text)

def schedule_job(interval, func, *args):
    time.sleep(interval * 60)
    func(*args)

if message.text == 'пришли пост':
    bot.send_message(
        message.chat.id, f"Скоро пришлю интересные статьи", reply_to_message_id=message.message_id, reply_markup=markup)
#reply_markup=markup стоит использовать, если у тебя есть кнопки, которые ты отправляешь пользователю 
    threading.Thread(target=schedule_job, args=(1, send_message, message.chat.id, "Сообщение через 10 минут")).start()
    threading.Thread(target=schedule_job, args=(3, send_message, message.chat.id, "Сообщение через 30 минут.")).start()
    threading.Thread(target=schedule_job, args=(6, send_message, message.chat.id, "Сообщение через 60 минут")).start()
→ Ссылка