deleteScheduledMessages method

int deleteScheduledMessages(
  1. TelegramEx telegram, {
  2. int? chatId,
  3. List<String>? tags,
})

Delete messages, previously marked by scheduleMessageDelete

Optionally could be filtered by chatId or by list of tags or both.

Implementation

int deleteScheduledMessages(TelegramEx telegram,
    {int? chatId, List<String>? tags}) {
  var found = 0;
  if (chatId == null && (tags == null || tags.isEmpty)) {
    _messagesToDelete.forEach((key, value) {
      found += value.entries.length;
    });
    _clearAll(telegram);
    return found;
  }

  var filteredMessages = <int, Map<int, List<String>>>{};
  if (chatId == null) {
    _messagesToDelete.forEach((key, value) {
      filteredMessages[key] = Map.from(value);
    });
  } else if (_messagesToDelete[chatId] != null) {
    filteredMessages[chatId] = Map.from(_messagesToDelete[chatId]!);
  }

  if (tags != null) {
    filteredMessages.forEach((chatId, messageItems) {
      messageItems.removeWhere((msgId, assignedTags) =>
          !assignedTags.any((element) => tags.contains(element)));
    });
  }

  filteredMessages.forEach((chatId, messageItems) {
    final store = _messagesToDelete[chatId];
    if (store == null) return;
    messageItems.forEach((messageId, tags) {
      store.remove(messageId);
      found++;
      telegram.deleteMessage(chatId, messageId).catchError((error) {
        print(error);
      });
    });
    if (store.isEmpty) {
      _messagesToDelete.remove(chatId);
    }
  });
  return found;
}