[英]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.