Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion config.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"guild": {
"id": "143824995867557888"
"id": "590200804850401311"
},
"channel": {
"bot": "733359360968884244",
Expand Down
75 changes: 61 additions & 14 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
"discord-api-types": "^0.22.0",
"discord.js": "^13.1.0",
"dotenv": "^10.0.0",
"simple-git": "^3.7.1",
"ts-node": "^10.2.1"
},
"devDependencies": {
Expand Down
64 changes: 60 additions & 4 deletions src/commands/admin.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@
*/
const { MessageActionRow, MessageButton} = require('discord.js');
const { SlashCommandBuilder } = require('@discordjs/builders');
const fs = require('fs');
const simpleGit = require('simple-git');


// Global config
const config = require('../../config.json');
Expand Down Expand Up @@ -57,6 +60,7 @@ module.exports = {
['Send lang role prompt', 'sendLangRolePrompt'],
['Send PSDK access prompt', 'sendPSDKAccessPrompt'],
['Send Event prompt', 'sendEventPrompt'],
['Manage allowed URLs and TLDs', 'manageUrlAndTlds']
])),

// Command permissions
Expand Down Expand Up @@ -164,12 +168,64 @@ module.exports = {
);

break;

case 'manageUrlAndTlds':
replyChannel = interaction.channelId;

replyEmbed = {
color: 0x5aa264,
title: 'command ran',
description: 'yay',
};

//Clone Repo
simpleGit()
.clone('https://github.com/Walven/rocaBot.git')
.then(() => {
simpleGit(__dirname + '/../../rocaBot')
//REMOVE THIS BEFORE PROD
.fetch(['--all'])
.checkout('messageFilter')
.branch()
.then((resp) => {
//Extract args from message
let newUrlToAdd = 'twitch.ittt';

//Write to whitelist
fs.mkdirSync(__dirname + '/../../rocaBot/src/events/message', {recursive: true}, )
fs.appendFileSync(__dirname + '/../../rocaBot/src/events/message/url_whitelist.txt', newUrlToAdd, { flag: 'a+' });
console.log('wrote to filedd');

//Commit & push
simpleGit(__dirname + '/../../rocaBot')
.addConfig('user.name', 'Rocabot')
.addConfig('user.email', 'rocabot@dev.fr')
.status()
.add(__dirname + '/../../rocaBot/src/events/message/url_whitelist.txt')
.status()
.commit('Added new url from runtime')
.push('origin', 'messageFilter')
.then((pushResp) => console.log('push finished', pushResp))
.catch((err) => console.error('failed: ', err));
})


})
.catch((err) => console.error('Could not clone: ', err));

break;

}

const row = new MessageActionRow()
.addComponents(buttons);
interaction.guild.channels.cache.get(replyChannel).send({ embeds: [replyEmbed], components: [row] });
await interaction.reply({ content: 'Message sent!', ephemeral: true });
/*if (buttons.length) {
const row = new MessageActionRow()
.addComponents(buttons);
interaction.guild.channels.cache.get(replyChannel).send({ embeds: [replyEmbed], components: [row] });
} else {
interaction.guild.channels.cache.get(replyChannel).send({ embeds: [replyEmbed] });
}*/

//await interaction.reply({ content: 'Message sent!', ephemeral: true });

},
};
37 changes: 37 additions & 0 deletions src/events/message.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
const { readFileSync } = require('fs');
const os = require('os');

//stolen from https://regexr.com/2rj36
const URL_REGEX = /[-a-zA-Z0-9@:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?/gi;

module.exports = {
name: 'messageCreate',
once: false,
execute: (client, message) => {
//Check for unkickable roles
const userRoles = message.member.roles.cache;
let userIsStaff = false;
userRoles.forEach(role => {
if (role.name === 'staff') {
userIsStaff = true;
}
});
if (userIsStaff) return;

let messageUrls = message.content.match(URL_REGEX);
if (!messageUrls) return;

const allowedUrls = readFileSync(__dirname + '/message/url_whitelist.txt', 'utf-8').split(os.EOL);
const deniedMessageUrls = messageUrls.filter(messageUrl => !allowedUrls.includes(messageUrl));

const allowedTlds = readFileSync(__dirname + '/message/tld_whitelist.txt', 'utf-8').split(os.EOL);
const deniedMessageTlds = messageUrls.filter(messageUrl => !allowedTlds.includes(messageUrl.split('.').pop()));

if (deniedMessageTlds.length) {
message.member.kick(`Posted link with invalid tld ${deniedMessageTlds.join(', ')}`);
}
if (deniedMessageUrls.length) {
message.delete().catch(console.error);
}
},
};
6 changes: 6 additions & 0 deletions src/events/message/tld_whitelist.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
fr
com
net
eu
info
org
1 change: 1 addition & 0 deletions src/events/message/url_whitelist.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
blatwitch.ittt
2 changes: 1 addition & 1 deletion src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ require('dotenv').config({ path: __dirname + '/../.env' });
const fs = require('fs');
const { Client, Collection, Intents } = require('discord.js');

const client = new Client({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MEMBERS] });
const client = new Client({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MEMBERS, Intents.FLAGS.GUILD_MESSAGES] });

// Set local commands
client.commands = new Collection();
Expand Down