Python: Telebot - создание отложенных постов
Доброго времени суток!
Пытаюсь написать скрипт(бота в тг) который будет создавать пост в чате телеграмм, но не публиковать его сразу, а отправлять в отложенные посты на заданные дату и время. Использую библиотеку Telebot, но не могу найти подходящий метод, мб кто решал такую задачу уже, или есть идеи как такое можно реализовать?
Реализовать бота который бы работал в фоне, и отправлял посты с задержкой - не вариант.(так же как отдавать скрипт планировщику). Т.е. нужно реализовать так, что бы скрипт был запущен, созданы 5-10 заранее заданных, отложенных поста, в чате тг.
Спасибо.
P.S. Знаний у меня маловато, только начал учить яп. Практикуюсь в написании простеньких вещей, которые мог бы использовать и крутить сам.
Ответы (2 шт):
Вариант решения через 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()
