如何阻止有人向我的电报机器人的内联键盘发送垃圾邮件?

How do I stop someone spamming inline keyboard of my telegram bot?

我想冻结键盘按钮 4 秒,我不想删除键盘或让它变得无用 forever.The 我知道实现此目的的唯一方法是存储连续点击的时间我的数据库,然后使用 if statement.

if (click_2_time - click_1_time) < 4 : 
   pass
else: 
    //Do sensitive and irreversible operations

^这个问题是我将在多个组中使用许多内联键盘,并且使用此逻辑来跟踪各个键盘变得非常复杂。

请帮我解决一个更简单的问题。

您可以存储用户在按钮 callback_data 内的内联按钮上单击的最后时间戳。

例如,如果 callback_data: show_message,如果用户单击按钮,编辑消息的内联键盘并将 callback_data 更改为 show_message:1594922033

1594922033 是 unix 时间戳。

考虑到每 5 秒允许 1 次点击,您要将 callback_data 拆分为 :,然后如果拆分的长度等于 1,则处理请求添加时间戳并更新message keyboard else 如果长度为 2,则取第二项时间戳并将其与当前时间戳进行比较,如果它们的差异小于 5 秒,您将显示错误或忽略请求。否则您将更新消息的时间戳和键盘。

current_timestamp = datetime.datetime.now().timestamp()
callback = ...
data = callback.split(":")
if data.len() == 1:
    callback = callback + ":" + str(current_timestamp)
    # process data[0]
    # update message keyboard with current_timestamp
else:
    timestamp = int(data[1])
    if current_timestamp - timestamp > 5:
        # ignore the request or respond with error
    else:
        callback = data[0] + ":" + str(current_timestamp)
        # process data[0]
        # update message keyboard

您正在使用键盘按钮的 callback_data 字段作为存储空间。

但是根据documentation.

,你必须确保callback_data的长度不超过64字节