AbsSender.kt 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. package com.sirekanyan.andersrobot.extensions
  2. import com.sirekanyan.andersrobot.api.Weather
  3. import org.telegram.telegrambots.meta.api.methods.send.SendMessage
  4. import org.telegram.telegrambots.meta.api.methods.send.SendPhoto
  5. import org.telegram.telegrambots.meta.api.methods.send.SendSticker
  6. import org.telegram.telegrambots.meta.api.objects.InputFile
  7. import org.telegram.telegrambots.meta.api.objects.Message
  8. import org.telegram.telegrambots.meta.bots.AbsSender
  9. import java.io.File
  10. import java.util.concurrent.ConcurrentHashMap
  11. private val cachedFileIds: MutableMap<File, String> = ConcurrentHashMap()
  12. fun AbsSender.sendText(chatId: Long, text: String): Message =
  13. execute(SendMessage(chatId, text))
  14. fun AbsSender.sendPhoto(chatId: Long, file: File): Message =
  15. execute(SendPhoto().setChatId(chatId).setPhoto(file))
  16. fun AbsSender.sendWeather(chatId: Long, weather: Weather) {
  17. weather.findImageFile()?.let { icon ->
  18. sendSticker(chatId, icon)
  19. }
  20. sendText(chatId, weather.format())
  21. }
  22. private fun AbsSender.sendSticker(chatId: Long, file: File) {
  23. fun send(f: InputFile) = execute(SendSticker().setChatId(chatId).setSticker(f))
  24. val cachedFileId = cachedFileIds[file]
  25. if (cachedFileId == null) {
  26. println("sending file $file")
  27. val message = send(InputFile(file, file.name))
  28. cachedFileIds[file] = message.sticker.fileId
  29. } else {
  30. println("sending fileId $cachedFileId")
  31. send(InputFile(cachedFileId))
  32. }
  33. }