簡體   English   中英

node-telegram-bot-api 中的消息延遲

[英]Delay for messages in node-telegram-bot-api

我正在使用 node-telegram-bot-api 庫開發電報機器人。 我使用鍵盤制作了 2 個按鈕。 但是當你經常點擊它們時,機器人會發送垃圾郵件,遲早會死機。 是否有可能以某種方式為用戶延遲消息。

if (text === '/start') {
            return bot.sendMessage(chatId, 'hello', keyboardMain);
        }
export const keyboardMain = {
    reply_markup: JSON.stringify({
        keyboard: [
            [{
                text: '/start',
            },
        ],
        resize_keyboard: true
    })
};

您可以使用 Javascript Map創建用戶調節器

/*
 * @param {number} waitTime Seconds to wait
 */
function throttler(waitTime) {
  const users = new Map()
  return (chatId) => {
     const now = parseInt(Date.now()/1000)
     const hitTime = users.get(chatId)
     if (hitTime) {
       const diff = now - hitTime
       if (diff < waitTime) {
         return false
       } 
       users.set(chatId, now)
       return true
     }
     users.set(chatId, now)
     return true
  }
}

如何使用:您將從電報 api 中獲取用戶的 chatId。 您可以使用該 ID 作為標識符並在給定的特定時間停止用戶。

例如,一旦用戶請求,我將停止用戶 10 秒。

// global 10 second throttler
const throttle = throttler(10) // 10 seconds

// in your code
const allowReply = throttle(chatId) // chatId obtained from telegram

if (allowReply) {
   // reply to user
} else {
  // dont reply
}

我嘗試使用這段代碼,將函數代碼放在我的函數文件中,將所有內容都連接到所需的文件中,但我不明白接下來要做什么。 我是 JavaScript 新手,只是在學習。

import {
    bot
} from '../token.js';

import {
    throttler
} from '../functions/functions.js';

import {
    keyboardMain
} from '../keyboards/keyboardsMain.js';

export function commands() {
    bot.on('message', msg => {
        const text = msg.text;
        const chatId = msg.chat.id;

        const throttle = throttler(10);

        if (text === '/start') {
            const allowReply = throttle(chatId) // chatId obtained from telegram

            if (allowReply) {
               return bot.sendMessage(chatId, 'hello', keyboardMain);
            } else {
               // dont reply
            }
        }

        return bot.sendMessage(chatId, 'error');
    });
}

 var token = ""; // FILL IN YOUR OWN TOKEN var telegramUrl = "https://api.telegram.org/bot" + token; var webAppUrl = ""; // FILLINYOUR GOOGLEWEBAPPADDRESS var ssId = ""; // FILL IN THE ID OF YOUR SPREADSHEET function getMe() { var url = telegramUrl + "/getMe"; var response = UrlFetchApp.fetch(url); Logger.log(response.getContentText()); } function setWebhook() { var url = telegramUrl + "/setWebhook?url=" + webAppUrl; var response = UrlFetchApp.fetch(url); Logger.log(response.getContentText()); } function sendText(id,text) { var url = telegramUrl + "/sendMessage?chat_id=" + id + "&text=" + text; var response = UrlFetchApp.fetch(url); Logger.log(response.getContentText()); } function doGet(e) { return HtmlService.createHtmlOutput("Hi there"); } function doPost(e){ var data = JSON.parse(e.postData.contents); var text = data.message.text; var id = data.message.chat.id; var msgbegan = SpreadsheetApp.openById(ssId).getSheets()[1].getRange("A7").getValue(); var msginfo = SpreadsheetApp.openById(ssId).getSheets()[1].getRange("A9").getValue(); var answer = "%0A" + msgbegan + "%0A"; /////////////////////// /* * @param {number} waitTime Seconds to wait */ function throttler(waitTime) { const users = new Map() return (chatId) => { const now = parseInt(Date.now()/1000) const hitTime = users.get(chatId) if (hitTime) { const diff = now - hitTime if (diff < waitTime) { return false } users.set(chatId, now) return true } users.set(chatId, now) return true } } // global 10 second throttler const throttle = throttler(500) // 10 seconds // in your code const allowReply = throttle(chatId) // chatId obtained from telegram if (allowReply) { // reply to user } else { // dont reply } /////////////////////////////////////// if(text == "/start"){ sendText(id, answer); } else if (text == "/info"){ sendText(id, msginfo); }else{ if (text.length == 10){ var found = false; var total_rows = SpreadsheetApp.openById(ssId).getSheets()[0].getMaxRows(); for(i=1; i<=total_rows; i++){ var loop_id = SpreadsheetApp.openById(ssId).getSheets()[0].getRange(i,2).getValue(); if(text == loop_id){ found = true; found_at = i; // employee row break; } } if(found){ sendText(id, work_message); }else{ var msgerrror = SpreadsheetApp.openById(ssId).getSheets()[1].getRange("A6").getValue(); var not_found = "%0A" + msgerrror+ "%0A"; sendText(id, not_found); } } else { sendText(id, "eroor"); } } ///////////// var emp_name = SpreadsheetApp.openById(ssId).getSheets()[0].getRange(found_at,1).getValue(); var emp_work = SpreadsheetApp.openById(ssId).getSheets()[0].getRange(found_at,3).getValue(); var homeloc = SpreadsheetApp.openById(ssId).getSheets()[0].getRange(found_at,4).getValue(); var emp_location = SpreadsheetApp.openById(ssId).getSheets()[0].getRange(found_at,8).getValue(); var emp_data = SpreadsheetApp.openById(ssId).getSheets()[0].getRange(found_at,5).getValue(); var emp_day = SpreadsheetApp.openById(ssId).getSheets()[0].getRange(found_at,6).getValue(); var emp_clock = SpreadsheetApp.openById(ssId).getSheets()[0].getRange(found_at,7).getValue(); var emp_location = SpreadsheetApp.openById(ssId).getSheets()[0].getRange(found_at,8).getValue(); var welcome = SpreadsheetApp.openById(ssId).getSheets()[1].getRange("A2").getValue(); var msgemp = SpreadsheetApp.openById(ssId).getSheets()[1].getRange("A3").getValue(); var msgloc = SpreadsheetApp.openById(ssId).getSheets()[1].getRange("A4").getValue(); var msgbay = SpreadsheetApp.openById(ssId).getSheets()[1].getRange("A5").getValue(); var msghome = SpreadsheetApp.openById(ssId).getSheets()[1].getRange("A8").getValue(); var msmobil = SpreadsheetApp.openById(ssId).getSheets()[1].getRange("A11").getValue(); var mstoday = SpreadsheetApp.openById(ssId).getSheets()[1].getRange("A13").getValue(); var msdata = SpreadsheetApp.openById(ssId).getSheets()[1].getRange("A14").getValue(); var msclock = SpreadsheetApp.openById(ssId).getSheets()[1].getRange("A15").getValue(); var work_message = welcome + emp_name + "%0A" + msgemp + emp_work + "%0A" + mstoday + emp_day + "%0A" + msdata + emp_data + "%0A" + msclock + emp_clock + "%0A" + msghome + homeloc + "%0A" + msgloc+ emp_location + "%0A" + msgbay + "%0A" + msmobil; }

打擾一下。 我是初學者 這是正確的方法嗎

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM