start method

  1. @override
Future<void> start()
override

Apply webhook configuration on Telegram API, and start the webhook server.

Implementation

@override
Future<void> start() async {
  if (await setWebhook()) {
    _server.listen((io.HttpRequest request) {
      var isPostRequest = request.method == 'POST';
      var isAuthorised = secretToken == null ||
          secretToken ==
              request.headers.value('X-Telegram-Bot-Api-Secret-Token');

      if (isPostRequest && isAuthorised) {
        request.cast<List<int>>().transform(utf8.decoder).join().then((data) {
          emitUpdate(Update.fromJson(jsonDecode(data)));
          request.response
            ..write(jsonEncode({'ok': true}))
            ..close();
        });
      } else {
        request.response
          ..statusCode = io.HttpStatus.methodNotAllowed
          ..write(jsonEncode({'ok': false}))
          ..close();
      }
    });
  } else {
    throw WebhookException(
        'Telegram API returns an error while attempting to set the webhook.');
  }
}