Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+3

Кд на сообщения работают не для всех! Телеграм бот

Сделал бота через Python, сделал разные команды, и поставил кд на команду в полтора часа, но , кд работает не для всех. Т.е если попытаться ввести команду два раза подряд , напишет попробуйте через полтора часа, но так не у всех. У одного пользователя пишет попробуйте через полтора часа, а у второго не пишет ничего и он спокойно использует команду без КД

По дате
По рейтингу
Аватар пользователя
Просветленный

Ну значит неправильно кд поставил. Откуда нам знать, что ты там нахимичил

Аватар пользователя

Это может быть связано с особенностью работы Telegram. Каждый пользователь имеет свой уникальный chat_id, который Telegram использует для идентификации пользователя.

Когда вы устанавливаете CD, вы, скорее всего, запоминаете время последнего использования команды для конкретного chat_id пользователя.

Возможно, у разных пользователей разные chat_id, даже если они одинаково называются в вашем боте. Поэтому CD работает для одного, но не работает для другого.

Для решения этой проблемы рекомендую следующее:

Храните CD не только по chat_id, но и по имени пользователя. Тогда CD будет работать для всех с этим именем.

Используйте некий глобальный CD, который будет одинаковый для всех пользователей. Например, храните просто время последнего использования команды.

Если нет возможности определить одинаковое имя пользователя, то можно запрашивать его при первом использовании команды и запоминать вместе с chat_id.

В крайнем случае, чтобы CD работал для всех, можно хранить его в глобальной переменной (не завязывая на конкретного пользователя).

Надеюсь, эти советы помогут вам решить проблему и сделать CD более универсальным и рабочим для всех пользователей вашего бота. Дайте знать, если у вас остались вопросы.

Аватар пользователя
Мудрец
1234567891011121314151617181920212223242526272829
 # вот пример для pytelegrambotapi без бд 
# на массиве user_id = unix+ 
# пример @GProPythonBot cmd /kd
# но в данном методе есть свои минусы

import datetime
user_command_times = {}

def unix_timeout(unix_time, m_time): 
   return int((datetime.datetime.fromtimestamp(unix_time) + datetime.timedelta(minutes=m_time)).timestamp()) 
 
def unix_timer(unix_time1, unix_time2): 
  time_diff = unix_time2 - unix_time1 
  days, seconds = time_diff // (24 * 3600), time_diff % (24 * 3600) 
  hours, seconds = seconds // 3600, seconds % 3600 
  minutes, seconds = seconds // 60, seconds % 60 
  return '{} мин {} сек.'.format(int(minutes), int(seconds))

@bot.message_handler(commands=['kd']) 
def kd_handler(message): 
    user_id = message.chat.id 
    now = int(message.date) 
    # проверяем, прошло ли уже 2 мин между командами пользователя 
    if user_id in user_command_times and now < user_command_times[user_id]: 
        bot.send_message(user_id, "Подождите {}.".format(unix_timer(now, user_command_times[user_id]))) 
    else: 
       # Записываем пользователю текущий unix и прибавляем к нему 2 минуты
        user_command_times[user_id] = unix_timeout(now, 2) 
        bot.send_message(user_id, 'Команда выполнена успешно.') 
Аватар пользователя
Мыслитель

Потому-что нужна база данных. В нее вносить все id пользователей и время нажатия на кнопку\команду, тогда у каждого будет свой таймер и тд.