Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Telebot (pyTelegramBotAPI) ошибка при попытке замутить пользователя

Егор Лузгин Ученик (104), на голосовании 2 месяца назад
помогите, такая проблема.
 @bot.message_handler(commands=['mute']) 
def mute(message):
if not message.reply_to_message:
bot.reply_to(message, "Использование: ответьте на сообщение пользователя и введите /mute ")
return

try:
command, minutes = message.text.split()
minutes = int(minutes)
except ValueError:
bot.reply_to(message, "Использование: /mute ")
return

user_to_mute = message.reply_to_message.from_user


until_date = datetime.now() + timedelta(minutes=minutes)


bot.restrict_chat_member(
chat_id=message.chat.id,
user_id=user_to_mute.id,
until_date=until_date,
can_send_messages=False
)

bot.reply_to(message, f"Пользователь {user_to_mute.username or user_to_mute.first_name} замучен на {minutes} минут.")
бот мутит навсегда вне зависимости от указаний времени, вроде и значения как в документации прописано, уже не знаю что делать
Голосование за лучший ответ
Леха Миронов Мастер (2253) 3 месяца назад
Ошибка в строке, где задается значение until_date:
 until_date = datetime.now() + timedelta(minutes=minutes) 
В приведенном выше коде для until_date используется тип данных datetime, так как timedelta прибавляется к текущему времени. Однако тип until_date, ожидаемый методом restrict_chat_member, - это int, представляющий количество секунд с начала эпохи Unix.

Чтобы исправить ошибку, преобразуйте until_date в тип int следующим образом:
 until_date = int((datetime.now() + timedelta(minutes=minutes)).timestamp())  
Это обеспечит правильный формат для параметра until_date и решит проблему с бесконечным запретом.

Полный исправленный код:
 def mute(message): 
if not message.reply_to_message:
bot.reply_to(message, "Использование: ответьте на сообщение пользователя и введите /mute ")
return

try:
command, minutes = message.text.split()
minutes = int(minutes)
except ValueError:
bot.reply_to(message, "Использование: /mute ")
return

user_to_mute = message.reply_to_message.from_user

until_date = int((datetime.now() + timedelta(minutes=minutes)).timestamp())

bot.restrict_chat_member(
chat_id=message.chat.id,
user_id=user_to_mute.id,
until_date=until_date,
can_send_messages=False
)

bot.reply_to(message, f"Пользователь {user_to_mute.username or user_to_mute.first_name} замучен на {minutes} минут.")
Егор ЛузгинУченик (104) 3 месяца назад
а причем здесь инт? я выше указал это в переменной minutes. Да и в чат гпт я это и сам смогу вбить
Леха Миронов Мастер (2253) Егор Лузгин, Вы правы, вы уже указали время в минутах в переменной minutes. Однако параметр until_date в методе restrict_chat_member ожидает значение даты и времени в формате количества секунд с начала эпохи Unix. Поэтому, чтобы исправить код, вам нужно преобразовать переменную minutes в количество секунд, а затем добавить это значение к текущему времени, чтобы получить дату и время в нужном формате. Вот исправленный код:
Похожие вопросы