summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.dockerignore2
-rw-r--r--.gitignore5
-rw-r--r--.idea/dbnavigator.xml417
-rw-r--r--CONTRIBUTING.md10
-rw-r--r--Dockerfile15
-rw-r--r--README.md2
-rw-r--r--To be worked on/addquote.js132
-rw-r--r--To be worked on/leave.js2
-rw-r--r--To be worked on/play.js2
-rw-r--r--To be worked on/queue.js2
-rw-r--r--To be worked on/skip.js2
-rw-r--r--bot_discord.js218
-rw-r--r--commands/about.js34
-rw-r--r--commands/addquote.js60
-rw-r--r--commands/ask.js3
-rw-r--r--commands/avatarurl.js12
-rw-r--r--commands/ban.js14
-rw-r--r--commands/eval.js8
-rw-r--r--commands/git.js19
-rw-r--r--commands/help.js12
-rw-r--r--commands/info.js11
-rw-r--r--commands/interrogate.js8
-rw-r--r--commands/invite.js49
-rw-r--r--commands/kick.js14
-rw-r--r--commands/leaveguild.js6
-rw-r--r--commands/nick.js4
-rw-r--r--commands/ping.js2
-rw-r--r--commands/poweroff.js4
-rw-r--r--commands/purge.js2
-rw-r--r--commands/quote.js50
-rw-r--r--commands/say.js2
-rw-r--r--commands/serverinfo.js51
-rw-r--r--commands/setlogchannel.js46
-rw-r--r--commands/setprefix.js4
-rw-r--r--commands/setup.js19
-rw-r--r--commands/slowdown.js4
-rw-r--r--commands/suggest.js12
-rw-r--r--commands/suggestfeature.js23
-rw-r--r--commands/timeout.js (renamed from commands/jail.js)27
-rw-r--r--commands/uptime.js13
-rw-r--r--commands/userinfo.js8
-rw-r--r--deprecated/balance.js2
-rw-r--r--deprecated/buy.js2
-rw-r--r--deprecated/daily.js2
-rw-r--r--deprecated/pay.js2
-rw-r--r--models/guild-settings.js24
-rw-r--r--models/quote.js29
-rw-r--r--package.json21
-rw-r--r--storage/activities.js102
-rw-r--r--storage/quotes.json260
-rw-r--r--storage/quotes.json.bak260
-rw-r--r--storage/vtquotes.json60
-rw-r--r--sync-database.js9
-rw-r--r--utils/sequelize.js9
54 files changed, 1169 insertions, 943 deletions
diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 0000000..5171c54
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,2 @@
+node_modules
+npm-debug.log \ No newline at end of file
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 473704a..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-2020 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
@@ -34,7 +34,7 @@ exports.help = {
name: 'name here',
description: 'Description here.',
usage: 'Usage [here]',
- category: '- General Commands',
+ category: '- [Category] Commands',
};
```
@@ -43,7 +43,9 @@ exports.help = {
First get NodeJS then clone this repo then do `npm install` or `yarn install` in the AleeBot folder. Now add a file called `tokens.json` then copy and paste this follow code.
```json
{
- "abtoken": "token"
+ "abtoken": "token",
+ "mongoPath": "mongodb://127.0.0.1:27017/aleebot",
+ "port": 3000
}
```
-Then get your token from discord and replace `token` with your token and finally run this in linux `./run_linux.sh` or for windows `run_win.bat` or `npm/yarn start`.
+Then get your token from discord and replace `token` with your token. After that, install MongoDB and run it. Finally, run this in linux `./run_linux.sh` or for windows `run_win.bat` or `npm/yarn start`.
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..1256d22
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,15 @@
+FROM node:alpine
+
+WORKDIR /usr/src/bot
+
+COPY package.json ./
+
+COPY tokens.json ./
+
+COPY yarn.lock ./
+
+RUN yarn install
+
+COPY . .
+
+CMD ["node", "bot_discord.js"]
diff --git a/README.md b/README.md
index 07f7027..6665b03 100644
--- a/README.md
+++ b/README.md
@@ -20,7 +20,7 @@
<p>Here's the list of people who helped me with AleeBot for discord servers</p>
<ul>
<li>Alee14</li>
- <li>OfficialRain (Rain)</li>
+ <li>OfficialRain (Raina)</li>
<li>jtsshieh</li>
</ul>
<br>
diff --git a/To be worked on/addquote.js b/To be worked on/addquote.js
new file mode 100644
index 0000000..5f2b9bc
--- /dev/null
+++ b/To be worked on/addquote.js
@@ -0,0 +1,132 @@
+/** **************************************
+ *
+ * AddQuote: Command for AleeBot
+ * Copyright (C) 2017-2021 Alee Productions
+ *
+ * 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
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * *************************************/
+const quoteDB = require('../models/quote');
+const { MessageEmbed } = require("discord.js");
+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.**');
+ try {
+ let newAuthor;
+ let newAuthorImage;
+ let newQuote;
+ let newYear;
+
+ let quoteOriginator;
+
+ let isSetupRunning = false;
+
+ const setupProcess = [
+ 'Provide the name of the author.',
+ 'Submit the image of the author\nYou need to use a picture link that ends in .jpg or .png (like those from IMGUR or Google Images), and the picture should be either 128x128 pixels or 512x512 pixels in size.',
+ 'Enter the quote',
+ 'Specify the year from which the quote originates.'
+ ]
+
+ let setupMessage = "Welcome to the AleeBot Quote Setup!\n"
+ setupMessage += "Please follow these rules when submitting quotes\n"
+ setupMessage += "```1. Do not use profanity or offensive language.\n"
+ setupMessage += "2. Do not send any personal information.\n"
+ setupMessage += "3. Only send noteworthy quotes.```\n"
+ setupMessage += "We reserve the right to reject any quotes that do not meet our criteria.\n"
+
+ let counter = 0
+
+ if (isSetupRunning) {
+ return await message.reply('You are already setting up the quote.');
+ }
+ const filter = m => m.author.id === message.author.id
+
+ isSetupRunning = true;
+ await message.reply(':arrow_left: Check your DMs to continue.')
+ await message.author.send(setupMessage);
+ await message.author.send(setupProcess[counter++]);
+
+ const collector = message.channel.createMessageCollector({
+ filter,
+ max: setupProcess.length,
+ time: 1000 * 60
+ });
+
+ collector.on('collect', message => {
+ console.log(`Collected ${message.content} from ${message.author.tag}`)
+ if (setupProcess.length > setupProcess.length + 1) {
+ message.author.send(setupProcess[counter++]);
+ }
+ });
+
+ collector.on('end', collected => {
+ if (collected.size === 0 && collected.size < 2) {
+ message.author.send('Quote setup was not completed, rerun the command.')
+ } else {
+ let quoteContent = [];
+
+ collected.forEach((message) => {
+ quoteContent.push(message.content)
+ })
+
+ newAuthor = quoteContent[0]
+ newAuthorImage = quoteContent[1]
+ newQuote = quoteContent[2]
+ newYear = quoteContent[3]
+
+ const setupEmbed = new MessageEmbed()
+ .setAuthor('AleeBot Quote Setup', client.user.avatarURL())
+ .setDescription('Are you happy with this quote?\nThis quote will be sent for manual approval')
+ .addField('Author', newAuthor)
+ .addField('Author Image (URL)', newAuthorImage)
+ .addField('Quote', newQuote)
+ .addField('Year', newYear);
+
+ message.author.send({embeds:[setupEmbed]})
+ quoteOriginator = message.author.tag
+ console.log(`This quote has been originated from ${quoteOriginator}`)
+ isSetupRunning = false;
+ }
+
+ });
+
+ /*await quoteDB.create({
+ author: newAuthor,
+ authorImage: newAuthorImage,
+ quote: newQuote,
+ year: newYear,
+ });*/
+
+ //let messageReact = await message.author.send({embeds: [setupEmbed]});
+ /*await messageReact.react('🧑');
+ await messageReact.react('📷');
+ await messageReact.react('🖋️');
+ await messageReact.react('📅');*/
+
+ } catch (error) {
+ console.log(error)
+ }
+};
+
+exports.conf = {
+ aliases: [],
+ guildOnly: true,
+};
+exports.help = {
+ name: 'addquote',
+ description: 'Adds a quote to the database.',
+ usage: 'addquote',
+ category: '- Quote Commands',
+};
+
diff --git a/To be worked on/leave.js b/To be worked on/leave.js
index da0b4cc..78410e2 100644
--- a/To be worked on/leave.js
+++ b/To be worked on/leave.js
@@ -1,7 +1,7 @@
/** **************************************
*
* Leave: Command for AleeBot
- * Copyright (C) 2017-2020 Alee Productions
+ * Copyright (C) 2017-2021 Alee Productions
*
* 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/To be worked on/play.js b/To be worked on/play.js
index abebc8b..f14d3c5 100644
--- a/To be worked on/play.js
+++ b/To be worked on/play.js
@@ -1,7 +1,7 @@
/** **************************************
*
* Play: Command for AleeBot
- * Copyright (C) 2017-2020 Alee Productions
+ * Copyright (C) 2017-2021 Alee Productions
*
* 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/To be worked on/queue.js b/To be worked on/queue.js
index 1208ddf..2b6d31a 100644
--- a/To be worked on/queue.js
+++ b/To be worked on/queue.js
@@ -1,7 +1,7 @@
/** **************************************
*
* Queue: Command for AleeBot
- * Copyright (C) 2017-2020 Alee Productions
+ * Copyright (C) 2017-2021 Alee Productions
*
* 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/To be worked on/skip.js b/To be worked on/skip.js
index 371e7e7..bda040b 100644
--- a/To be worked on/skip.js
+++ b/To be worked on/skip.js
@@ -1,7 +1,7 @@
/** **************************************
*
* Skip: Command for AleeBot
- * Copyright (C) 2017-2020 Alee Productions
+ * Copyright (C) 2017-2021 Alee Productions
*
* 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 991a294..b32e018 100644
--- a/bot_discord.js
+++ b/bot_discord.js
@@ -1,7 +1,7 @@
/** **************************************
*
* AleeBot: Made for discord servers
- * Copyright (C) 2017-2020 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
@@ -18,43 +18,54 @@
*
* *************************************/
const Discord = require('discord.js');
+const client = new Discord.Client({
+ allowedMentions: {
+ parse: ['users', 'roles'],
+ repliedUser: true
+ },
+ intents: ['GUILDS', 'GUILD_MESSAGES', 'GUILD_MEMBERS', 'GUILD_MESSAGE_REACTIONS']
+});
const moment = require('moment');
+const express = require('express');
+const fs = require('fs');
const readline = require('readline');
const colors = require('colors');
-const DBL = require('dblapi.js');
//const i18next = require('i18next');
-const client = new Discord.Client({
- disableEveryone: true,
-});
+const web = express();
const settings = require('./storage/settings.json');
-const fs = require('fs');
const api = require('./tokens.json');
-const dbl = new DBL(api.dbltoken, client);
+const { activity } = require('./storage/activities');
const active = new Map();
-const ownerID = '242775871059001344';
let autoRole = true;
+let readyEmbedMessage = true;
+const ownerID = '242775871059001344';
let logChannel = '318874545593384970';
let statusChannelID = '606602551634296968';
-let readyEmbedMessage = true;
-const activities = [
- 'AleeBot ' + settings.abVersion + ' | ' + settings.prefix + 'help',
- 'Coding bytes',
- 'Drawing shapes',
- 'Fighting Quad',
- 'Ultra Jump Mania!'
-];
+let serverWhitelist = "243022206437687296";
+let roleWhitelist = "657426918416580614";
const log = (message) => {
console.log(`[${moment().format('YYYY-MM-DD HH:mm:ss')}] ${message}`.white);
};
+function botPresence() {
+ client.user.setPresence({
+ activities: [{
+ name: activity[Math.floor(Math.random() * activity.length)]
+ }],
+ status: 'online',
+ afk: false,
+ });
+ log(`[>] Updated bot presence to "${client.user.presence.activities[0].name}"`.green);
+}
+
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
prompt: '> '.gray,
});
-console.log(`AleeBot ${settings.abVersion}: Copyright (C) 2017-2020 Alee Productions`.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);
@@ -103,8 +114,7 @@ fs.readdir('./commands', (err, files) => {
console.log(err.stack);
}
});
- log('[>] Command Loading complete!'.green);
- console.log('\n');
+ log('[>] Command loading complete!\n'.green);
});
rl.on('line', function(cmd) {
@@ -114,29 +124,20 @@ rl.on('line', function(cmd) {
if (client.guilds.size === 0) {
console.log(('[!] No guilds found.'.yellow));
} else {
- console.log('[i] Here\'s the servers that AleeBot is connected to:');
+ console.log('[i] These are the servers that AleeBot is connected to:');
for ([id, guild] of client.guilds) {
console.log(` Guild Name: ${guild.name} - ID: ${guild.id}`.blue);
}
}
break;
- case 'channels':
- if (!args[1]) {
- console.log('[!] Please insert the guild\'s ID.'.yellow);
- } else {
- var guild = client.guilds.get(args[1]);
- console.log('[i] Here\'s the channels that this guild have:'.blue);
- for ([id, channel, guild] of guild && client.channels) {
- console.log(` Channel: #${channel.name} - ID: ${channel.id}`.blue);
- }
- }
- break;
case 'leave':
if (!args[1]) {
console.log('[!] Please insert the guild\'s ID.'.yellow);
} else {
- var guild = client.guilds.get(args[1]);
- guild.leave();
+ let guild = client.guilds.cache.get(args[1]);
+ guild.leave().then(guild => {
+ console.log(`AleeBot has left ${guild.name}`)
+ });
}
break;
case 'broadcast':
@@ -144,12 +145,14 @@ rl.on('line', function(cmd) {
console.log('[!] Usage: broadcast [guildID] [channelID].'.yellow);
} else {
const broadcast = args.join(' ').slice(48);
- var guild = null;
- guild = client.guilds.get(args[1]);
- var channel = null;
- channel = guild.channels.get(args[2]);
+ let guild = null;
+ guild = client.guilds.cache.get(args[1]);
+ let channel = null;
+ channel = guild.channels.cache.get(args[2]);
if (channel != null) {
- channel.send(broadcast);
+ channel.send(`**[Broadcast]** ${broadcast}`);
+ } else {
+ console.log('[X] Broadcast cannot be blank'.red)
}
}
break;
@@ -159,12 +162,21 @@ rl.on('line', function(cmd) {
let uptimeMinutes = Math.floor(uptime / 60);
const minutes = uptime % 60;
let hours = 0;
+ let days = 0;
while (uptimeMinutes >= 60) {
hours++;
uptimeMinutes = uptimeMinutes - 60;
}
+ while (hours >= 24) {
+ days++;
+ hours = hours - 24;
+ }
const uptimeSeconds = minutes % 60;
- console.log(`[i] AleeBot has been up for ${hours} hours, ${uptimeMinutes} minutes, and ${uptimeSeconds} seconds.`.blue);
+ console.log(`[i] AleeBot has been up for ${days} days, ${hours} hours, ${uptimeMinutes} minutes, and ${uptimeSeconds} seconds.`);
+ break;
+ case 'activity':
+ console.log('[i] Generating new activity'.blue);
+ botPresence();
break;
case 'exit':
console.log('[i] AleeBot will now exit!'.blue);
@@ -184,10 +196,10 @@ rl.on('line', function(cmd) {
case 'help':
let msg = ('AleeBot '+ settings.abVersion +' Console Help\n\n');
msg += ('guilds - Shows all guilds that AleeBot\'s on.\n');
- msg += ('channels - Shows all the channels that the guilds have.\n');
msg += ('leave - Leaves a guild.\n');
msg += ('broadcast - Broadcasts a message to a server.\n');
msg += ('uptime - Shows the uptime for AleeBot.\n');
+ msg += ('activity - Generates new activity\n');
msg += ('help - Shows this command.\n');
msg += ('exit - Exits AleeBot.\n');
console.log(msg.cyan);
@@ -198,71 +210,70 @@ rl.on('line', function(cmd) {
rl.prompt();
});
-client.on('ready', () => {
+client.on('ready', async () => {
log('[>] AleeBot is now ready!'.green);
log(`[i] Logged in as ${client.user.tag}`.green);
log(`[i] Default Prefix: ${settings.prefix}`.green);
log(`[i] Bot ID: ${client.user.id}`.green);
- log(`[i] Token: ${api.abtoken}`.green);
- log(`[i] Running version ${settings.abVersion} and in ${client.guilds.cache.size} guilds`.green);
-
- client.setInterval(function() {
- /*
- setInterval(() => {
- dbl.postStats(client.guilds.size, client.shards.Id, client.shards.total);
- }, 1800000);*/
- client.user.setPresence({
- activity: {
- name: activities[Math.floor(Math.random() * activities.length)]
- },
- status: 'online',
- afk: false,
- });
+ log(`[i] Running version ${settings.abVersion} | Serving in ${client.guilds.cache.size} guilds`.green);
+
+ botPresence();
+
+ web.get('/', (req, res) => {
+ res.send("Hello World! This is going to become the AleeBot dashboard...");
+ });
+
+ web.listen(api.port, () => {
+ console.log(`Listening at https://localhost:${api.port}`)
+ })
+
+ setInterval(function() {
+ botPresence();
}, 200000);
if (readyEmbedMessage === true) {
const readyEmbed = new Discord.MessageEmbed()
.setAuthor('AleeBot Status', client.user.avatarURL())
.setDescription('AleeBot has started')
- .addField('Prefix', `\`${settings.prefix}\``, true)
+ .addField('Version', settings.abVersion, true)
+ .addField('Discord.JS Version', Discord.version, true)
+ .addField('Prefix', `\`${settings.prefix}\``)
.setColor('#5cd65c');
let statusChannel = client.channels.cache.get(statusChannelID);
if (!statusChannel) return console.error('The status channel does not exist! Skipping.');
- statusChannel.send(readyEmbed);
+ statusChannel.send({ embeds: [readyEmbed]});
}
rl.prompt();
});
client.on('guildMemberAdd', (member) => {
- if (member.guild.id !== '243022206437687296') return;
+ if (member.guild.id !== serverWhitelist) return;
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();
let guildMember = client.channels.cache.get(logChannel);
if (!guildMember) return;
- guildMember.send(logEmbed);
+ guildMember.send({ embeds: [logEmbed]});
if (autoRole === true) {
- if (member.guild.id !== '243022206437687296') return;
- const role = member.guild.roles.cache.get('657426918416580614');
+ if (member.guild.id !== serverWhitelist) return;
+ const role = member.guild.roles.cache.get(roleWhitelist);
member.roles.add(role);
- log(`[i] ${member.user.username} joined Alee Productions.`.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);
}
});
client.on('guildMemberRemove', (member) => {
- if (member.guild.id !== '243022206437687296') return;
+ if (member.guild.id !== serverWhitelist) return;
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();
@@ -270,12 +281,12 @@ client.on('guildMemberRemove', (member) => {
let guildMember = client.channels.cache.get(logChannel);
if (!guildMember) return;
- guildMember.send(logEmbed);
+ guildMember.send({ embeds: [logEmbed]});
})
client.on('messageUpdate', async (oldMessage, newMessage) => {
- if (oldMessage.guild.id !== '243022206437687296') return;
+ if (oldMessage.guild.id !== serverWhitelist) return;
if (oldMessage.content === newMessage.content) {
return;
}
@@ -287,15 +298,15 @@ client.on('messageUpdate', async (oldMessage, newMessage) => {
.setColor('#ffff1a')
.setTimestamp()
.setFooter(`Author ID: ${oldMessage.author.id}`);
-
+
let editMessage = client.channels.cache.get(logChannel);
if (!editMessage) return;
- editMessage.send(logEmbed);
+ editMessage.send({ embeds: [logEmbed]});
});
client.on('messageDelete', (message) => {
- if (message.guild.id !== '243022206437687296') return;
+ if (message.guild.id !== serverWhitelist) return;
const logEmbed = new Discord.MessageEmbed()
.setAuthor('AleeBot Logging', client.user.avatarURL())
.setDescription(`A message from ${message.author.username} was deleted in <#${message.channel.id}>`)
@@ -307,11 +318,11 @@ client.on('messageDelete', (message) => {
let deleteMessage = client.channels.cache.get(logChannel);
if (!deleteMessage) return;
- deleteMessage.send(logEmbed);
+ deleteMessage.send({ embeds: [logEmbed]});
});
client.on('guildBanAdd', (guild, user) => {
- if (guild.id !== '243022206437687296') return;
+ if (guild.id !== serverWhitelist) return;
const logEmbed = new Discord.MessageEmbed()
.setAuthor('AleeBot Logging', client.user.avatarURL())
.setDescription(`This user got banned from ${guild.name}`)
@@ -323,11 +334,11 @@ client.on('guildBanAdd', (guild, user) => {
let banMessage = client.channels.cache.get(logChannel);
if (!banMessage) return;
- banMessage.send(logEmbed);
+ banMessage.send({ embeds: [logEmbed]});
});
client.on('guildBanRemove', (guild, user) => {
- if (guild.id !== '243022206437687296') return;
+ if (guild.id !== serverWhitelist) return;
const logEmbed = new Discord.MessageEmbed()
.setAuthor('AleeBot Logging', client.user.avatarURL())
.setDescription(`This user got unbanned from ${guild.name}`)
@@ -339,28 +350,28 @@ client.on('guildBanRemove', (guild, user) => {
let banMessage = client.channels.cache.get(logChannel);
if (!banMessage) return;
- banMessage.send(logEmbed);
+ banMessage.send({ embeds: [logEmbed]});
});
client.on('guildCreate', (guild) => {
- log(`[i] New guild joined: ${guild.name} (id: ${guild.id}). This guild has ${guild.memberCount} members!`.blue);
+ log(`[i] New guild joined: ${guild.name} (${guild.id}). This guild has ${guild.memberCount} members!`.blue);
const logEmbed = new Discord.MessageEmbed()
.setAuthor('AleeBot', client.user.avatarURL())
.setDescription('I got added to a server!')
.addField('Server Name:', `${guild.name}`, true)
.addField('Server ID:', `${guild.id}`, true)
- .addField('Members', guild.memberCount, true)
+ .addField('Members', `${guild.memberCount}`, true)
.setColor('#5cd65c')
.setFooter(`We now run on ${client.guilds.cache.size} guilds.`);
let statusChannel = client.channels.cache.get(statusChannelID);
if (!statusChannel) return;
- statusChannel.send(logEmbed);
+ statusChannel.send({ embeds: [logEmbed]});
});
client.on('guildDelete', (guild) => {
- log(`[i] I have been removed from: ${guild.name} (id: ${guild.id})`.red);
+ log(`[i] I have been removed from: ${guild.name} (${guild.id})`.red);
const logEmbed = new Discord.MessageEmbed()
.setAuthor('AleeBot', client.user.avatarURL())
.setDescription('I got removed from a server...')
@@ -371,18 +382,30 @@ client.on('guildDelete', (guild) => {
let statusChannel = client.channels.cache.get(statusChannelID);
if (!statusChannel) return;
- statusChannel.send(logEmbed);
+ statusChannel.send({ embeds: [logEmbed]});
});
-dbl.on('posted', () => {
- log('Server count posted!'.blue);
-});
+client.on("messageReactionAdd", async (reaction, user) => {
+ // When a reaction is received, check if the structure is partial
+ if (reaction.partial) {
+ // If the message this reaction belongs to was removed, the fetching might result in an API error which should be handled
+ try {
+ await reaction.fetch();
+ } catch (error) {
+ console.error('Something went wrong when fetching the message:', error);
+ // Return as `reaction.message.author` may be undefined/null
+ return;
+ }
+ }
-dbl.on('error', (e) => {
- log(`[X | DBL ERROR] ${e}`.red);
+ // Now the message has been cached and is fully available
+ console.log(`${reaction.message.author}'s message "${reaction.message.content}" gained a reaction!`);
+ // The reaction is now also fully available and the properties will be reflected accurately:
+ console.log(`${reaction.count} user(s) have given the same reaction to this message!`);
});
-client.on('message', (msg) => {
+client.on('messageCreate', async(msg) => {
+ if (!client.application?.owner) await client.application?.fetch();
if (msg.author.bot) return;
const prefixes = JSON.parse(fs.readFileSync('./storage/prefixes.json', 'utf8'));
@@ -410,7 +433,7 @@ client.on('message', (msg) => {
if (cmd) {
if (cmd.conf.guildOnly === true) {
if (!msg.channel.guild) {
- return msg.channel.createMessage('This command can only be ran in a guild.');
+ return msg.channel.send('This command can only be ran in a guild.');
}
}
try {
@@ -427,9 +450,24 @@ client.on('message', (msg) => {
}
});
+client.on('interactionCreate', async (interaction) => {
+ if (!interaction.isCommand()) return;
+
+ if (!client.commands.has(interaction.commandName)) return;
+
+ try {
+ await client.commands.get(interaction.commandName).execute(interaction);
+ } catch (error) {
+ console.error(error);
+ await interaction.reply({ content: 'There was an error while executing this command!', ephemeral: true });
+ }
+
+});
+
process.on('unhandledRejection', function(err, p) {
log('[X | UNCAUGHT PROMISE] ' + err.stack.red);
});
+
client.on('reconnecting', function() {
log('[!] AleeBot has disconnected from Discord and is now attempting to reconnect.'.yellow);
});
diff --git a/commands/about.js b/commands/about.js
index a455faa..be1c17d 100644
--- a/commands/about.js
+++ b/commands/about.js
@@ -1,7 +1,7 @@
/** **************************************
*
* About: Command for AleeBot
- * Copyright (C) 2017-2020 Alee Productions
+ * Copyright (C) 2017-2021 Alee Productions
*
* 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
@@ -18,15 +18,33 @@
*
* *************************************/
module.exports.run = async (client, message) => {
- const Discord = require('discord.js');
- const os = require('os');
- const embed = new Discord.MessageEmbed()
+ 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('Contributors', 'Andrew Lee (Founder of this project)\nOfficialRain (Raina) (Uptime Command)\njtsshieh (Command Handler)')
- .setFooter('© Copyright 2017-2020 Alee Productions, Licensed with GPL-3.0')
+ .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', Contributors)
+ .setFooter('© Copyright 2017-2023 Andrew Lee Projects')
.setColor('#1fd619');
- await message.channel.send({embed});
+
+ let inviteButton = new MessageActionRow()
+ .addComponents(
+ new MessageButton()
+ .setStyle('LINK')
+ .setLabel('Invite AleeBot')
+ .setURL('https://top.gg/bot/282547024547545109'),
+ new MessageButton()
+ .setStyle('LINK')
+ .setLabel('Join Andrew Lee Projects')
+ .setURL('https://discord.gg/EFhRDqG')
+ );
+
+ await message.channel.send({embeds: [aboutEmbed], components: [inviteButton]});
};
exports.conf = {
diff --git a/commands/addquote.js b/commands/addquote.js
deleted file mode 100644
index 7b7221e..0000000
--- a/commands/addquote.js
+++ /dev/null
@@ -1,60 +0,0 @@
-/** **************************************
- *
- * AddQuote: Command for AleeBot
- * Copyright (C) 2017-2020 Alee Productions
- *
- * 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
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * 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, args) => {
- /*
- const moment = require('moment');
- const log = message => {
-
- console.log(`[${moment().format('YYYY-MM-DD HH:mm:ss')}] ${message}`);
-
- };
- const fs = require('fs');
- if(!args[0]) return message.reply(`Usage: ab:addquote [author] [authorImage] [quote] [year]`);
-
- let quotes = JSON.parse(fs.readFileSync("./storage/quotes.json", "utf8"));
-
- quotes = {
- author: args[0],
- authorImage: args[1],
- quote: args[2],
- year: args[3]
- };
-
- fs.writeFile("./storage/quotes.json", JSON.stringify(quotes), (err) =>{
- if (err) log(err)
- })
-
- message.reply(`You just added a new quote!`);
- log(`[i] A quote has been added to quotes.json...`)
-*/
- message.reply('Command is broken for now');
-};
-
-exports.conf = {
- aliases: [],
- guildOnly: true,
-};
-exports.help = {
- name: 'addquote',
- description: 'Sets the guild prefix.',
- usage: 'addquote [author] [authorImage] [quote] [year]',
- category: '- Quote Commands',
-};
-
diff --git a/commands/ask.js b/commands/ask.js
index 3b1efd5..efb4a22 100644
--- a/commands/ask.js
+++ b/commands/ask.js
@@ -1,7 +1,7 @@
/** **************************************
*
* Ask: Command for AleeBot
- * Copyright (C) 2017-2020 Alee Productions
+ * Copyright (C) 2017-2021 Alee Productions
*
* 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
@@ -26,6 +26,7 @@ module.exports.run = async (client, message, args) => {
'Yep. Just kidding :P',
'I doubt it.',
'Maybe?',
+ 'Perhaps...',
'I don\'t know?',
'Hmm let me think :thinking:',
];
diff --git a/commands/avatarurl.js b/commands/avatarurl.js
index 7c50e2c..2c796f4 100644
--- a/commands/avatarurl.js
+++ b/commands/avatarurl.js
@@ -1,7 +1,7 @@
/** **************************************
*
* avatarurl: Command for AleeBot
- * Copyright (C) 2017-2020 Alee Productions
+ * Copyright (C) 2017-2021 Alee Productions
*
* 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
@@ -18,11 +18,17 @@
*
* *************************************/
module.exports.run = async (client, message) => {
- message.reply(message.author.avatarURL({ dynamic: true, format: 'png', size: 1024 }));
+ if(!message.mentions.users.first()) {
+ message.reply(message.author.avatarURL({ dynamic: true, format: 'png', size: 1024 }));
+ } else {
+ let targetMember;
+ targetMember = message.mentions.users.first();
+ message.reply(targetMember.avatarURL({ dynamic: true, format: 'png', size: 1024 }))
+ }
};
exports.conf = {
- aliases: [],
+ aliases: ['pic'],
guildOnly: false,
};
exports.help = {
diff --git a/commands/ban.js b/commands/ban.js
index 3c8a809..b734be5 100644
--- a/commands/ban.js
+++ b/commands/ban.js
@@ -1,7 +1,7 @@
/** **************************************
*
* Ban: Command for AleeBot
- * Copyright (C) 2017-2020 Alee Productions
+ * Copyright (C) 2017-2021 Alee Productions
*
* 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
@@ -21,16 +21,16 @@ module.exports.run = async (client, message, args) => {
const Discord = require('discord.js');
const mreason = args.join(' ').slice(22);
if (!message.member.permissions.has('BAN_MEMBERS')) return message.reply('It looks like that you don\'t have the permissions to ban people.');
- if (!message.guild.member(client.user).hasPermission('BAN_MEMBERS')) return message.reply('Uhh... I don\'t have permission to ban members.');
+ if (!message.guild.members.cache.get(client.user.id).permissions.has('BAN_MEMBERS')) return message.reply('I don\'t have permission to ban members.');
const member = message.mentions.members.first();
- if (!member) return message.reply('Uhh... Please mention a member first.');
- await member.ban(`Banned by ${message.author.tag} Reason: ` + mreason);
- const embed = new Discord.MessageEmbed()
+ if (!member) return message.reply('Please mention a member first.');
+ await member.ban({ reason: `Banned by ${message.author.tag} for ${mreason}.`});
+ const banEmbed = new Discord.MessageEmbed()
.setTitle('User Banned!')
.setColor('#1fd619')
.addField('**User:**', `${member.user.tag}`)
- .addField('**Reason:**', `\`\`\`${mreason}\`\`\``);
- await message.channel.send({embed});
+ if (mreason) return banEmbed.addField('**Reason:**', `\`\`\`${mreason}\`\`\``);
+ await message.channel.send({embeds: [banEmbed]});
};
exports.conf = {
diff --git a/commands/eval.js b/commands/eval.js
index ef8fc97..b414225 100644
--- a/commands/eval.js
+++ b/commands/eval.js
@@ -1,7 +1,7 @@
/** **************************************
*
* Eval: Command for AleeBot
- * Copyright (C) 2017-2020 Alee Productions & jtsshieh + PokeWorld
+ * Copyright (C) 2017-2021 Alee Productions & jtsshieh + PokeWorld
*
* 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
@@ -47,7 +47,7 @@ module.exports.run = async (client, message, args) => {
.addField(':outbox_tray: Output:', `\`\`\`${err}\`\`\``)
.setFooter('Eval', client.user.avatarURL())
.setColor('RED');
- return message.channel.send({embed});
+ return message.channel.send({embeds: [embed]});
}
try {
@@ -59,7 +59,7 @@ module.exports.run = async (client, message, args) => {
.setFooter('Eval', client.user.avatarURL())
.setColor('GREEN');
- return message.channel.send({embed});
+ return message.channel.send({embeds: [embed]});
} catch (err) {
const embed = new MessageEmbed()
.setAuthor('Eval Error')
@@ -68,7 +68,7 @@ module.exports.run = async (client, message, args) => {
.addField(':outbox_tray: Output:', `\`\`\`${err}\`\`\``)
.setFooter('Eval', client.user.avatarURL())
.setColor('RED');
- return message.channel.send({embed});
+ return message.channel.send({embeds: [embed]});
}
};
diff --git a/commands/git.js b/commands/git.js
index ed98ebf..e4912e1 100644
--- a/commands/git.js
+++ b/commands/git.js
@@ -1,7 +1,7 @@
/** **************************************
*
* Git: Command for AleeBot
- * Copyright (C) 2017-2020 Alee Productions
+ * Copyright (C) 2017-2021 Alee Productions
*
* 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
@@ -18,16 +18,23 @@
*
* *************************************/
module.exports.run = async (client, message) => {
- const Discord = require('discord.js');
+ const { MessageEmbed, MessageButton, MessageActionRow } = require('discord.js');
const git = require('git-last-commit');
git.getLastCommit(function(err, commit) {
- const embed = new Discord.MessageEmbed()
- .setTitle('GitHub Information')
- .addField('**Repository:**', 'https://github.com/aleeproductions/AleeBot')
+ const gitInfo = new MessageEmbed()
+ .setTitle('Git Information')
.addField('**Last Commit:**', commit.subject)
.addField('**Commited By:**', commit.author.name)
.setColor('#1fd619');
- message.channel.send({embed});
+
+ let sourceCode = new MessageActionRow()
+ .addComponents(
+ new MessageButton()
+ .setStyle('LINK')
+ .setLabel('Source Code')
+ .setURL('https://github.com/alee14-projects/AleeBot')
+ );
+ message.channel.send({embeds: [gitInfo], components: [sourceCode]});
});
};
diff --git a/commands/help.js b/commands/help.js
index 36d4630..0b9191e 100644
--- a/commands/help.js
+++ b/commands/help.js
@@ -1,7 +1,7 @@
/** **************************************
*
* Help: Command for AleeBot
- * Copyright (C) 2017-2020 Alee Productions
+ * Copyright (C) 2017-2021 Alee Productions
*
* 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
@@ -38,12 +38,12 @@ module.exports.run = async (client, message) => {
}
const prefix = prefixes[message.guild.id].prefixes;
- if (!message.guild.member(client.user).hasPermission('EMBED_LINKS')) return message.reply('ERROR: AleeBot doesn\'t have the permission to send embed links please enable them to use the full help.');
+ if (!message.guild.members.cache.get(client.user.id).permissions.has('EMBED_LINKS')) return message.reply('ERROR: AleeBot doesn\'t have the permission to send embed links, please enable them to use the full help.');
const embed = new Discord.MessageEmbed()
- .setAuthor('AleeBot ' + require('../storage/settings.json').abVersion + ` Help and on ${client.guilds.cache.size} servers`, client.user.avatarURL())
- .setDescription('Every command you input into AleeBot is `' + prefix + '`')
+ .setAuthor('AleeBot ' + require('../storage/settings.json').abVersion + ` Help`, client.user.avatarURL())
+ .setDescription('Every command you input into AleeBot is `ab:`')
+ .setFooter(`Currently serving on ${client.guilds.cache.size} servers`)
.setColor('#1fd619')
- .setFooter('© Copyright 2017-2020 Alee Productions, Licensed with GPL-3.0');
categories.forEach(function(x) {
let cat = '';
@@ -55,7 +55,7 @@ module.exports.run = async (client, message) => {
embed.addField(x, cat, true);
});
- await message.channel.send({embed});
+ await message.channel.send({embeds: [embed]});
};
exports.conf = {
diff --git a/commands/info.js b/commands/info.js
index 3de7ecd..95eaebb 100644
--- a/commands/info.js
+++ b/commands/info.js
@@ -1,7 +1,7 @@
/** **************************************
*
* Info: Command for AleeBot
- * Copyright (C) 2017-2020 Alee Productions
+ * Copyright (C) 2017-2021 Alee Productions
*
* 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
@@ -18,16 +18,19 @@
*
* *************************************/
module.exports.run = async (client, message) => {
- const Discord = require('discord.js');
+ const { MessageEmbed, version } = require('discord.js');
const os = require('os');
- const embed = new Discord.MessageEmbed()
+ const mongoose = require('mongoose');
+ const embed = new MessageEmbed()
.setTitle('Information on AleeBot\'s Host')
.addField('OS Hostname: ', os.hostname(), true)
.addField('NodeJS Version: ', process.versions.node, true)
+ .addField('Discord.JS Version: ', version, true)
.addField('OS Platform: ', os.platform(), true)
.addField('OS Version: ', os.release(), true)
+ .addField('Mongoose Version:', mongoose.version, true)
.setColor('#1fd619');
- message.channel.send({embed});
+ await message.channel.send({ embeds: [embed] });
};
exports.conf = {
diff --git a/commands/interrogate.js b/commands/interrogate.js
index 54e8cb2..3386352 100644
--- a/commands/interrogate.js
+++ b/commands/interrogate.js
@@ -1,7 +1,7 @@
/** **************************************
*
* Interrogate: Command for AleeBot
- * Copyright (C) 2017-2020 Alee Productions
+ * Copyright (C) 2017-2021 Alee Productions
*
* 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
@@ -18,10 +18,10 @@
*
* *************************************/
module.exports.run = async (client, message, args) => {
- if (message.guild.id != '243022206437687296') return message.reply('This is a ALP exclusive command.');
+ if (message.guild.id !== '243022206437687296') return message.reply('This is a Binaryworks exclusive command.');
- if (!message.member.hasPermission('BAN_MEMBERS')) return message.reply('It looks like that you don\'t have the permissions to jail members.');
- if (!message.guild.member(client.user).hasPermission('MANAGE_ROLES')) return message.reply('Uhh... I don\'t have permission to jail members.');
+ if (!message.member.permissions.has('BAN_MEMBERS')) return message.reply('It looks like that you don\'t have the permissions to jail members.');
+ if (!message.guild.members.cache.get(client.user.id).permissions.has('MANAGE_ROLES')) return message.reply('Uhh... I don\'t have permission to jail members.');
const member = message.mentions.members.first();
if (!member) return await message.reply('Uhh... Please mention a member first.');
diff --git a/commands/invite.js b/commands/invite.js
deleted file mode 100644
index e6f538f..0000000
--- a/commands/invite.js
+++ /dev/null
@@ -1,49 +0,0 @@
-/** **************************************
- *
- * Invite: Command for AleeBot
- * Copyright (C) 2017-2020 Alee Productions
- *
- * 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
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * 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) => {
- message.channel.send({embed: {
- color: 2086425,
- title: 'Invite Command',
- fields: [{
- name: 'Invite AleeBot',
- value: '[Invite AleeBot to your server.](https://top.gg/bot/282547024547545109)',
- },
- {
- name: 'Join the Alee Productions Community',
- value: '[Discord Server](https://discord.gg/EFhRDqG)',
- },
- ],
- },
- });
-
- // message.channel.send('Want AleeBot in your server? Here\'s the link: https://discordapp.com/api/oauth2/authorize?client_id=282547024547545109&permissions=2080375863&scope=bot');
-};
-
-exports.conf = {
- aliases: [],
- guildOnly: false,
-};
-exports.help = {
- name: 'invite',
- description: 'Gives you an invite to the guild and the bot.',
- usage: 'invite',
- category: '- General Commands',
-};
-
diff --git a/commands/kick.js b/commands/kick.js
index 3cbaaf8..c248afc 100644
--- a/commands/kick.js
+++ b/commands/kick.js
@@ -1,7 +1,7 @@
/** **************************************
*
* Kick: Command for AleeBot
- * Copyright (C) 2017-2020 Alee Productions
+ * Copyright (C) 2017-2021 Alee Productions
*
* 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
@@ -21,16 +21,16 @@ module.exports.run = async (client, message, args) => {
const Discord = require('discord.js');
const mreason = args.join(' ').slice(22);
if (!message.member.permissions.has('KICK_MEMBERS')) return message.reply('It looks like that you don\'t have the permissions to kick people.');
- if (!message.guild.member(client.user).hasPermission('KICK_MEMBERS')) return message.reply('Uhh... I don\'t have permission to kick members.');
+ if (!message.guild.members.cache.get(client.user.id).permissions.has('KICK_MEMBERS')) return message.reply('I don\'t have permission to kick members.');
const member = message.mentions.members.first();
- if (!member) return message.reply('Uhh... Please mention a member first.');
- member.kick(`Kicked by: ${message.author.tag} Reason: ` + mreason);
- const embed = new Discord.MessageEmbed()
+ if (!member) return message.reply('Please mention a member first.');
+ await member.kick(`Kicked by ${message.author.tag} for ${mreason}.`);
+ const kickEmbed = new Discord.MessageEmbed()
.setTitle('User Kicked!')
.setColor('#1fd619')
.addField('**User:**', `${member.user.tag}`)
- .addField('**Reason:**', `\`\`\`${mreason}\`\`\``);
- await message.channel.send({embed});
+ if (mreason) return kickEmbed.addField('**Reason:**', `\`\`\`${mreason}\`\`\``);
+ await message.channel.send({embeds: [kickEmbed]});
};
exports.conf = {
diff --git a/commands/leaveguild.js b/commands/leaveguild.js
index 5108436..00a97fc 100644
--- a/commands/leaveguild.js
+++ b/commands/leaveguild.js
@@ -1,7 +1,7 @@
/** **************************************
*
* LeaveGuild: Command for AleeBot
- * Copyright (C) 2017-2020 Alee Productions
+ * Copyright (C) 2017-2021 Alee Productions
*
* 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
@@ -18,8 +18,8 @@
*
* *************************************/
module.exports.run = async (client, message) => {
- if (!['242775871059001344', message.guild.owner.user.id].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.');
- message.channel.send('Alright, I\'m leaving the server now. Bye everyone!');
+ 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');
message.guild.leave();
};
diff --git a/commands/nick.js b/commands/nick.js
index f65bf74..8fcdce7 100644
--- a/commands/nick.js
+++ b/commands/nick.js
@@ -1,7 +1,7 @@
/** **************************************
*
* Nick: Command for AleeBot
- * Copyright (C) 2017-2020 Alee Productions
+ * Copyright (C) 2017-2021 Alee Productions
*
* 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
@@ -18,7 +18,7 @@
*
* *************************************/
module.exports.run = async (client, message, args) => {
- if (!message.guild.member(client.user).hasPermission('MANAGE_NICKNAME')) return message.reply('**ERROR:** I can\'t change nicknames. (Check permissions)');
+ if (!message.guild.members.cache.get(client.user.id).permissions.has('MANAGE_NICKNAME')) return message.reply('**ERROR:** I can\'t change nicknames. (Check permissions)');
const nick = args.join(' ');
message.member.setNickname(nick);
message.channel.send(`Alright! I changed your nickname to \`${nick}\``);
diff --git a/commands/ping.js b/commands/ping.js
index b8d2779..d66330d 100644
--- a/commands/ping.js
+++ b/commands/ping.js
@@ -1,7 +1,7 @@
/** **************************************
*
* Ping: Command for AleeBot
- * Copyright (C) 2017-2020 Alee Productions
+ * Copyright (C) 2017-2021 Alee Productions
*
* 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/commands/poweroff.js b/commands/poweroff.js
index 8067c5f..22fb6bb 100644
--- a/commands/poweroff.js
+++ b/commands/poweroff.js
@@ -1,7 +1,7 @@
/** **************************************
*
* Poweroff: Command for AleeBot
- * Copyright (C) 2017-2020 Alee Productions
+ * Copyright (C) 2017-2021 Alee Productions
*
* 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
@@ -27,7 +27,7 @@ module.exports.run = async (client, message) => {
let statusChannel = client.channels.cache.get('606602551634296968');
if (!statusChannel) return console.error('The status channel does not exist! Skipping.');
- await statusChannel.send(stopEmbed);
+ await statusChannel.send({ embeds: [stopEmbed]});
await message.reply(':warning: AleeBot will now exit!');
console.log('[i] AleeBot will now exit!'.blue);
client.destroy();
diff --git a/commands/purge.js b/commands/purge.js
index 97c1be6..bc6e727 100644
--- a/commands/purge.js
+++ b/commands/purge.js
@@ -1,7 +1,7 @@
/** **************************************
*
* Purge: Command for AleeBot
- * Copyright (C) 2017-2020 Alee Productions
+ * Copyright (C) 2017-2021 Alee Productions
*
* 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/commands/quote.js b/commands/quote.js
index 149fe37..37f5714 100644
--- a/commands/quote.js
+++ b/commands/quote.js
@@ -1,7 +1,7 @@
/** **************************************
*
* Quote: Command for AleeBot
- * Copyright (C) 2017-2020 Alee Productions
+ * Copyright (C) 2017-2021 Alee Productions
*
* 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
@@ -17,39 +17,33 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* *************************************/
-module.exports.run = async (client, message) => {
- const Discord = require('discord.js');
-
- let NewQuote;
-
- function GetNewQuote(quoteNum = -1) {
- NewQuote = new Discord.MessageEmbed();
-
- let quo = require('../storage/quotes.json').quotes;
+module.exports.run = async (client, message, args) => {
+ const quoteDB = require('../models/quote');
+ const { MessageEmbed } = require('discord.js');
+ let quoteID = args[0];
+
+ if (quoteID === undefined) {
+ const quoteList = await quoteDB.findAll({ attributes: ['id'] })
+ const random = crypto.getRandomValues(new Uint32Array(1));
+ quoteID = quoteList[random[0] % quoteList.length].id;
+ }
- if (quoteNum == -1) {
- quoteNum = Math.floor(Math.random() * 1000) % quo.length;
- quo=quo[quoteNum];
- }
+ const quote = await quoteDB.findOne({ where: { id: quoteID } })
- 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);
+ if (quote) {
+ const quoteEmbed = new MessageEmbed()
+ .setAuthor({ name: quote.author, iconURL: quote.authorImage })
+ .setDescription(quote.quote)
+ .setColor('#1fd619')
+ .setFooter('- ' + quote.year);
- return NewQuote;
+ await message.reply({ content: 'Alright, here\'s your quote.', embeds: [quoteEmbed] })
+ } else {
+ message.reply('Cannot find quote, specify the correct quote id.');
}
- const newquote = GetNewQuote();
- message.reply('Alright, here\'s your quote.');
- message.channel.send(newquote);
+
};
exports.conf = {
diff --git a/commands/say.js b/commands/say.js
index fe17b42..9ef9707 100644
--- a/commands/say.js
+++ b/commands/say.js
@@ -1,7 +1,7 @@
/** **************************************
*
* Say: Command for AleeBot
- * Copyright (C) 2017-2020 Alee Productions
+ * Copyright (C) 2017-2021 Alee Productions
*
* 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/commands/serverinfo.js b/commands/serverinfo.js
new file mode 100644
index 0000000..67442a2
--- /dev/null
+++ b/commands/serverinfo.js
@@ -0,0 +1,51 @@
+/** **************************************
+ *
+ * ServerInfo: Command for AleeBot
+ * Copyright (C) 2017-2021 Alee Productions
+ *
+ * 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
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * 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) => {
+ const Discord = require('discord.js');
+ const listedChannels = [];
+ let guildOwner = await message.guild.fetchOwner();
+ let memberCountNoBots = await message.guild.members.fetch().then((members) => members.filter(member => !member.user.bot).size);
+ const embed = new Discord.MessageEmbed()
+ .setAuthor(`${message.guild.name}`, `${message.guild.iconURL()}`)
+ .setDescription('Server Information')
+ .setThumbnail(message.guild.iconURL())
+ .addField('Main Information', `**Server Name:** ${message.guild.name}\n**Server ID:** ${message.guild.id}\n**Server Owner:** ${guildOwner.user.tag}`)
+ .addField('Join Dates', `**Created At:** ${message.guild.createdAt.toUTCString()}\n**AleeBot Joined:** ${message.guild.joinedAt.toUTCString()}`)
+ /*message.guild.channels.cacheType.forEach(channel => {
+ listedChannels.push(channel)
+ })*/
+ //.addField('Channels', `${listedChannels.join('\n')}`)
+ //.addField('Total Channels', message.guild.channelCountMode)
+ .addField('Total Members (with bots)', `${message.guild.memberCount}`)
+ .addField('Total Members (without bots)', `${memberCountNoBots}`)
+ .setColor('#1fd619');
+ await message.channel.send({embeds: [embed]});
+};
+
+exports.conf = {
+ aliases: ['sinfo'],
+ guildOnly: false,
+};
+exports.help = {
+ name: 'serverinfo',
+ description: 'Tells your info.',
+ usage: 'serverinfo',
+ category: '- Information Commands',
+};
diff --git a/commands/setlogchannel.js b/commands/setlogchannel.js
new file mode 100644
index 0000000..c04e926
--- /dev/null
+++ b/commands/setlogchannel.js
@@ -0,0 +1,46 @@
+/** **************************************
+ *
+ * SetLogChannel: Command for AleeBot
+ * Copyright (C) 2017-2021 Alee Productions
+ *
+ * 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
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * *************************************/
+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 [ guild ] = await guildDB.findOrCreate({ where: { id: message.guild.id } } )
+
+ 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}>`);
+};
+
+exports.conf = {
+ aliases: [],
+ guildOnly: false,
+};
+exports.help = {
+ name: 'setlogchannel',
+ description: 'Set the log channel.',
+ usage: 'setlogchannel #channel',
+ category: '- Moderation Commands',
+};
diff --git a/commands/setprefix.js b/commands/setprefix.js
index edb42c9..6800eea 100644
--- a/commands/setprefix.js
+++ b/commands/setprefix.js
@@ -1,7 +1,7 @@
/** **************************************
*
* SetPrefix: Command for AleeBot
- * Copyright (C) 2017-2020 Alee Productions
+ * Copyright (C) 2017-2021 Alee Productions
*
* 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
@@ -23,7 +23,7 @@ module.exports.run = async (client, message, args) => {
console.log(`[${moment().format('YYYY-MM-DD HH:mm:ss')}] ${message}`);
};
const fs = require('fs');
- if (!message.member.hasPermission('ADMINISTRATOR')) return message.reply('Sorry you need admin to set my prefix');
+ if (!message.member.permissions.has('ADMINISTRATOR')) return message.reply('Sorry you need admin to set my prefix');
if (!args[0] || args[0 == 'help']) return message.reply('Usage: <your prefix>setprefix <prefix>');
const prefixes = JSON.parse(fs.readFileSync('./storage/prefixes.json', 'utf8'));
diff --git a/commands/setup.js b/commands/setup.js
index bf6a14c..5c2f232 100644
--- a/commands/setup.js
+++ b/commands/setup.js
@@ -1,7 +1,7 @@
/****************************************
- *
+ *
* Setup: Command for AleeBot
- * Copyright (C) 2017-2020 Alee Productions
+ * Copyright (C) 2017-2021 Alee Productions
*
* 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
@@ -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/slowdown.js b/commands/slowdown.js
index c9fc611..55e441b 100644
--- a/commands/slowdown.js
+++ b/commands/slowdown.js
@@ -1,7 +1,7 @@
/** **************************************
*
* Slowdown: Command for AleeBot
- * Copyright (C) 2017-2020 Alee Productions
+ * Copyright (C) 2017-2021 Alee Productions
*
* 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
@@ -21,7 +21,7 @@ module.exports.run = async (client, message, args) => {
if (!message.member.permissions.has('MANAGE_CHANNELS')) return message.reply('It looks like that you don\'t have the permissions to slowdown channels.');
if (isNaN(args[0])) return message.reply('Please input a valid number to slowdown a channel.');
await message.channel.setRateLimitPerUser(args[0]);
- message.channel.send(`This channel has been ratelimited for ${args[0]} second(s).`);
+ message.channel.send(`This channel has been slowdown for ${args[0]} second(s).`);
};
diff --git a/commands/suggest.js b/commands/suggest.js
index 3adaa31..b503139 100644
--- a/commands/suggest.js
+++ b/commands/suggest.js
@@ -1,7 +1,7 @@
/** **************************************
*
* Suggest: Command for AleeBot
- * Copyright (C) 2017-2020 Alee Productions
+ * Copyright (C) 2017-2021 Alee Productions
*
* 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
@@ -18,15 +18,15 @@
*
* *************************************/
module.exports.run = async (client, message, args) => {
- if (message.guild.id != '243022206437687296') return message.reply('This is a ALP exclusive command.');
+ if (message.guild.id !== '243022206437687296') return message.reply('This is a Andrew Lee Projects exclusive command.');
const {MessageEmbed} = require('discord.js');
- client.channels.cache.get('427495678390960148').send(
+ client.channels.cache.get('427495678390960148').send({ embeds: [
new MessageEmbed()
.setColor('#1fd619')
.setTitle('Suggestion')
- .setDescription('This is a suggestion from '+ message.author.username +' please react to it using the following emojis.')
+ .setDescription('This is a suggestion from '+ message.author.username +'. Please react to it using the following emojis.')
.addField('Suggestion Contents', args.join(' ')),
- ).then((message) => {
+ ]}).then((message) => {
message.react('\u2705');
message.react('\u274E');
});
@@ -39,7 +39,7 @@ exports.conf = {
};
exports.help = {
name: 'suggest',
- description: 'Suggest a feature in ALP.',
+ description: 'Suggest a feature in Andrew Lee Projects.',
usage: 'suggest [suggestion]',
category: '- ALP Exclusive Commands',
};
diff --git a/commands/suggestfeature.js b/commands/suggestfeature.js
index 8b8b3c7..21b6849 100644
--- a/commands/suggestfeature.js
+++ b/commands/suggestfeature.js
@@ -1,7 +1,7 @@
/****************************************
- *
+ *
* SuggestFeature: Command for AleeBot
- * Copyright (C) 2017-2020 Alee Productions
+ * Copyright (C) 2017-2021 Alee Productions
*
* 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
@@ -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, args) => {
const { MessageEmbed } = require('discord.js');
-
- client.channels.cache.get('427495678390960148').send(
+
+ client.channels.cache.get('427495678390960148').send({ embeds: [
new MessageEmbed()
- .setColor ('#1fd619')
+ .setColor('#1fd619')
.setTitle('AleeBot Feature Suggestion')
- .setDescription('This is an AleeBot feature suggestion from '+ message.author.username +` sending from ${message.guild.name}.`)
+ .setDescription(`This is an AleeBot feature suggested from ${message.author.username}.`)
.addField('Suggestion Contents', args.join(' '))
+ .setFooter(`Sending from ${message.guild.name}`, message.guild.iconURL())]}
);
- await message.reply('Your suggestion has been shown to the ALP discord server!');
-
+ await message.reply('Your suggestion has been shown to the Andrew Lee Projects discord server!');
+
};
-
+
exports.conf = {
aliases: [],
guildOnly: false,
@@ -41,4 +42,4 @@ exports.help = {
usage: 'suggestfeature [suggestion]',
category: '- General Commands',
};
-
+
diff --git a/commands/jail.js b/commands/timeout.js
index 432f60a..bed9077 100644
--- a/commands/jail.js
+++ b/commands/timeout.js
@@ -1,7 +1,7 @@
/** **************************************
*
* Jail: Command for AleeBot
- * Copyright (C) 2017-2020 Alee Productions
+ * Copyright (C) 2017-2021 Alee Productions
*
* 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
@@ -18,16 +18,23 @@
*
* *************************************/
module.exports.run = async (client, message, args) => {
- if (message.guild.id != '243022206437687296') return message.reply('This is a ALP exclusive command.');
+ const { MessageEmbed } = require('discord.js');
- if (!message.member.hasPermission('BAN_MEMBERS')) return message.reply('It looks like that you don\'t have the permissions to jail members.');
- if (!message.guild.member(client.user).hasPermission('MANAGE_ROLES')) return message.reply('Uhh... I don\'t have permission to jail members.');
+ if (!message.member.permissions.has('BAN_MEMBERS')) return message.reply('It looks like that you don\'t have the permissions to jail members.');
+ if (!message.guild.members.cache.get(client.user.id).permissions.has('MANAGE_ROLES')) return message.reply('Uhh... I don\'t have permission to jail members.');
+
+ if (!args[1]) message.reply('Determine the length of the timeout...');
+ if (!args[2]) message.reply('Determine the reason of the timeout...');
const member = message.mentions.members.first();
if (!member) return await message.reply('Uhh... Please mention a member first.');
- member.roles.add(message.guild.roles.cache.get('428205205155217418'));
- message.reply(`Alright, I just jailed ${member.user.tag}.`);
+ const timeoutEmbed = new MessageEmbed()
+ .setDescription(`${member.user.tag} just got timed out!`)
+ .addField('Length', `${args[1]} minute(s)`)
+ .addField('Reason', args[2])
+ .setColor('#ec2727')
+ member.timeout(args[1] * 60 * 1000, args[2]).then(message.reply({embeds: [timeoutEmbed]}));
};
exports.conf = {
@@ -35,8 +42,8 @@ exports.conf = {
guildOnly: false,
};
exports.help = {
- name: 'jail',
- description: 'Jails a member',
- usage: 'jail [user]',
- category: '- ALP Exclusive Commands',
+ name: 'timeout',
+ description: 'Times out a member',
+ usage: 'timeout [user]',
+ category: '- Moderation Commands',
};
diff --git a/commands/uptime.js b/commands/uptime.js
index 90afc81..7453ad5 100644
--- a/commands/uptime.js
+++ b/commands/uptime.js
@@ -1,7 +1,7 @@
/** **************************************
*
* Uptime: Command for AleeBot
- * Copyright (C) 2017-2020 Alee Productions & OfficialRain
+ * Copyright (C) 2017-2021 Alee Productions & OfficialRain
*
* 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
@@ -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/commands/userinfo.js b/commands/userinfo.js
index f12454a..bc7ec8e 100644
--- a/commands/userinfo.js
+++ b/commands/userinfo.js
@@ -1,7 +1,7 @@
/** **************************************
*
* UserInfo: Command for AleeBot
- * Copyright (C) 2017-2020 Alee Productions
+ * Copyright (C) 2017-2021 Alee Productions
*
* 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
@@ -23,11 +23,11 @@ module.exports.run = async (client, message) => {
.setAuthor(message.author.tag, message.author.avatarURL())
.setDescription('User Information')
.setThumbnail(message.author.avatarURL())
- .addField('Names', '**Username:** ' + message.author.username + '\n**Current Nickname:** ' + message.member.displayName)
+ .addField('Names', `**Display Name:** ${message.member.displayName}\n**Username:** ${message.author.username}\n**Server Nickname:** ${message.member.displayName}`)
.addField('Identity', `**User ID:** ${message.author.id} `)
- .addField('Create and Join Times', '**Created At:** ' + message.member.user.createdAt.toUTCString() + '\n**Joined Guild At:** ' + message.member.joinedAt.toUTCString())
+ .addField('Create and Join Times', `**Created At:** ${message.member.user.createdAt.toUTCString()}\n**Joined Guild At:** ${message.member.joinedAt.toUTCString()}`)
.setColor('#1fd619');
- await message.channel.send({embed});
+ await message.channel.send({embeds: [embed]});
};
diff --git a/deprecated/balance.js b/deprecated/balance.js
index ca32081..bf7618c 100644
--- a/deprecated/balance.js
+++ b/deprecated/balance.js
@@ -1,7 +1,7 @@
/** **************************************
*
* Balance: Command for AleeBot
- * Copyright (C) 2017-2020 Alee Productions
+ * Copyright (C) 2017-2021 Alee Productions
*
* 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/deprecated/buy.js b/deprecated/buy.js
index 25f2589..98d4fcf 100644
--- a/deprecated/buy.js
+++ b/deprecated/buy.js
@@ -1,7 +1,7 @@
/** **************************************
*
* Buy: Command for AleeBot
- * Copyright (C) 2017-2020 Alee Productions
+ * Copyright (C) 2017-2021 Alee Productions
*
* 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/deprecated/daily.js b/deprecated/daily.js
index c0f04f9..4a38f26 100644
--- a/deprecated/daily.js
+++ b/deprecated/daily.js
@@ -1,7 +1,7 @@
/** **************************************
*
* Daily: Command for AleeBot
- * Copyright (C) 2017-2020 Alee Productions
+ * Copyright (C) 2017-2021 Alee Productions
*
* 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/deprecated/pay.js b/deprecated/pay.js
index bc27a4b..42e0f28 100644
--- a/deprecated/pay.js
+++ b/deprecated/pay.js
@@ -1,7 +1,7 @@
/** **************************************
*
* Pay: Command for AleeBot
- * Copyright (C) 2017-2020 Alee Productions
+ * Copyright (C) 2017-2021 Alee Productions
*
* 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/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 f19a40b..4c23498 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "aleebot",
- "version": "2.0.0",
+ "version": "2.13.0b",
"description": "A chat bot for discord written in discord.js.",
"main": "bot_discord.js",
"scripts": {
@@ -9,31 +9,28 @@
},
"repository": {
"type": "git",
- "url": "git+https://github.com/aleeproductions/AleeBot-JS.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": {
"blessed": "^0.1.81",
"colors": "^1.3.0",
- "dblapi.js": "^2.0.0",
- "discord.js": "^12.5.3",
+ "discord.js": "^13.0.1",
"eslint": "^7.1.0",
- "fs": "0.0.1-security",
+ "express": "^4.17.1",
"git-last-commit": "^0.3.0",
"i18next": "^19.4.4",
"moment": "^2.21.0",
- "node-opus": "^0.3.0",
"os": "^0.1.1",
"parse-ms": "^1.0.1",
"readline": "^1.3.0",
- "sequelize": "^6.2.3",
- "sqlite3": "^5.0.0",
- "ytdl-core": "^0.20.4"
+ "sequelize": "^6.30.0",
+ "sqlite3": "^5.1.6"
},
"devDependencies": {
"nodemon": "^2.0.2"
diff --git a/storage/activities.js b/storage/activities.js
new file mode 100644
index 0000000..2b2a286
--- /dev/null
+++ b/storage/activities.js
@@ -0,0 +1,102 @@
+const { abVersion } = require("./settings.json");
+const { version } = require("discord.js");
+
+const activities = [
+ `AleeBot ${abVersion}`,
+ 'Coding bytes',
+ 'Drawing shapes',
+ 'Fighting Quad',
+ 'Installing Windows 11',
+ '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',
+ 'Never punch a tree...',
+ 'Collecting data',
+ 'Dag dag!',
+ 'Developed by Andrew Lee',
+ 'When will 2.13 release?',
+ 'Alert Irruption !!!',
+ 'when',
+ 'Frying Shrimpbot',
+ 'RADIATION BABY',
+ 'Frivolously Spending',
+ 'Thanks! @Victor',
+ 'MCA DiscoVision',
+ 'Werq',
+ 'Pombo',
+ 'Ian Clary\'s First Day At FrivoloCo!',
+ 'Squid Airlines',
+ 'AirCS Race',
+ 'FrivoloCo',
+ 'I WANT 2 ORDER',
+ 'I REALLY WANT 2 ORDER',
+ 'Monica Is Going To Cosume You',
+ 'BLÅHAJ',
+ 'ShiftOS',
+ 'Histacom',
+ 'Wall Street',
+ 'Mac OS X Jaguar',
+ 'Abunchoo 12.10',
+ 'MikeOS',
+ 'theBeat',
+ 'FRESHMusicPlayer',
+ 'theShell',
+ 'theBeat',
+ 'theSlate',
+ 'theDesk',
+ 'Ultra Jump Mania!',
+ 'Battle Blaze',
+ 'Tempest',
+ 'Turbo Crash 9',
+ 'Pocket Gakusei',
+ 'Hidden Heroes',
+ 'Skybreakers',
+ 'Always Running',
+ 'Only Up',
+ 'Trade',
+ 'Breeze',
+ 'Steady',
+ 'Bluejay',
+ 'Exposing TAS-Corp',
+ 'Fighting Evelyn Claythorne',
+ 'Frying Dr. Sheridan',
+ 'Hacking SherCorp',
+ 'Games with Tari',
+ 'Decommissioning Meta Runners',
+ 'Installing Meta Runners',
+ '90% bug free!',
+ 'Google Wallet',
+ '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!',
+ 'Apple Vision Pro',
+ 'What is Web3?',
+ 'GNU\'s NOT UNIX!',
+ 'Linux, but actually GNU/Linux',
+ 'Praise RMS! (dont)',
+ 'Praying to St IGNUcius',
+ 'Debloating my ThinkPad',
+ 'Turbotastic!',
+ 'Goddamn Idiotic Truckload of Windows',
+ `Now running on Discord.JS ${version}!`
+];
+
+exports.activity = activities
diff --git a/storage/quotes.json b/storage/quotes.json
deleted file mode 100644
index 78c76a4..0000000
--- a/storage/quotes.json
+++ /dev/null
@@ -1,260 +0,0 @@
-{
- "quotes" :[
- {
- "id": 0,
- "author": "Victor Tran",
- "authorImage": "https://yt3.ggpht.com/-Iuf1v4-SSSM/AAAAAAAAAAI/AAAAAAAAAAA/89IYeQw--wU/photo.jpg",
- "quote": "A letter says a whole video!",
- "year": "2017",
- "url": "https://cdn.discordapp.com/attachments/278874966542385152/280566273992032258/Screenshot_20170213-160944.png"
- },
- {
- "id": 1,
- "author" : "Prince Hamlet: William Shakespeare",
- "authorImage" : "https://upload.wikimedia.org/wikipedia/commons/thumb/a/a2/Shakespeare.jpg/468px-Shakespeare.jpg",
- "quote" : "To be, or not to be, that is the question",
- "year" : "circa. 1600",
- "url" : "https://en.wikipedia.org/wiki/To_be,_or_not_to_be"
- },
- {
- "id": 2,
- "author" : "Diana Adams / Mitsubishi Mirage",
- "authorImage" : "https://yt3.ggpht.com/-tQLg1M-3org/AAAAAAAAAAI/AAAAAAAAAAA/-kkOvupMHXQ/s88-c-k-no-mo-rj-c0xffffff/photo.jpg",
- "quote" : "Dialing 000...\nNOOO!!!",
- "year" : "2017",
- "url" : "https://youtu.be/jDy57c7Y-4A?t:11m52s"
- },
- {
- "id": 3,
- "author" : "Diana Adams / Mitsubishi Mirage",
- "authorImage" : "https://yt3.ggpht.com/-tQLg1M-3org/AAAAAAAAAAI/AAAAAAAAAAA/-kkOvupMHXQ/s88-c-k-no-mo-rj-c0xffffff/photo.jpg",
- "quote" : "You'd have a crash by now!\nPardon?",
- "year" : "2017",
- "url" : "https://youtu.be/jDy57c7Y-4A?t:15m5s"
- },
- {
- "id": 4,
- "author" : "Ivoponop Pena",
- "authorImage" : "https://yt3.ggpht.com/-hZJxXIFsfB8/AAAAAAAAAAI/AAAAAAAAAAA/c_mjVjQWvTw/s48-c-k-no-mo-rj-c0xffffff/photo.jpg",
- "quote" : "i buy tablets for the bubble plastic",
- "year" : "2016",
- "url" : "https://www.youtube.com/watch?v:AqFDn0TxwH4"
- },
- {
- "id": 5,
- "author" : "The Mill on the Floss: George Eliot",
- "authorImage" : "https://upload.wikimedia.org/wikipedia/commons/8/81/George_Eliot_at_30_by_François_D%27Albert_Durade.jpg",
- "quote" : "Don't judge a book by its cover",
- "year" : "1860",
- "url" : "https://en.wikipedia.org/wiki/Don't_judge_a_book_by_its_cover"
- },
- {
- "id": 6,
- "author" : "tostoday",
- "authorImage" : "https://yt3.ggpht.com/-gNRclMiHzN4/AAAAAAAAAAI/AAAAAAAAAAA/BNEDEUakd4A/s48-c-k-no-mo-rj-c0xffffff/photo.jpg",
- "quote" : "I don't know why but Visopsys sounds like a medical condition",
- "year" : "circa. 2015",
- "url" : "https://www.youtube.com/watch?v:5T-vEZeY2v0"
- },
- {
- "id": 7,
- "author" : "Diana Adams",
- "authorImage" : "https://yt3.ggpht.com/-tQLg1M-3org/AAAAAAAAAAI/AAAAAAAAAAA/-kkOvupMHXQ/s88-c-k-no-mo-rj-c0xffffff/photo.jpg",
- "quote" : "4 × 1 000 000!? 4 000 000! It's not that hard...",
- "year" : "2014",
- "url" : "https://youtu.be/5T-vEZeY2v0?t:9m28s"
- },
- {
- "id": 8,
- "author" : "Victor Tran",
- "authorImage" : "https://yt3.ggpht.com/-Iuf1v4-SSSM/AAAAAAAAAAI/AAAAAAAAAAA/89IYeQw--wU/photo.jpg",
- "quote" : "Yes! I'm not *just* a blue happy face!",
- "year" : "2016",
- "url" : "https://youtu.be/2E21oad5pWQ"
- },
- {
- "id": 9,
- "author" : "ItsDeckyah",
- "authorImage" : "https://yt3.ggpht.com/-t70ZI-25A1k/AAAAAAAAAAI/AAAAAAAAAAA/uGrVakleFIM/s48-c-k-no-mo-rj-c0xffffff/photo.jpg",
- "quote" : "Always remember, don't let those who are bullying you ruin your life, they are out to do just that. And that's probably all they'll do their whole lives",
- "year" : "2017",
- "url" : "https://www.example.com/"
- },
- {
- "id": 10,
- "author" : "Mighty_Eagle073",
- "authorImage" : "https://yt3.ggpht.com/-Q5IvX3eEGl8/AAAAAAAAAAI/AAAAAAAAAAA/LspLd8v-PR8/s100-c-k-no-mo-rj-c0xffffff/photo.jpg",
- "quote" : "Spamming : Damning",
- "year" : "2017",
- "url" : "https://www.example.com/"
- },
- {
- "id": 11,
- "author" : "Nibble",
- "authorImage" : "https://yt3.ggpht.com/-SUPNlJ8a7qA/AAAAAAAAAAI/AAAAAAAAAAA/R_I4z7057_w/s100-c-k-no-mo-rj-c0xffffff/photo.jpg",
- "quote" : "AUTO CORRECF!!!",
- "year" : "2017",
- "url" : "https://www.example.com/"
- },
- {
- "id": 12,
- "author" : "Alee",
- "authorImage" : "https://cdn.discordapp.com/avatars/242775871059001344/b8a995d836bbb8529ae35dc12c2289de.png?size:2048",
- "quote" : "IS THERE A GOOOOOGALIE HERE!!!!",
- "year" : "2014",
- "url" : "https://youtu.be/Ap6fUlMx90A?t:2m30s"
- },
- {
- "id": 13,
- "author" : "143malliw",
- "authorImage" : "https://yt3.ggpht.com/-SUPNlJ8a7qA/AAAAAAAAAAI/AAAAAAAAAAA/R_I4z7057_w/s100-c-k-no-mo-rj-c0xffffff/photo.jpg",
- "quote" : "but i can't write a quote, for I am the quote",
- "year" : "2017",
- "url" : "https://www.example.com/"
- },
- {
- "id": 14,
- "author" : "AstralMod",
- "authorImage" : "https://cdn.discordapp.com/avatars/282048599574052864/56d2d99bf763df5a05f5d157108edbdc.png?size:2048",
- "quote" : "Welcome to the weekly chat chat!",
- "year" : "2017",
- "url" : "https://www.example.com/"
- },
- {
- "id": 15,
- "author" : "AstralPhaser",
- "authorImage" : "https://cdn.discordapp.com/avatars/230480971084988417/32f46a9671c6ceedc54b369ea73be178.png?size:2048",
- "quote" : "Ok the shrimp is now on the barbie",
- "year" : "2017",
- "url" : "https://media.discordapp.net/attachments/277922530973581312/355882401546764289/d300-123-6379-orton-wp.png"
- },
- {
- "id": 16,
- "author" : "Victor Tran",
- "authorImage" : "https://yt3.ggpht.com/-Iuf1v4-SSSM/AAAAAAAAAAI/AAAAAAAAAAA/89IYeQw--wU/photo.jpg",
- "quote" : ":joy: It's Cameron's Birthday!\nJoy!!!11!!111!!!!",
- "year" : "2017",
- "url" : "https://www.example.com/"
- },
- {
- "id": 17,
- "author" : "Steve Jobs",
- "authorImage" : "http://media.syracuse.com/news/photo/2011/01/9177328-large.jpg",
- "quote" : "It's really hard to design products by focus groups. A lot of times, people don't know what they want until you show it to them.",
- "year" : "1998",
- "url" : "https://www.huffingtonpost.com/gregory-ciotti/why-steve-jobs-didnt-list_b_5628355.html"
- },
- {
- "id": 18,
- "author" : "arencllc",
- "authorImage" : "https://cdn.discordapp.com/avatars/191290329985581069/e4d6ee5c8836f5c79c51611d0ba536eb.png?size:2048",
- "quote" : "Coding for uwp is as hard as using a UWP program.",
- "year" : "2017",
- "url" : "https://www.example.com/"
- },
- {
- "id": 19,
- "author" : "FloppyDiskDrive",
- "authorImage" : "https://cdn.discordapp.com/avatars/228271067821506560/a_0122b441972a6edfa6201ee871fad2a7.gif?size:2048",
- "quote" : "Victor would be a champ at synchronized thinking.",
- "year" : "2017",
- "url" : "https://www.example.com/"
- },
- {
- "id": 20,
- "author" : "Tembot",
- "authorImage" : "https://cdn.discordapp.com/avatars/361202413165608962/fba99664eb0aeec8a47db3a74a2029d5.png?size:2048",
- "quote" : "Why are u stocking me",
- "year" : "2017",
- "url" : "https://www.example.com/"
- },
- {
- "id": 21,
- "author" : "PieLover12",
- "authorImage" : "https://cdn.discordapp.com/avatars/344630031303311371/d84ae603ee53a5b54f7b78bcb4f733f2.png?size:2048",
- "quote" : "DIE YOU LOOK LIKE TINY GIRL",
- "year" : "2017",
- "url" : "https://www.example.com/"
- },
- {
- "id": 22,
- "author" : "AstralPhaser",
- "authorImage" : "https://cdn.discordapp.com/avatars/230480971084988417/32f46a9671c6ceedc54b369ea73be178.png?size:2048",
- "quote" : "anyway, I've gotta go now, I'll be back in 3 \"year\"s",
- "year" : "2017",
- "url" : "https://www.example.com/"
- },
- {
- "id": 23,
- "author" : "Victor Tran",
- "authorImage" : "https://yt3.ggpht.com/-Iuf1v4-SSSM/AAAAAAAAAAI/AAAAAAAAAAA/89IYeQw--wU/photo.jpg",
- "quote" : "Zero electric cars means they don't sell electric cards here",
- "year" : "2017",
- "url" : "https://www.example.com/"
- },
- {
- "id": 24,
- "author" : "Victor Tran",
- "authorImage" : "https://yt3.ggpht.com/-Iuf1v4-SSSM/AAAAAAAAAAI/AAAAAAAAAAA/89IYeQw--wU/photo.jpg",
- "quote" : "Unless you're living in like Denland or something",
- "year" : "2017",
- "url" : "https://www.example.com/"
- },
- {
- "id": 25,
- "author" : "Victor Tran",
- "authorImage" : "https://yt3.ggpht.com/-Iuf1v4-SSSM/AAAAAAAAAAI/AAAAAAAAAAA/89IYeQw--wU/photo.jpg",
- "quote" : "[goes and cries in a corner]\nWAAA\nWAAAAAAAAAA\nWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
- "year" : "2017",
- "url" : "https://cdn.discordapp.com/attachments/373884824034869249/374564169678061568/unknown.png"
- },
- {
- "id": 26,
- "author" : "OSFirstTimer",
- "authorImage" : "https://yt3.ggpht.com/-tQLg1M-3org/AAAAAAAAAAI/AAAAAAAAAAA/-kkOvupMHXQ/s88-c-k-no-mo-rj-c0xffffff/photo.jpg",
- "quote" : "The most popular version of Linux ever called Abuncho. Abuncho 12.10.",
- "year" : "2012",
- "url" : "https://youtu.be/PgGbZfR6Vec?t:6s"
- },
- {
- "id": 27,
- "author" : "Vat19",
- "authorImage" : "https://s3.amazonaws.com/images1.vat19.com/branding/vat19-mobile-logo-2x.png",
- "quote" : "VAAAAT NINETEEEEEEN! dot com ._.",
- "year" : "2017",
- "url" : "https://youtu.be/tnvcxBns_uQ?t:3m17s"
- },
- {
- "id": 28,
- "author" : "Steve Jobs",
- "authorImage" : "http://media.syracuse.com/news/photo/2011/01/9177328-large.jpg",
- "quote" : "Sometimes life is going to hit you in the head with a brick. Don't lose faith.",
- "year" : "circa. 2000",
- "url" : "https://www.example.com/"
- },
- {
- "id": 29,
- "author" : "Alee",
- "authorImage" : "https://cdn.discordapp.com/avatars/242775871059001344/b9814f1117027993d46cd5ae9ce2dd48.png?size=2048",
- "quote" : "Victor finally swore\nAnd I was like \"HOLY SHIT\"",
- "year" : "2018",
- "url" : "https://www.example.com/"
- },
- {
- "id": 30,
- "author" : "Zac Bowden",
- "authorImage" : "https://pbs.twimg.com/profile_images/963331874503430144/NTv0Dlaj_400x400.jpg",
- "quote" : "We can happily move on to Windows 11, Windows 10 is now done and dusted",
- "year" : "2018",
- "url" : "https://www.example.com/"
- },
- {
- "id": 31,
- "author" : "Victor Tran",
- "authorImage" : "https://yt3.ggpht.com/-Iuf1v4-SSSM/AAAAAAAAAAI/AAAAAAAAAAA/89IYeQw--wU/photo.jpg",
- "quote" : "WHAT THE - IS THAT\nMAN I JUST CAME BACK TO MY ROOM\nAND THEN I SEE YOU WITH A GUY IN IT",
- "year" : "2018",
- "url" : "https://www.example.com/"
- }
- ]
-}
diff --git a/storage/quotes.json.bak b/storage/quotes.json.bak
deleted file mode 100644
index 78c76a4..0000000
--- a/storage/quotes.json.bak
+++ /dev/null
@@ -1,260 +0,0 @@
-{
- "quotes" :[
- {
- "id": 0,
- "author": "Victor Tran",
- "authorImage": "https://yt3.ggpht.com/-Iuf1v4-SSSM/AAAAAAAAAAI/AAAAAAAAAAA/89IYeQw--wU/photo.jpg",
- "quote": "A letter says a whole video!",
- "year": "2017",
- "url": "https://cdn.discordapp.com/attachments/278874966542385152/280566273992032258/Screenshot_20170213-160944.png"
- },
- {
- "id": 1,
- "author" : "Prince Hamlet: William Shakespeare",
- "authorImage" : "https://upload.wikimedia.org/wikipedia/commons/thumb/a/a2/Shakespeare.jpg/468px-Shakespeare.jpg",
- "quote" : "To be, or not to be, that is the question",
- "year" : "circa. 1600",
- "url" : "https://en.wikipedia.org/wiki/To_be,_or_not_to_be"
- },
- {
- "id": 2,
- "author" : "Diana Adams / Mitsubishi Mirage",
- "authorImage" : "https://yt3.ggpht.com/-tQLg1M-3org/AAAAAAAAAAI/AAAAAAAAAAA/-kkOvupMHXQ/s88-c-k-no-mo-rj-c0xffffff/photo.jpg",
- "quote" : "Dialing 000...\nNOOO!!!",
- "year" : "2017",
- "url" : "https://youtu.be/jDy57c7Y-4A?t:11m52s"
- },
- {
- "id": 3,
- "author" : "Diana Adams / Mitsubishi Mirage",
- "authorImage" : "https://yt3.ggpht.com/-tQLg1M-3org/AAAAAAAAAAI/AAAAAAAAAAA/-kkOvupMHXQ/s88-c-k-no-mo-rj-c0xffffff/photo.jpg",
- "quote" : "You'd have a crash by now!\nPardon?",
- "year" : "2017",
- "url" : "https://youtu.be/jDy57c7Y-4A?t:15m5s"
- },
- {
- "id": 4,
- "author" : "Ivoponop Pena",
- "authorImage" : "https://yt3.ggpht.com/-hZJxXIFsfB8/AAAAAAAAAAI/AAAAAAAAAAA/c_mjVjQWvTw/s48-c-k-no-mo-rj-c0xffffff/photo.jpg",
- "quote" : "i buy tablets for the bubble plastic",
- "year" : "2016",
- "url" : "https://www.youtube.com/watch?v:AqFDn0TxwH4"
- },
- {
- "id": 5,
- "author" : "The Mill on the Floss: George Eliot",
- "authorImage" : "https://upload.wikimedia.org/wikipedia/commons/8/81/George_Eliot_at_30_by_François_D%27Albert_Durade.jpg",
- "quote" : "Don't judge a book by its cover",
- "year" : "1860",
- "url" : "https://en.wikipedia.org/wiki/Don't_judge_a_book_by_its_cover"
- },
- {
- "id": 6,
- "author" : "tostoday",
- "authorImage" : "https://yt3.ggpht.com/-gNRclMiHzN4/AAAAAAAAAAI/AAAAAAAAAAA/BNEDEUakd4A/s48-c-k-no-mo-rj-c0xffffff/photo.jpg",
- "quote" : "I don't know why but Visopsys sounds like a medical condition",
- "year" : "circa. 2015",
- "url" : "https://www.youtube.com/watch?v:5T-vEZeY2v0"
- },
- {
- "id": 7,
- "author" : "Diana Adams",
- "authorImage" : "https://yt3.ggpht.com/-tQLg1M-3org/AAAAAAAAAAI/AAAAAAAAAAA/-kkOvupMHXQ/s88-c-k-no-mo-rj-c0xffffff/photo.jpg",
- "quote" : "4 × 1 000 000!? 4 000 000! It's not that hard...",
- "year" : "2014",
- "url" : "https://youtu.be/5T-vEZeY2v0?t:9m28s"
- },
- {
- "id": 8,
- "author" : "Victor Tran",
- "authorImage" : "https://yt3.ggpht.com/-Iuf1v4-SSSM/AAAAAAAAAAI/AAAAAAAAAAA/89IYeQw--wU/photo.jpg",
- "quote" : "Yes! I'm not *just* a blue happy face!",
- "year" : "2016",
- "url" : "https://youtu.be/2E21oad5pWQ"
- },
- {
- "id": 9,
- "author" : "ItsDeckyah",
- "authorImage" : "https://yt3.ggpht.com/-t70ZI-25A1k/AAAAAAAAAAI/AAAAAAAAAAA/uGrVakleFIM/s48-c-k-no-mo-rj-c0xffffff/photo.jpg",
- "quote" : "Always remember, don't let those who are bullying you ruin your life, they are out to do just that. And that's probably all they'll do their whole lives",
- "year" : "2017",
- "url" : "https://www.example.com/"
- },
- {
- "id": 10,
- "author" : "Mighty_Eagle073",
- "authorImage" : "https://yt3.ggpht.com/-Q5IvX3eEGl8/AAAAAAAAAAI/AAAAAAAAAAA/LspLd8v-PR8/s100-c-k-no-mo-rj-c0xffffff/photo.jpg",
- "quote" : "Spamming : Damning",
- "year" : "2017",
- "url" : "https://www.example.com/"
- },
- {
- "id": 11,
- "author" : "Nibble",
- "authorImage" : "https://yt3.ggpht.com/-SUPNlJ8a7qA/AAAAAAAAAAI/AAAAAAAAAAA/R_I4z7057_w/s100-c-k-no-mo-rj-c0xffffff/photo.jpg",
- "quote" : "AUTO CORRECF!!!",
- "year" : "2017",
- "url" : "https://www.example.com/"
- },
- {
- "id": 12,
- "author" : "Alee",
- "authorImage" : "https://cdn.discordapp.com/avatars/242775871059001344/b8a995d836bbb8529ae35dc12c2289de.png?size:2048",
- "quote" : "IS THERE A GOOOOOGALIE HERE!!!!",
- "year" : "2014",
- "url" : "https://youtu.be/Ap6fUlMx90A?t:2m30s"
- },
- {
- "id": 13,
- "author" : "143malliw",
- "authorImage" : "https://yt3.ggpht.com/-SUPNlJ8a7qA/AAAAAAAAAAI/AAAAAAAAAAA/R_I4z7057_w/s100-c-k-no-mo-rj-c0xffffff/photo.jpg",
- "quote" : "but i can't write a quote, for I am the quote",
- "year" : "2017",
- "url" : "https://www.example.com/"
- },
- {
- "id": 14,
- "author" : "AstralMod",
- "authorImage" : "https://cdn.discordapp.com/avatars/282048599574052864/56d2d99bf763df5a05f5d157108edbdc.png?size:2048",
- "quote" : "Welcome to the weekly chat chat!",
- "year" : "2017",
- "url" : "https://www.example.com/"
- },
- {
- "id": 15,
- "author" : "AstralPhaser",
- "authorImage" : "https://cdn.discordapp.com/avatars/230480971084988417/32f46a9671c6ceedc54b369ea73be178.png?size:2048",
- "quote" : "Ok the shrimp is now on the barbie",
- "year" : "2017",
- "url" : "https://media.discordapp.net/attachments/277922530973581312/355882401546764289/d300-123-6379-orton-wp.png"
- },
- {
- "id": 16,
- "author" : "Victor Tran",
- "authorImage" : "https://yt3.ggpht.com/-Iuf1v4-SSSM/AAAAAAAAAAI/AAAAAAAAAAA/89IYeQw--wU/photo.jpg",
- "quote" : ":joy: It's Cameron's Birthday!\nJoy!!!11!!111!!!!",
- "year" : "2017",
- "url" : "https://www.example.com/"
- },
- {
- "id": 17,
- "author" : "Steve Jobs",
- "authorImage" : "http://media.syracuse.com/news/photo/2011/01/9177328-large.jpg",
- "quote" : "It's really hard to design products by focus groups. A lot of times, people don't know what they want until you show it to them.",
- "year" : "1998",
- "url" : "https://www.huffingtonpost.com/gregory-ciotti/why-steve-jobs-didnt-list_b_5628355.html"
- },
- {
- "id": 18,
- "author" : "arencllc",
- "authorImage" : "https://cdn.discordapp.com/avatars/191290329985581069/e4d6ee5c8836f5c79c51611d0ba536eb.png?size:2048",
- "quote" : "Coding for uwp is as hard as using a UWP program.",
- "year" : "2017",
- "url" : "https://www.example.com/"
- },
- {
- "id": 19,
- "author" : "FloppyDiskDrive",
- "authorImage" : "https://cdn.discordapp.com/avatars/228271067821506560/a_0122b441972a6edfa6201ee871fad2a7.gif?size:2048",
- "quote" : "Victor would be a champ at synchronized thinking.",
- "year" : "2017",
- "url" : "https://www.example.com/"
- },
- {
- "id": 20,
- "author" : "Tembot",
- "authorImage" : "https://cdn.discordapp.com/avatars/361202413165608962/fba99664eb0aeec8a47db3a74a2029d5.png?size:2048",
- "quote" : "Why are u stocking me",
- "year" : "2017",
- "url" : "https://www.example.com/"
- },
- {
- "id": 21,
- "author" : "PieLover12",
- "authorImage" : "https://cdn.discordapp.com/avatars/344630031303311371/d84ae603ee53a5b54f7b78bcb4f733f2.png?size:2048",
- "quote" : "DIE YOU LOOK LIKE TINY GIRL",
- "year" : "2017",
- "url" : "https://www.example.com/"
- },
- {
- "id": 22,
- "author" : "AstralPhaser",
- "authorImage" : "https://cdn.discordapp.com/avatars/230480971084988417/32f46a9671c6ceedc54b369ea73be178.png?size:2048",
- "quote" : "anyway, I've gotta go now, I'll be back in 3 \"year\"s",
- "year" : "2017",
- "url" : "https://www.example.com/"
- },
- {
- "id": 23,
- "author" : "Victor Tran",
- "authorImage" : "https://yt3.ggpht.com/-Iuf1v4-SSSM/AAAAAAAAAAI/AAAAAAAAAAA/89IYeQw--wU/photo.jpg",
- "quote" : "Zero electric cars means they don't sell electric cards here",
- "year" : "2017",
- "url" : "https://www.example.com/"
- },
- {
- "id": 24,
- "author" : "Victor Tran",
- "authorImage" : "https://yt3.ggpht.com/-Iuf1v4-SSSM/AAAAAAAAAAI/AAAAAAAAAAA/89IYeQw--wU/photo.jpg",
- "quote" : "Unless you're living in like Denland or something",
- "year" : "2017",
- "url" : "https://www.example.com/"
- },
- {
- "id": 25,
- "author" : "Victor Tran",
- "authorImage" : "https://yt3.ggpht.com/-Iuf1v4-SSSM/AAAAAAAAAAI/AAAAAAAAAAA/89IYeQw--wU/photo.jpg",
- "quote" : "[goes and cries in a corner]\nWAAA\nWAAAAAAAAAA\nWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
- "year" : "2017",
- "url" : "https://cdn.discordapp.com/attachments/373884824034869249/374564169678061568/unknown.png"
- },
- {
- "id": 26,
- "author" : "OSFirstTimer",
- "authorImage" : "https://yt3.ggpht.com/-tQLg1M-3org/AAAAAAAAAAI/AAAAAAAAAAA/-kkOvupMHXQ/s88-c-k-no-mo-rj-c0xffffff/photo.jpg",
- "quote" : "The most popular version of Linux ever called Abuncho. Abuncho 12.10.",
- "year" : "2012",
- "url" : "https://youtu.be/PgGbZfR6Vec?t:6s"
- },
- {
- "id": 27,
- "author" : "Vat19",
- "authorImage" : "https://s3.amazonaws.com/images1.vat19.com/branding/vat19-mobile-logo-2x.png",
- "quote" : "VAAAAT NINETEEEEEEN! dot com ._.",
- "year" : "2017",
- "url" : "https://youtu.be/tnvcxBns_uQ?t:3m17s"
- },
- {
- "id": 28,
- "author" : "Steve Jobs",
- "authorImage" : "http://media.syracuse.com/news/photo/2011/01/9177328-large.jpg",
- "quote" : "Sometimes life is going to hit you in the head with a brick. Don't lose faith.",
- "year" : "circa. 2000",
- "url" : "https://www.example.com/"
- },
- {
- "id": 29,
- "author" : "Alee",
- "authorImage" : "https://cdn.discordapp.com/avatars/242775871059001344/b9814f1117027993d46cd5ae9ce2dd48.png?size=2048",
- "quote" : "Victor finally swore\nAnd I was like \"HOLY SHIT\"",
- "year" : "2018",
- "url" : "https://www.example.com/"
- },
- {
- "id": 30,
- "author" : "Zac Bowden",
- "authorImage" : "https://pbs.twimg.com/profile_images/963331874503430144/NTv0Dlaj_400x400.jpg",
- "quote" : "We can happily move on to Windows 11, Windows 10 is now done and dusted",
- "year" : "2018",
- "url" : "https://www.example.com/"
- },
- {
- "id": 31,
- "author" : "Victor Tran",
- "authorImage" : "https://yt3.ggpht.com/-Iuf1v4-SSSM/AAAAAAAAAAI/AAAAAAAAAAA/89IYeQw--wU/photo.jpg",
- "quote" : "WHAT THE - IS THAT\nMAN I JUST CAME BACK TO MY ROOM\nAND THEN I SEE YOU WITH A GUY IN IT",
- "year" : "2018",
- "url" : "https://www.example.com/"
- }
- ]
-}
diff --git a/storage/vtquotes.json b/storage/vtquotes.json
deleted file mode 100644
index 79781cd..0000000
--- a/storage/vtquotes.json
+++ /dev/null
@@ -1,60 +0,0 @@
-{
- "quotes" :[
- {
- "author" : "Victor Tran",
- "authorImage" : "https://yt3.ggpht.com/-Iuf1v4-SSSM/AAAAAAAAAAI/AAAAAAAAAAA/89IYeQw--wU/photo.jpg",
- "quote" : "@Derpy ♀ For your own fucking good, learn what political correctness is.",
- "year" : "2017",
- "url" : "https://cdn.discordapp.com/attachments/371830028381454337/372263065472729088/2017-10-24_01.58.19.png"
- },
- {
- "author" : "Victor Tran",
- "authorImage" : "https://yt3.ggpht.com/-Iuf1v4-SSSM/AAAAAAAAAAI/AAAAAAAAAAA/89IYeQw--wU/photo.jpg",
- "quote" : "But couldn't you at least put the mounted disks on the dick or on Dinder?\nDOCK",
- "year" : "2017",
- "url" : "https://www.example.com"
- },
- {
- "author" : "Victor Tran",
- "authorImage" : "https://yt3.ggpht.com/-Iuf1v4-SSSM/AAAAAAAAAAI/AAAAAAAAAAA/89IYeQw--wU/photo.jpg",
- "quote" : "Just happened one gay?\nDAY\nOH BOY\nI BLAME SWIPE TYPING",
- "year" : "2017",
- "url" : "https://www.example.com"
- },
- {
- "author" : "Victor Tran",
- "authorImage" : "https://yt3.ggpht.com/-Iuf1v4-SSSM/AAAAAAAAAAI/AAAAAAAAAAA/89IYeQw--wU/photo.jpg",
- "quote" : "(there is a :middle_finger: emoji sitting in Gboard now after my brother sent that to Google assistant)",
- "year" : "2017",
- "url" : "https://www.example.com/"
- },
- {
- "author" : "Victor Tran",
- "authorImage" : "https://yt3.ggpht.com/-Iuf1v4-SSSM/AAAAAAAAAAI/AAAAAAAAAAA/89IYeQw--wU/photo.jpg",
- "quote" : "Who needs to say fuck when you can say - instead\nI blame that on my secretary :sob:",
- "year" : "2018",
- "url" : "https://www.example.com/"
- },
- {
- "author" : "Victor Tran",
- "authorImage" : "https://yt3.ggpht.com/-Iuf1v4-SSSM/AAAAAAAAAAI/AAAAAAAAAAA/89IYeQw--wU/photo.jpg",
- "quote" : "Dire Dire DICKS\nWAIT\nNO\nDOCKS",
- "year" : "2018",
- "url" : "https://www.example.com/"
- },
- {
- "author" : "Victor Tran",
- "authorImage" : "https://yt3.ggpht.com/-Iuf1v4-SSSM/AAAAAAAAAAI/AAAAAAAAAAA/89IYeQw--wU/photo.jpg",
- "quote" : "I need to find a new sexretary ASAP\n.....\nHELP\nAHHHHHHHHHHHH\nSECRETARY",
- "year" : "2018",
- "url" : "https://www.example.com/"
- },
- {
- "author" : "Victor Tran",
- "authorImage" : "https://yt3.ggpht.com/-Iuf1v4-SSSM/AAAAAAAAAAI/AAAAAAAAAAA/89IYeQw--wU/photo.jpg",
- "quote" : "are you serious blake LMAO",
- "year" : "2018",
- "url" : "https://www.example.com/"
- }
- ]
-}
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;