Бот отвечает дважды, почему?
Всем привет! Хочу написать бота, который будет что-то раздавать раз в сутки.
Моя проблема в том, что бот дважды принимает команду /start
Но мне нужно, чтобы он принимал её только раз в сутки.
Сам код:
import telebot
import time
bot = telebot.TeleBot("")
@bot.message_handler(commands=['start'])
def hello(message):
while True:
bot.send_message(message.chat.id, "Привет!")
time.sleep(60)
bot.polling()
while True
Написал для теста, планируется что там будет if
Заранее спасибо!
Ответы (3 шт):
Во-первых, тебе нужен токен, + надо добавить строку с кое-чем (времени объяснять нет) перед bot.polling(). Вот классный видеоурок который все объясняет.
https://www.youtube.com/watch?v=M8fhrtvedHA
Попробуй убрать while True. Так как сообщение аргумент постоянно выполняться. Сообщение отправляется дважды.
@bot.message_handler(commands=['video'])
def video_command(message):
print(message)
global lections
video_today = day_lections(1) #Массив, сегодняшнии лекции
if video_today == []:
out_text = "К счастью сегодня лекций нет"
else:
out_text = "*Лекции в ближайшие 24 часа*"
for i in video_today:
out_text +="\n" + i["name"] + " " + str(i["datetime"]) + " в " + "["+ i["platform"] +"](" + i["link"] + ")"
bot.send_message(
message.chat.id,
out_text,
parse_mode="Markdown"
)
Это пример моего кода для бота с if. И он отправляет 1 сообщение. Убедится в этом вы можете, например написав вместо while True: вот это if True:. Повторная отправка сообщения связана с тем, что функция hello(msg) вызывается в том случае если боту пришло 'start', и он на это не ответил. Соответственно на 1-ом проходе цикла бот отправляет ваше сообщение, идёт на 2-ой, но так как. сервер телеграмма еще не успел обработать 1-ое сообщение он отправляет еще одно.
Совсем не нужно вечный цикл)
import telebot
import time
bot = telebot.TeleBot("token")
@bot.message_handler(commands=['start'])
def hello(message):
bot.send_message(message.chat.id, "Привет!")
# time.sleep(60) Это 60 секунд, что бы получить сутки (24 часа) нужно домножить на 60, выйдет 3600, это час и на 24 - 86400, поэтому пишем -
time.sleep(86400)
bot.polling(none_stop=True)
Но лучше всего не делать time.sleep() в основном цикле потому что это будет глушить бота и он не будет отвечать. Что бы не допустить такого используем threading -
import telebot
import time
import threading
bot = telebot.TeleBot("token")
@bot.message_handler(commands=['start'])
def hello(message):
bot.send_message(message.chat.id, "Привет!")
time.sleep(86400)
threading.Thread(target = hello, args = (1,), daemon = True).start()
bot.polling(none_stop=True)
Таким образом у нас и 24 часа будут считаться и бот будет работать дальше, отвечать на другие команды