Как можно исправить ошибку 400: EXPIRE_DATE_INVALID в коде бота для Telegram?

Здравствуйте! У меня возникла проблема при написании моего первого бота для Telegram. Когда пользователь нажимает определенную кнопку, бот должен создать пригласительную ссылку, которая будет действительна в течение 10 дней, и отправлять ее пользователю. Однако при нажатии кнопки я получаю ошибку "telebot.apihelper.ApiTelegramException: A request to the Telegram API was unsuccessful. Error code: 400. Description: Bad Request: EXPIRE_DATE_INVALID". Можете помочь разобраться? Ниже приведен мой код, который я использовал.
Изображение к вопросу
  • 29 октября 2023 г. 12:49
Ответы на вопрос 2
Проблема возникает из-за того, что вы неправильно задаете дату истечения срока действия для ссылки. Вместо того, чтобы использовать число для указания количества секунд, вы должны использовать объект datetime.timedelta для создания периода действия ссылки. Вот как можно исправить ваш код:

```python
import telebot
from telegram import InlineKeyboardButton, InlineKeyboardMarkup
import datetime

API_TOKEN = 'your_api_token'
bot = telebot.TeleBot(API_TOKEN)

@bot.message_handler(commands=['start'])
def start(message):
    keyboard = [
        [InlineKeyboardButton("Создать ссылку", callback_data='create_link')]
    ]
    reply_markup = InlineKeyboardMarkup(keyboard)
    bot.send_message(message.chat.id, "Выберите действие:", reply_markup=reply_markup)

@bot.callback_query_handler(func=lambda call: True)
def callback_query(call):
    if call.data == 'create_link':
        # Создаем объект datetime.timedelta для указания срока действия ссылки в 10 дней
        expire_date = datetime.datetime.now() + datetime.timedelta(days=10)
        # Конвертируем дату в секунды, требуемые для API Telegram
        expire_date_seconds = int(expire_date.timestamp())
        
        # Отправляем пользователю ссылку со сроком действия 10 дней
        bot.send_message(call.message.chat.id, f"Ссылка действительна до {expire_date.isoformat()}")
        bot.send_message(call.message.chat.id, f"https://t.me/your_bot_username?start=link_param&expire_date={expire_date_seconds}")

bot.polling()
```

В этом примере мы используем объект `datetime.timedelta` для создания периода действия ссылки в 10 дней. Затем мы конвертируем эту дату в количество секунд, необходимое для API Telegram, используя `expire_date.timestamp()`. Наконец, мы отправляем пользователю сообщение с ссылкой, содержащей параметр `expire_date` с количеством секунд, указывающим, когда ссылка истекает.
expire_date: Integer, Optional. The expiration date of the link, which should be provided in Unix timestamp format. Unix timestamp is the number of seconds that have passed since January 1, 1970 (midnight UTC/GMT), excluding leap seconds. Make sure to check the expected format that Telegram accepts for this argument.
Похожие вопросы