2017-10-10 105 views
1
const TeleBot = require('telebot'); 


const bot = new TeleBot({ 
token: 'i9NhrhCQGq7rxaA' // Telegram Bot API token. 
}); 

bot.on(/^([Hh]ey|[Hh]oi|[Hh]a*i)$/, function (msg) { 
return bot.sendMessage(msg.from.id, "Hello Commander"); 
}); 

var Historiepics = ['Schoolfotos/grr.jpg', 'Schoolfotos/boe.jpg', 
'Schoolfotos/tobinsexy.jpg']; 


console.log('Historiepics') 
console.log(Math.floor(Math.random() * Historiepics.length)); 
var foto = Historiepics[(Math.floor(Math.random() * Historiepics.length))]; 

bot.on(/aap/, (msg) => { 
return bot.sendPhoto(msg.from.id, foto); 
}); 



bot.start(); 

我從此得到的結果是隻有一個畫面每次,但如果我問另一個隨機圖片它讓我展示一個相同沒有改變。電報博特隨機圖像(如何使用電報博特隨機發送圖片)

回答

0

我最近弄清楚了這一點,所以我會爲任何遇到這個問題的人提供一個答案。

問題在於電報的緩存。他們緩存圖像服務器端,以便他們不必對同一個網址執行多個請求。這可以防止他們被太多請求列入黑名單,並使事情變得更快捷。

不幸的是,如果您使用的API如The Cat API這意味着您將一遍又一遍地發送相同的圖像。最簡單的解決方案就是讓鏈接每次都有點不同。通過將當前時代作爲url的一部分包含在內,這是最容易實現的。

對於示例使用JavaScript這可以用如下修改

bot.on(/aap/, (msg) => { 
    let epoch = (new Date).getTime(); 
    return bot.sendPhoto(msg.from.id, foto + "?time=" + epoch); 
}); 

或類似的東西來完成。要點是,只要網址不同,您就不會收到緩存的結果。另一種選擇是下載文件,然後在本地發送。這是Telebot如果將serverDownload選項傳遞到sendPhoto時會執行的操作。