电报机器人随机图像(如何使用Telegram-Bot发送随机图像)

时间:2017-10-10 16:40:39

标签: random telegram telegram-bot

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();

我从中获得的结果每次只是一张图片,但如果我要求另一张随机图片,它会一直向我显示相同的图片。

1 个答案:

答案 0 :(得分:0)

我最近想到了这一点,所以我会给遇到这个问题的人找一个答案。

问题在于Telegram的缓存。它们缓存图像服务器端,这样他们就不必对同一个URL进行多次请求。这可以保护他们免于因太多请求而被列入黑名单,并使事情变得更加快捷。

不幸的是,如果您使用的是The Cat API这样的API,则意味着您将一遍又一遍地发送相同的图像。最简单的解决方案就是以某种方式使链接每次都有所不同。通过将当前纪元时间作为网址的一部分包含在内,可以很容易地实现这一点。

对于使用javascript的示例,可以通过以下修改来完成

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

或类似的东西。重点是,只要URL不同,您就不会收到缓存结果。另一种选择是下载文件,然后在本地发送。如果您将serverDownload选项传递到sendPhoto

,这就是Telebot所做的