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

この結果は毎回1枚ですが、別のランダムな画像を求めても同じ画像が表示されます変更なし。テレグラムボットランダム画像(電報-Botで画像をランダムに送信する方法)

答えて

0

私は最近これを理解したので、この問題に遭遇した人のために答えを出します。

問題はテレグラムのキャッシュにあります。彼らは、同じURLへの複数のリクエストを行う必要がないように、イメージサーバー側をキャッシュします。これは、潜在的にあまりにも多くのリクエストに対してブラックリストに載ることからそれらを保護し、物事をよりスピーディにします。

The Cat APIなどのAPIを使用している場合は、同じ画像を何度も何度も送信することになります。一番簡単な解決策は、たまにリンクを少しずつ違うものにすることです。これは、現在のエポック時間をURLの一部として含めることで最も簡単に達成できます。ご例えば

はJavaScriptを使用して、これは以下のように変更

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

または類似のものを用いて達成することができます。要点は、URLが異なる限り、キャッシュされた結果を受け取らないことです。もう1つの選択肢は、ファイルをダウンロードしてローカルに送信することです。 serverDownloadオプションをsendPhotoに渡すと、これはTelebotの機能です。

関連する問題