feat: randomiseFileNames -> anonymiseFileNames (#116)
Co-authored-by: Ven <vendicated@riseup.net>
This commit is contained in:
parent
d3bf5cec9a
commit
7cdc4e4c03
2 changed files with 71 additions and 28 deletions
71
src/plugins/anonymiseFileNames.ts
Normal file
71
src/plugins/anonymiseFileNames.ts
Normal file
|
@ -0,0 +1,71 @@
|
|||
import definePlugin, { OptionType } from "../utils/types";
|
||||
import { Devs } from "../utils/constants";
|
||||
import { Settings } from "../Vencord";
|
||||
|
||||
enum Methods {
|
||||
Random,
|
||||
Consistent,
|
||||
Timestamp,
|
||||
}
|
||||
|
||||
export default definePlugin({
|
||||
name: "AnonymiseFileNames",
|
||||
authors: [Devs.obscurity],
|
||||
description: "Anonymise uploaded file names",
|
||||
patches: [
|
||||
{
|
||||
find: "instantBatchUpload:function",
|
||||
replacement: {
|
||||
match: /uploadFiles:(.{1,2}),/,
|
||||
replace:
|
||||
"uploadFiles:(...args)=>(args[0].uploads.forEach(f=>f.filename=Vencord.Plugins.plugins.AnonymiseFileNames.anonymise(f.filename)),$1(...args)),",
|
||||
},
|
||||
},
|
||||
],
|
||||
|
||||
options: {
|
||||
method: {
|
||||
description: "Anonymising method",
|
||||
type: OptionType.SELECT,
|
||||
options: [
|
||||
{ label: "Random Characters", value: Methods.Random, default: true },
|
||||
{ label: "Consistent", value: Methods.Consistent },
|
||||
{ label: "Timestamp (4chan-like)", value: Methods.Timestamp },
|
||||
],
|
||||
},
|
||||
randomisedLength: {
|
||||
description: "Random characters length",
|
||||
type: OptionType.NUMBER,
|
||||
default: 7,
|
||||
disabled: () => Settings.plugins.AnonymiseFileNames.method !== Methods.Random,
|
||||
},
|
||||
consistent: {
|
||||
description: "Consistent filename",
|
||||
type: OptionType.STRING,
|
||||
default: "image",
|
||||
disabled: () => Settings.plugins.AnonymiseFileNames.method !== Methods.Consistent,
|
||||
},
|
||||
},
|
||||
|
||||
anonymise(file: string) {
|
||||
let name = "image";
|
||||
const ext = file.match(/\..+$/g) ?? "";
|
||||
switch (Settings.plugins.AnonymiseFileNames.method) {
|
||||
case Methods.Random:
|
||||
const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
|
||||
name = Array.from(
|
||||
{ length: Settings.plugins.AnonymiseFileNames.randomisedLength },
|
||||
() => chars[Math.floor(Math.random() * chars.length)]
|
||||
).join("");
|
||||
break;
|
||||
case Methods.Consistent:
|
||||
name = Settings.plugins.AnonymiseFileNames.consistent;
|
||||
break;
|
||||
case Methods.Timestamp:
|
||||
// UNIX timestamp in nanos, i could not find a better dependency-less way
|
||||
name = `${Math.floor(Date.now() / 1000)}${Math.floor(window.performance.now())}`;
|
||||
break;
|
||||
}
|
||||
return name + ext;
|
||||
},
|
||||
});
|
|
@ -1,28 +0,0 @@
|
|||
import definePlugin from "../utils/types";
|
||||
import { Devs } from "../utils/constants";
|
||||
|
||||
export default definePlugin({
|
||||
name: "RandomiseFileNames",
|
||||
authors: [Devs.obscurity],
|
||||
description: "Randomise uploaded file names",
|
||||
patches: [
|
||||
{
|
||||
find: "instantBatchUpload:function",
|
||||
replacement: {
|
||||
match: /uploadFiles:(.{1,2}),/,
|
||||
replace:
|
||||
"uploadFiles:(...args)=>(args[0].uploads.forEach(f=>f.filename=Vencord.Plugins.plugins.RandomiseFileNames.rand(f.filename)),$1(...args)),",
|
||||
},
|
||||
},
|
||||
],
|
||||
|
||||
rand(file: string) {
|
||||
const chars =
|
||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
|
||||
const rand = Array.from(
|
||||
{ length: 7 },
|
||||
() => chars[Math.floor(Math.random() * chars.length)]
|
||||
).join("");
|
||||
return rand + (file.lastIndexOf(".") > -1 ? file.slice(file.lastIndexOf(".")) : "");
|
||||
},
|
||||
});
|
Loading…
Reference in a new issue