Попробуй это:
from telebot import TeleBot, types
from datetime import datetime
from threading import Thread
from time import sleep
bot = TeleBot(token=token)
posts = {}
action = ''
new_post = []
def sleep_poster(date_post, message):
while True:
if date_post < datetime.now():
print('Отправили сообщение!')
if message[3] is None:
bot.send_message(message[0], message[1], reply_markup=message[2], parse_mode='Markdown')
else:
with open(message[3], 'rb') as f:
bot.send_photo(message[0], f, caption=message[1], reply_markup=message[2])
return
else:
sleep(60)
@bot.message_handler(commands=['start'])
def start_command(message):
user = message.chat.id
if user == adm_id:
rp = types.ReplyKeyboardMarkup(True)
rp.row('Новый пост')
bot.send_message(user, 'Привет, используй кнопки для работы с ботом.', reply_markup=rp)
@bot.message_handler(content_types=['text', 'photo'])
def text(message):
global action, new_post
user = message.chat.id
if message.text == 'Новый пост':
if user == adm_id:
bot.send_message(user, 'Введите текст для сообщения. Используй для *жирного текста*, _курсива_')
action = 'text'
new_post = []
elif action == 'text':
new_post.append(message.text)
action = 'buttons'
bot.send_message(user, 'Теперь введите кнопки по шаблону "Имя кнопки; ссылка.ru, '
'Имя второй кнопки; example.com" (без ковычек). Ряды разделяются Enter`ом.')
elif action == 'buttons':
keyboard = types.InlineKeyboardMarkup()
for i in message.text.split('\n'):
buttons = i.split(',')
buttons = [j.split(';') for j in buttons]
args = [types.InlineKeyboardButton(j[0].strip(), j[1].strip()) for j in buttons]
keyboard.row(*args)
bot.send_message(user, 'Кнопки будут выглядеть вот так:', reply_markup=keyboard)
bot.send_message(user, 'Теперь введите дату в виде часы - минуты - день - месяц (необязательно) - '
'год (необязательно), или введите now, чтобы выпустить сейчас:')
new_post.append(keyboard)
action = 'data'
elif action == 'data':
t = message.text.split('-')
if len(t) == 5:
t = [int(i) for i in t]
date = datetime(minute=t[1], hour=t[0], day=t[2], month=t[3], year=t[4])
elif len(t) == 4:
t = [int(i) for i in t]
date = datetime(minute=t[1], hour=t[0], day=t[2], month=t[3], year=datetime.now().year)
elif len(t) == 3:
t = [int(i) for i in t]
date = datetime(minute=t[1], hour=t[0], day=t[2], month=datetime.now().month, year=datetime.now().year)
else:
date = 'Now!'
new_post.append(date)
inkb = types.InlineKeyboardMarkup()
inkb.row(types.InlineKeyboardButton('Создать', callback_data='create'))
inkb.row(types.InlineKeyboardButton('Нет!', callback_data='delete'))
bot.send_message(user, 'Подтвердите создание отложенной записи:\n\n'
f'Текст: {new_post[0]}\n'
f'Дата: {str(new_post[2])}', reply_markup=inkb, parse_mode='Markdown')
@bot.callback_query_handler(func=lambda call: True)
def answer(call):
global new_post, action
us = call.message.chat.id
if call.data == 'create':
identity = datetime.now().microsecond
if type(new_post[2]) == str:
bot.send_message(channel, new_post[0], reply_markup=new_post[1], parse_mode='Markdown')
return
inkb = types.InlineKeyboardMarkup()
bot.send_message(us, 'Сообщение создано!', reply_markup=inkb)
posts[identity] = Thread(target=sleep_poster, args=[new_post[2], [channel, new_post[0], new_post[1], new_post[3]]])
posts[identity].run()
elif call.data == 'delete':
new_post = []
action = ''
bot.send_message(us, 'Создание отменено.')
def main():
while True:
try:
bot.polling()
except Exception as e:
print(e)
Thr = Thread(target=main)
Thr.start()