reply
семейство функций возвращает Future[Message]
. В настоящее время вы переносите результат reply
в Success
, поэтому результат вашего transform
равен Future[Future[Message]]
, что не работает. Вместо этого вы можете использовать transformWith
, который ожидает Future
результата от своего аргумента:
onCommand("/img") { implicit msg =>
val tag = msg.text.get.drop("/img ".length)
val message: Future[Message] =
if (tag.isEmpty) reply("Empty argument list. Usage: /img tag")
else {
service.getImage(tag).transformWith {
case Success(link) => replyWithPhoto(InputFile(link)).recoverWith {
case _ => reply(link) // maybe it isn't a photo...
}
case Failure(e) => reply(e.getMessage)
}
}
message.void
}
Обратите внимание, что я также удалил оба оператора try
. Внешнее просто не нужно, потому что вы можете просто использовать if
/ else
. Внутренний не будет работать вообще, потому что replyWithPhoto
возвращает Future
. Таким образом, он не выдает ошибок, и вам нужно recover
или transform
, когда это не удается.