AutoMod/bridge/src/data_deletion.ts

50 lines
1.3 KiB
TypeScript

/**
* When executed, this file scans the entire `messages` database collection
* and deletes entries belonging to channels which do no longer have a bridge
* configuration associated. Reads mongo URI from $DB_STRING env var.
*/
import Mongo from 'mongodb';
if (!process.env.DB_STRING) {
console.error('$DB_STRING not provided.');
process.exit(1);
}
const mongo = new Mongo.MongoClient(process.env.DB_STRING);
(async () => {
await mongo.connect();
const client = mongo.db();
const messages = client.collection('bridged_messages');
const res = messages.aggregate([{
$lookup: {
from: 'bridge_config',
localField: 'channels.discord',
foreignField: 'discord',
as: 'bridgeConfig',
}
}]);
let buf: string[] = [];
const execute = async () => {
const ids = [ ...buf ];
buf.length = 0;
if (ids.length) {
console.log('Deleting ' + ids.length + ' entries');
await messages.deleteMany({ _id: { $in: ids } });
}
}
res.on('data', data => {
if (!data.bridgeConfig?.length) buf.push(data._id);
if (buf.length >= 500) execute();
});
res.on('end', () => {
execute().then(() => process.exit(0));
});
})();