Make processBans support pagination
parent
a86e8a5667
commit
af97647033
|
@ -3,31 +3,49 @@ import { log, LogLevel } from "../logging"
|
||||||
import db from "../db";
|
import db from "../db";
|
||||||
|
|
||||||
export async function processBans(streamer: twitch.StreamerUserIdTokenPair) {
|
export async function processBans(streamer: twitch.StreamerUserIdTokenPair) {
|
||||||
var response = await twitch.streamerApiRequest(streamer,
|
var dbconn = await db.connect();
|
||||||
"/moderation/banned?broadcaster_id=" + streamer.userid);
|
|
||||||
var dbconn = await db.connect();
|
|
||||||
try {
|
try {
|
||||||
await dbconn.query('BEGIN');
|
await dbconn.query('BEGIN');
|
||||||
await dbconn.query("DELETE FROM bans");
|
await dbconn.query("DELETE FROM bans");
|
||||||
log(LogLevel.DEBUG,"Ban list:")
|
//log(LogLevel.DEBUG,"Ban API response:")
|
||||||
log(LogLevel.DEBUG,JSON.stringify(response.data,null,2));
|
//log(LogLevel.DEBUG,JSON.stringify(response,null,2));
|
||||||
var insertBanQuery = "INSERT INTO bans (userid) VALUES ";
|
var response = await twitch.streamerApiRequest(streamer,
|
||||||
var banRow = 0;
|
`/moderation/banned?broadcaster_id=${streamer.userid}&first=100`);
|
||||||
var bansArray: number[] = [];
|
while (true) {
|
||||||
for (var ban of response.data) {
|
var insertBanQuery = "INSERT INTO bans (userid) VALUES ";
|
||||||
if (ban.expires_at == '') {
|
var banRow = 0;
|
||||||
banRow++;
|
var bansArray: number[] = [];
|
||||||
insertBanQuery += `($${banRow}), `;
|
if (Object.keys(response.data).length > 0) {
|
||||||
bansArray.push(ban.user_id as number);
|
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`);
|
||||||
|
// 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;
|
||||||
|
//log(LogLevel.DEBUG,"Ban API response:");
|
||||||
|
//log(LogLevel.DEBUG,JSON.stringify(response,null,2));
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var banQueryConfig = {
|
|
||||||
text: insertBanQuery.slice(0,-2), // Cut last `, ` off of the end
|
|
||||||
values: bansArray
|
|
||||||
};
|
|
||||||
log(LogLevel.DEBUG,"banQueryConfig object:")
|
|
||||||
log(LogLevel.DEBUG,JSON.stringify(banQueryConfig,null,2))
|
|
||||||
await dbconn.query(banQueryConfig);
|
|
||||||
await dbconn.query("CALL update_scores()");
|
await dbconn.query("CALL update_scores()");
|
||||||
await dbconn.query('COMMIT');
|
await dbconn.query('COMMIT');
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|
Loading…
Reference in New Issue