Бот прекращает отвечать на сообщения без ошибки
Скидываю весь свой код, ботам телеграм, который либо делает пост в канал сразу, либо в определенное время. Так вот проблема в том, стабильно после двух постов в определенное время, бот полностью перестает отвечать на сообщения без какой либо ошибки, также иногда постит сообщение дважды. Прошу помогите мне.
import telebot
from telebot import types
import datetime
from datetime import datetime
import time
import schedule
from functools import wraps
import pytz
tz = pytz.timezone('Europe/Moscow')
userid = '1692382843'
chat1 = 'id of chat'
chat2 = 'id of chat'
bot = telebot.TeleBot('token')
def is_known_username(username):
known_usernames = ['nnd0g1']
return username in known_usernames
def private_access():
def deco_restrict(f):
@wraps(f)
def f_restrict(message, *args, **kwargs):
username = message.from_user.username
if is_known_username(username):
return f(message, *args, **kwargs)
else:
bot.reply_to(message, text='Кто ты? Уходи, мужик...')
return f_restrict # true decorator
return deco_restrict
@bot.message_handler(commands=['info'])
@private_access()
def info(message):
bot.send_message(message.chat.id, message)
@bot.message_handler(commands=['start'])
@private_access()
def startcom(message):
button = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=1)
contacts = types.KeyboardButton('Контакты')
post = types.KeyboardButton('Разместить пост')
button.add(contacts, post)
bot.send_message(message.chat.id, 'Выберите действие', reply_markup=button, parse_mode='')
@bot.message_handler(regexp='Контакты')
@private_access()
def contacts(message):
button = types.InlineKeyboardMarkup()
button.add(types.InlineKeyboardButton("VK", url="vk link"))
button.add(types.InlineKeyboardButton("TG", url="tg link"))
bot.send_message(message.chat.id, 'Мои контакты', reply_markup=button)
@bot.message_handler(regexp='Разместить пост')
@private_access()
def postmake(message):
button = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=2)
channel1 = types.KeyboardButton('Тестовый канал 1')
channel2 = types.KeyboardButton('Тестовый канал 2')
mainmenu = types.KeyboardButton('Главное меню')
button.add(channel1, channel2, mainmenu)
bot.send_message(message.chat.id, 'Выберите канал', reply_markup=button)
@bot.message_handler(regexp='Главное меню')
@private_access()
def mainmenu(message):
button = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=1)
contacts = types.KeyboardButton('Контакты')
post = types.KeyboardButton('Разместить пост')
button.add(contacts, post)
bot.send_message(message.chat.id, 'Главное меню', parse_mode='')
bot.send_message(message.chat.id, 'Выберите действие', reply_markup=button)
@bot.message_handler(regexp='Тестовый канал 1')
@private_access()
def channel1message(message):
button = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=2)
yes = types.KeyboardButton('Да')
no = types.KeyboardButton('Нет')
button.add(yes, no)
mesg = bot.send_message(message.chat.id, 'Хотите выложить пост в определенное время?', reply_markup=button)
bot.register_next_step_handler(mesg, waitforyorn1)
def waitforyorn1(message):
if message.text == 'Нет':
button = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=3)
mainmenu = types.KeyboardButton('Главное меню')
button.add(mainmenu)
mesg = bot.send_message(message.chat.id, 'Ожидание поста', reply_markup=button)
bot.register_next_step_handler(mesg, forwardmes1)
elif message.text == 'Да':
button = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=1)
mainmenu = types.KeyboardButton('Главное меню')
button.add(mainmenu)
mesg = bot.send_message(message.chat.id, 'Ожидание поста', reply_markup=button)
bot.register_next_step_handler(mesg, forwardmes1withdelay)
else:
gang = bot.send_message(message.chat.id, 'Только да или нет')
bot.register_next_step_handler(gang, waitforyorn1)
def forwardmes1(message):
if message.text == 'Главное меню':
button = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=1)
contacts = types.KeyboardButton('Контакты')
post = types.KeyboardButton('Разместить пост')
button.add(contacts, post)
bot.send_message(message.chat.id, 'Главное меню', parse_mode='')
bot.send_message(message.chat.id, 'Выберите действие', reply_markup=button)
else:
bot.copy_message(chat1, message.chat.id, message.id)
def forwardmes1withdelay(message):
if message.text == 'Главное меню':
button = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=1)
contacts = types.KeyboardButton('Контакты')
post = types.KeyboardButton('Разместить пост')
button.add(contacts, post)
bot.send_message(message.chat.id, 'Главное меню', parse_mode='')
bot.send_message(message.chat.id, 'Выберите действие', reply_markup=button)
else:
global mes1
mes1 = message.id
mesg = bot.send_message(message.chat.id, 'Укажите желаемое вами время формата <i>ЧЧ:СС</i>', parse_mode='HTML')
bot.register_next_step_handler(mesg, forwardmestime1)
def forwardmestime1(message):
currentdatetime1 = datetime.now(tz)
currenttime1 = currentdatetime1.time()
print(currenttime1)
try:
timeobj = datetime.strptime(message.text, '%H:%M').time()
if f'{currenttime1.hour}:{currenttime1.minute}' == f'{timeobj.hour}:{timeobj.minute}':
bot.copy_message(chat1, message.chat.id, mes1)
else:
def tusk():
bot.copy_message(chat1, message.chat.id, mes1)
return schedule.CancelJob
schedule.every().day.at(f'{timeobj}').do(tusk)
while True:
schedule.run_pending()
time.sleep(1)
except ValueError:
m = bot.send_message(message.chat.id, 'Неверный формат, пришлите пост снова, затем корректно укажите время')
bot.register_next_step_handler(m, forwardmes1withdelay)
@bot.message_handler(regexp='Тестовый канал 2')
@private_access()
def channel2message(message):
button = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=2)
yes = types.KeyboardButton('Да')
no = types.KeyboardButton('Нет')
button.add(yes, no)
mesg = bot.send_message(message.chat.id, 'Хотите выложить пост в определенное время?', reply_markup=button)
bot.register_next_step_handler(mesg, waitforyorn2)
def waitforyorn2(message):
if message.text == 'Нет':
button = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=3)
mainmenu = types.KeyboardButton('Главное меню')
button.add(mainmenu)
mesg = bot.send_message(message.chat.id, 'Ожидание поста', reply_markup=button)
bot.register_next_step_handler(mesg, forwardmes2)
elif message.text == 'Да':
button = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=1)
mainmenu = types.KeyboardButton('Главное меню')
button.add(mainmenu)
mesg = bot.send_message(message.chat.id, 'Ожидание поста', reply_markup=button)
bot.register_next_step_handler(mesg, forwardmes2withdelay)
else:
gang = bot.send_message(message.chat.id, 'Только Да или Нет')
bot.register_next_step_handler(gang, waitforyorn2)
def forwardmes2(message):
if message.text == 'Главное меню':
button = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=1)
contacts = types.KeyboardButton('Контакты')
post = types.KeyboardButton('Разместить пост')
button.add(contacts, post)
bot.send_message(message.chat.id, 'Главное меню', parse_mode='')
bot.send_message(message.chat.id, 'Выберите действие', reply_markup=button)
else:
bot.copy_message(chat2, message.chat.id, message.id)
def forwardmes2withdelay(message):
if message.text == 'Главное меню':
button = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=1)
contacts = types.KeyboardButton('Контакты')
post = types.KeyboardButton('Разместить пост')
button.add(contacts, post)
bot.send_message(message.chat.id, 'Главное меню', parse_mode='')
bot.send_message(message.chat.id, 'Выберите действие', reply_markup=button)
else:
global mes2
mes2 = message.id
mesg = bot.send_message(message.chat.id,'Укажите желаемое вами время формата <i>ЧЧ:СС</i>', parse_mode='HTML')
bot.register_next_step_handler(mesg, forwardmestime2)
def forwardmestime2(message):
currentdatetime2 = datetime.now(tz)
currenttime2 = currentdatetime2.time()
print(currenttime2)
try:
timeobj = datetime.strptime(message.text, '%H:%M').time()
if f'{currenttime2.hour}:{currenttime2.minute}' == f'{timeobj.hour}:{timeobj.minute}':
bot.copy_message(chat2, message.chat.id, mes2)
else:
def tusk():
bot.copy_message(chat2, message.chat.id, mes2)
return schedule.CancelJob
schedule.every().day.at(f'{timeobj}').do(tusk)
while True:
schedule.run_pending()
time.sleep(1)
except ValueError:
m = bot.send_message(message.chat.id, 'Неверный формат, пришлите пост снова, зачтем корректно укажите время')
bot.register_next_step_handler(m, forwardmes2withdelay)
@bot.message_handler(content_types=['text'])
@private_access()
def diftext(message):
bot.send_message(message.chat.id, f'{message.from_user.first_name} введите команду /start')
if __name__ == "__main__":
try:
bot.polling (non_stop=True)
except Exception as e:
((e))