ソースを参照

added caching file ids to avoid multiple file uploads

Vadik Sirekanyan 5 年 前
コミット
2e1ddaaca7

+ 1 - 4
src/main/kotlin/com/sirekanyan/andersrobot/api/Weather.kt

@@ -27,12 +27,9 @@ data class Weather(
     }
 
     fun format(accuracy: Int): String =
-        formatTemperature(accuracy) + " — " + formatCity()
+        formatTemperature(accuracy) + " — $name"
 
     private fun formatTemperature(accuracy: Int): String =
         "%.${accuracy}f°C".format(main.temp)
 
-    private fun formatCity(): String =
-        "$name (${sys.country})"
-
 }

+ 16 - 1
src/main/kotlin/com/sirekanyan/andersrobot/extensions/AbsSender.kt

@@ -2,13 +2,28 @@ package com.sirekanyan.andersrobot.extensions
 
 import org.telegram.telegrambots.meta.api.methods.send.SendMessage
 import org.telegram.telegrambots.meta.api.methods.send.SendPhoto
+import org.telegram.telegrambots.meta.api.objects.InputFile
 import org.telegram.telegrambots.meta.api.objects.Message
 import org.telegram.telegrambots.meta.bots.AbsSender
 import java.io.File
+import java.util.concurrent.ConcurrentHashMap
+
+private val cachedFileIds: MutableMap<File, String> = ConcurrentHashMap()
 
 fun AbsSender.sendText(chatId: Long, text: String): Message =
     execute(SendMessage(chatId, text))
 
 fun AbsSender.sendPhoto(chatId: Long, file: File, caption: String) {
-    execute(SendPhoto().setChatId(chatId).setPhoto(file).setCaption(caption))
+    fun send(f: InputFile) = execute(SendPhoto().setChatId(chatId).setPhoto(f).setCaption(caption))
+    val cachedFileId = cachedFileIds[file]
+    if (cachedFileId == null) {
+        println("sending file $file")
+        val message = send(InputFile(file, file.name))
+        message.photo.maxByOrNull { it.width }?.fileId?.let { fileId ->
+            cachedFileIds[file] = fileId
+        }
+    } else {
+        println("sending fileId $cachedFileId")
+        send(InputFile(cachedFileId))
+    }
 }