deleteScheduledMessages method
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;
}