Initial commit
This commit is contained in:
265
index.js
Normal file
265
index.js
Normal file
@ -0,0 +1,265 @@
|
||||
// Required Things
|
||||
const Discord = require ( "discord.js" );
|
||||
const config = require ( "./config.json" );
|
||||
const AntiSpam = require ( "discord-anti-spam" );
|
||||
const mySQL = require( "mysql" );
|
||||
|
||||
|
||||
// new Discord Client
|
||||
const client = new Discord.Client ( {partials: [ 'MESSAGE', 'CHANNEL' ], disableMentions: "none"} );
|
||||
|
||||
const antiSpam = new AntiSpam ( {
|
||||
warnThreshold: 4, // Amount of messages sent in a row that will cause a warning.
|
||||
muteThreshold: 6, // Amount of messages sent in a row that will cause a mute
|
||||
kickThreshold: 10, // Amount of messages sent in a row that will cause a kick.
|
||||
banThreshold: 15, // Amount of messages sent in a row that will cause a ban.
|
||||
maxInterval: 2300, // Amount of time (in milliseconds) in which messages are considered spam.
|
||||
warnMessage: '{@user}, du hast eine Verwarnung für Spaming erhalten.', // Message that will be sent in chat upon warning a user.
|
||||
kickMessage: '**{user_tag}** wurde wegen Spaming von unserem Server gekickt.', // Message that will be sent in chat upon kicking a user.
|
||||
muteMessage: '**{user_tag}** wurde wegen Spaming temporär stumm geschaltet.',// Message that will be sent in chat upon muting a user.
|
||||
banMessage: '**{user_tag}** wurde wegen Spaming von unserer Community ausgeschlossen.', // Message that will be sent in chat upon banning a user.
|
||||
maxDuplicatesWarning: 5, // Amount of duplicate messages that trigger a warning.
|
||||
maxDuplicatesKick: 10, // Amount of duplicate messages that trigger a warning.
|
||||
maxDuplicatesBan: 15, // Amount of duplicate messages that trigger a warning.
|
||||
exemptPermissions: [ 'ADMINISTRATOR' ], // Bypass users with any of these permissions.
|
||||
ignoreBots: true, // Ignore bot messages.
|
||||
verbose: true, // Extended Logs from module.
|
||||
ignoredUsers: [], // Array of User IDs that get ignored.
|
||||
muteRoleName: "Muted", // Name of the role that will be given to muted users!
|
||||
removeMessages: true // If the bot should remove all the spam messages when taking action on a user!
|
||||
// And many more options... See the documentation.
|
||||
} );
|
||||
|
||||
const con = mySQL.createConnection ( {
|
||||
host: config.mysqlHost,
|
||||
user: config.mysqlUsername,
|
||||
password: config.mysqlPassword
|
||||
} );
|
||||
|
||||
let badWords = {"0":{}};
|
||||
|
||||
con.connect(function(err) {
|
||||
if (err) {
|
||||
console.log ( "[ERROR] Cannot connect to database! Critical error" );
|
||||
process.exit();
|
||||
return;
|
||||
}
|
||||
console.log("[INFO] Connected to mySQL Server!");
|
||||
});
|
||||
|
||||
client.on ( "ready", () =>
|
||||
{
|
||||
console.log ( "[INFO] Bot is now ready" );
|
||||
client.user.setPresence ( {
|
||||
activity:
|
||||
{
|
||||
name: "Reading your lovely messages",
|
||||
type: 'PLAYING'
|
||||
}
|
||||
} ).then ( r =>
|
||||
{
|
||||
console.log ( "[INFO] Presence set" );
|
||||
} );
|
||||
} );
|
||||
|
||||
|
||||
client.on ( "message", async ( message ) =>
|
||||
{
|
||||
if ( message.author.bot ) return;
|
||||
|
||||
// Beleidigungsfilter?
|
||||
if ( !message.content.startsWith ( config.prefix ) )
|
||||
{
|
||||
// Check if the user has Admin permissions, so skip him
|
||||
if ( message.member.hasPermission ( "ADMINISTRATOR" ) ) return;
|
||||
|
||||
// Filter goes here
|
||||
|
||||
if ( checkMessage ( message.content ) )
|
||||
{
|
||||
await message.delete ();
|
||||
let notifyChannelID = getNotifyChannel ( message.guild.id );
|
||||
if ( notifyChannelID.length === 0 || notifyChannelID === 0 )
|
||||
{
|
||||
// NotifyChannel not send, so we gonna send the msg here
|
||||
const notify = new Discord.MessageEmbed ()
|
||||
.setColor ( "#b30202" )
|
||||
.setTitle ( "Nachricht gelöscht" )
|
||||
.setDescription ( `Es wurde eine Nachricht von ${ message.author.toString () } entfernt, da ein dort enthaltenes Wort auf der Blacklist steht.` )
|
||||
.addField ( 'Warnung', `Mir wurde noch nicht gesagt, wo ich Nachricht wie diese hinschreiben soll.\nDu kannst dies als Administrator mit ".w setNotify" in einem beliebigen Channel setzen.` );
|
||||
message.channel.send ( notify ).then ( () =>
|
||||
{
|
||||
} ).catch ( () =>
|
||||
{
|
||||
console.log ( "[ERROR] Cannot send a message on guild " + message.guild.id + " in channel " + message.channel.id );
|
||||
} );
|
||||
} else
|
||||
{
|
||||
const notifyChannel = message.member.guild.channels.cache.find ( ch => ch.id === notifyChannelID );
|
||||
const notify = new Discord.MessageEmbed ()
|
||||
.setColor ( "#b30202" )
|
||||
.setTitle ( "Nachricht gelöscht" )
|
||||
.setDescription ( `Es wurde eine Nachricht von ${ message.author.toString () } entfernt, da ein dort enthaltenes Wort auf der Blacklist steht.` );
|
||||
notifyChannel.send ( notify ).then ( () =>
|
||||
{
|
||||
} ).catch ( () =>
|
||||
{
|
||||
console.log ( "[ERROR] Cannot send a message on guild " + message.guild.id + " in channel " + message.channel.id );
|
||||
} );
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// Commands here
|
||||
|
||||
if ( !message.member.hasPermission ( "ADMINISTRATOR" ) )
|
||||
{
|
||||
await message.reply ( "mir wurde beigebracht, dass ich mit fremden Leuten nicht reden darf :c" );
|
||||
return;
|
||||
}
|
||||
|
||||
const commandBody = message.content.slice ( config.prefix.length );
|
||||
const args = commandBody.split ( ' ' );
|
||||
const command = args.shift ().toLowerCase ();
|
||||
|
||||
|
||||
if ( command === "ping" )
|
||||
{
|
||||
const timeTaken = Date.now () - message.createdTimestamp;
|
||||
message.reply ( `Der Ping von mir liegt bei ${ timeTaken }ms.` ).then ( () => {} );
|
||||
}
|
||||
|
||||
if ( command === "list" )
|
||||
{
|
||||
// Listet alle Wörter des Servers mit indexen auf
|
||||
let words = listWords( message.guild.id );
|
||||
let output = "";
|
||||
|
||||
for ( let wordsKey in words )
|
||||
{
|
||||
output += `${words[wordsKey]["id"]} | ${words[wordsKey]["word"]}\n`;
|
||||
}
|
||||
|
||||
await message.channel.send ( `Folgende Wörter & Sätze stehen auf der Schwarzen Liste:\nIndex\tWort\n` + output );
|
||||
}
|
||||
|
||||
if ( command === "remove" )
|
||||
{
|
||||
if ( args.length >= 2 )
|
||||
{
|
||||
const index = Number.parseInt ( args[1] );
|
||||
if ( !isNaN ( index ) )
|
||||
{
|
||||
|
||||
} else
|
||||
{
|
||||
await message.reply ( `bitte gebe einen Index mit an. ${ config.prefix }delete <index>` )
|
||||
}
|
||||
} else
|
||||
{
|
||||
await message.reply ( `bitte gebe einen Index mit an. ${ config.prefix }delete <index>` )
|
||||
}
|
||||
}
|
||||
|
||||
if ( command === "add" )
|
||||
{
|
||||
if ( args.length >= 2 )
|
||||
{
|
||||
addWord ( message.guild.id, args[1] );
|
||||
|
||||
} else
|
||||
{
|
||||
await message.reply ( `bitte gebe ein Wort/Satz mit an. ${ config.prefix }add <Wort/Satz>` );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
} );
|
||||
|
||||
client.on ( "guildCreate", ( guild ) =>
|
||||
{
|
||||
console.log ( `[INFO] Joined a new guild named "${ guild.name }" with ID ${ guild.id }` );
|
||||
createServerEntry ( guild.id, guild.name );
|
||||
|
||||
} );
|
||||
|
||||
function createServerEntry( a_ServerID, a_ServerName )
|
||||
{
|
||||
console.log ( `[INFO] Creating server entry...` );
|
||||
let query = "INSERT INTO guilds ( guild_id, server_name ) VALUES ( ?, ? )";
|
||||
con.query( query, [ a_ServerID, a_ServerName ], function( error, results, fields )
|
||||
{
|
||||
if( error )
|
||||
{
|
||||
console.log ( `[ERROR] An error occurred while creating a new guild in database` );
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
} );
|
||||
|
||||
}
|
||||
|
||||
|
||||
function checkMessage( a_Message )
|
||||
{
|
||||
/*let query = "SELECT word FROM words WHERE word LIKE ?";
|
||||
con.query( query, ['%' + a_Message + '%'], function( error, results, fields ) {
|
||||
if( error )
|
||||
{
|
||||
console.log ( `[ERROR] An error occurred while fetching th` )
|
||||
}
|
||||
} );*/
|
||||
return false;
|
||||
}
|
||||
|
||||
function getNotifyChannel( a_ServerID )
|
||||
{
|
||||
let query = "SELECT notify_channel FROM guilds WHERE guilds.guild_id = ?";
|
||||
con.query( query, [ a_ServerID ], function( error, results, fields ) {
|
||||
if( error )
|
||||
{
|
||||
console.log ( `[ERROR] An error occurred while fetching the notify channel` )
|
||||
}
|
||||
return results.notify_channel;
|
||||
} );
|
||||
return 0;
|
||||
}
|
||||
|
||||
function deleteWord( a_Index )
|
||||
{
|
||||
// Delete the word out of the database
|
||||
}
|
||||
|
||||
function addWord( a_ServerID, a_Word )
|
||||
{
|
||||
// Add the word to the database
|
||||
let query = "INSERT INTO words ( word, guildID ) VALUES ( ?, ? )";
|
||||
con.query( query, [ a_Word, a_ServerID ], function( error, results, fields ) {
|
||||
if( error )
|
||||
{
|
||||
console.log ( `[ERROR] An error occurred while inserting a new filter entry` );
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
} );
|
||||
return false;
|
||||
}
|
||||
|
||||
function listWords( a_ServerID )
|
||||
{
|
||||
|
||||
return {0:{id:1,word:"huan"},1:{id:2,word:"sinnex"}};
|
||||
}
|
||||
|
||||
|
||||
// Discord Login
|
||||
|
||||
client.login ( config.TOKEN ).then ( r =>
|
||||
{
|
||||
console.log ( "[INFO] Logged in as Woam" )
|
||||
} );
|
||||
|
Reference in New Issue
Block a user