aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore5
-rw-r--r--.idea/dbnavigator.xml417
-rw-r--r--CONTRIBUTING.md2
-rw-r--r--bot_discord.js22
-rw-r--r--commands/about.js10
-rw-r--r--commands/addquote.js93
-rw-r--r--commands/ban.js2
-rw-r--r--commands/kick.js2
-rw-r--r--commands/leaveguild.js2
-rw-r--r--commands/quote.js73
-rw-r--r--commands/setlogchannel.js35
-rw-r--r--commands/setup.js (renamed from deprecated/setup.js)17
-rw-r--r--commands/uptime.js11
-rw-r--r--models/guild-settings.js24
-rw-r--r--models/quote.js29
-rw-r--r--package.json11
-rw-r--r--plugins/mongo.js10
-rw-r--r--schema/logging-schema.js13
-rw-r--r--schema/quote-schema.js17
-rw-r--r--storage/activities.js28
-rw-r--r--sync-database.js9
-rw-r--r--utils/sequelize.js9
22 files changed, 606 insertions, 235 deletions
diff --git a/.gitignore b/.gitignore
index fb6a084..bca3965 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,11 +11,10 @@ ffprobe.exe
.directory
-userData.sqlite
.vs/slnx.sqlite
.vs/slnx.sqlite-journal
json.sqlite
yarn.lock
-
-package-lock.json \ No newline at end of file
+package-lock.json
+database.sqlite
diff --git a/.idea/dbnavigator.xml b/.idea/dbnavigator.xml
new file mode 100644
index 0000000..b1bad03
--- /dev/null
+++ b/.idea/dbnavigator.xml
@@ -0,0 +1,417 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="DBNavigator.Project.DataEditorManager">
+ <record-view-column-sorting-type value="BY_INDEX" />
+ <value-preview-text-wrapping value="true" />
+ <value-preview-pinned value="false" />
+ </component>
+ <component name="DBNavigator.Project.DatabaseBrowserManager">
+ <autoscroll-to-editor value="false" />
+ <autoscroll-from-editor value="true" />
+ <show-object-properties value="true" />
+ <loaded-nodes />
+ </component>
+ <component name="DBNavigator.Project.DatabaseEditorStateManager">
+ <last-used-providers />
+ </component>
+ <component name="DBNavigator.Project.DatabaseFileManager">
+ <open-files />
+ </component>
+ <component name="DBNavigator.Project.Settings">
+ <connections />
+ <browser-settings>
+ <general>
+ <display-mode value="TABBED" />
+ <navigation-history-size value="100" />
+ <show-object-details value="false" />
+ </general>
+ <filters>
+ <object-type-filter>
+ <object-type name="SCHEMA" enabled="true" />
+ <object-type name="USER" enabled="true" />
+ <object-type name="ROLE" enabled="true" />
+ <object-type name="PRIVILEGE" enabled="true" />
+ <object-type name="CHARSET" enabled="true" />
+ <object-type name="TABLE" enabled="true" />
+ <object-type name="VIEW" enabled="true" />
+ <object-type name="MATERIALIZED_VIEW" enabled="true" />
+ <object-type name="NESTED_TABLE" enabled="true" />
+ <object-type name="COLUMN" enabled="true" />
+ <object-type name="INDEX" enabled="true" />
+ <object-type name="CONSTRAINT" enabled="true" />
+ <object-type name="DATASET_TRIGGER" enabled="true" />
+ <object-type name="DATABASE_TRIGGER" enabled="true" />
+ <object-type name="SYNONYM" enabled="true" />
+ <object-type name="SEQUENCE" enabled="true" />
+ <object-type name="PROCEDURE" enabled="true" />
+ <object-type name="FUNCTION" enabled="true" />
+ <object-type name="PACKAGE" enabled="true" />
+ <object-type name="TYPE" enabled="true" />
+ <object-type name="TYPE_ATTRIBUTE" enabled="true" />
+ <object-type name="ARGUMENT" enabled="true" />
+ <object-type name="DIMENSION" enabled="true" />
+ <object-type name="CLUSTER" enabled="true" />
+ <object-type name="DBLINK" enabled="true" />
+ </object-type-filter>
+ </filters>
+ <sorting>
+ <object-type name="COLUMN" sorting-type="NAME" />
+ <object-type name="FUNCTION" sorting-type="NAME" />
+ <object-type name="PROCEDURE" sorting-type="NAME" />
+ <object-type name="ARGUMENT" sorting-type="POSITION" />
+ <object-type name="TYPE ATTRIBUTE" sorting-type="POSITION" />
+ </sorting>
+ <default-editors>
+ <object-type name="VIEW" editor-type="SELECTION" />
+ <object-type name="PACKAGE" editor-type="SELECTION" />
+ <object-type name="TYPE" editor-type="SELECTION" />
+ </default-editors>
+ </browser-settings>
+ <navigation-settings>
+ <lookup-filters>
+ <lookup-objects>
+ <object-type name="SCHEMA" enabled="true" />
+ <object-type name="USER" enabled="false" />
+ <object-type name="ROLE" enabled="false" />
+ <object-type name="PRIVILEGE" enabled="false" />
+ <object-type name="CHARSET" enabled="false" />
+ <object-type name="TABLE" enabled="true" />
+ <object-type name="VIEW" enabled="true" />
+ <object-type name="MATERIALIZED VIEW" enabled="true" />
+ <object-type name="INDEX" enabled="true" />
+ <object-type name="CONSTRAINT" enabled="true" />
+ <object-type name="DATASET TRIGGER" enabled="true" />
+ <object-type name="DATABASE TRIGGER" enabled="true" />
+ <object-type name="SYNONYM" enabled="false" />
+ <object-type name="SEQUENCE" enabled="true" />
+ <object-type name="PROCEDURE" enabled="true" />
+ <object-type name="FUNCTION" enabled="true" />
+ <object-type name="PACKAGE" enabled="true" />
+ <object-type name="TYPE" enabled="true" />
+ <object-type name="DIMENSION" enabled="false" />
+ <object-type name="CLUSTER" enabled="false" />
+ <object-type name="DBLINK" enabled="true" />
+ </lookup-objects>
+ <force-database-load value="false" />
+ <prompt-connection-selection value="true" />
+ <prompt-schema-selection value="true" />
+ </lookup-filters>
+ </navigation-settings>
+ <dataset-grid-settings>
+ <general>
+ <enable-zooming value="true" />
+ <enable-column-tooltip value="true" />
+ </general>
+ <sorting>
+ <nulls-first value="true" />
+ <max-sorting-columns value="4" />
+ </sorting>
+ <audit-columns>
+ <column-names value="" />
+ <visible value="true" />
+ <editable value="false" />
+ </audit-columns>
+ </dataset-grid-settings>
+ <dataset-editor-settings>
+ <text-editor-popup>
+ <active value="false" />
+ <active-if-empty value="false" />
+ <data-length-threshold value="100" />
+ <popup-delay value="1000" />
+ </text-editor-popup>
+ <values-actions-popup>
+ <show-popup-button value="true" />
+ <element-count-threshold value="1000" />
+ <data-length-threshold value="250" />
+ </values-actions-popup>
+ <general>
+ <fetch-block-size value="100" />
+ <fetch-timeout value="30" />
+ <trim-whitespaces value="true" />
+ <convert-empty-strings-to-null value="true" />
+ <select-content-on-cell-edit value="true" />
+ <large-value-preview-active value="true" />
+ </general>
+ <filters>
+ <prompt-filter-dialog value="true" />
+ <default-filter-type value="BASIC" />
+ </filters>
+ <qualified-text-editor text-length-threshold="300">
+ <content-types>
+ <content-type name="Text" enabled="true" />
+ <content-type name="XML" enabled="true" />
+ <content-type name="DTD" enabled="true" />
+ <content-type name="HTML" enabled="true" />
+ <content-type name="XHTML" enabled="true" />
+ <content-type name="CSS" enabled="true" />
+ <content-type name="SQL" enabled="true" />
+ <content-type name="PL/SQL" enabled="true" />
+ <content-type name="JavaScript" enabled="true" />
+ <content-type name="JSON" enabled="true" />
+ <content-type name="JSON5" enabled="true" />
+ <content-type name="YAML" enabled="true" />
+ </content-types>
+ </qualified-text-editor>
+ <record-navigation>
+ <navigation-target value="VIEWER" />
+ </record-navigation>
+ </dataset-editor-settings>
+ <code-editor-settings>
+ <general>
+ <show-object-navigation-gutter value="false" />
+ <show-spec-declaration-navigation-gutter value="true" />
+ <enable-spellchecking value="true" />
+ <enable-reference-spellchecking value="false" />
+ </general>
+ <confirmations>
+ <save-changes value="false" />
+ <revert-changes value="true" />
+ </confirmations>
+ </code-editor-settings>
+ <code-completion-settings>
+ <filters>
+ <basic-filter>
+ <filter-element type="RESERVED_WORD" id="keyword" selected="true" />
+ <filter-element type="RESERVED_WORD" id="function" selected="true" />
+ <filter-element type="RESERVED_WORD" id="parameter" selected="true" />
+ <filter-element type="RESERVED_WORD" id="datatype" selected="true" />
+ <filter-element type="RESERVED_WORD" id="exception" selected="true" />
+ <filter-element type="OBJECT" id="schema" selected="true" />
+ <filter-element type="OBJECT" id="role" selected="true" />
+ <filter-element type="OBJECT" id="user" selected="true" />
+ <filter-element type="OBJECT" id="privilege" selected="true" />
+ <user-schema>
+ <filter-element type="OBJECT" id="table" selected="true" />
+ <filter-element type="OBJECT" id="view" selected="true" />
+ <filter-element type="OBJECT" id="materialized view" selected="true" />
+ <filter-element type="OBJECT" id="index" selected="true" />
+ <filter-element type="OBJECT" id="constraint" selected="true" />
+ <filter-element type="OBJECT" id="trigger" selected="true" />
+ <filter-element type="OBJECT" id="synonym" selected="false" />
+ <filter-element type="OBJECT" id="sequence" selected="true" />
+ <filter-element type="OBJECT" id="procedure" selected="true" />
+ <filter-element type="OBJECT" id="function" selected="true" />
+ <filter-element type="OBJECT" id="package" selected="true" />
+ <filter-element type="OBJECT" id="type" selected="true" />
+ <filter-element type="OBJECT" id="dimension" selected="true" />
+ <filter-element type="OBJECT" id="cluster" selected="true" />
+ <filter-element type="OBJECT" id="dblink" selected="true" />
+ </user-schema>
+ <public-schema>
+ <filter-element type="OBJECT" id="table" selected="false" />
+ <filter-element type="OBJECT" id="view" selected="false" />
+ <filter-element type="OBJECT" id="materialized view" selected="false" />
+ <filter-element type="OBJECT" id="index" selected="false" />
+ <filter-element type="OBJECT" id="constraint" selected="false" />
+ <filter-element type="OBJECT" id="trigger" selected="false" />
+ <filter-element type="OBJECT" id="synonym" selected="false" />
+ <filter-element type="OBJECT" id="sequence" selected="false" />
+ <filter-element type="OBJECT" id="procedure" selected="false" />
+ <filter-element type="OBJECT" id="function" selected="false" />
+ <filter-element type="OBJECT" id="package" selected="false" />
+ <filter-element type="OBJECT" id="type" selected="false" />
+ <filter-element type="OBJECT" id="dimension" selected="false" />
+ <filter-element type="OBJECT" id="cluster" selected="false" />
+ <filter-element type="OBJECT" id="dblink" selected="false" />
+ </public-schema>
+ <any-schema>
+ <filter-element type="OBJECT" id="table" selected="true" />
+ <filter-element type="OBJECT" id="view" selected="true" />
+ <filter-element type="OBJECT" id="materialized view" selected="true" />
+ <filter-element type="OBJECT" id="index" selected="true" />
+ <filter-element type="OBJECT" id="constraint" selected="true" />
+ <filter-element type="OBJECT" id="trigger" selected="true" />
+ <filter-element type="OBJECT" id="synonym" selected="true" />
+ <filter-element type="OBJECT" id="sequence" selected="true" />
+ <filter-element type="OBJECT" id="procedure" selected="true" />
+ <filter-element type="OBJECT" id="function" selected="true" />
+ <filter-element type="OBJECT" id="package" selected="true" />
+ <filter-element type="OBJECT" id="type" selected="true" />
+ <filter-element type="OBJECT" id="dimension" selected="true" />
+ <filter-element type="OBJECT" id="cluster" selected="true" />
+ <filter-element type="OBJECT" id="dblink" selected="true" />
+ </any-schema>
+ </basic-filter>
+ <extended-filter>
+ <filter-element type="RESERVED_WORD" id="keyword" selected="true" />
+ <filter-element type="RESERVED_WORD" id="function" selected="true" />
+ <filter-element type="RESERVED_WORD" id="parameter" selected="true" />
+ <filter-element type="RESERVED_WORD" id="datatype" selected="true" />
+ <filter-element type="RESERVED_WORD" id="exception" selected="true" />
+ <filter-element type="OBJECT" id="schema" selected="true" />
+ <filter-element type="OBJECT" id="user" selected="true" />
+ <filter-element type="OBJECT" id="role" selected="true" />
+ <filter-element type="OBJECT" id="privilege" selected="true" />
+ <user-schema>
+ <filter-element type="OBJECT" id="table" selected="true" />
+ <filter-element type="OBJECT" id="view" selected="true" />
+ <filter-element type="OBJECT" id="materialized view" selected="true" />
+ <filter-element type="OBJECT" id="index" selected="true" />
+ <filter-element type="OBJECT" id="constraint" selected="true" />
+ <filter-element type="OBJECT" id="trigger" selected="true" />
+ <filter-element type="OBJECT" id="synonym" selected="true" />
+ <filter-element type="OBJECT" id="sequence" selected="true" />
+ <filter-element type="OBJECT" id="procedure" selected="true" />
+ <filter-element type="OBJECT" id="function" selected="true" />
+ <filter-element type="OBJECT" id="package" selected="true" />
+ <filter-element type="OBJECT" id="type" selected="true" />
+ <filter-element type="OBJECT" id="dimension" selected="true" />
+ <filter-element type="OBJECT" id="cluster" selected="true" />
+ <filter-element type="OBJECT" id="dblink" selected="true" />
+ </user-schema>
+ <public-schema>
+ <filter-element type="OBJECT" id="table" selected="true" />
+ <filter-element type="OBJECT" id="view" selected="true" />
+ <filter-element type="OBJECT" id="materialized view" selected="true" />
+ <filter-element type="OBJECT" id="index" selected="true" />
+ <filter-element type="OBJECT" id="constraint" selected="true" />
+ <filter-element type="OBJECT" id="trigger" selected="true" />
+ <filter-element type="OBJECT" id="synonym" selected="true" />
+ <filter-element type="OBJECT" id="sequence" selected="true" />
+ <filter-element type="OBJECT" id="procedure" selected="true" />
+ <filter-element type="OBJECT" id="function" selected="true" />
+ <filter-element type="OBJECT" id="package" selected="true" />
+ <filter-element type="OBJECT" id="type" selected="true" />
+ <filter-element type="OBJECT" id="dimension" selected="true" />
+ <filter-element type="OBJECT" id="cluster" selected="true" />
+ <filter-element type="OBJECT" id="dblink" selected="true" />
+ </public-schema>
+ <any-schema>
+ <filter-element type="OBJECT" id="table" selected="true" />
+ <filter-element type="OBJECT" id="view" selected="true" />
+ <filter-element type="OBJECT" id="materialized view" selected="true" />
+ <filter-element type="OBJECT" id="index" selected="true" />
+ <filter-element type="OBJECT" id="constraint" selected="true" />
+ <filter-element type="OBJECT" id="trigger" selected="true" />
+ <filter-element type="OBJECT" id="synonym" selected="true" />
+ <filter-element type="OBJECT" id="sequence" selected="true" />
+ <filter-element type="OBJECT" id="procedure" selected="true" />
+ <filter-element type="OBJECT" id="function" selected="true" />
+ <filter-element type="OBJECT" id="package" selected="true" />
+ <filter-element type="OBJECT" id="type" selected="true" />
+ <filter-element type="OBJECT" id="dimension" selected="true" />
+ <filter-element type="OBJECT" id="cluster" selected="true" />
+ <filter-element type="OBJECT" id="dblink" selected="true" />
+ </any-schema>
+ </extended-filter>
+ </filters>
+ <sorting enabled="true">
+ <sorting-element type="RESERVED_WORD" id="keyword" />
+ <sorting-element type="RESERVED_WORD" id="datatype" />
+ <sorting-element type="OBJECT" id="column" />
+ <sorting-element type="OBJECT" id="table" />
+ <sorting-element type="OBJECT" id="view" />
+ <sorting-element type="OBJECT" id="materialized view" />
+ <sorting-element type="OBJECT" id="index" />
+ <sorting-element type="OBJECT" id="constraint" />
+ <sorting-element type="OBJECT" id="trigger" />
+ <sorting-element type="OBJECT" id="synonym" />
+ <sorting-element type="OBJECT" id="sequence" />
+ <sorting-element type="OBJECT" id="procedure" />
+ <sorting-element type="OBJECT" id="function" />
+ <sorting-element type="OBJECT" id="package" />
+ <sorting-element type="OBJECT" id="type" />
+ <sorting-element type="OBJECT" id="dimension" />
+ <sorting-element type="OBJECT" id="cluster" />
+ <sorting-element type="OBJECT" id="dblink" />
+ <sorting-element type="OBJECT" id="schema" />
+ <sorting-element type="OBJECT" id="role" />
+ <sorting-element type="OBJECT" id="user" />
+ <sorting-element type="RESERVED_WORD" id="function" />
+ <sorting-element type="RESERVED_WORD" id="parameter" />
+ </sorting>
+ <format>
+ <enforce-code-style-case value="true" />
+ </format>
+ </code-completion-settings>
+ <execution-engine-settings>
+ <statement-execution>
+ <fetch-block-size value="100" />
+ <execution-timeout value="20" />
+ <debug-execution-timeout value="600" />
+ <focus-result value="false" />
+ <prompt-execution value="false" />
+ </statement-execution>
+ <script-execution>
+ <command-line-interfaces />
+ <execution-timeout value="300" />
+ </script-execution>
+ <method-execution>
+ <execution-timeout value="30" />
+ <debug-execution-timeout value="600" />
+ <parameter-history-size value="10" />
+ </method-execution>
+ </execution-engine-settings>
+ <operation-settings>
+ <transactions>
+ <uncommitted-changes>
+ <on-project-close value="ASK" />
+ <on-disconnect value="ASK" />
+ <on-autocommit-toggle value="ASK" />
+ </uncommitted-changes>
+ <multiple-uncommitted-changes>
+ <on-commit value="ASK" />
+ <on-rollback value="ASK" />
+ </multiple-uncommitted-changes>
+ </transactions>
+ <session-browser>
+ <disconnect-session value="ASK" />
+ <kill-session value="ASK" />
+ <reload-on-filter-change value="false" />
+ </session-browser>
+ <compiler>
+ <compile-type value="KEEP" />
+ <compile-dependencies value="ASK" />
+ <always-show-controls value="false" />
+ </compiler>
+ <debugger>
+ <debugger-type value="JDBC" />
+ <use-generic-runners value="true" />
+ </debugger>
+ </operation-settings>
+ <ddl-file-settings>
+ <extensions>
+ <mapping file-type-id="VIEW" extensions="vw" />
+ <mapping file-type-id="TRIGGER" extensions="trg" />
+ <mapping file-type-id="PROCEDURE" extensions="prc" />
+ <mapping file-type-id="FUNCTION" extensions="fnc" />
+ <mapping file-type-id="PACKAGE" extensions="pkg" />
+ <mapping file-type-id="PACKAGE_SPEC" extensions="pks" />
+ <mapping file-type-id="PACKAGE_BODY" extensions="pkb" />
+ <mapping file-type-id="TYPE" extensions="tpe" />
+ <mapping file-type-id="TYPE_SPEC" extensions="tps" />
+ <mapping file-type-id="TYPE_BODY" extensions="tpb" />
+ </extensions>
+ <general>
+ <lookup-ddl-files value="true" />
+ <create-ddl-files value="false" />
+ <synchronize-ddl-files value="true" />
+ <use-qualified-names value="false" />
+ <make-scripts-rerunnable value="true" />
+ </general>
+ </ddl-file-settings>
+ <general-settings>
+ <regional-settings>
+ <date-format value="MEDIUM" />
+ <number-format value="UNGROUPED" />
+ <locale value="SYSTEM_DEFAULT" />
+ <use-custom-formats value="false" />
+ </regional-settings>
+ <environment>
+ <environment-types>
+ <environment-type id="development" name="Development" description="Development environment" color="-2430209/-12296320" readonly-code="false" readonly-data="false" />
+ <environment-type id="integration" name="Integration" description="Integration environment" color="-2621494/-12163514" readonly-code="true" readonly-data="false" />
+ <environment-type id="production" name="Production" description="Productive environment" color="-11574/-10271420" readonly-code="true" readonly-data="true" />
+ <environment-type id="other" name="Other" description="" color="-1576/-10724543" readonly-code="false" readonly-data="false" />
+ </environment-types>
+ <visibility-settings>
+ <connection-tabs value="true" />
+ <dialog-headers value="true" />
+ <object-editor-tabs value="true" />
+ <script-editor-tabs value="false" />
+ <execution-result-tabs value="true" />
+ </visibility-settings>
+ </environment>
+ </general-settings>
+ </component>
+</project> \ No newline at end of file
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index d75ca6a..2799fb4 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -5,7 +5,7 @@ Include the GPL-3.0 license too and follow the following format when you create
/****************************************
*
* [Command/Plugin]: (Command or Plugin) for AleeBot
- * Copyright (C) 2017-2021 Alee Productions & (your name here)
+ * Copyright (C) 2017-2023 Andrew Lee & (your name here)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/bot_discord.js b/bot_discord.js
index 60a133c..00afe45 100644
--- a/bot_discord.js
+++ b/bot_discord.js
@@ -1,7 +1,7 @@
/** **************************************
*
* AleeBot: Made for discord servers
- * Copyright (C) 2017-2021 Alee Productions
+ * Copyright (C) 2017-2022 Andrew Lee Projects
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -30,11 +30,9 @@ const express = require('express');
const fs = require('fs');
const readline = require('readline');
const colors = require('colors');
-const { AutoPoster } = require('topgg-autoposter');
//const i18next = require('i18next');
const web = express();
const settings = require('./storage/settings.json');
-const mongo = require('./plugins/mongo');
const api = require('./tokens.json');
const { activity } = require('./storage/activities');
const active = new Map();
@@ -67,7 +65,7 @@ const rl = readline.createInterface({
prompt: '> '.gray,
});
-console.log(`AleeBot ${settings.abVersion}: Copyright (C) 2017-2022 Andrew Lee Projects`.gray);
+console.log(`AleeBot ${settings.abVersion}: Copyright (C) 2017-2023 Andrew Lee Projects`.gray);
console.log('This program comes with ABSOLUTELY NO WARRANTY; for details type `show w\'.'.gray);
console.log('This is free software, and you are welcome to redistribute it'.gray);
console.log('under certain conditions; type `show c\' for details.\n'.gray);
@@ -224,14 +222,6 @@ client.on('ready', async () => {
botPresence();
- await mongo().then(mongoose => {
- try {
- log('[>] Connected to MongoDB!'.green);
- } finally {
- mongoose.connection.close();
- }
- })
-
web.get('/', (req, res) => {
res.send("Hello World! This is going to become the AleeBot dashboard...");
});
@@ -263,10 +253,9 @@ client.on('guildMemberAdd', (member) => {
const logEmbed = new Discord.MessageEmbed()
.setAuthor('AleeBot Logging', client.user.avatarURL())
.setDescription(`A user has joined this server!`)
- .addField('Username: ', `${member.displayName}`, true)
+ .addField('Username: ', `${member.user.tag}`, true)
.addField('User ID: ', `${member.id}`, true)
.addField('Created At: ', `${member.user.createdAt.toUTCString()}`)
- //.addField('Invite Code: ', `${member.invite.code}`)
.setColor('#4bff31')
.setTimestamp();
@@ -278,8 +267,7 @@ client.on('guildMemberAdd', (member) => {
if (member.guild.id !== serverWhitelist) return;
const role = member.guild.roles.cache.get(roleWhitelist);
member.roles.add(role);
- log(`[i] ${member.user.username} joined Binaryworks Community.`.green);
- log(`[i] I gave ${member.user.username} the "Member" role.`.green);
+ log(`[i] ${member.user.username} joined Andrew Lee Projects, automatically giving them role.`.green);
}
});
@@ -288,7 +276,7 @@ client.on('guildMemberRemove', (member) => {
const logEmbed = new Discord.MessageEmbed()
.setAuthor('AleeBot Logging', client.user.avatarURL())
.setDescription(`A user has left this server!`)
- .addField('Username: ', `${member.displayName}`, true)
+ .addField('Username: ', `${member.user.tag}`, true)
.addField('User ID: ', `${member.id}`, true)
.setColor('#ec2727')
.setTimestamp();
diff --git a/commands/about.js b/commands/about.js
index 14daebb..be1c17d 100644
--- a/commands/about.js
+++ b/commands/about.js
@@ -20,12 +20,16 @@
module.exports.run = async (client, message) => {
const { MessageEmbed, MessageButton, MessageActionRow } = require('discord.js');
+ let Contributors = ('- Andrew Lee (Founder of this project)\n');
+ Contributors += ('- OfficialRain (Raina) (Uptime Command)\n');
+ Contributors += ('- jtsshieh (Command Handler)');
+
const aboutEmbed = new MessageEmbed()
.setAuthor(`AleeBot ${require('../storage/settings.json').abVersion}`, client.user.avatarURL())
.addField('About AleeBot', 'AleeBot is an all-in-one bot that\'s made from the Discord.JS API!')
.addField('License', 'GNU General Public License v3.0')
- .addField('Contributors', 'Andrew Lee (Founder of this project)\nOfficialRain (Raina) (Uptime Command)\njtsshieh (Command Handler)')
- .setFooter('© Copyright 2017-2022 Andrew Lee Projects')
+ .addField('Contributors', Contributors)
+ .setFooter('© Copyright 2017-2023 Andrew Lee Projects')
.setColor('#1fd619');
let inviteButton = new MessageActionRow()
@@ -36,7 +40,7 @@ module.exports.run = async (client, message) => {
.setURL('https://top.gg/bot/282547024547545109'),
new MessageButton()
.setStyle('LINK')
- .setLabel('Join Binaryworks Community')
+ .setLabel('Join Andrew Lee Projects')
.setURL('https://discord.gg/EFhRDqG')
);
diff --git a/commands/addquote.js b/commands/addquote.js
index 6334470..477d891 100644
--- a/commands/addquote.js
+++ b/commands/addquote.js
@@ -17,74 +17,35 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* *************************************/
-const mongo = require('../plugins/mongo');
-const quoteSchema = require('../schema/quote-schema');
+const quoteDB = require('../models/quote');
+const Discord = require("discord.js");
module.exports.run = async (client, message, args) => {
-/*
- let authorMessage;
- let authorImageMessage;
- let quoteMessage;
- let yearMessage;*/
-
if (!['242775871059001344'].includes(message.author.id)) return message.reply('**This command is disabled due to a new system being implemented.**');
- //await message.author.send('Welcome to AleeBot\'s quoting system!\nThis process will be easy.');
-
- if (!args.length) return message.reply("Error: Did not provide more context (message will be replaced eventually)");
-
- await mongo().then(async (mongoose) => {
- try {
- await new quoteSchema({
- author: args[0],
- authorImage: args[1],
- quote: args[2],
- year: args[3]
-
- }).save()
- } finally {
- await mongoose.connection.close();
- message.reply('Added this quote to the database...');
- }
- })
-
-/*
- let quoteState = {};
- let state = quoteState[message.author.id];
-
- if (message.content.toLowerCase() === "q"){
- await message.author.send("Process has been cancelled");
- state = null;
- } else {
- switch (state) {
- case 1:
- await message.author.send('Enter the author\'s name');
- authorMessage = message.content;
- console.log(authorMessage);
- state = 2;
- break;
- case 2:
- await message.author.send('author url here');
- authorImageMessage = message.content;
- console.log(authorImageMessage);
- state = 3;
- break;
- case 3:
- await message.author.send('quote here');
- quoteMessage = message.content;
- console.log(quoteMessage);
- state = 4;
- break;
- case 4:
- await message.author.send('year here');
- yearMessage = message.content;
- console.log(yearMessage);
- state = 5;
- break;
- case 5:
- await message.author.send('process complete');
- state = null;
- break;
- }
-*/
+ try {
+ let newAuthor;
+ let newAuthorImage;
+ let newQuote;
+ let newYear;
+
+ const quote = await quoteDB.create({
+ author: newAuthor,
+ authorImage: newAuthorImage,
+ quote: newQuote,
+ year: newYear
+ })
+
+ const setupEmbed = new Discord.MessageEmbed()
+ .setTitle('AleeBot Quote Setup', client.user.avatarURL())
+ .setDescription('Input the data to the following embed')
+ .addField('Author', newAuthor, true)
+ .addField('Author Image (URL)', newAuthorImage, true)
+ .addField('Quote', newQuote, true)
+ .addField('Year', newYear, true);
+
+ message.reply({embeds: [setupEmbed]});
+ } catch (error) {
+ console.log(error)
+ }
};
exports.conf = {
diff --git a/commands/ban.js b/commands/ban.js
index 1e8ee6e..b734be5 100644
--- a/commands/ban.js
+++ b/commands/ban.js
@@ -29,7 +29,7 @@ module.exports.run = async (client, message, args) => {
.setTitle('User Banned!')
.setColor('#1fd619')
.addField('**User:**', `${member.user.tag}`)
- .addField('**Reason:**', `\`\`\`${mreason}\`\`\``);
+ if (mreason) return banEmbed.addField('**Reason:**', `\`\`\`${mreason}\`\`\``);
await message.channel.send({embeds: [banEmbed]});
};
diff --git a/commands/kick.js b/commands/kick.js
index 1bf83db..c248afc 100644
--- a/commands/kick.js
+++ b/commands/kick.js
@@ -29,7 +29,7 @@ module.exports.run = async (client, message, args) => {
.setTitle('User Kicked!')
.setColor('#1fd619')
.addField('**User:**', `${member.user.tag}`)
- .addField('**Reason:**', `\`\`\`${mreason}\`\`\``);
+ if (mreason) return kickEmbed.addField('**Reason:**', `\`\`\`${mreason}\`\`\``);
await message.channel.send({embeds: [kickEmbed]});
};
diff --git a/commands/leaveguild.js b/commands/leaveguild.js
index f88f0bb..00a97fc 100644
--- a/commands/leaveguild.js
+++ b/commands/leaveguild.js
@@ -19,7 +19,7 @@
* *************************************/
module.exports.run = async (client, message) => {
if (!['242775871059001344', message.guild.ownerID].includes(message.author.id)) return message.reply('Nope! You need the person who created this bot or the owner of this guild to use this command.');
- await message.channel.send('Leaving server. If that\'s a mistake, you can re-invite me...');
+ await message.channel.send('Leaving server. If that\'s a mistake, you can re-invite me');
message.guild.leave();
};
diff --git a/commands/quote.js b/commands/quote.js
index 481cc9b..81f9142 100644
--- a/commands/quote.js
+++ b/commands/quote.js
@@ -17,72 +17,33 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* *************************************/
-const mongo = require('../plugins/mongo');
-const quoteSchema = require('../schema/quote-schema');
module.exports.run = async (client, message, args) => {
- if (!['242775871059001344'].includes(message.author.id)) return message.reply('**This command is disabled due to a new system being implemented.**');
+ const quoteDB = require('../models/quote');
const { MessageEmbed } = require('discord.js');
+ let quoteID = args[0];
-// let NewQuote;
-// let quo;
-
- let quoId;
- let quoAuthor;
- let quoAuthorImage;
- let quoQuote;
- let quoYear;
-
- if (args) {
- await mongo().then(async (mongoose) => {
- try {
- const quote = await quoteSchema.findOne({quoteID: args[1], author: quoAuthor, authorImage: quoAuthorImage, quote: quoQuote, year: quoYear})
- /*
- const embed = new MessageEmbed()
- .setAuthor(quoAuthor, quoAuthorImage)
- .setDescription(quoQuote)
- .setColor('#1fd619')
- .setFooter('- ' + quoYear);
-
- await message.channel.send({embeds:[embed]});*/
- console.log(quote);
- } finally {
- await mongoose.connection.close();
- }
- })
- } else {
-
+ if (quoteID === undefined) {
+ const quoteList = await quoteDB.findAll({ attributes: ['id'] })
+ quoteID = Math.floor(Math.random() * (quoteList.length - 1)) + 1
}
- /*
+ const quote = await quoteDB.findOne({ where: { id: quoteID } })
- function GetNewQuote(quoteNum = -1) {
- NewQuote = new Discord.MessageEmbed();
- let quo = require('../storage/quotes.json').quotes
+ if (quote) {
+ const embed = new MessageEmbed()
+ .setAuthor({ name: quote.author, iconURL: quote.authorImage})
+ .setDescription(quote.quote)
+ .setColor('#1fd619')
+ .setFooter('- ' + quote.year);
- if (quoteNum === -1) {
- quoteNum = Math.floor(Math.random() * 1000) % quo.length;
- quo=quo[quoteNum];
- }
-
- const author = quo.author;
- const authorImage = quo.authorImage;
- const quote = quo.quote;
- const year = quo.year;
- const url = quo.url;
-
- NewQuote.setAuthor(author, authorImage);
- NewQuote.setColor('#1fd619');
- NewQuote.setDescription(quote);
- NewQuote.setFooter('- ' + year);
- //NewQuote.setURL(url);
-
- return NewQuote;
+ await message.reply('Alright, here\'s your quote.')
+ await message.channel.send({embeds:[embed]});
+ } else {
+ message.reply('Cannot find quote');
}
- const newquote = GetNewQuote();
- message.reply('Alright, here\'s your quote.');
- await message.channel.send(newquote);*/
+
};
exports.conf = {
diff --git a/commands/setlogchannel.js b/commands/setlogchannel.js
index 902a210..c04e926 100644
--- a/commands/setlogchannel.js
+++ b/commands/setlogchannel.js
@@ -17,36 +17,19 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* *************************************/
-const mongo = require('../plugins/mongo');
-const logSchema = require('../schema/logging-schema');
+const guildDB = require ('../models/guild-settings')
module.exports.run = async (client, message) => {
//This will be replaced in the future possibly
if (!message.member.permissions.has('MANAGE_GUILD')) return message.reply('It looks like that you can\'t manage this server.');
const channel = await message.mentions.channels.first().id;
- const cache = {}
+ const [ guild ] = await guildDB.findOrCreate({ where: { id: message.guild.id } } )
- if (!channel) return message.reply('I cannot find that channel, please specify...');
-
- cache[message.guild.id] = channel
-
- await mongo().then(async (mongoose) => {
- try {
- await logSchema.findOneAndUpdate(
- {
- _id: message.guild.id,
- },
- {
- _id: message.guild.id,
- logChannel: channel
- },
- {
- upsert: true
- }
- )
- } finally {
- await mongoose.connection.close();
- }
- })
+ if (!channel) {
+ message.reply('No channel has been set, disabling the logging channel feature...');
+ await guild.update({ channelId: null } );
+ } else {
+ await guild.update({ channelId: message.guild.id } ) ;
+ }
await message.reply(`Logging channel has been set to <#${channel}>`);
};
@@ -58,6 +41,6 @@ exports.conf = {
exports.help = {
name: 'setlogchannel',
description: 'Set the log channel.',
- usage: 'setlogchannel [channel id]',
+ usage: 'setlogchannel #channel',
category: '- Moderation Commands',
};
diff --git a/deprecated/setup.js b/commands/setup.js
index a86f850..5c2f232 100644
--- a/deprecated/setup.js
+++ b/commands/setup.js
@@ -1,5 +1,5 @@
/****************************************
- *
+ *
* Setup: Command for AleeBot
* Copyright (C) 2017-2021 Alee Productions
*
@@ -15,22 +15,23 @@
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
+ *
* *************************************/
module.exports.run = async (client, message) => {
- if (!['242775871059001344', message.guild.owner.user.id].includes(message.author.id)) return message.reply(':warning: You must be a server owner or be the creator of the bot to access this command.');
+ if (!['242775871059001344', message.guild.ownerId].includes(message.author.id)) return message.reply(':warning: You must be a server owner or be the creator of the bot to access this command.');
message.reply('Look at your DMs.');
//message.reply("This feature is coming soon. Stay tuned!");
const Discord = require('discord.js');
const setupEmbed = new Discord.MessageEmbed()
.setTitle('AleeBot Setup', client.user.avatarURL())
.setDescription('Select the options')
- .addField('Logs', 'channelid', true)
- // .addField('Chat Logs', 'placeholder', true)
- // .addField('Chat Logs', 'placeholder', true);
+ .addField('Chat Logs', 'channelid', true)
+ .addField('Joining & Leaving Logs', 'placeholder', true)
+ .addField('Broadcast', 'placeholder', true)
+ .addField('Broadcast', 'placeholder', true);
- message.author.send(setupEmbed);
+ message.author.send({embeds: [setupEmbed]});
};
exports.conf = {
@@ -42,4 +43,4 @@ exports.help = {
description: 'Setting up AleeBot.',
usage: 'setup',
category: '- Settings Commands',
-}; \ No newline at end of file
+};
diff --git a/commands/uptime.js b/commands/uptime.js
index 4753f70..7453ad5 100644
--- a/commands/uptime.js
+++ b/commands/uptime.js
@@ -23,12 +23,17 @@ module.exports.run = async (client, message) => {
let uptimeMinutes = Math.floor(uptime / 60);
const minutes = uptime % 60;
let hours = 0;
+ let days = 0;
while (uptimeMinutes >= 60) {
- hours++;
- uptimeMinutes = uptimeMinutes - 60;
+ hours++;
+ uptimeMinutes = uptimeMinutes - 60;
+ }
+ while (hours >= 24) {
+ days++;
+ hours = hours - 24;
}
const uptimeSeconds = minutes % 60;
- message.channel.send(':clock3: AleeBot has been up for ' + hours + ' hours, ' + uptimeMinutes + ' minutes, and ' + uptimeSeconds + ' seconds.');
+ message.channel.send(`:clock3: AleeBot has been up for ${days} days, ${hours} hours, ${uptimeMinutes} minutes, and ${uptimeSeconds} seconds.`);
};
exports.conf = {
diff --git a/models/guild-settings.js b/models/guild-settings.js
new file mode 100644
index 0000000..2e4f8ef
--- /dev/null
+++ b/models/guild-settings.js
@@ -0,0 +1,24 @@
+const Sequelize = require("sequelize");
+const sequelize = require('../utils/sequelize');
+
+const guildSettings = sequelize.define('guild-settings', {
+ id: {
+ type: Sequelize.STRING,
+ primaryKey: true
+ },
+ logChannelID: {
+ type: Sequelize.STRING,
+ allowNull: true
+ },
+ autoRoleToggle: {
+ type: Sequelize.BOOLEAN,
+ allowNull: true
+ },
+ autoRoleID: {
+ type: Sequelize.STRING,
+ allowNull: true
+ }
+
+})
+
+module.exports = guildSettings
diff --git a/models/quote.js b/models/quote.js
new file mode 100644
index 0000000..f31b472
--- /dev/null
+++ b/models/quote.js
@@ -0,0 +1,29 @@
+const Sequelize = require("sequelize");
+const sequelize = require('../utils/sequelize');
+
+const quote = sequelize.define('quotes', {
+ id: {
+ type: Sequelize.INTEGER,
+ autoIncrement: true,
+ primaryKey: true
+ },
+ author: {
+ type: Sequelize.STRING,
+ allowNull: false
+ },
+ authorImage: {
+ type: Sequelize.STRING,
+ allowNull: false
+ },
+ quote: {
+ type: Sequelize.TEXT,
+ allowNull: false
+ },
+ year: {
+ type: Sequelize.STRING,
+ allowNull: false
+ }
+
+})
+
+module.exports = quote
diff --git a/package.json b/package.json
index 0e34c8d..91c283c 100644
--- a/package.json
+++ b/package.json
@@ -9,19 +9,18 @@
},
"repository": {
"type": "git",
- "url": "git+https://github.com/aleeproductions/AleeBot.git"
+ "url": "git+https://github.com/Alee14/AleeBot.git"
},
- "author": "Alee Productions",
+ "author": "Andrew Lee",
"license": "GPL-3.0",
"bugs": {
- "url": "https://github.com/aleeproductions/AleeBot/issues"
+ "url": "https://github.com/Alee14/AleeBot/issues"
},
- "homepage": "https://github.com/aleeproductions/AleeBot#readme",
+ "homepage": "https://github.com/Alee14/AleeBot#readme",
"dependencies": {
"@top-gg/sdk": "^3.1.2",
"blessed": "^0.1.81",
"colors": "^1.3.0",
- "discord-together": "^1.1.53",
"discord.js": "^13.0.1",
"eslint": "^7.1.0",
"express": "^4.17.1",
@@ -34,6 +33,8 @@
"os": "^0.1.1",
"parse-ms": "^1.0.1",
"readline": "^1.3.0",
+ "sequelize": "^6.30.0",
+ "sqlite3": "^5.1.6",
"topgg-autoposter": "^2.0.0",
"ytdl-core": "^0.20.4"
},
diff --git a/plugins/mongo.js b/plugins/mongo.js
deleted file mode 100644
index 0102aab..0000000
--- a/plugins/mongo.js
+++ /dev/null
@@ -1,10 +0,0 @@
-const mongoose = require('mongoose');
-const { mongoPath } = require('../tokens.json');
-
-module.exports = async () => {
- await mongoose.connect(mongoPath, {
- useNewUrlParser: true,
- useUnifiedTopology: true,
- });
- return mongoose;
-} \ No newline at end of file
diff --git a/schema/logging-schema.js b/schema/logging-schema.js
deleted file mode 100644
index 339c7f7..0000000
--- a/schema/logging-schema.js
+++ /dev/null
@@ -1,13 +0,0 @@
-const mongoose = require('mongoose')
-
-const reqString = {
- type: String,
- required: true
-}
-
-const loggingSchema = mongoose.Schema({
- _id: reqString,
- logChannel: reqString
-})
-
-module.exports = mongoose.model('logging', loggingSchema) \ No newline at end of file
diff --git a/schema/quote-schema.js b/schema/quote-schema.js
deleted file mode 100644
index d1c7db8..0000000
--- a/schema/quote-schema.js
+++ /dev/null
@@ -1,17 +0,0 @@
-const mongoose = require('mongoose');
-
-const reqString = {
- type: String,
- required: true
-}
-
-const quoteSchema = mongoose.Schema({
- quoteID: reqString,
- author: reqString,
- authorImage: reqString,
- quote: reqString,
- year: reqString
-
-})
-
-module.exports = mongoose.model('quote', quoteSchema) \ No newline at end of file
diff --git a/storage/activities.js b/storage/activities.js
index 888c848..418a038 100644
--- a/storage/activities.js
+++ b/storage/activities.js
@@ -10,6 +10,9 @@ const activities = [
'Breaking Windows 10',
'Beating up big tech',
'Deleting Google',
+ 'Deleting Apple',
+ 'Deleting System32',
+ 'Deleting /usr/bin/',
'Watering down the Apple walled garden',
'Reticulating splines',
'Generating world',
@@ -33,15 +36,12 @@ const activities = [
'FrivoloCo',
'I WANT 2 ORDER',
'I REALLY WANT 2 ORDER',
- 'I SAID I WANT 2 ORDER',
- 'THANK YOU FOR TAKING SO LONG',
- 'I COULD HAVE DONE THAT 67% FASTA',
- 'I DO NOT WANT 2 ORDER ANYMORE',
'Monica Is Going To Cosume You',
'BLÅHAJ',
'ShiftOS',
'Histacom',
'Wall Street',
+ 'Mac OS X Jaguar',
'Abunchoo 12.10',
'MikeOS',
'theBeat',
@@ -65,6 +65,7 @@ const activities = [
'Bluejay',
'Exposing TAS-Corp',
'Fighting Evelyn Claythorne',
+ 'Frying Dr. Sheridan',
'Hacking SherCorp',
'Games with Tari',
'Decommissioning Meta Runners',
@@ -74,6 +75,25 @@ const activities = [
'Apple Pay',
'Splatoon 3',
'Super Mario 64',
+ 'Minceraft',
+ 'Mario Kart 8',
+ 'bnbmc',
+ 'Evaluating JavaScript code',
+ 'Evaluating C# code',
+ 'Forkbombing FMP',
+ 'Merging with DLAP',
+ 'Now asbestos-free!',
+ 'May contain nuts!',
+ 'MythOS',
+ 'Also try Scratch!',
+ 'Funky!',
+ 'What is Web3?',
+ 'GNU\'s NOT UNIX!',
+ 'Linux, but actually GNU/Linux',
+ 'Praise RMS!',
+ 'Praying to St IGNUcius',
+ 'Debloating my ThinkPad',
+ 'Goddamn Idiotic Truckload of Windows',
`Now running on Discord.JS ${version}!`
];
diff --git a/sync-database.js b/sync-database.js
new file mode 100644
index 0000000..2462f29
--- /dev/null
+++ b/sync-database.js
@@ -0,0 +1,9 @@
+const quoteDB = require("./models/quote");
+const guildDB = require ('./models/guild-settings');
+quoteDB.sync({alter: true}).then(() => {
+ console.log('Quote database synced!')
+});
+
+guildDB.sync({alter: true}).then(() => {
+ console.log('Guild database synced!')
+});
diff --git a/utils/sequelize.js b/utils/sequelize.js
new file mode 100644
index 0000000..db18d50
--- /dev/null
+++ b/utils/sequelize.js
@@ -0,0 +1,9 @@
+const Sequelize = require("sequelize");
+const sequelize = new Sequelize('database', 'user', 'password', {
+ host: 'localhost',
+ dialect: 'sqlite',
+ logging: false,
+ storage: 'database.sqlite',
+});
+
+module.exports = sequelize;