2017-10-10 100 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时会执行的操作。