0

I want to save data from telegram api in for comprehension type with implicit, but have an error

Error:(61, 9) type mismatch;
 found   : cats.effect.IO[Unit]
 required: scala.concurrent.Future[?]
      _ <- IO(userRepository.save(User(msg.from.get.id, msg.from.get.username.get)))

The code in TelegramBot example, which use info.mukel.telegrambot4s 3.0.9 library.

  onCommand("/hello") { implicit msg =>
    for {
      _   <- reply(s"Hello ${msg.from.get.firstName}")
      _ <- IO(userRepository.save(User(msg.from.get.id, msg.from.get.username.get)))
    } yield ()
  }

I tried to delete reply and add, this code compiled, but saving (inside IO) didn`t execute

  onCommand("/hello") { implicit msg =>
    for {
      res <- IO(userRepository.save(User(msg.from.get.id, msg.from.get.username.get)))
    } yield res
  }

Is it possible to resolve this problem?

Dmytro Mitin
  • 48,194
  • 3
  • 28
  • 66
Vadim
  • 753
  • 8
  • 22

1 Answers1

1

Try

onCommand("/hello") { implicit msg =>
  for {
    _ <- IO.fromFuture(IO.pure(reply(s"Hello ${msg.from.get.firstName}")))
    _ <- IO(userRepository.save(User(msg.from.get.id, isBot = true, msg.from.get.username.get)))
  } yield ()
}
Dmytro Mitin
  • 48,194
  • 3
  • 28
  • 66
  • But the _ <- IO(userRepository.save(User(msg.from.get.id, msg.from.get.username.get))) is not executed. – Vadim Apr 25 '19 at 21:17
  • Tried IO.apply(userRepository.save(User(msg.from.get.id, msg.from.get.username.get))) – Vadim Apr 25 '19 at 21:28
  • IO.pure(userRepository.save(User(msg.from.get.id, msg.from.get.username.get))) – Vadim Apr 25 '19 at 21:28