docs: public Ability recoverDB() {
      return builder()
          .name(RECOVER)
          .locality(USER)
          .privacy(CREATOR)
          .input(0)
          .action(ctx -> silent.forceReply(
              getLocalizedMessage(ABILITY_RECOVER_MESSAGE, ctx.user().getLanguageCode()), ctx.chatId()))
          .reply(update -> {
            String replyToMsg = update.getMessage().getReplyToMessage().getText();
            String recoverMessage = getLocalizedMessage(ABILITY_RECOVER_MESSAGE, AbilityUtils.getUser(update).getLanguageCode());
            if (!replyToMsg.equals(recoverMessage))
              return;
  
            String fileId = update.getMessage().getDocument().getFileId();
            try (FileReader reader = new FileReader(downloadFileWithId(fileId))) {
              String backupData = IOUtils.toString(reader);
              if (db.recover(backupData)) {
                send(ABILITY_RECOVER_SUCCESS, update);
              } else {
                send(ABILITY_RECOVER_FAIL, update);
              }
            } catch (Exception e) {
              BotLogger.error("Could not recover DB from backup", TAG, e);
              send(ABILITY_RECOVER_ERROR, update);
            }
          }, MESSAGE, DOCUMENT, REPLY)
          .build();
    }