Prefix command that encrypts messages with "!encrypt <key> <message>", and allows for decryption later with "!decrypt <key> <encryptedMessage>". This is just for fun between members of your server, and shouldn't be used for serious security.
const lib = require('lib')({token: process.env.STDLIB_SECRET_TOKEN});
const MAX_CHAR_CODE_VALUE = 65535;
function hashString(str){
let hash = 0;
for (let i = 0; i < str.length; i++) {
hash += Math.pow(str.charCodeAt(i) * 31, str.length - i);
hash = hash & hash;
}
return Math.abs(hash);
}
if (context.params.event.content.startsWith(`${process.env.PREFIX}encrypt`)) {
await lib.discord.channels['@0.2.0'].messages.destroy({
message_id: `${context.params.event.id}`,
channel_id: `${context.params.event.channel_id}`,
});
let key = context.params.event.content.split(' ')[1];
if (!key) {
await lib.discord.channels['@0.2.0'].messages.create({
channel_id: `${context.params.event.channel_id}`,
content: `Usage: **${process.env.PREFIX}encrypt **`
});
return;
}
let shift = hashString(key);
let encryptedText = [...context.params.event.content.split(' ').slice(2).join(' ')].map((letter) => {
return (letter.charCodeAt() + shift) % MAX_CHAR_CODE_VALUE;
}).join(' ');
await lib.discord.channels['@0.2.0'].messages.create({
channel_id: `${context.params.event.channel_id}`,
content: [
`Your encrypted message:`,
`\`\`\`${encryptedText}\`\`\``,
].join('\n'),
});
} else if (context.params.event.content.startsWith(`${process.env.PREFIX}decrypt`)) {
await lib.discord.channels['@0.2.0'].messages.destroy({
message_id: `${context.params.event.id}`,
channel_id: `${context.params.event.channel_id}`,
});
let key = context.params.event.content.split(' ')[1];
if (!key) {
await lib.discord.channels['@0.2.0'].messages.create({
channel_id: `${context.params.event.channel_id}`,
content: `Usage: **${process.env.PREFIX}decrypt **`
});
return;
}
let shift = MAX_CHAR_CODE_VALUE - (hashString(context.params.event.content.split(' ')[1]) % MAX_CHAR_CODE_VALUE);
let decryptedText = context.params.event.content.split(' ').slice(2).map((code) => {
return String.fromCharCode((Number(code) + shift) % MAX_CHAR_CODE_VALUE);
}).join('');
await lib.discord.channels['@0.2.0'].messages.create({
channel_id: `${context.params.event.channel_id}`,
content: [
`Your decrypted message:`,
`\`\`\`${decryptedText}\`\`\``,
].join('\n'),
});
}