59 lines
2.1 KiB
TypeScript
59 lines
2.1 KiB
TypeScript
import * as twitch from "../twitch";
|
|
import { log, LogLevel } from "../logging"
|
|
import db from "../db";
|
|
|
|
export async function processBans(streamer: twitch.StreamerUserIdTokenPair) {
|
|
var dbconn = await db.connect();
|
|
try {
|
|
await dbconn.query('BEGIN');
|
|
await dbconn.query("DELETE FROM bans");
|
|
var response = await twitch.streamerApiRequest(streamer,
|
|
`/moderation/banned?broadcaster_id=${streamer.userid}&first=100`);
|
|
//log(LogLevel.DEBUG,"Ban API response:")
|
|
//log(LogLevel.DEBUG,JSON.stringify(response,null,2));
|
|
while (true) {
|
|
var insertBanQuery = "INSERT INTO bans (userid) VALUES ";
|
|
var banRow = 0; // Used for $1, $2, etc. in parameterized query
|
|
var bansArray: number[] = [];
|
|
if (Object.keys(response.data).length > 0) {
|
|
for (var ban of response.data) {
|
|
if (ban.expires_at == '') {
|
|
banRow++;
|
|
insertBanQuery += `($${banRow}), `;
|
|
bansArray.push(ban.user_id as number);
|
|
}
|
|
}
|
|
insertBanQuery = insertBanQuery.slice(0,-2); // Cut last `, ` off of the end
|
|
insertBanQuery += " ON CONFLICT DO NOTHING"; // Deal with broken endpoint returning dupes
|
|
var banQueryConfig = {
|
|
text: insertBanQuery,
|
|
values: bansArray
|
|
};
|
|
log(LogLevel.DEBUG,"banQueryConfig object:")
|
|
log(LogLevel.DEBUG,JSON.stringify(banQueryConfig,null,2))
|
|
await dbconn.query(banQueryConfig);
|
|
}
|
|
if (response.pagination.cursor) {
|
|
var oldFirstUserid = response.data[0].user_id;
|
|
response = await twitch.streamerApiRequest(streamer,
|
|
`/moderation/banned?broadcaster_id=${streamer.userid}&after=${response.pagination.cursor}&first=100`);
|
|
//log(LogLevel.DEBUG,"Ban API response:");
|
|
//log(LogLevel.DEBUG,JSON.stringify(response,null,2));
|
|
// Work around broken api endpoint giving a cursor referring to the
|
|
// current page, causing an infinite loop
|
|
if (oldFirstUserid == response.data[0].user_id) break;
|
|
} else {
|
|
break;
|
|
}
|
|
}
|
|
await dbconn.query("CALL update_scores()");
|
|
await dbconn.query('COMMIT');
|
|
} catch (e) {
|
|
log(LogLevel.ERROR,"cronjobs.processBans: Exception thrown; rolling back");
|
|
await dbconn.query('ROLLBACK');
|
|
throw(e);
|
|
} finally {
|
|
await dbconn.release();
|
|
}
|
|
}
|