Телеграм-бот не реагирует на действия
Телеграм-бот не реагирует на команды. По логам вебхук нормально устанавливается, бот запускается. Но полностью игнорирует любые сообщения в боте, ничего не логирует. Помогите, пожалуйста, разобраться, в чем проблема?
<pre>
import telebot
from telebot.types import InlineKeyboardButton, InlineKeyboardMarkup, CallbackQuery
import logging
from datetime import datetime, timezone
from flask import Flask, request, abort
# Включаем логгирование
logging.basicConfig(
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
level=logging.DEBUG
)
logger = logging.getLogger(__name__)
# Мой токен
TOKEN = "..."
WEBHOOK_URL = "..."
# Создаем объект бота
bot = telebot.TeleBot(TOKEN)
# Обработчик команды /start
@bot.message_handler(commands=['start'])
def send_welcome(message):
logger.info(f"Received /start command from user {message.from_user.id}")
keyboard = InlineKeyboardMarkup()
keyboard.add(InlineKeyboardButton("Выбрать время", callback_data='choose_time'))
bot.send_message(
message.chat.id,
"Привет! Выбери время!",
reply_markup=keyboard
)
# Функция для определения часового пояса пользователя
def get_user_timezone(message):
# Полуучаем время UTC из временной метки сообщения
utc_time = datetime.fromtimestamp(message.date, tz=timezone.utc)
# Определяем смещение от UTC в часах
user_time = utc_time.astimezone()
offset_seconds = user_time.utcoffset().total_seconds()
offset_hours = int(offset_seconds // 3600)
user_timezone = f"UTC{'+' if offset_hours >= 0 else ''}{offset_hours}"
return user_timezone
# Обработчик инлайн кнопок
@bot.callback_query_handler(func=lambda call: True)
def callback_query(call: CallbackQuery):
logger.info(f"Button pressed with callback data: {call.data}")
if call.data == 'choose_time':
keyboard = InlineKeyboardMarkup()
keyboard.add(InlineKeyboardButton("Утром", callback_data='morning'))
keyboard.add(InlineKeyboardButton("Днем", callback_data='afternoon'))
keyboard.add(InlineKeyboardButton("Вечером", callback_data='evening'))
keyboard.add(InlineKeyboardButton("Ночью", callback_data='night'))
bot.edit_message_text(
chat_id=call.message.chat.id,
message_id=call.message.message_id,
text="Выбери время суток:",
reply_markup=keyboard
)
elif call.data in ['morning', 'afternoon', 'evening', 'night']:
times = {
'morning': ["06:00", "07:00", "08:00", "09:00", "10:00", "11:00"],
'afternoon': ["12:00", "13:00", "14:00", "15:00", "16:00", "17:00"],
'evening': ["18:00", "19:00", "20:00", "21:00", "22:00", "23:00"],
'night': ["00:00", "01:00", "02:00", "03:00", "04:00", "05:00"]
}
chosen_times = times[call.data]
keyboard = InlineKeyboardMarkup()
for time in chosen_times:
keyboard.add(InlineKeyboardButton(time, callback_data=f"time_{time}"))
bot.edit_message_text(
chat_id=call.message.chat.id,
message_id=call.message.message_id,
text="Выбери конкретное время:",
reply_markup=keyboard
)
elif call.data.startswith('time_'):
chosen_time = call.data.split('_')[1]
# Получаем часовой пояс пользователя
user_timezone = get_user_timezone(call.message)
bot.edit_message_text(
chat_id=call.message.chat.id,
message_id=call.message.message_id,
text=f"Вы выбрали время {chosen_time}, {user_timezone}"
)
app = Flask(__name__)
@app.route("/", methods=['POST'])
def webhook():
logger.info("Received a webhook request to Flask app")
logger.info(f"Headers: {request.headers}")
if request.headers.get('content-type') == 'application/json':
json_string = request.get_data().decode('utf-8')
logger.debug(f"Received JSON string: {json_string}")
update = telebot.types.Update.de_json(json_string)
logger.debug(f"Update object: {update}")
bot.process_new_updates([update])
logger.info("Update processed successfully by Flask app")
return 'OK', 200
else:
logger.warning("Invalid request received by Flask app")
abort(400)
# Устанавливаем вебхук при запуске приложения
if __name__ == '__main__':
bot.remove_webhook()
bot.set_webhook(url=WEBHOOK_URL)
webhook_info = bot.get_webhook_info()
logger.info(f"Webhook info: {webhook_info}")
logger.info("Webhook set. Bot started.")
app.run(host='0.0.0.0', port=8443)
</pre>