50 lines
1.3 KiB
TypeScript
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));
|
|
});
|
|
})();
|