mirror of
https://github.com/ajayyy/SponsorBlockServer.git
synced 2025-12-12 06:27:10 +03:00
Consider locked segments when calculating reputation
This commit is contained in:
@@ -7,6 +7,7 @@ interface ReputationDBResult {
|
|||||||
totalSubmissions: number,
|
totalSubmissions: number,
|
||||||
downvotedSubmissions: number,
|
downvotedSubmissions: number,
|
||||||
upvotedSum: number,
|
upvotedSum: number,
|
||||||
|
lockedSum: number,
|
||||||
oldUpvotedSubmissions: number
|
oldUpvotedSubmissions: number
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -17,6 +18,7 @@ export async function getReputation(userID: UserID): Promise<number> {
|
|||||||
`SELECT COUNT(*) AS "totalSubmissions",
|
`SELECT COUNT(*) AS "totalSubmissions",
|
||||||
SUM(CASE WHEN "votes" < 0 THEN 1 ELSE 0 END) AS "downvotedSubmissions",
|
SUM(CASE WHEN "votes" < 0 THEN 1 ELSE 0 END) AS "downvotedSubmissions",
|
||||||
SUM(CASE WHEN "votes" > 0 AND "timeSubmitted" > 1596240000000 THEN "votes" ELSE 0 END) AS "upvotedSum",
|
SUM(CASE WHEN "votes" > 0 AND "timeSubmitted" > 1596240000000 THEN "votes" ELSE 0 END) AS "upvotedSum",
|
||||||
|
SUM(locked) AS "lockedSum",
|
||||||
SUM(CASE WHEN "timeSubmitted" < ? AND "timeSubmitted" > 1596240000000 AND "votes" > 0 THEN 1 ELSE 0 END) AS "oldUpvotedSubmissions"
|
SUM(CASE WHEN "timeSubmitted" < ? AND "timeSubmitted" > 1596240000000 AND "votes" > 0 THEN 1 ELSE 0 END) AS "oldUpvotedSubmissions"
|
||||||
FROM "sponsorTimes" WHERE "userID" = ?`, [pastDate, userID]) as Promise<ReputationDBResult>;
|
FROM "sponsorTimes" WHERE "userID" = ?`, [pastDate, userID]) as Promise<ReputationDBResult>;
|
||||||
|
|
||||||
@@ -36,7 +38,7 @@ export async function getReputation(userID: UserID): Promise<number> {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return convertRange(Math.min(result.upvotedSum, 150), 5, 150, 0, 15);
|
return convertRange(Math.min(result.upvotedSum, 150), 5, 150, 0, 7) + convertRange(Math.min(result.lockedSum, 50), 0, 50, 0, 20);
|
||||||
}
|
}
|
||||||
|
|
||||||
function convertRange(value: number, currentMin: number, currentMax: number, targetMin: number, targetMax: number): number {
|
function convertRange(value: number, currentMin: number, currentMax: number, targetMin: number, targetMax: number): number {
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ const userIDNewSubmissions = "reputation-newsubmissions" as UserID;
|
|||||||
const userIDLowSum = "reputation-lowsum" as UserID;
|
const userIDLowSum = "reputation-lowsum" as UserID;
|
||||||
const userIDHighRepBeforeManualVote = "reputation-oldhighrep" as UserID;
|
const userIDHighRepBeforeManualVote = "reputation-oldhighrep" as UserID;
|
||||||
const userIDHighRep = "reputation-highrep" as UserID;
|
const userIDHighRep = "reputation-highrep" as UserID;
|
||||||
|
const userIDHighRepAndLocked = "reputation-highlockedrep" as UserID;
|
||||||
|
|
||||||
describe('reputation', () => {
|
describe('reputation', () => {
|
||||||
before(async () => {
|
before(async () => {
|
||||||
@@ -64,6 +65,15 @@ describe('reputation', () => {
|
|||||||
await db.prepare("run", startOfQuery + `('${videoID}', 1, 11, -1, 0, 'reputation-5-uuid-5', '${getHash(userIDHighRep)}', 1606240000000, 50, 'sponsor', 'YouTube', 100, 0, 0, '${getHash(videoID, 1)}')`);
|
await db.prepare("run", startOfQuery + `('${videoID}', 1, 11, -1, 0, 'reputation-5-uuid-5', '${getHash(userIDHighRep)}', 1606240000000, 50, 'sponsor', 'YouTube', 100, 0, 0, '${getHash(videoID, 1)}')`);
|
||||||
await db.prepare("run", startOfQuery + `('${videoID}', 1, 11, 0, 0, 'reputation-5-uuid-6', '${getHash(userIDHighRep)}', 1606240000000, 50, 'sponsor', 'YouTube', 100, 0, 0, '${getHash(videoID, 1)}')`);
|
await db.prepare("run", startOfQuery + `('${videoID}', 1, 11, 0, 0, 'reputation-5-uuid-6', '${getHash(userIDHighRep)}', 1606240000000, 50, 'sponsor', 'YouTube', 100, 0, 0, '${getHash(videoID, 1)}')`);
|
||||||
await db.prepare("run", startOfQuery + `('${videoID}', 1, 11, 0, 0, 'reputation-5-uuid-7', '${getHash(userIDHighRep)}', 1606240000000, 50, 'sponsor', 'YouTube', 100, 0, 0, '${getHash(videoID, 1)}')`);
|
await db.prepare("run", startOfQuery + `('${videoID}', 1, 11, 0, 0, 'reputation-5-uuid-7', '${getHash(userIDHighRep)}', 1606240000000, 50, 'sponsor', 'YouTube', 100, 0, 0, '${getHash(videoID, 1)}')`);
|
||||||
|
|
||||||
|
await db.prepare("run", startOfQuery + `('${videoID}', 1, 11, 2, 1, 'reputation-6-uuid-0', '${getHash(userIDHighRepAndLocked)}', 1606240000000, 50, 'sponsor', 'YouTube', 100, 0, 0, '${getHash(videoID, 1)}')`);
|
||||||
|
await db.prepare("run", startOfQuery + `('${videoID}', 1, 11, 2, 1, 'reputation-6-uuid-1', '${getHash(userIDHighRepAndLocked)}', 1606240000000, 50, 'sponsor', 'YouTube', 100, 0, 0, '${getHash(videoID, 1)}')`);
|
||||||
|
await db.prepare("run", startOfQuery + `('${videoID}', 1, 11, 2, 1, 'reputation-6-uuid-2', '${getHash(userIDHighRepAndLocked)}', 1606240000000, 50, 'sponsor', 'YouTube', 100, 0, 0, '${getHash(videoID, 1)}')`);
|
||||||
|
await db.prepare("run", startOfQuery + `('${videoID}', 1, 11, 2, 1, 'reputation-6-uuid-3', '${getHash(userIDHighRepAndLocked)}', 1606240000000, 50, 'sponsor', 'YouTube', 100, 0, 0, '${getHash(videoID, 1)}')`);
|
||||||
|
await db.prepare("run", startOfQuery + `('${videoID}', 1, 11, 2, 0, 'reputation-6-uuid-4', '${getHash(userIDHighRepAndLocked)}', 1606240000000, 50, 'sponsor', 'YouTube', 100, 0, 0, '${getHash(videoID, 1)}')`);
|
||||||
|
await db.prepare("run", startOfQuery + `('${videoID}', 1, 11, -1, 0, 'reputation-6-uuid-5', '${getHash(userIDHighRepAndLocked)}', 1606240000000, 50, 'sponsor', 'YouTube', 100, 0, 0, '${getHash(videoID, 1)}')`);
|
||||||
|
await db.prepare("run", startOfQuery + `('${videoID}', 1, 11, 0, 0, 'reputation-6-uuid-6', '${getHash(userIDHighRepAndLocked)}', 1606240000000, 50, 'sponsor', 'YouTube', 100, 0, 0, '${getHash(videoID, 1)}')`);
|
||||||
|
await db.prepare("run", startOfQuery + `('${videoID}', 1, 11, 0, 0, 'reputation-6-uuid-7', '${getHash(userIDHighRepAndLocked)}', 1606240000000, 50, 'sponsor', 'YouTube', 100, 0, 0, '${getHash(videoID, 1)}')`);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("user in grace period", async () => {
|
it("user in grace period", async () => {
|
||||||
@@ -82,12 +92,16 @@ describe('reputation', () => {
|
|||||||
assert.strictEqual(await getReputation(getHash(userIDLowSum)), 0);
|
assert.strictEqual(await getReputation(getHash(userIDLowSum)), 0);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("user with high reputation", async () => {
|
it("user with lots of old votes (before autovote was disabled) ", async () => {
|
||||||
assert.strictEqual(await getReputation(getHash(userIDHighRepBeforeManualVote)), 0);
|
assert.strictEqual(await getReputation(getHash(userIDHighRepBeforeManualVote)), 0);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("user with high reputation", async () => {
|
it("user with high reputation", async () => {
|
||||||
assert.strictEqual(await getReputation(getHash(userIDHighRep)), 0.5172413793103449);
|
assert.strictEqual(await getReputation(getHash(userIDHighRep)), 0.24137931034482757);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("user with high reputation and locked segments", async () => {
|
||||||
|
assert.strictEqual(await getReputation(getHash(userIDHighRepAndLocked)), 1.8413793103448277);
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
Reference in New Issue
Block a user