diff options
| -rw-r--r-- | .gitignore | 5 | ||||
| -rw-r--r-- | .idea/dbnavigator.xml | 417 | ||||
| -rw-r--r-- | CONTRIBUTING.md | 2 | ||||
| -rw-r--r-- | bot_discord.js | 22 | ||||
| -rw-r--r-- | commands/about.js | 10 | ||||
| -rw-r--r-- | commands/addquote.js | 93 | ||||
| -rw-r--r-- | commands/ban.js | 2 | ||||
| -rw-r--r-- | commands/kick.js | 2 | ||||
| -rw-r--r-- | commands/leaveguild.js | 2 | ||||
| -rw-r--r-- | commands/quote.js | 73 | ||||
| -rw-r--r-- | commands/setlogchannel.js | 35 | ||||
| -rw-r--r-- | commands/setup.js (renamed from deprecated/setup.js) | 17 | ||||
| -rw-r--r-- | commands/uptime.js | 11 | ||||
| -rw-r--r-- | models/guild-settings.js | 24 | ||||
| -rw-r--r-- | models/quote.js | 29 | ||||
| -rw-r--r-- | package.json | 11 | ||||
| -rw-r--r-- | plugins/mongo.js | 10 | ||||
| -rw-r--r-- | schema/logging-schema.js | 13 | ||||
| -rw-r--r-- | schema/quote-schema.js | 17 | ||||
| -rw-r--r-- | storage/activities.js | 28 | ||||
| -rw-r--r-- | sync-database.js | 9 | ||||
| -rw-r--r-- | utils/sequelize.js | 9 |
22 files changed, 606 insertions, 235 deletions
@@ -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; |
