Compare commits

...

152 commits
v1.1 ... dev

Author SHA1 Message Date
0ae194f099
Announce the end of the project 2024-01-30 11:39:43 -06:00
0a683479f9
Delete LICENSE 2023-04-30 18:20:40 -05:00
16b17cc0a7
Merge pull request #79 from IDeletedSystem64/add-license-1
is good
2023-04-30 18:18:32 -05:00
5ab1c60f72
Create LICENSE 2023-04-30 18:18:12 -05:00
Sophie Marie
9b52e791a6
Update LICENSE.md 2023-04-30 18:17:33 -05:00
Sophie Marie
631e4987d6
Implement update checker
Co-authored-by: Aisuruneko <aisuru@nekos.tech>
2023-01-25 16:10:45 -06:00
Sophie Marie
38bc50d8a1
Add contribution guidelines. 2023-01-22 20:00:07 -06:00
Sophie Marie
21cd1239e3
Completely rewrite README 2023-01-22 17:48:47 -06:00
Sophie Marie
2c45f65a39
Add update checker function! 2023-01-22 17:32:26 -06:00
Sophie Marie
3713ba9cf2
Downgrade node-fetch to 2.6.6 (or did we not have node-fetch?) 2023-01-22 16:21:43 -06:00
Sophie Marie
6a2ecb14c3
Remove PTB invite link, tweak support paragraph. 2023-01-22 14:31:49 -06:00
Sophie Marie
99ed45f2fe
Remove package-lock from gitignore 2023-01-22 12:43:32 -06:00
Sophie Marie
cefdc65df1
Update dependencies, Add package-lock 2023-01-22 12:43:32 -06:00
Sophie Marie
1db1d5353b
Add issue templates 2023-01-07 14:17:33 -06:00
Sophie Marie
15739f7917
Specify that interactions aren't ephermal by default 2023-01-05 15:02:31 -06:00
Sophie Marie
54993de287
Remove release type and intents 2023-01-05 15:02:04 -06:00
Sophie Marie
052dc251a1
Remove unnecessary comment. 2023-01-05 12:27:17 -06:00
Sophie Marie
18d3ea778d
Credit the artist that created the modified Xenia icon 2023-01-04 21:02:25 -06:00
Sophie Marie
2815e3283b
Rename info to about, Replace Tux with Xenia 2023-01-04 20:51:46 -06:00
Sophie Marie
977f6e2a21
Fix missing async 2023-01-04 20:45:50 -06:00
Sophie Marie
fec4dc45ef
pull 1.4 dev changes into actual dev branch
pull 1.4 dev changes into actual dev branch, closes #73
2023-01-04 20:22:54 -06:00
Sophie Marie
cb621c21ec
Merge pull request #77 from IDeletedSystem64/mergeconflict
Pull dev changes into v14
2022-12-26 16:34:33 -06:00
Sophie Marie
f132421357
Merge branch 'v14' into mergeconflict 2022-12-26 16:34:12 -06:00
Sophie Marie
0681b8cf91
Update shutdown/restart msgs 2022-12-26 16:28:19 -06:00
Sophie Marie
c3e58abfc1
Add link to the avatar for mobile users 2022-12-26 16:22:44 -06:00
Sophie Marie
c484d727f5
no longer removing prefixes in 1.4 2022-12-26 15:58:28 -06:00
Sophie Marie
d74cb0b1ad
Update links 2022-12-26 15:57:29 -06:00
Sophie Marie
ce61a4607e
Bump year 2022-12-26 13:32:59 -06:00
Sophie Marie
d06d121bea
Pull changes from 1.3.1-1.3.2 into dev
fuck me
2022-12-26 13:26:11 -06:00
Sophie Marie
8d9e3937e6
Resolve merge conflicts 2022-12-26 13:17:42 -06:00
Sophie Marie
7b718c43aa
Change constants to use ApplicationCommandOptionType 2022-12-06 21:06:39 -06:00
Sophie Marie
f56dc3ff37
remove isInteractionCommand, it seems to have been removed in v14. 2022-12-06 21:05:49 -06:00
Sophie Marie
dab0aa4799
change intents to use GatewayIntentBits 2022-12-06 20:42:00 -06:00
Sophie Marie
44f71c0e2c
dont mix and match package managers 2022-12-06 19:43:30 -06:00
Sophie Marie
3496f1610e
i hate twitter (and not cause of mr musky ballz) 2022-11-23 22:59:52 -06:00
Sophie Marie
18134aa424 Upgrade dependencies and D.JS to V14 2022-11-19 13:50:27 -06:00
Sophie Marie
c89d8e9dce
Update to 1.3.2
Update to 1.3.2
2022-11-14 22:11:18 -06:00
Sophie Marie
a2dd3e0ca5 Fix GIF profile pictures not being displayed as the GIF 2022-11-14 22:04:06 -06:00
Sophie Marie
a8d34c9990 Specify that the user cannot use that cmd w/ prefix in 1.4 2022-11-14 16:10:10 -06:00
Sophie Marie
3c41e47df1 Make error msgs reply to the interaction 2022-11-14 16:08:31 -06:00
Sophie Marie
67fd0343db Bump version number 2022-11-14 15:36:26 -06:00
Sophie Marie
69ebf0cec4 Remove PTB invite link, link to announcement instead. 2022-11-14 15:30:58 -06:00
Sophie Marie
fb6556463b Update readme 2022-11-14 12:04:01 -06:00
Sophie Marie
7f5428a31b Update help status to use slashcmd 2022-11-13 17:35:52 -06:00
Sophie Marie
3d09aee2df Make messages reply to the interaction instd of sending message 2022-11-10 14:52:49 -06:00
IDeletedSystem64
b817c6b997 Undo changes to reload 2022-11-09 23:27:13 -06:00
Sophie Marie
5af776f4c2 RELOAD FINALLY WORKS WITH SLASHCMDS 2022-11-09 18:57:29 -06:00
Sophie Marie
d9206fe7fa Apparently yarn re-ordered the lock file? 2022-11-08 17:15:09 -06:00
Sophie Marie
24c9e9277a Specify D.js version, as well as dev dependencies. 2022-11-08 17:14:21 -06:00
Sophie Marie
f33bfce68c Remove PTB invite link 2022-11-06 11:20:46 -06:00
Sophie Marie
d650ae3dcc Put bot userID into a code block 2022-10-28 13:11:06 -05:00
Sophie Marie
0fa4c4da21 Upgrade dependencies to their newest versions 2022-10-28 13:09:27 -05:00
Sophie Marie
0f72bed119 Change quote 2022-10-24 16:03:26 -05:00
Sophie Marie
1da0d738ec Prefixes are now kaboom
But uh, that made a huge mess.
2022-10-24 16:03:06 -05:00
Sophie Marie
f3e2fd893d Delete messageCreate event 2022-10-24 16:02:31 -05:00
Sophie Marie
425143b109 Bump version number 2022-10-04 14:35:43 -05:00
Sophie Marie
3a33e4df9c
1.3.1
This is a tiny release to add a warning that we will move entirely to slash commands in 1.4.

Known issues

Slash commands may (rarely) error with "DiscordAPIError: Unknown interaction"
This will be fixed in 1.4
2022-10-03 20:18:43 -05:00
Sophie Marie
367a797851 Add a warning when using prefix commands that they're deprecated and will be removed. 2022-10-03 14:24:39 -05:00
Sophie Marie
6065dcb24d Yarn 2022-10-03 13:56:50 -05:00
Sophie Marie
0caa0ab2da Restructure gitignore 2022-10-03 13:56:36 -05:00
Sophie Marie
77acc594b2
Update to 1.3 Stable
nice pr 



Update to Stable 1,3:

    Eval now has access to Client by default. (This is probably a security mess, oh well. lmao)
    Move token and ownerID to .env (Make sure to update your configuration when updating!)
    Refactor the entire help command, It's actually helpful now!:
    Running help now provides a command list, and running help provides information about the command, as it should've originally.
    Refactor info command, It now looks nicer both inside and out.
    Fixed a bug in userinfo where the username in the embed name returned as the User ID
    Other bug fixes.

For developers:

    Added getTime function, This will allow you to get formatted time.
    Moved Uptime to its own

!!!MAKE SURE TO MOVE YOUR TOKEN AND USERID TO THE NEW .ENV!!!
2022-08-13 14:00:59 -05:00
Sophie Marie
ba8643b537
Update PTB to 1.3ptb_final
Pull latest commits into PTB.
2022-08-11 23:06:39 -05:00
IDeletedSystem64
ca3e1dd37e Mostly finish help refactor. Check desc for more info
The embed design could be hell of a lot more organized, but unfortunately I don't really want to spend the time to set up how I want to do categories for this release, so hopefully 1.4 this will be more organized.
2022-08-11 16:38:30 -05:00
IDeletedSystem64
95a7df98b3 Mention source and self-hosting, Clean up embed code 2022-08-11 16:11:43 -05:00
IDeletedSystem64
3a5f1ce2d2 Remove unneccessary comments 2022-08-10 22:27:57 -05:00
IDeletedSystem64
b7c4cb011e Fix errors when running with arguments | I don't trust this to not break again, xD 2022-08-10 22:27:17 -05:00
IDeletedSystem64
67b126ccff Add .env to Gitignore 2022-08-10 17:18:59 -05:00
Sophie Marie
de90322304
Update PTB to 1.3ptb_8.3.22
Refactor Help Command
Migrate the ownerID and bot token to dotenv
Change ping locations
Update documentation to support the configuration changes
2022-08-03 00:04:37 -05:00
Sophie Marie
55626d314e
Update documentation 2022-08-03 00:00:20 -05:00
IDeletedSystem64
ca47208da7 Refactor help command! 2022-08-02 23:53:44 -05:00
IDeletedSystem64
cb1eb0a5bd Migrate bot-token and ownerid to dotenv 2022-08-02 23:53:28 -05:00
Sophie Marie
0f78055a66
git is stupid 2022-08-02 23:26:39 -05:00
Sophie Marie
428dc5261e
Delete .env 2022-08-02 23:25:22 -05:00
IDeletedSystem64
950f00cbd0 Move configuration files to a seperate directory 2022-08-02 21:50:11 -05:00
IDeletedSystem64
479792d2db Move default .env to a .env.example 2022-08-02 21:49:52 -05:00
IDeletedSystem64
e0685cf7ae Begin support for dotenv 2022-08-02 21:36:56 -05:00
IDeletedSystem64
85f2bb252e Fix broken loading spinner on stop/restart commands 2022-07-28 21:10:39 -05:00
IDeletedSystem64
a0b8b2d5b7 Remove commands.md as it's no longer needed 2022-07-28 20:48:52 -05:00
IDeletedSystem64
b33280a417 Change ping locations, bump version number. 2022-07-28 20:18:06 -05:00
IDeletedSystem64
ca77b63c97 Fuck it. This only fixes the crashes on startup, Does NOT work with slash commands. 2022-07-26 23:27:46 -05:00
Sophie Marie
f7f332d654
Merge pull request #64 from IDeletedSystem64/dev
Public Test Build v1.3
2022-07-26 20:48:41 -05:00
IDeletedSystem64
d527cab9f5 Refactor entire help command, unfinished.
There are still a few thing's that need to be worked on, such as showing a category. This will rely on getting the parent folder of the command since I want to start categorizing everything like I should be to help make things easier to find.
2022-07-26 20:44:00 -05:00
IDeletedSystem64
e1056c4d20 Add new dependencies: node-fetch, dotenv 2022-07-22 21:53:40 -05:00
IDeletedSystem64
09d14f7a7d Update support 2022-07-22 21:51:16 -05:00
IDeletedSystem64
7541b53492 Wait that was suppose to be removed, not a comment. 2022-07-22 21:40:18 -05:00
IDeletedSystem64
2661631c10 Remove unneeded value 2022-07-22 20:47:35 -05:00
Sophie Marie
a50b45e784
Rewrite bot info and embed (#59) 2022-07-18 12:03:50 -05:00
IDeletedSystem64
dca559b365 Fix minutes displaying as hours 2022-07-16 12:10:37 -05:00
IDeletedSystem64
43f73c5403 Pass client to eval 2022-07-14 12:49:54 -05:00
Sophie Mondzelewski
77517f6a16 Make info use the new external function for uptime 2022-07-05 12:29:14 -05:00
Sophie Mondzelewski
e378121fbe Fix tSeconds making SystemUptime be the same as BotUptime 2022-07-05 12:28:31 -05:00
Sophie Mondzelewski
917d6a8c19 Move uptime to a file, This is partially for logging 2022-07-05 11:55:42 -05:00
Sophie Mondzelewski
af6b091cda Fix an oopsie poopsie, a fucky wucky! 2022-07-05 11:51:30 -05:00
IDeletedSystem64
8d154b5e8a Make totalSeconds use process.uptime(); 2022-07-04 11:53:42 -05:00
Sophie Marie
f67548a159
Delete embeds.json 2022-07-04 11:42:50 -05:00
IDeletedSystem64
f5f94a1026 Fix the embed name returning an userID instead of username 2022-07-04 11:08:50 -05:00
Sophie Marie
bd2a028370
Merge pull request #63 from IDeletedSystem64/stable
Apply hotfix to dev
2022-07-03 18:22:26 -05:00
Sophie Marie
c6170b5caf
Update stable to 1.2.1
1.2.1 hotfix
2022-07-03 18:20:37 -05:00
IDeletedSystem64
a740aadbdc Version update 2022-07-03 18:14:53 -05:00
IDeletedSystem64
f54d22beb7 Change how No Permissions error is sent, add logging. 2022-07-03 18:13:35 -05:00
IDeletedSystem64
8f2c8493bd Fix fatal problem where any user can stop the bot 2022-07-03 18:12:53 -05:00
IDeletedSystem64
b7f03b872c Fix a typo in a variable 2022-07-03 17:12:40 -05:00
IDeletedSystem64
b866641fac Add functions, getTime function. This is for logging 2022-07-02 21:08:00 -05:00
Sophie Marie
2ba1c54cf5
Update to Stable 1.2
Update to Stable 1.2
2022-07-01 21:53:15 -05:00
Sophie Marie
da08c6fe8c
Merge pull request #51 from IDeletedSystem64/dev
Anitrox 1.2
2022-07-01 19:52:31 -05:00
Sophie Marie
91bb98b0b9
Update commands.md 2022-07-01 19:50:44 -05:00
IDeletedSystem64
256646d082 Fix embed not sending, causing an empty message error 2022-07-01 19:43:28 -05:00
IDeletedSystem64
a2ec5405a2 Redo responses, Add basic logging. 2022-07-01 19:34:46 -05:00
IDeletedSystem64
4772ab8e0f setnick has been deprecated and removed. 2022-07-01 17:07:24 -05:00
BuildTools
564e644807 Merge branch 'dev' of https://github.com/IDeletedSystem64/anitrox into dev 2022-06-05 18:15:49 -05:00
BuildTools
8cffe5c5a6 Update license to GPLv3 2022-06-05 18:14:29 -05:00
Sophie Mondz
c392f3a759
Add license. 2022-06-05 16:50:48 -05:00
Sophie Mondz
f3c6bb0339
Merge pull request #55 from Foxinatel/dev
Offload event handlers to their own seperate files
2022-06-05 16:33:31 -05:00
Foxinatel
584a073ee0 Offload event handlers to their own seperate files 2022-05-14 09:57:05 +01:00
Sophie Mondz
0f6851adf8
Merge pull request #54 from Foxinatel/dev
null checking
2022-05-01 20:22:55 -05:00
Nathaniel Mason
dd6a5948ef null checking 2022-05-02 02:11:30 +01:00
Sophie Mondz
95a458efc9
Merge pull request #53 from Foxinatel/dev
Upgrade to discord.js v13
2022-04-29 17:47:15 -05:00
Nathaniel Mason
a8409b4828 fix function signatures and spelling errors 2022-04-23 19:07:50 +01:00
Nathaniel Mason
8c431e95c7 remove old todo 2022-04-22 21:28:11 +01:00
Nathaniel Mason
5a7040767e make variadic lists force at least one parameter + grammar corrections 2022-04-22 21:16:14 +01:00
Nathaniel Mason
7d10366f01 fix reload message parsing 2022-04-22 21:07:25 +01:00
Nathaniel Mason
9c28f9f228 fix no argument response to /reload 2022-04-22 21:02:05 +01:00
Nathaniel Mason
f921a67608 better support for sanboxing commands 2022-04-22 21:01:17 +01:00
Nathaniel Mason
984aaecc53 Filter lists down to only used inputs 2022-04-22 06:22:02 +01:00
Nathaniel Mason
37e0603ebf Basic implementation of variadic list inputs 2022-04-22 06:11:53 +01:00
Nathaniel Mason
ab2cd6bd7d Add (almost complete) slash command support 2022-04-22 05:50:42 +01:00
Nathaniel Mason
e3318d26c7 use the new client.application.commands to generate slash command interfaces 2022-04-22 02:53:03 +01:00
Nathaniel Mason
e315feb737 Add ESlint to help enforce coding style 2022-04-22 00:09:21 +01:00
Nathaniel Mason
4b254b8d4e I borked my last merge, oops 2022-04-21 20:33:55 +01:00
Nathaniel Mason
0bc4277389 Fix uinfo command, discord.js v13 seems to have removed user.presence 2022-04-21 20:23:58 +01:00
Nathaniel Mason
8c9c083d26 Fix avatar url handling for error messages 2022-04-21 18:24:12 +01:00
Nathaniel Mason
fb3f26cdd4 Merge upstream changed into Foxi's dev build 2022-04-21 18:09:05 +01:00
Nathaniel Mason
2189417343 Quick and dirty update to discord.js v13 2022-04-21 18:08:53 +01:00
IDeletedSystem64
9182daacb8 Remove opensource.js 2022-04-21 10:53:07 -05:00
IDeletedSystem64
b8bdeb5278 I forgot to remove the displayAvatarURL, lol 2022-04-21 10:52:44 -05:00
IDeletedSystem64
f07fad7951 Credit our awesome contributors! 2022-04-21 10:52:16 -05:00
IDeletedSystem64
9276975a45 Have error generator get user avatar instead of setting it in the command. 2022-04-21 10:05:07 -05:00
IDeletedSystem64
9388496662 Remove displayAvatarURL, This has been moved to the error generator. 2022-04-21 10:04:43 -05:00
IDeletedSystem64
2bd2c95e39 Remove displayAvatarURL, This has been moved to the error generator. 2022-04-21 10:04:03 -05:00
IDeletedSystem64
01515377b4 Fix displayAvatarURL 2022-04-21 09:25:14 -05:00
Sophie Mondz
35605fd9a9
Merge pull request #52 from Foxinatel/dev
Merge Foxinatels changes with base
2022-04-18 12:22:04 -05:00
Nathaniel Mason
05ed4d9c5c fix choose to optionally work with first line 2022-04-18 18:00:56 +01:00
Nathaniel Mason
22821dbd55 More uniform spacing 2022-04-18 17:30:12 +01:00
Nathaniel Mason
74066f666e Modules take names from the name of their file 2022-04-18 17:25:40 +01:00
Nathaniel Mason
0de4408797 add choose command 2022-04-18 17:06:53 +01:00
Nathaniel Mason
fc0235a1ce Update parameter names 2022-04-18 17:06:24 +01:00
Nathaniel Mason
db5c9f4f55 Update indentation 2022-04-18 17:03:01 +01:00
Nathaniel Mason
3fd6a893dd Fix string splitting regex to split on any whitespace 2022-04-18 16:13:06 +01:00
Nathaniel Mason
34115f41cf update README to mention shebang 2022-04-18 16:06:32 +01:00
Sophie Mondz
388535bb3a
Merge pull request #50 from IDeletedSystem64/dev
Fix a small formatting issue and remove deleted emoji
2022-04-14 21:25:40 -05:00
BuildTools
e89b2fae5c Fix a small formatting issue and remove deleted emoji 2022-04-14 21:17:31 -05:00
Sophie Mondz
d96c8abb6c
PTB1.1
PTB 1.1
2022-03-29 18:21:02 -05:00
49 changed files with 4070 additions and 855 deletions

3
.env.example Normal file
View file

@ -0,0 +1,3 @@
TOKEN="EVERYTHINGS SO FCKED AND IM TIRED OF BEING SCARED"
OWNERID="SO LETS GET OUT AND FCK UP EQUESTRIA"
# Do !!NOT!! share this file once filled out with anybody, Doing so can leak your Bot Token which will give anyone access to your bot!

17
.eslintrc.json Normal file
View file

@ -0,0 +1,17 @@
{
"env": {
"browser": true,
"commonjs": true,
"es2021": true
},
"extends": [
"standard"
],
"parserOptions": {
"ecmaVersion": "latest"
},
"rules": {
"no-eval": "off",
"semi": [1, "always"]
}
}

27
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View file

@ -0,0 +1,27 @@
---
name: Bug report
about: Create a report to help us improve Anitrox for you, for everybody. ❤️
title: ''
labels: bug
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Additional context**
Add any other context about the problem here, Such as version if applicable (ex: you host Anitrox yourself)

View file

@ -0,0 +1,20 @@
---
name: Feature request
about: Suggest an idea for this Anitrox
title: ''
labels: Suggestion
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

12
.gitignore vendored
View file

@ -1,5 +1,9 @@
node_modules/
#VSCode configurations.
.vscode
package-lock.json
releasenotes.txt
config.json
# NPM/Yarn stuff.
node_modules/
# Let's not leak any tokens now... That would be very bad
config.json
.env

9
LICENSE.md Normal file
View file

@ -0,0 +1,9 @@
# Released under MIT License
Copyright (c) 2023 Sophie Marie
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View file

@ -1,13 +1,39 @@
# the Anitrox project was formally discontinued on January 30th, 2024.
Anitrox was shut down on October 23rd, 2023. Development is now permenantly ceased and support is no longer available.
You will no longer be able to make merge requests, or open bug reports on the bot.
## Building on from here.
You can still fork the bot, and do whatever you'd like with it. We'll be shifting from the GPLv2 license to the MIT license with this change.
## Why now?
I've been becoming increasingly frustrated and unhappy with Discord as a service and platform, and have no desire in putting any more time into something for a platform I quite despise at this point. If you look at the last commits, There hasn't even *been* any active development for on going on months at this point. I've also been shifting my focus on programming towards other things, which has also been contributing to the lack of further development.
# Thank you.
Thank you to everyone who contributed to the bot, weather you contributed with code, a bug report or helped work out an issue, **thank you.**
#
## Get started!
To get started, You'll need Node.JS and NPM
You can get these through either your Linux distributions package manager, or if you are on Windows, by [clicking here.](https://nodejs.org/en/)
## Install those dependencies!
Run ``npm install`` and wait for it to download dependencies\
*For development: ESLint extension in your editor of choice*
## Configure yo bot!
Get or make your Discord bot token from [The Discord developer portal](https://discord.com/developers/applications), and rename ``.env.example`` to ``.env``. Set the ``TOKEN=""`` to the token you got from Discord
Then grab your Discord User ID and put it in ``OWNERID=""``, This tells the bot who owns it
⚠️ **WARNING**: This gives access to the bots controls, such as restart/shutdown, and eval! Make sure you use your own ID and not somebody elses.
## Get this party started!
Run ``npm start`` to start the bot!
<img src="https://i.pinimg.com/originals/ba/e4/de/bae4de2fa4f778f874c84928b8e19203.png" alt="Pinkie Pie blasting a party cannon" height="auto" width="50%">
# Anitrox Stable Branch (anitrox_stable)
This is the stable branch, If you want the prepackaged and prepared builds, you're at the right place.
# Dependencies to get started
To begin, you will need to satisfy the following dependencies:
Node.JS: 14
npm: 6.14
# Let's get this ~~party~~ bot started!
For first time start up, You will need to run ``npm install`` to install the needed npm packages.
Afterwards fill out the ``config-example.json`` and rename it to ``config.json``, then just run ``node start.js``!
⚠️ If you don't specify the Owner ID, Some commands such as the bot controls will be unusable!
# Support
Anitrox isn't really supported but you can get help from the Discord server if you need any: discord.gg/5nQtMNpf43

View file

@ -1,27 +0,0 @@
# Anitrox Command List
<> = Optionable
<br>
[] = Required
|Command|Arguments |Description |
|-------|----------|------------|
|Help |none |Help? Help!!|
|8ball |[Question]|Ask a question, Any question! |
|avatar |\<Member\> |Get a users beautiful avatar |
|bonk |[Member] | Bonk, no horny. |
|cheese |\<Member\>| Cheese.|
|cuddle |[Member] | Cuddle someone! |
|hug |[Member] | Hug someone! |
|info |none | Information about the bot and host.
|invite |none | Invite Anitrox to your server!
|kiss |[Member] | Kiss someone! |
|leskiss|[Member] | Lesbain kiss (Suggested by Emi)
|lick |[Member] | Did you just lick me!?
|nom |[Member] | Nom someone or something
|opensource| none | Source code for Anitrox
|pat |[Member] | Pat someone!
|ping |none | Ping Elon Musk! or Mars! nah jk, Discord.
|poke |[Member] | Poke someone!
|slap |[Member] | Slap someone :(
|snuggle|[Member] | Snuggle someone!
|uinfo |[Member] | Information about an user

View file

@ -1,30 +1,47 @@
module.exports = {
name: '8ball',
description: 'Ask Anitrox a question, any question! and they will answer it!',
syntax: ["[Question]"],
async execute(client, message, args, config) {
const index = Math.floor(Math.random() * config.answers.length);
const answer = config.answers[index]
const question = args.slice(0).join(" ")
const { ApplicationCommandOptionType } = require('discord.js');
if (!question) {
await message.channel.send(client.generateErrorMessage("You need to ask a question!", message.author.displayAvatarURL));
} else {
await message.channel.send({embed: {
"title": ":8ball: 8Ball",
"description": `Your amazing question: **${question}**`,
"color": 9442302,
"footer": {
"icon_url": message.author.displayAvatarURL(),
"text": config.footerTxt
module.exports = {
name: require('path').parse(__filename).name,
description: 'Ask Anitrox a question, any question! and they will answer it!',
options: [{
name: 'question',
description: 'The question to ask Anitrox',
required: true,
type: ApplicationCommandOptionType.String
}],
async parseMessage (client, config, message, args) {
await message.channel.send(this.handle(client, config, message.author, args.slice(0).join(' ')));
},
async parseInteraction (client, config, interaction) {
await interaction.reply(this.handle(client, config, interaction.user, interaction.options.getString('question')));
},
handle (client, config, user, question) {
const index = Math.floor(Math.random() * config.answers.length);
const answer = config.answers[index];
const avatarURL = user.displayAvatarURL();
if (!question) return client.generateErrorMessage('You need to ask a question!', avatarURL);
return {
embeds: [{
title: ':8ball: 8Ball',
description: `Your amazing question: **${question}**`,
color: 9442302,
footer: {
icon_url: avatarURL,
text: config.footerTxt
},
"fields": [
fields: [
{
"name": "Answer",
"value": `${answer}`
name: 'Answer',
value: `${answer}`
}
]
}});
}
}]
};
}
}
};

52
commands/about.js Normal file
View file

@ -0,0 +1,52 @@
const Uptime = require('../functions/uptime.js');
const os = require('os');
const osu = require('node-os-utils');
module.exports = {
name: 'about',
description: 'About this bot, as well as the system its running on',
options: [],
async parseMessage (client, config, message) {
await message.channel.send(this.handle(client, config, message.author));
},
async parseInteraction (client, config, interaction) {
await interaction.reply(this.handle(client, config, interaction.user));
},
handle (client, config, user) {
return {
embeds: [{
title: `<:AnitroxInfo:809651936831733791> Information about ${client.user.username}`,
description: `Everything you've ever wanted to know about your favorite bot, ${client.user.username}!`,
color: 9442302,
footer: {
icon_url: user.displayAvatarURL(),
text: config.footerTxt
},
thumbnail: {
url: client.user.displayAvatarURL()
},
fields: [
{ name: '<:anitrox:831193012699791361> Bot Information', value: '** **' },
{ name: 'Bot Name', value: `${client.user.tag}`, inline: true },
{ name: 'Bot ID', value: `${client.user.id}`, inline: true },
{ name: 'Bot Owner', value: isNaN(process.env.OWNERID) ? "Owner didn't set an OwnerID :(" : client.users.cache.get(process.env.OWNERID).username, inline: true },
{ name: 'Release Type', value: config.release, inline: true },
{ name: 'Version', value: config.build, inline: true },
{ name: ':gear: Bot Process Information', value: '** **' },
{ name: '<:memory:997565609179107369> Bot Memory Usage', value: `${(process.memoryUsage().heapUsed / 1024 / 1024).toFixed(2)} MiB`, inline: true },
{ name: ':timer: Bot Uptime', value: Uptime(client.uptime), inline: true },
{ name: ':one: Total Servers', value: `** **${client.guilds.cache.size}`, inline: true },
{ name: '<:hostinfo:997565639352926250> System Information', value: '** **' },
{ name: `${((process.platform === 'linux') ? '<:linux_xenia_trans:1060380032788353144>' : '<:windows:997919047511453696>')} System Platform`, value: process.platform, inline: true },
{ name: `${((process.platform === 'linux') ? ':gear: Kernel Version' : ':gear: System Version')}`, value: os.release(), inline: true },
{ name: ':timer: System Uptime', value: Uptime(os.uptime() * 1000), inline: true },
{ name: '<:cpu:997565592028598282> System CPU Architecture', value: os.arch(), inline: true },
{ name: '<:cpu:997565592028598282> System CPU Model', value: osu.cpu.model(), inline: true },
{ name: '<:nodejs:998609124453531740> Node.js Version', value: process.version, inline: true }
]
}]
};
}
};

View file

@ -1,21 +1,42 @@
const { ApplicationCommandOptionType } = require('discord.js');
module.exports = {
name: "avatar",
name: require('path').parse(__filename).name,
description: "Gets a user's avatar.",
async execute(client, message, args, config) {
const user = message.mentions.users.first() || client.users.cache.get(args[0]) || message.author;
options: [{
name: 'user',
description: 'Another user',
required: false,
type: ApplicationCommandOptionType.User
},
{
name: 'userid',
description: "Another user's ID",
required: false,
type: ApplicationCommandOptionType.User
}],
await message.channel.send({embed: {
"title": `:frame_photo: ${user.username}'s Beautiful Avatar!`,
"color": 9442302,
"footer": {
"icon_url": message.author.displayAvatarURL(),
"text": config.footerTxt
},
"image": {
"url": user.displayAvatarURL()
}
}});
async parseMessage (client, config, message, args) {
const target = message.mentions.users.first() || client.users.cache.get(args[0]) || message.author;
await message.channel.send(this.handle(client, config, message.author, target));
},
async parseInteraction (client, config, interaction) {
const target = interaction.options.getUser('user') || client.users.cache.get(interaction.options.getString('userid')) || interaction.user;
await interaction.reply(this.handle(client, config, interaction.user, target));
},
handle (_, config, user, target) {
return {
embeds: [{
title: `:frame_photo: ${target.username}'s Beautiful Profile Picture!`,
description: `[Profile picture link (Mobile users, tap here!)](${target.displayAvatarURL({ dynamic: true })})`,
color: 9442302,
image: { url: target.displayAvatarURL({ dynamic: true }) },
footer: { icon_url: user.displayAvatarURL(), text: config.footerTxt }
}]
};
}
}
};

View file

@ -1,25 +1,40 @@
const { ApplicationCommandOptionType } = require('discord.js');
module.exports = {
name: "bonk",
description: "Bonks a user!",
async execute(client, message, _, config) {
const taggedUser = message.mentions.users.first();
if(!taggedUser) {
await message.channel.send(client.generateErrorMessage("You need to @mention a user!", message.author.displayAvatarURL()));
} else {
await message.channel.send({embed: {
"title": "<a:SylvBonk:801185845847130113> Bonk",
"description": `${taggedUser} You have been bonked by ${message.author}!`,
"color": 9442302,
"footer": {
"icon_url": message.author.displayAvatarURL(),
"text": config.footerTxt
name: require('path').parse(__filename).name,
description: 'Bonks a user!',
options: [{
name: 'user',
description: 'The user to bonk',
required: true,
type: ApplicationCommandOptionType.User
}],
async parseMessage (client, config, message) {
await message.channel.send(this.handle(client, config, message.author, message.mentions.users.first()));
},
async parseInteraction (client, config, interaction) {
await interaction.reply(this.handle(client, config, interaction.user, interaction.options.getUser('user')));
},
handle (client, config, user, target) {
if (!target) return client.generateErrorMessage('You need to @mention a user!', user.displayAvatarURL());
return {
embeds: [{
title: '<a:SylvBonk:801185845847130113> Bonk',
description: `${target} You have been bonked by ${user}!`,
color: 9442302,
footer: {
icon_url: user.displayAvatarURL(),
text: config.footerTxt
},
"image": {
"url": "https://cdn.discordapp.com/attachments/793537380330111028/801194481549312060/HappyBONK.gif"
image: {
url: 'https://cdn.discordapp.com/attachments/793537380330111028/801194481549312060/HappyBONK.gif'
}
}});
}
}]
};
}
}
};

View file

@ -1,23 +1,40 @@
const { ApplicationCommandOptionType } = require('discord.js');
module.exports = {
name: "cheese",
description: "Cheese an user, or run just ``n!cheese`` for a surprise :eyes:",
async execute(_0, message, _1, config) {
const taggedUser = message.mentions.users.first();
if(!taggedUser) {
await message.channel.send("*slams cheese on desk*\n**Cheese.** https://www.youtube.com/watch?v=Or4IE8fkpn4");
} else {
await message.channel.send({embed: {
"title": ":cheese: Cheesed",
"description": `${taggedUser} You have been cheesed by ${message.author}!`,
"color": 16312092,
"footer": {
"icon_url": message.author.displayAvatarURL(),
"text": config.footerTxt
name: require('path').parse(__filename).name,
description: 'Cheese a user, or run with no arguments for a surprise :eyes:',
options: [{
name: 'user',
description: 'The user to cheese',
required: false,
type: ApplicationCommandOptionType.User
}],
async parseMessage (client, config, message) {
await message.channel.send(this.handle(client, config, message.author, message.mentions.users.first()));
},
async parseInteraction (client, config, interaction) {
await interaction.reply(this.handle(client, config, interaction.user, interaction.options.getUser('user')));
},
handle (_, config, user, target) {
if (!target) return '*slams cheese on desk*\n**Cheese.** https://www.youtube.com/watch?v=Or4IE8fkpn4';
return {
embeds: [{
title: ':cheese: Cheesed',
description: `${target} You have been cheesed by ${user}!`,
color: 16312092,
footer: {
icon_url: user.displayAvatarURL(),
text: config.footerTxt
},
"image": {
"url": "https://cdn.discordapp.com/attachments/803658122299572255/812867714368536636/R06325af354168febcafd96b8328b7590.png"
image: {
url: 'https://cdn.discordapp.com/attachments/803658122299572255/812867714368536636/R06325af354168febcafd96b8328b7590.png'
}
}});
}
}]
};
}
}
};

42
commands/choose.js Normal file
View file

@ -0,0 +1,42 @@
const { ApplicationCommandOptionType } = require('discord.js');
module.exports = {
name: require('path').parse(__filename).name,
description: 'Give some lines of input, and get one back at random',
options: [...Array(10).keys()].map(i => ({
name: `option${i + 1}`,
description: 'Another option',
required: i === 0,
type: ApplicationCommandOptionType.String
})),
async parseMessage (client, config, message, args) {
let [head, ...options] = message.content.split(/\s*\n\s*/);
head = head.slice(this.name.length + config.prefix.length);
if (head) options.push(head);
await message.channel.send(this.handle(client, config, message.author, options));
},
async parseInteraction (client, config, interaction) {
console.log([...Array(10).keys()].map(i => interaction.options.getString(`option${i + 1}`)).filter(str => str));
await interaction.reply(this.handle(client, config, interaction.user, [...Array(10).keys()].map(i => interaction.options.getString(`option${i + 1}`)).filter(str => str)));
},
handle (client, config, user, options) {
if (!options.length) return client.generateErrorMessage('You need to provide some input!', user.displayAvatarURL());
const answer = options[Math.floor(Math.random() * options.length)];
return {
embeds: [{
title: 'I have made my decision:',
description: answer,
color: 8311585,
footer: {
icon_url: user.displayAvatarURL(),
text: config.footerTxt
}
}]
};
}
};

49
commands/contributors.js Normal file
View file

@ -0,0 +1,49 @@
module.exports = {
name: require('path').parse(__filename).name,
description: 'Attributions to users who have worked on Anitrox!',
options: [],
async parseMessage (_, config, message) {
await message.channel.send(this.handle(config, message.author));
},
async parseInteraction (_, config, interaction) {
await interaction.reply(this.handle(config, interaction.user));
},
handle (config, user) {
return {
embeds: [{
title: 'Contributors',
description: 'Links to check out our contributors!',
color: 52508,
footer: {
icon_url: user.displayAvatarURL(),
text: config.footerTxt
},
thumbnail: {
url: 'https://cdn.discordapp.com/emojis/809651812323164192.webp?size=128&quality=lossless'
},
fields: [
{
name: 'chuu_shi',
value: 'Thanks to Chuu for letting me use some of his resources to host Anitrox!\n <:GitHub:778165439477841981> [Check out his code!](https://github.com/chuushi)\n <:discord:1057053513210937444> [Check out his Discord community!](https://port.chuu.sh/)'
},
{
name: 'TheCodingGuy',
value: "Matt has helped quite a bit with Anitrox, especially in the early days of Anitrox's development! He even has his own bot!\n <:GitHub:778165439477841981> [Check out his code!](https://github.com/Aisuruneko)\n :robot: [Check out TheCodingBot!](https://github.com/NetroCorp/TheCodingBot)\n :globe_with_meridians: [Check out Netro Corp!](https://netrocorp.net)"
},
{
name: 'Foxinatel',
value: 'Foxi has made massive improvements to Anitrox, such as improving error handling, and much more!\n<:GitHub:778165439477841981> [Check out his code!](https://github.com/foxinatel)'
},
{
name: 'Zaeroses',
value: 'Zaeroses created the Xenia icon Ive used in about when a user hosts Anitrox on Linux based systems. Its been modified to have a transflag-colored glow in the background. \n<:fediverse:1060390228881322004> [Check out their Mastodon! (chitter.xyz)](https://chitter.xyz/@Zaeroses)\n<:GitHub:778165439477841981> [Checkout their code!](https://github.com/Zaeroses)'
}
]
}]
};
}
};

View file

@ -1,35 +1,48 @@
const { ApplicationCommandOptionType } = require('discord.js');
const gifchoices = [
"https://i.pinimg.com/originals/4d/89/d7/4d89d7f963b41a416ec8a55230dab31b.gif",
"https://media1.tenor.com/images/6d73b0a9cadef5310be4b6160d2f959a/tenor.gif?itemid=12099823",
"https://media.tenor.com/images/2636cf3c8152631b4630bf71757a4afa/tenor.gif",
"https://i.imgur.com/JiFpT5E.gif"
'https://i.pinimg.com/originals/4d/89/d7/4d89d7f963b41a416ec8a55230dab31b.gif',
'https://media1.tenor.com/images/6d73b0a9cadef5310be4b6160d2f959a/tenor.gif?itemid=12099823',
'https://media.tenor.com/images/2636cf3c8152631b4630bf71757a4afa/tenor.gif',
'https://i.imgur.com/JiFpT5E.gif'
];
module.exports = {
name: "cuddle",
description: "Cuddle an user!",
async execute(client, message, _, config) {
name: require('path').parse(__filename).name,
description: 'Cuddle a user!',
options: [{
name: 'user',
description: 'The user to cuddle',
required: true,
type: ApplicationCommandOptionType.User
}],
const taggedUser = message.mentions.users.first();
const index = Math.floor(Math.random() * gifchoices.length);
const gif = (gifchoices[index]);
async parseMessage (client, config, message) {
await message.channel.send(this.handle(client, config, message.author, message.mentions.users.first()));
},
if(!taggedUser) {
await message.channel.send(client.generateErrorMessage("You need to @mention a user!", message.author.displayAvatarURL()));
} else {
await message.channel.send({embed: {
"title": ":heart: Cuddle",
"description": `${taggedUser} You have been cuddled by ${message.author}!`,
"color": 9442302,
"footer": {
"icon_url": message.author.displayAvatarURL(),
"text": config.footerTxt
async parseInteraction (client, config, interaction) {
await interaction.reply(this.handle(client, config, interaction.user, interaction.options.getUser('user')));
},
handle (client, config, user, target) {
if (!target) return client.generateErrorMessage('You need to @mention a user!', user.displayAvatarURL());
const gif = gifchoices[Math.floor(Math.random() * gifchoices.length)];
return {
embeds: [{
title: ':heart: Cuddle',
description: `${target} You have been cuddled by ${user}!`,
color: 9442302,
footer: {
icon_url: user.displayAvatarURL(),
text: config.footerTxt
},
"image": {
"url": gif
image: {
url: gif
}
}});
}
}]
};
}
}
};

View file

@ -1,34 +1,53 @@
const { inspect } = require("util");
const { ApplicationCommandOptionType } = require('discord.js');
const { inspect } = require('util');
module.exports = {
name: 'eval',
description: 'Executes JS code',
async execute(client, message, args, config) {
if (message.author.id == config.ownerID) {
name: require('path').parse(__filename).name,
description: 'handles JS code',
options: [{
name: 'code',
description: 'The string to evaluate',
required: true,
type: ApplicationCommandOptionType.String
}],
async parseMessage (client, config, message, args) {
await message.channel.send(this.handle(client, config, message.author, args.join(' ')));
},
async parseInteraction (client, config, interaction) {
await interaction.reply(this.handle(client, config, interaction.user, interaction.options.getString('code')));
},
handle (client, config, user, code) {
if (user.id === process.env.OWNERID) {
try {
const code = args.join(" ");
const evaled = inspect(eval(code));
await message.channel.send(evaled, {code:"xl"});
// await message.channel.send(evaled, { code: 'xl' });
return `\`\`\`js\n${evaled}\n\`\`\``;
} catch (error) {
await message.channel.send({embed: {
"title": "<:AnitroxError:809651936563429416> **Something went wrong! **",
"color": 13632027,
"footer": {
"icon_url": message.author.displayAvatarURL(),
"text": config.footerTxt
},
"fields": [
{
"name": "**What Happened?**",
"value": "The command you tried to run failed to execute due to an error."
return {
embeds: [{
title: '<:AnitroxError:809651936563429416> **Something went wrong! **',
color: 13632027,
footer: {
icon_url: user.displayAvatarURL(),
text: config.footerTxt
},
{
"name": "Error Info",
"value": error.message
}
]
}});
fields: [
{
name: '**What Happened?**',
value: 'The command you tried to run failed to handle due to an error.'
},
{
name: 'Error Info',
value: error.message
}
]
}]
};
}
};
}
}
};

View file

@ -1,28 +1,64 @@
module.exports = {
name: 'help',
description: 'Get help on anything from commands, to what the bot does! just not your homework..',
syntax: '<Command>',
const { ApplicationCommandOptionType } = require('discord.js');
async execute(_0, message, _1, config) {
await message.channel.send({embed: {
"title": "HELP! SEYMOUR! THE BOT IS ON FIRE!",
"description": "Get help on anything from commands, to what the bot does! just not your homework..",
"color": 9442302,
"footer": {
"icon_url": message.author.displayAvatarURL(),
"text": `${config.footerTxt} | No mother it's just the northern lights`
},
"fields": [
{
"name": "Command List",
"value": "[Click here!](https://github.com/IDeletedSystem64/anitrox/blob/dev/commands.md)"
module.exports = {
name: require('path').parse(__filename).name,
description: 'Get help on anything from commands, to what the bot does! just not your homework..',
options: [{
name: 'help',
description: 'The command you want information on',
required: false,
type: ApplicationCommandOptionType.String
}],
async parseMessage (client, config, message, args) {
await message.channel.send(this.handle(client, config, message.author, args[0]));
},
async parseInteraction (client, config, interaction) {
await interaction.reply(this.handle(client, config, interaction.user, interaction.options.getString('help')));
},
handle (client, config, user, command) {
if (!command) {
return {
embeds: [{
color: 9442302,
title: `:question: SEYMOUR! THE ${client.user.username} IS ON FIRE!`,
description: `Run ${config.prefix}help for more information on each command.`,
footer: {
icon_url: user.displayAvatarURL(),
text: config.footerTxt
},
fields: [
{ name: 'Commands', value: client.commands.map(command => command.name).join(', ') }
]
}]
};
}
const cmdName = command;
const cmd = client.commands.get(cmdName);
console.log(cmd.options.map);
if (!cmd) {
return client.generateErrorMessage(`${cmdName} is not a valid command. Run ${config.prefix}help for a command list!`);
}
return {
embeds: [{
color: 9442302,
title: ':question: Command Help',
description: `Everything you've ever wanted to know about ${cmdName}!`,
footer: {
icon_url: user.displayAvatarURL(),
text: config.footerTxt
},
{
"name": "...Or is the bot actually on fire?",
"value": "Join the [support server!](https://discord.gg/grebRGsBZ3)"
}
]
}});
fields: [
{ name: 'Command Name', value: `${cmdName}`, inline: true },
{ name: 'Command Description', value: cmd.description, inline: true },
{ name: 'Command Options', value: cmd.options.map(option => option.name).join('\n') || 'None', inline: true },
{ name: 'Command Option Description', value: cmd.options.map(option => option.description).join('\n') || 'None', inline: true }
// { name: 'Command Option Required?', value: cmd.options.map(option => option.required) ? 'Yes' : 'No' }
]
}]
};
}
}
};

View file

@ -1,34 +1,49 @@
const { ApplicationCommandOptionType } = require('discord.js');
const gifchoices = [
"https://cdn.discordapp.com/attachments/803658122299572255/807670647920001044/hug2.gif",
"https://cdn.discordapp.com/attachments/803658122299572255/807670797983285268/hug1.gif",
"https://cdn.discordapp.com/attachments/803658122299572255/807670951113392178/gif6.gif",
"https://cdn.discordapp.com/attachments/803658122299572255/808834617494208532/gif3new.gif",
"https://cdn.discordapp.com/attachments/803658122299572255/807671126376972308/gif4.gif"
'https://cdn.discordapp.com/attachments/803658122299572255/807670647920001044/hug2.gif',
'https://cdn.discordapp.com/attachments/803658122299572255/807670797983285268/hug1.gif',
'https://cdn.discordapp.com/attachments/803658122299572255/807670951113392178/gif6.gif',
'https://cdn.discordapp.com/attachments/803658122299572255/808834617494208532/gif3new.gif',
'https://cdn.discordapp.com/attachments/803658122299572255/807671126376972308/gif4.gif'
];
module.exports = {
name: "hug",
description: "Hugs a user!",
async execute(client, message, _, config) {
const taggedUser = message.mentions.users.first();
if(!taggedUser) {
await message.channel.send(client.generateErrorMessage("You need to @mention a user!", message.author.displayAvatarURL()));
} else {
const gif = gifchoices[Math.floor(Math.random() * gifchoices.length)];
await message.channel.send({embed: {
"title": "<a:ABlobCatHuggle:801232248035999784> Hug",
"description": `${taggedUser} You have been hugged by ${message.author}!`,
"color": 8311585,
"footer": {
"icon_url": message.author.displayAvatarURL(),
"text": config.footerTxt
name: require('path').parse(__filename).name,
description: 'Hugs a user!',
options: [{
name: 'user',
description: 'The user to hug',
required: true,
type: ApplicationCommandOptionType.String
}],
async parseMessage (client, config, message) {
await message.channel.send(this.handle(client, config, message.author, message.mentions.users.first()));
},
async parseInteraction (client, config, interaction) {
await interaction.reply(this.handle(client, config, interaction.user, interaction.options.getUser('user')));
},
handle (client, config, user, target) {
if (!target) return client.generateErrorMessage('You need to @mention a user!', user.displayAvatarURL());
const gif = gifchoices[Math.floor(Math.random() * gifchoices.length)];
return {
embeds: [{
title: '<a:ABlobCatHuggle:801232248035999784> Hug',
description: `${target} You have been hugged by ${user}!`,
color: 8311585,
footer: {
icon_url: user.displayAvatarURL(),
text: config.footerTxt
},
"image": {
"url": gif
image: {
url: gif
}
}});
}
}]
};
}
}
};

View file

@ -1,106 +0,0 @@
module.exports = {
name: 'info',
description: 'Shows bot and host information',
async execute(client, message, _, config) {
function Uptime(uptime) {
const totalSeconds = (uptime / 1000);
const days = parseInt(totalSeconds / 86400);
const hours = parseInt((totalSeconds % 86400) / 3600);
const minutes = parseInt((totalSeconds % 3600) / 60);
const seconds = parseInt(totalSeconds % 60);
const daystring = days + (days === 1 ? "day" : "days");
const hourstring = hours + (hours === 1 ? "hour" : "hours");
const minutetring = minutes + (minutes === 1 ? "minute" : "minutes");
const secondstring = seconds + (seconds === 1 ? "second" : "seconds");
return `${daystring}**, **${hourstring}**, **${minutetring}**, **${secondstring}`;
}
const os = require("os");
const osu = require('node-os-utils');
const cpu = osu.cpu;
await message.channel.send({embed: {
"title": "<:AnitroxInfo:809651936831733791> Information about Anitrox",
"description": "Everything you've ever wanted to know about your favorite bot, Anitrox!",
"color": 9442302,
"footer": {
"icon_url": message.author.displayAvatarURL(),
"text": config.footerTxt
},
"thumbnail": {
"url": client.user.displayAvatarURL()
},
"fields": [
{
"name": "Bot Information",
"value": "** **"
},
{
"name": "Release Type",
"value": config.release,
"inline": true
},
{
"name": "Release Version",
"value": config.build,
"inline": true
},
{
"name": "Uptime",
"value": Uptime(client.uptime),
"inline": true
},
{
"name": "<:memory:793536677737136178> Bot Memory Usage",
"value": `${(process.memoryUsage().heapUsed / 1024 / 1024).toFixed(2)} MiB`,
"inline": true
},
{
"name": "Bot Name",
"value": client.user.tag,
"inline": true
},
{
"name": "Bot ID",
"value": `\`${client.user.id}\``,
"inline": true
},
{
"name": "<:hostinfo:793529505263517747> Host Information",
"value": "** **"
},
{
"name": "<:hostinfo:793529505263517747> Host Uptime",
"value": Uptime(os.uptime() * 1000)
},
{
"name": "<:cpu:793672442056802354> CPU Type",
"value": `${process.arch}, ${cpu.model()}`
},
{
"name": "<:hostos:793866961675223090> OS Type",
"value": `${process.platform} / ${os.version()}`
},
{
"name": "<:node:793537507018145813> Node.JS Version",
"value": process.version
},
{
"name": "<:hostinfo:793529505263517747> Bot Ping",
"value": `${Math.round(client.ws.ping)} ms`,
"inline": true
},
{
"name": "<:usersuccess:793885338250641469> **Special Thanks To**",
"value": "@OfficialTCGMatt for providing help with development\n @chuu_shi Allowing me to host Anitrox on his server"
}
]
}});
}
};

View file

@ -1,34 +1,36 @@
module.exports = {
name: 'invite',
name: require('path').parse(__filename).name,
description: 'Add Anitrox to your beautiful server!',
syntax: [],
async execute(_0, message, _1, config) {
await message.channel.send({embed: {
"title": "Add Anitrox to your Server!",
"description": "Weather you want stable, or that squeaky clean fresh PTB build, we gotchu.",
"color": 9442302,
"footer": {
"icon_url": message.author.displayAvatarURL(),
"text": config.footerTxt
},
"thumbnail": {
"url": "https://cdn.discordapp.com/attachments/803658122299572255/814352905394061322/anitroxaddsrvr.png"
},
"fields": [
{
"name": "Anitrox",
"value": "Get the ripe off the vine Anitrox! \n [Add Anitrox to your server](https://discord.com/oauth2/authorize?client_id=576805923964715018&scope=bot&permissions=8)"
},
{
"name": "Anitrox PTB (Public Test Build)",
"value": "So you want the fresh and hot builds straight from the oven? We gotchu \n [Add Anitrox PTB to your server](https://discord.com/oauth2/authorize?client_id=489125054261755925&scope=bot&permissions=66186303)"
},
{
"name": "Need help?",
"value": "Come join the Anitrox Support Server, for support and much more!\n [Anitrox Support Server](https://discord.gg/grebRGsBZ3)"
}
]
}});
options: [],
async parseMessage (client, config, message) {
await message.channel.send(this.handle(client, config, message.author));
},
};
async parseInteraction (client, config, interaction) {
await interaction.reply(this.handle(client, config, interaction.user));
},
handle (_, config, user) {
return {
embeds: [{
title: 'Add Anitrox to your Server!',
description: 'Weather you want stable, or that squeaky clean fresh PTB build, we gotchu.',
color: 9442302,
footer: {
icon_url: user.displayAvatarURL(),
text: config.footerTxt
},
thumbnail: {
url: 'https://cdn.discordapp.com/attachments/803658122299572255/814352905394061322/anitroxaddsrvr.png'
},
fields: [
{ name: 'Anitrox', value: 'Get the ripe off the vine Anitrox! \n [Add Anitrox to your server](https://discord.com/oauth2/authorize?client_id=576805923964715018&scope=bot&permissions=8)' },
{ name: 'Anitrox Dev, Self hosting and more!', value: 'Self-host your own Anitrox (including dev!), Contribute, and more! The possibilites are endless. [Anitrox Source](https://github.com/IDeletedSystem64/anitrox)' },
{ name: 'Support', value: 'Come join the Anitrox Support Server, for support with Anitrox, help setting up your own self-hosted Anitrox and more!\n [Anitrox Support Server](https://discord.gg/grebRGsBZ3)' }
]
}]
};
}
};

View file

@ -1,34 +1,49 @@
const { ApplicationCommandOptionType } = require('discord.js');
const gifchoices = [
"https://cdn.discordapp.com/attachments/803658122299572255/807671954055626812/kiss5.gif",
"https://cdn.discordapp.com/attachments/803658122299572255/807671956236140554/kiss2.gif",
"https://cdn.discordapp.com/attachments/803658122299572255/807671964599713862/kiss1.gif",
"https://cdn.discordapp.com/attachments/803658122299572255/807671971168387082/kiss4.gif",
"https://cdn.discordapp.com/attachments/803658122299572255/807672017217781840/kiss3.gif"
'https://cdn.discordapp.com/attachments/803658122299572255/807671954055626812/kiss5.gif',
'https://cdn.discordapp.com/attachments/803658122299572255/807671956236140554/kiss2.gif',
'https://cdn.discordapp.com/attachments/803658122299572255/807671964599713862/kiss1.gif',
'https://cdn.discordapp.com/attachments/803658122299572255/807671971168387082/kiss4.gif',
'https://cdn.discordapp.com/attachments/803658122299572255/807672017217781840/kiss3.gif'
];
module.exports = {
name: "kiss",
description: "Kisses a user!",
async execute(client, message, _, config) {
const taggedUser = message.mentions.users.first();
if(!taggedUser) {
await message.channel.send(client.generateErrorMessage("You need to @mention a user!", message.author.displayAvatarURL()));
} else {
const gif = gifchoices[Math.floor(Math.random() * gifchoices.length)];
await message.channel.send({embed: {
"title": ":heart: Kiss",
"description": `${taggedUser} You have been kissed by ${message.author}!`,
"color": 9442302,
"footer": {
"icon_url": message.author.displayAvatarURL(),
"text": config.footerTxt
name: require('path').parse(__filename).name,
description: 'Kisses a user!',
options: [{
name: 'user',
description: 'The user to kiss',
required: true,
type: ApplicationCommandOptionType.User
}],
async parseMessage (client, config, message) {
await message.channel.send(this.handle(client, config, message.author, message.mentions.users.first()));
},
async parseInteraction (client, config, interaction) {
await interaction.reply(this.handle(client, config, interaction.user, interaction.options.getUser('user')));
},
handle (client, config, user, target) {
if (!target) return client.generateErrorMessage('You need to @mention a user!', user.displayAvatarURL());
const gif = gifchoices[Math.floor(Math.random() * gifchoices.length)];
return {
embeds: [{
title: ':heart: Kiss',
description: `${target} You have been kissed by ${user}!`,
color: 9442302,
footer: {
icon_url: user.displayAvatarURL(),
text: config.footerTxt
},
"image": {
"url": gif
image: {
url: gif
}
}});
}
}]
};
}
}
};

View file

@ -1,44 +1,59 @@
const { ApplicationCommandOptionType } = require('discord.js');
const gifchoices = [
"https://cdn.discordapp.com/attachments/793537380330111028/803833954750038066/gif5.gif",
"https://cdn.discordapp.com/attachments/793537380330111028/803833959338475550/gif12.gif",
"https://cdn.discordapp.com/attachments/793537380330111028/803834034135236628/gif9.gif",
"https://cdn.discordapp.com/attachments/793537380330111028/803834082034843658/gif18.gif",
"https://cdn.discordapp.com/attachments/793537380330111028/803834094063583302/gif8.gif",
"https://cdn.discordapp.com/attachments/793537380330111028/803834099869024296/gif10.gif",
"https://cdn.discordapp.com/attachments/793537380330111028/803834132035665950/gif16.gif",
"https://cdn.discordapp.com/attachments/793537380330111028/803834146413084713/gif13.gif",
"https://cdn.discordapp.com/attachments/793537380330111028/803834249425715210/gif22.gif",
"https://cdn.discordapp.com/attachments/793537380330111028/803834323898990592/gif11.gif",
"https://cdn.discordapp.com/attachments/793537380330111028/803834328848793650/gif14.gif",
"https://cdn.discordapp.com/attachments/793537380330111028/803834391226351676/gif17.gif",
"https://cdn.discordapp.com/attachments/793537380330111028/803834391226351676/gif17.gif",
"https://cdn.discordapp.com/attachments/793537380330111028/803834498714304522/gif15.gif",
"https://cdn.discordapp.com/attachments/793537380330111028/803834514269798460/gif19.gif"
'https://cdn.discordapp.com/attachments/793537380330111028/803833954750038066/gif5.gif',
'https://cdn.discordapp.com/attachments/793537380330111028/803833959338475550/gif12.gif',
'https://cdn.discordapp.com/attachments/793537380330111028/803834034135236628/gif9.gif',
'https://cdn.discordapp.com/attachments/793537380330111028/803834082034843658/gif18.gif',
'https://cdn.discordapp.com/attachments/793537380330111028/803834094063583302/gif8.gif',
'https://cdn.discordapp.com/attachments/793537380330111028/803834099869024296/gif10.gif',
'https://cdn.discordapp.com/attachments/793537380330111028/803834132035665950/gif16.gif',
'https://cdn.discordapp.com/attachments/793537380330111028/803834146413084713/gif13.gif',
'https://cdn.discordapp.com/attachments/793537380330111028/803834249425715210/gif22.gif',
'https://cdn.discordapp.com/attachments/793537380330111028/803834323898990592/gif11.gif',
'https://cdn.discordapp.com/attachments/793537380330111028/803834328848793650/gif14.gif',
'https://cdn.discordapp.com/attachments/793537380330111028/803834391226351676/gif17.gif',
'https://cdn.discordapp.com/attachments/793537380330111028/803834391226351676/gif17.gif',
'https://cdn.discordapp.com/attachments/793537380330111028/803834498714304522/gif15.gif',
'https://cdn.discordapp.com/attachments/793537380330111028/803834514269798460/gif19.gif'
];
module.exports = {
name: "leskiss",
description: "Lesbian kiss <:lesbian:803831629428686849>",
async execute(client, message, _, config) {
const taggedUser = message.mentions.users.first();
if(!taggedUser) {
await message.channel.send(client.generateErrorMessage("You need to @mention a user!", message.author.displayAvatarURL()));
} else {
const gif = gifchoices[Math.floor(Math.random() * gifchoices.length)];
await message.channel.send({embed: {
"title": ":heart: <:lesbian:803831629428686849> Kiss",
"description": `${taggedUser} You have been kissed by ${message.author}!`,
"color": 8311585,
"footer": {
"icon_url": message.author.displayAvatarURL(),
"text": config.footerTxt
name: require('path').parse(__filename).name,
description: 'Lesbian kiss <:lesbian:803831629428686849>',
options: [{
name: 'user',
description: 'The user to kiss',
required: true,
type: ApplicationCommandOptionType.User
}],
async parseMessage (client, config, message) {
await message.channel.send(this.handle(client, config, message.author, message.mentions.users.first()));
},
async parseInteraction (client, config, interaction) {
await interaction.reply(this.handle(client, config, interaction.user, interaction.options.getUser('user')));
},
handle (client, config, user, target) {
if (!target) return client.generateErrorMessage('You need to @mention a user!', user.displayAvatarURL());
const gif = gifchoices[Math.floor(Math.random() * gifchoices.length)];
return {
embeds: [{
title: ':heart: <:lesbian:803831629428686849> Kiss',
description: `${target} You have been kissed by ${user}!`,
color: 8311585,
footer: {
icon_url: user.displayAvatarURL(),
text: config.footerTxt
},
"image": {
"url": gif
image: {
url: gif
}
}});
}
}]
};
}
}
};

View file

@ -1,33 +1,47 @@
const { ApplicationCommandOptionType } = require('discord.js');
const gifchoices = [
"https://cdn.discordapp.com/attachments/803658122299572255/805314244123951114/cef569820773b0f5d54ee34cfa18e1f8.gif",
"https://cdn.lowgif.com/full/2027501b8fa5225c-.gif",
"https://i.gifer.com/36Nx.gif",
"https://media.tenor.com/images/e8bbe712a5f36bbe9545930894b08bf9/tenor.gif"
'https://cdn.discordapp.com/attachments/803658122299572255/805314244123951114/cef569820773b0f5d54ee34cfa18e1f8.gif',
'https://cdn.lowgif.com/full/2027501b8fa5225c-.gif',
'https://i.gifer.com/36Nx.gif',
'https://media.tenor.com/images/e8bbe712a5f36bbe9545930894b08bf9/tenor.gif'
];
module.exports = {
name: "lick",
description: "Licks a user!",
async execute(client, message, _, config) {
const taggedUser = message.mentions.users.first();
name: require('path').parse(__filename).name,
description: 'Licks a user!',
options: [{
name: 'user',
description: 'The user to lick',
required: true,
type: ApplicationCommandOptionType.User
}],
if(!taggedUser) {
await message.channel.send(client.generateErrorMessage("You need to @mention a user!", message.author.displayAvatarURL()));
} else {
const gif = gifchoices[Math.floor(Math.random() * gifchoices.length)];
await message.channel.send({embed: {
"title": "<a:LeafeonLick:806396195089154058> Lick",
"description": `${taggedUser} You have been licked by ${message.author}!`,
"color": 8311585,
"footer": {
"icon_url": message.author.displayAvatarURL(),
"text": config.footerTxt
async parseMessage (client, config, message) {
await message.channel.send(this.handle(client, config, message.author, message.mentions.users.first()));
},
async parseInteraction (client, config, interaction) {
await interaction.reply(this.handle(client, config, interaction.user, interaction.options.getUser('user')));
},
handle (client, config, user, target) {
if (!target) return client.generateErrorMessage('You need to @mention a user!', user.displayAvatarURL());
const gif = gifchoices[Math.floor(Math.random() * gifchoices.length)];
return {
embeds: [{
title: '<a:LeafeonLick:806396195089154058> Lick',
description: `${target} You have been licked by ${user}!`,
color: 8311585,
footer: {
icon_url: user.displayAvatarURL(),
text: config.footerTxt
},
"image": {
"url": "https://cdn.discordapp.com/attachments/803658122299572255/805314244123951114/cef569820773b0f5d54ee34cfa18e1f8.gif"
image: {
url: gif
}
}});
}
}]
};
}
}
};

View file

@ -1,33 +1,48 @@
const { ApplicationCommandOptionType } = require('discord.js');
const gifchoices = [
"https://i.imgur.com/Ns1RBzX.gif",
"https://cdn.lowgif.com/full/2027501b8fa5225c-.gif",
"https://i.gifer.com/36Nx.gif",
"https://media.tenor.com/images/e8bbe712a5f36bbe9545930894b08bf9/tenor.gif"
'https://i.imgur.com/Ns1RBzX.gif',
'https://cdn.lowgif.com/full/2027501b8fa5225c-.gif',
'https://i.gifer.com/36Nx.gif',
'https://media.tenor.com/images/e8bbe712a5f36bbe9545930894b08bf9/tenor.gif'
];
module.exports = {
name: "nom",
description: "Noms an user!",
async execute(client, message, _, config) {
const taggedUser = message.mentions.users.first();
name: require('path').parse(__filename).name,
description: 'Noms a user!',
options: [{
name: 'user',
description: 'The user to nom',
required: true,
type: ApplicationCommandOptionType.User
}],
if(!taggedUser) {
await message.channel.send(client.generateErrorMessage("You need to @mention a user!", message.author.displayAvatarURL()));
} else {
const gif = gifchoices[Math.floor(Math.random() * gifchoices.length)];
await message.channel.send({embed: {
"title": "<:BlobNomBlob:801241117919805510> Nom",
"description": `${taggedUser} You have been nommed by ${message.author}!`,
"color": 8311585,
"footer": {
"icon_url": message.author.displayAvatarURL(),
"text": config.footerTxt
async parseMessage (client, config, message) {
await message.channel.send(this.handle(client, config, message.author, message.mentions.users.first()));
},
async parseInteraction (client, config, interaction) {
await interaction.reply(this.handle(client, config, interaction.user, interaction.options.getUser('user')));
},
handle (client, config, user, target) {
if (!target) return client.generateErrorMessage('You need to @mention a user!', user.displayAvatarURL());
const gif = gifchoices[Math.floor(Math.random() * gifchoices.length)];
return {
embeds: [{
title: '<:BlobNomBlob:801241117919805510> Nom',
description: `${target} You have been nommed by ${user}!`,
color: 8311585,
footer: {
icon_url: user.displayAvatarURL(),
text: config.footerTxt
},
"image": {
"url": gif
image: {
url: gif
}
}});
}
}]
};
}
}
};

View file

@ -1,32 +0,0 @@
module.exports = {
name: 'opensource',
description: 'Attributions to open source components used by Anitrox',
async execute(_0, message, _1, config){
await message.channel.send({embed: {
"title": "Component Attribution",
"description": "Some parts of Anitrox are using open source code, and their attributions are avaliable here!",
"color": 52508,
"footer": {
"icon_url": message.author.displayAvatarURL(),
"text": config.footerTxt
},
"thumbnail": {
"url": "https://cdn.discordapp.com/attachments/803658122299572255/838854256471703602/793885335498522685.png"
},
"fields": [
{
"name": "Discord.JS",
"value": "[Check out the Discord.JS project on GitHub](https://github.com/discordjs/discord.js/)"
},
{
"name": "The Anitrox Project",
"value": "[Check out Anitrox on GitHub](https://github.com/IDeletedSystem64/anitrox)"
},
{
"name": "You",
"value": "Using and supporting the Anitrox Project, thank you! ❤"
}
]
}});
}
}

View file

@ -1,32 +1,46 @@
const { ApplicationCommandOptionType } = require('discord.js');
const gifchoices = [
"https://cdn.discordapp.com/attachments/803658122299572255/803708174293008474/tenor.gif",
"https://community.gamepress.gg/uploads/default/original/3X/0/a/0a762099c5ad6de9ca5f13dd22a7e45884a99eb3.gif",
"https://media1.giphy.com/media/ARSp9T7wwxNcs/giphy.gif"
'https://cdn.discordapp.com/attachments/803658122299572255/803708174293008474/tenor.gif',
'https://community.gamepress.gg/uploads/default/original/3X/0/a/0a762099c5ad6de9ca5f13dd22a7e45884a99eb3.gif',
'https://media1.giphy.com/media/ARSp9T7wwxNcs/giphy.gif'
];
module.exports = {
name: "pat",
description: "Pats a user!",
async execute(client, message, _, config) {
const taggedUser = message.mentions.users.first();
if(!taggedUser) {
await message.channel.send(client.generateErrorMessage("You need to @mention a user!", message.author.displayAvatarURL()));
} else {
const gif = gifchoices[Math.floor(Math.random() * gifchoices.length)];
await message.channel.send({embed: {
"title": "<:pats:801238281286713355> Pat",
"description": `${taggedUser} You have been patted by ${message.author}!`,
"color": 8311585,
"footer": {
"icon_url": message.author.displayAvatarURL(),
"text": config.footerTxt
name: require('path').parse(__filename).name,
description: 'Pats a user!',
options: [{
name: 'user',
description: 'The user to pat',
required: true,
type: ApplicationCommandOptionType.User
}],
async parseMessage (client, config, message) {
await message.channel.send(this.handle(client, config, message.author, message.mentions.users.first()));
},
async parseInteraction (client, config, interaction) {
await interaction.reply(this.handle(client, config, interaction.user, interaction.options.getUser('user')));
},
handle (client, config, user, target) {
if (!target) return client.generateErrorMessage('You need to @mention a user!', user.displayAvatarURL());
const gif = gifchoices[Math.floor(Math.random() * gifchoices.length)];
return {
embeds: [{
title: '<:pats:801238281286713355> Pat',
description: `${target} You have been patted by ${user}!`,
color: 8311585,
footer: {
icon_url: user.displayAvatarURL(),
text: config.footerTxt
},
"image": {
"url": gif
image: {
url: gif
}
}});
}
}]
};
}
}
};

View file

@ -1,18 +1,31 @@
module.exports = {
name: "ping",
description: "Gets bot ping",
async execute(client, message, _, config) {
const index = Math.floor(Math.random() * config.locations.length);
const location = config.locations[index]
await message.channel.send({embed:{
"title": ":ping_pong: Ping",
"description": `**Pong!** We pinged **${location}** and got ${client.ws.ping} ms.`,
"color": 9442302,
"footer": {
"icon_url": message.author.displayAvatarURL(),
"text": config.footerTxt
}
}});
name: require('path').parse(__filename).name,
description: 'Gets bot ping',
options: [],
async parseMessage (client, config, message, args) {
await message.channel.send(await this.handle(client, config, message.author));
},
async parseInteraction (client, config, interaction) {
await interaction.reply(await this.handle(client, config, interaction.user));
},
async handle (client, config, user) {
const index = Math.floor(Math.random() * config.locations.length);
const location = config.locations[index];
return {
embeds: [{
title: ':ping_pong: Ping',
description: `**Pong!** We pinged **${location}** and got ${client.ws.ping} ms.`,
color: 9442302,
footer: {
icon_url: user.displayAvatarURL(),
text: config.footerTxt
}
}]
};
}
};

View file

@ -1,32 +1,47 @@
const { ApplicationCommandOptionType } = require('discord.js');
const gifchoices = [
"https://i.pinimg.com/originals/b4/95/fb/b495fb19f4b9a1b04f48297b676c497b.gif",
"https://i.imgur.com/H7Ok5tn.gif",
"https://media1.tenor.com/images/8fe23ec8e2c5e44964e5c11983ff6f41/tenor.gif?itemid=5600215"
'https://i.pinimg.com/originals/b4/95/fb/b495fb19f4b9a1b04f48297b676c497b.gif',
'https://i.imgur.com/H7Ok5tn.gif',
'https://media1.tenor.com/images/8fe23ec8e2c5e44964e5c11983ff6f41/tenor.gif?itemid=5600215'
];
module.exports = {
name: "poke",
description: "Pokes a user!",
async execute(client, message, _, config) {
const taggedUser = message.mentions.users.first();
if(!taggedUser) {
await message.channel.send(client.generateErrorMessage("You need to @mention a user!", message.author.displayAvatarURL()));
} else {
const gif = gifchoices[Math.floor(Math.random() * gifchoices.length)];
await message.channel.send({embed: {
"title": "👉 Poke!",
"description": `${taggedUser} You have been poked by ${message.author}!`,
"color": 8311585,
"footer": {
"icon_url": message.author.displayAvatarURL(),
"text": config.footerTxt
name: require('path').parse(__filename).name,
description: 'Pokes a user!',
options: [{
name: 'user',
description: 'The user to poke',
required: true,
type: ApplicationCommandOptionType.User
}],
async parseMessage (client, config, message) {
await message.channel.send(this.handle(client, config, message.author, message.mentions.users.first()));
},
async parseInteraction (client, config, interaction) {
await interaction.reply(this.handle(client, config, interaction.user, interaction.options.getUser('user')));
},
handle (client, config, user, target) {
if (!target) return client.generateErrorMessage('You need to @mention a user!', user.displayAvatarURL());
const gif = gifchoices[Math.floor(Math.random() * gifchoices.length)];
return {
embeds: [{
title: '👉 Poke!',
description: `${target} You have been poked by ${user}!`,
color: 8311585,
footer: {
icon_url: user.displayAvatarURL(),
text: config.footerTxt
},
"image": {
"url": gif
image: {
url: gif
}
}});
}
}]
};
}
}
};

View file

@ -1,48 +1,54 @@
const { ApplicationCommandOptionType } = require('discord.js');
module.exports = {
name: 'reload',
description: 'Reloads a command',
async execute(client, message, args, config) {
if (message.author.id = config.ownerID) {
if (!args.length) {
await message.channel.send(client.generateErrorMessage("You forgot to provide anything to reload, you pillock",message.author.displayAvatarURL()));
}
name: require('path').parse(__filename).name,
description: 'Reloads a command',
options: [...Array(10).keys()].map(i => ({
name: `option${i + 0}`,
description: 'Another option',
required: i === 0,
type: ApplicationCommandOptionType.User
})),
async parseMessage (client, config, message, args) {
await message.channel.send(this.handle(client, config, message.author, args));
},
async parseInteraction (client, config, interaction) {
await interaction.reply(this.handle(client, config, interaction.user, [...Array(10).keys()].map(i => interaction.options.getString(`option${i + 1}`)).filter(str => str)));
},
handle (client, config, user, args) {
if (user.id === process.env.OWNERID) {
if (!args.length) return client.generateErrorMessage('You forgot to provide anything to reload, you pillock', user.displayAvatarURL());
let returnMessage = '';
args.forEach(async (arg) => {
const commandName = arg.toLowerCase();
const command = message.client.commands.get(commandName)
|| message.client.commands.find(cmd => cmd.aliases && cmd.aliases.includes(commandName));
const commandName = arg?.toLowerCase();
const command = client.commands.get(commandName);
if (!command) {
await message.channel.send(client.generateErrorMessage(`There is no command with name or alias \`${commandName}\`, ${message.author}!`,message.author.displayAvatarURL()));
returnMessage += `There is no command with name or alias \`${commandName}\`\n`;
} else {
delete require.cache[require.resolve(`./${command.name}.js`)];
try {
const newCommand = require(`./${command.name}.js`);
client.commands.set(newCommand.name, newCommand);
await message.channel.send(`<:AnitroxSuccess:809651936819019796> **Reloaded \`${command.name}\` successfully!**`);
console.log(`User reloaded ${command.name}.`)
returnMessage += `Successfully reloaded \`${commandName}\`\n`;
console.log(`User reloaded ${command.name}.`);
} catch (error) {
console.error(error);
await message.channel.send(client.generateErrorMessage(`There was an error while reloading \`${command.name}\`:\n\`${error.message}\``, message.author.displayAvatarURL()));
returnMessage += `There was an error while reloading \`${command.name}\`\n`;
}
}
});
return returnMessage;
} else {
message.channel.send({embed: {
"title": "<:AnitroxDenied:809651936642203668> **403 Forbidden**",
"color": 13632027,
"footer": {
"icon_url": message.author.displayAvatarURL(),
"text": config.footerTxt
},
"fields": [
{
"name": "**What Happened?**",
"value": "You don't have the appropriate permissions to run this command!"
}
]
}});
console.error(`[SYSTEM] [ERR] User ${user.username} tried to reload ${args[0]}, but doesn't have permission!`);
return client.generateErrorMessage("You don't have permission to run this command.", user.displayAvatarURL());
}
}
};
};

View file

@ -1,18 +1,49 @@
module.exports = {
name: 'restart',
name: require('path').parse(__filename).name,
description: 'Restarts the bot',
async execute(client, message, args, config) {
if (message.author.id == config.ownerID) {
console.log("Anitrox is restarting now!")
await message.channel.send("<a:NyabotWorking:697147309531594843> Restarting...")
options: [],
async parseMessage (client, config, message) {
await this.handle(client, config, message.author, message.channel);
},
async parseInteraction (client, config, interaction) {
await this.handle(client, config, interaction.user, interaction.channel);
},
async handle (client, config, user, channel) {
if (user.id === process.env.OWNERID) {
const embeds = [{
title: '<a:AnitroxWorking:997565411212144730> Restart Bot',
description: '<a:AnitroxWorking:997565411212144730> Restarting now, Be back in a minute!',
color: 9442302,
footer: {
icon_url: user.displayAvatarURL(),
text: config.footerTxt
}
}];
console.log('[SYSTEM] [INFO] Restarting now!');
const response = await channel.send({ embeds });
try {
client.destroy();
await client.login(config.token);
await message.channel.send("<:NyabotSuccess:697211376740859914> Restart Successful")
console.log("All systems go")
} catch(e) {console.log(e);}
await client.login(process.env.TOKEN);
console.log('[SYSTEM] [INFO] Restarted successfully!');
await response.edit({
embeds: [{
title: ':white_check_mark: Restart Bot',
description: 'Restarted!',
color: 9442302,
footer: {
icon_url: user.displayAvatarURL(),
text: config.footerTxt
}
}]
});
} catch (e) { console.error(e); }
} else {
await message.channel.send("<:NyabotDenied:697145462565896194> Access Denied, You must be bot owner to execute this command.");
console.error('[SYSTEM] [ERR] User ' + user.username + " tried to restart the bot, but doesn't have permission! If this was you, Check your config.json");
await channel.send(client.generateErrorMessage('You do not have permission to run this command.', user.displayAvatarURL()));
}
}
}
};

View file

@ -1,37 +0,0 @@
module.exports = {
name: 'setnick',
description: 'Sets your nickname',
async execute(client, message, args, config) {
if (message.channel.permissionsFor(message.author).has("CHANGE_NICKNAME")) {
const newnick = args.slice(0).join(" ")
try {
await message.member.setNickname(newnick, "Nickname change requested by the server member. If you don't want users to be able to change their nickname disable 'CHANGE_NICKNAME' via Change Nickname in Roles.")
await message.channel.send({embed: {
"title": "<:AnitroxSuccess:809651936819019796> Nickname Changed",
"color": 9442302,
"footer": {
"icon_url": message.author.displayAvatarURL(),
"text": config.footerTxt
},
"fields": [
{
"name": "Changed nickname successfully!",
"value": "You need to have permission ``CHANGE_NICKNAME`` to change your nick!"
},
{
"name": "New Nickname",
"value": newnick,
"inline": true
}
]
}});
} catch (error) {
await message.channel.send(client.generateErrorMessage("Failed to set user nickname. Does the bot have the correct permissions?", message.author.displayAvatarURL()));
};
} else {
await message.channel.send(client.generateErrorMessage("You need to have permission ``CHANGE_NICKNAME`` to change your nick!", message.author.displayAvatarURL()));
}
}
}

View file

@ -1,25 +1,39 @@
const { ApplicationCommandOptionType } = require('discord.js');
module.exports = {
name: "slap",
description: "Slaps an user!",
async execute(client, message, _, config) {
const taggedUser = message.mentions.users.first();
name: require('path').parse(__filename).name,
description: 'Slaps a user!',
options: [{
name: 'user',
description: 'The user to slap',
required: true,
type: ApplicationCommandOptionType.User
}],
if(!taggedUser) {
await message.channel.send(client.generateErrorMessage("You need to @mention a user!", message.author.displayAvatarURL()));
} else {
await message.channel.send({embed: {
"title": ":anger: Slap",
"description": `${taggedUser} You have been slapped by ${message.author}!`,
"color": 9442302,
"footer": {
"icon_url": message.author.displayAvatarURL(),
"text": config.footerTxt
async parseMessage (client, config, message) {
await message.channel.send(this.handle(client, config, message.author, message.mentions.users.first()));
},
async parseInteraction (client, config, interaction) {
await interaction.reply(this.handle(client, config, interaction.user, interaction.options.getUser('user')));
},
handle (client, config, user, target) {
if (!target) return client.generateErrorMessage('You need to @mention a user!', user.displayAvatarURL());
return {
embeds: [{
title: ':anger: Slap',
description: `${target} You have been slapped by ${user}!`,
color: 9442302,
footer: {
icon_url: user.displayAvatarURL(),
text: config.footerTxt
},
"image": {
"url": "https://media1.tenor.com/images/b6d8a83eb652a30b95e87cf96a21e007/tenor.gif?itemid=10426943"
image: {
url: 'https://media1.tenor.com/images/b6d8a83eb652a30b95e87cf96a21e007/tenor.gif?itemid=10426943'
}
}});
}
}]
};
}
}
};

View file

@ -1,33 +1,47 @@
const gifchoices = [
"https://media.discordapp.net/attachments/803658122299572255/806775382995894282/anime-couple-snuggle-gif-5.gif?width=450&height=238",
"https://media.discordapp.net/attachments/803658122299572255/806775411928989726/snuggl1.gif",
"https://cdn.discordapp.com/attachments/803658122299572255/806775422833786911/ImpureDeepAmbushbug-small.gif"
];
const { ApplicationCommandOptionType } = require('discord.js');
const gifchoices = [
'https://media.discordapp.net/attachments/803658122299572255/806775382995894282/anime-couple-snuggle-gif-5.gif?width=450&height=238',
'https://media.discordapp.net/attachments/803658122299572255/806775411928989726/snuggl1.gif',
'https://cdn.discordapp.com/attachments/803658122299572255/806775422833786911/ImpureDeepAmbushbug-small.gif'
];
module.exports = {
name: "snuggle",
description: "Snuggle an user!",
async execute(client, message, _, config) {
const taggedUser = message.mentions.users.first();
if(!taggedUser) {
await message.channel.send(client.generateErrorMessage("You need to @mention a user!", message.author.displayAvatarURL()));
} else {
const gif = gifchoices[Math.floor(Math.random() * gifchoices.length)];
await message.channel.send({embed: {
"title": "<:BlobSnuggleCat:806759753450782731> Snuggle",
"description": `${taggedUser} You have been snuggled by ${message.author}!`,
"color": 9442302,
"footer": {
"icon_url": message.author.displayAvatarURL(),
"text": config.footerTxt
name: require('path').parse(__filename).name,
description: 'Snuggle a user!',
options: [{
name: 'user',
description: 'The user to snuggle',
required: true,
type: ApplicationCommandOptionType.User
}],
async parseMessage (client, config, message) {
await message.channel.send(this.handle(client, config, message.author, message.mentions.users.first()));
},
async parseInteraction (client, config, interaction) {
await interaction.reply(this.handle(client, config, interaction.user, interaction.options.getUser('user')));
},
handle (client, config, user, target) {
if (!target) return client.generateErrorMessage('You need to @mention a user!', user.displayAvatarURL());
const gif = gifchoices[Math.floor(Math.random() * gifchoices.length)];
return {
embeds: [{
title: '<:BlobSnuggleCat:806759753450782731> Snuggle',
description: `${target} You have been snuggled by ${user}!`,
color: 9442302,
footer: {
icon_url: user.displayAvatarURL(),
text: config.footerTxt
},
"image": {
"url": gif
image: {
url: gif
}
}});
}
}]
};
}
}
};

View file

@ -1,29 +1,35 @@
module.exports = {
name: "stop",
name: require('path').parse(__filename).name,
description: "IT'S TIME TO STOP!... the bot",
async execute(_, message, args, config) {
if (message.author.id == config.ownerID) {
await message.channel.send({embed: {
"title": "<a:AnitroxWorking:697147309531594843> **Shutting Down...**",
"description": "See you next time!",
"color": 9442302,
"footer": {
"icon_url": message.author.displayAvatarURL(),
"text": config.footerTxt
},
}});
console.log("The bot is shutting down! Bye bye!")
options: [],
async parseMessage (client, config, message) {
await this.handle(client, config, message.author, message.channel);
},
async parseInteraction (client, config, interaction) {
await this.handle(client, config, interaction.user, interaction.channel);
},
async handle (client, config, user, channel) {
if (user.id === process.env.OWNERID) {
console.log('[SYSTEM] [INFO] ' + `The bot is going down for shut down. \nShutdown requested by ${user.username}`);
await channel.send({
embeds: [{
title: 'Shut down the bot',
description: '<a:AnitroxWorking:997565411212144730> Shutting down now, Until next time!',
color: 9442302,
footer: {
icon_url: user.displayAvatarURL(),
text: config.footerTxt
}
}]
});
process.exit();
} else {
await message.channel.send({embed: {
"title": "<:AnitroxDenied:809651936642203668> 403 Forbidden",
"description": "You need to be the bot owner to execute this command!",
"color": 13632027,
"footer": {
"icon_url": message.author.displayAvatarURL(),
"text": config.footerTxt
},
}});
console.error('[SYSTEM] [ERR] User ' + user.username + " tried to shut down the bot, but doesn't have permission! If this was you, Check your config.json");
await channel.send(client.generateErrorMessage('You do not have permission to run this command.', user.displayAvatarURL()));
}
}
}
};

View file

@ -1,54 +1,73 @@
const { ApplicationCommandOptionType } = require('discord.js');
module.exports = {
name: "uinfo",
description: "Gets info about an user, such as ID, Discord Join date and more",
syntax: "<User>",
async execute(client, message, args, config) {
const user = message.mentions.users.first() || client.users.cache.get(args[0]) || message.author
await message.channel.send({embed: {
"title": `Everything you've ever wanted to know about ${user.username}!`,
"color": 9442302,
"footer": {
"icon_url": message.author.displayAvatarURL(),
"text": config.footerTxt
},
"thumbnail": {
"url": user.displayAvatarURL()
},
"fields": [
{
"name": "Username",
"value": user.username,
"inline": true
name: require('path').parse(__filename).name,
description: 'Gets info about an user, such as ID, Discord Join date and more',
options: [{
name: 'user',
description: 'Another user',
required: false,
type: ApplicationCommandOptionType.User
}],
async parseMessage (client, config, message) {
const target = message.mentions.members.first() || message.member;
await message.channel.send(this.handle(client, config, message.author, target));
},
async parseInteraction (client, config, interaction) {
const target = interaction.options.getUser('user') ? (await interaction.guild.members.fetch(interaction.options.getUser('user'))) : interaction.member;
await interaction.reply(this.handle(client, config, interaction.user, target));
},
handle (client, config, user, target) {
return {
embeds: [{
title: `Everything you've ever wanted to know about ${target.user.username}!`,
color: 9442302,
footer: {
icon_url: user.displayAvatarURL(),
text: config.footerTxt
},
{
"name": "Discriminator",
"value": user.discriminator,
"inline": true
thumbnail: {
url: target.displayAvatarURL()
},
{
"name": "Full Username",
"value": user.tag,
"inline": true
},
{
"name": "User Profile Picture",
"value": user.displayAvatarURL()
},
{
"name": "User Status",
value: user.presence.status
},
{
"name": "User ID",
"value": `\`${user.id}\``
},
{
"name": "User Joined Discord",
"value": user.createdAt,
inline: true
},
]
}});
fields: [
{
name: 'Username',
value: target.user.username,
inline: true
},
{
name: 'Discriminator',
value: target.user.discriminator,
inline: true
},
{
name: 'Full Username',
value: target.user.tag,
inline: true
},
{
name: 'User Profile Picture',
value: target.user.displayAvatarURL()
},
{
name: 'User Status',
value: target.presence?.status ?? (config.intents.includes('GUILD_PRESENCES') ? 'Offline' : 'Missing GUILD_PRESENCES intent')
},
{
name: 'User ID',
value: `\`${target.user.id}\``
},
{
name: 'User Joined Discord',
value: target.user.createdAt.toString(),
inline: true
}
]
}]
};
}
}
};

View file

@ -1,21 +1,30 @@
{
"prefix": "n!",
"token": "IM SO EXCITED ABOUT BURGER",
"ownerID": "MY FAVORITE COLOR IS TWELVE",
"release": "anitrox_dev",
"build": "Stable",
"footerTxt": "Anitrox, made with <3 by IDeletedSystem64 | 2018-2022",
"statuses": [
"with np!help",
"with Sophie!",
"Trans Rights!",
"in your computer",
"with my internet router",
"ssh: system64@borkeonv2",
"YouTube",
"with source code",
"Visual Studio Code",
"prefix": "n!",
"build": "1.4",
"footerTxt": "Anitrox, made with <3 by IDeletedSystem64 | 2018-2023",
"imageApi": "",
"updater": {
"enabled": true,
"frequency": "360",
"gitRepo": "IDeletedSystem64/anitrox"
},
"sandbox": {
"enabled": false,
"id": "0",
"refreshLocal": false,
"refreshGlobal": false
},
"statuses": [
"with /help",
"with Sophie!",
"Trans Rights!",
"in your computer",
"with my internet router",
"ssh: system64@borkeonv2",
"YouTube",
"with source code",
"Visual Studio Code",
"Minecraft",
"with the network connections.",
"VLC Media Player",
@ -31,8 +40,15 @@
"127.0.0.1",
"Sophie's computer",
"Mars",
"Elon Musk",
"TMC Software"
"Netro Corporation",
"System64 Technologies",
"myself",
"Twilight Sparkle",
"the Pokemon Center",
"Who asked?",
"you",
"your mother"
],
"answers": [
"Heck no!",
@ -54,4 +70,4 @@
"Good idea!",
"Sure"
]
}
}

View file

@ -1 +0,0 @@

5
events/error.js Normal file
View file

@ -0,0 +1,5 @@
module.exports = {
event: require('path').parse(__filename).name,
once: false,
listener: () => e => { console.log(`[ERROR] ${e}`); }
};

View file

@ -0,0 +1,24 @@
module.exports = {
event: require('path').parse(__filename).name,
once: false,
listener: (client, config) =>
async (interaction) => {
try {
await client.commands.get(interaction.commandName)?.parseInteraction(client, config, interaction);
} catch (error) {
console.error(error);
interaction.reply({
embeds: [{
title: '<:AnitroxError:809651936563429416> **Something went wrong!**',
description: error.stack,
color: 13632027,
footer: {
icon_url: interaction.user.displayAvatarURL(),
text: config.footerTxt
}
}],
ephemeral: false
});
}
}
};

30
events/messageCreate.js Normal file
View file

@ -0,0 +1,30 @@
module.exports = {
event: require('path').parse(__filename).name,
once: false,
listener: (client, config) =>
async (message) => {
if (!message.content.startsWith(config.prefix) || message.author.bot) return;
const args = message.content.slice(config.prefix.length).split(/\s+/);
const command = args.shift()?.toLowerCase() ?? '';
if (!client.commands.has(command)) return;
try {
await client.commands.get(command)?.parseMessage(client, config, message, args);
} catch (error) {
console.error(error);
message.channel.send({
embeds: [{
title: '<:AnitroxError:809651936563429416> **Something went wrong!**',
description: error.stack,
color: 13632027,
footer: {
icon_url: message.author.displayAvatarURL(),
text: config.footerTxt
}
}]
});
}
}
};

63
events/ready.js Normal file
View file

@ -0,0 +1,63 @@
const { Collection } = require('discord.js');
module.exports = {
event: require('path').parse(__filename).name,
once: true,
listener: (client, config) =>
async () => {
const sandboxSettings = config.sandbox;
const localCommands = client.guilds.cache.get(sandboxSettings.id)?.commands;
const globalCommands = client.application?.commands;
let existingLocal = await localCommands?.fetch();
let existingGlobal = await globalCommands?.fetch();
if (sandboxSettings.enabled) {
if (sandboxSettings.refreshLocal && localCommands) {
console.log('deleting previous local commands');
existingLocal?.forEach(async (x) => {
await localCommands?.delete(x);
});
existingLocal = new Collection();
}
if (sandboxSettings.refreshGlobal) {
console.log('deleting previous global commands');
existingGlobal?.forEach(async x => {
await client.application?.commands.delete(x);
});
existingGlobal = new Collection();
}
}
client.commands.forEach(async (command) => {
if (sandboxSettings.enabled && !existingLocal?.map(x => x.name).includes(command.name)) {
await localCommands?.create(command);
// console.log(`created new local command ${command.name}`);
}
if (!existingGlobal?.map(x => x.name).includes(command.name)) {
await globalCommands?.create(command);
// console.log(`created new global command ${command.name}`);
}
});
console.clear();
console.log(' ___ _ __ ');
console.log(' / | ____ (_) /__________ _ __');
console.log(' / /| | / __ \\/ / __/ ___/ __ \\| |/_/');
console.log(' / ___ |/ / / / / /_/ / / /_/ /> w < ');
console.log(`/_/ |_/_/ /_/_/\\__/_/ \\____/_/|_| ${config.build}`);
console.log('Ready!| Anitrox by IDeletedSystem64 | Also check out Novetus!');
if (config.updater.enabled === true) {
await client.updater.checkUpdates(true); // This is probably the wrong way to do it
setInterval(async () => {
await client.updater.checkUpdates(true);
}, parseInt(config.updater.frequency * 60000)); // This is set to 6 hours (360 minutes) by default.
}
// Statuses
setInterval(async () => {
const index = Math.floor(Math.random() * config.statuses.length); // Picks a status from the config file
await client.user?.setActivity(config.statuses[index]);
}, 20000);
}
};

5
events/warn.js Normal file
View file

@ -0,0 +1,5 @@
module.exports = {
event: require('path').parse(__filename).name,
once: false,
listener: () => e => (`[WARN] ${e}`)
};

7
functions/getTime.js Normal file
View file

@ -0,0 +1,7 @@
module.exports = () => {
const date = new Date();
const timeDate = date.toLocaleDateString();
const time = date.toLocaleTimeString();
return ` ${time} | ${timeDate} `;
};

50
functions/updateCheck.js Normal file
View file

@ -0,0 +1,50 @@
/* eslint-disable brace-style */ // Tell eslint to stfu :)
const fetch = require('node-fetch');
const config = require('../config.json');
class updateChecker {
constructor () {
this.status = null;
this.failReason = null;
}
checkUpdates = (notify) => {
const repo = `https://api.github.com/repos/${config.updater.gitRepo}/releases/latest`;
const getUpdates = () => {
return fetch(repo)
.then(async (response) => {
if (response.status !== 200) {
this.status = 2; // Error
this.failReason = response.statusText;
} else {
response = await response.json();
if (!response) { this.status = 2; } // Something went wrong while checking for updates :(
const version = {
latest: response.name,
current: config.build
};
if (version.current === version.latest) { this.status = 0; return version; } // Up-to-date!
else if (version.current < version.latest) { this.status = 1; return version; } // Not up to date.
else this.status = 2; // Something went wrong while checking for updates :(
return response;
};
})
.catch(err => { console.error(err); });
};
return getUpdates().then(response => {
if (notify === true) {
if (this.status === 1) console.log(`\n✨ It must be your lucky day! Anitrox ${response.latest} is now available! Download it from github.com/${config.updater.gitRepo}/releases!`); // Log to console about the new release!
else if (this.status === 2) console.error(`\nSomething went wrong while checking for updates... :( | ${this.failReason}`); // This can probably be done more properly, But quite honestly I'm tired of working at this. ^system64
else if (this.status === 0) {} // Up-to-date
else console.error(`Unknown Update Status!! ${this.status}`);
} else return this.status;
});
};
getStatus = () => { return this.status; };
}
module.exports = function () { return new updateChecker(); };

15
functions/uptime.js Normal file
View file

@ -0,0 +1,15 @@
module.exports = (uptime) => {
const tSeconds = (uptime / 1000);
const tDays = parseInt(tSeconds / 86400);
const tHrs = parseInt((tSeconds % 86400) / 3600);
const tMins = parseInt((tSeconds % 3600) / 60);
const tSecs = parseInt(tSeconds % 60);
const days = tDays + (tDays === 1 ? ' day' : ' days');
const hours = tHrs + (tHrs === 1 ? ' hour' : ' hours');
const minutes = tMins + (tMins === 1 ? ' minute' : ' minutes');
const seconds = tSecs + (tSecs === 1 ? ' second' : ' seconds');
return `${days}, ${hours}, ${minutes}, ${seconds}`;
};

2626
package-lock.json generated Normal file

File diff suppressed because it is too large Load diff

View file

@ -4,13 +4,19 @@
"description": "Discord Bot Based on Discord.JS",
"main": "start.js",
"dependencies": {
"discord.js": "^12.5.1",
"node-os-utils": "^1.3.2",
"discord.js": "^14.7.1",
"dotenv": "^16.0.3",
"node-fetch": "^2.6.6",
"node-os-utils": "^1.3.7",
"require-all": "^3.0.0"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "IDeletedSystem64",
"license": "ISC"
"license": "GPLv3",
"devDependencies": {
"eslint": "^8.32.0",
"eslint-config-standard": "^17.0.0",
"eslint-plugin-import": "^2.27.5",
"eslint-plugin-n": "^15.6.1",
"eslint-plugin-promise": "^6.1.1"
}
}

112
start.js
View file

@ -1,79 +1,55 @@
#!/usr/bin/env -S node
const fs = require('fs');
const Discord = require('discord.js');
const { Client, Collection, GatewayIntentBits } = require('discord.js');
const config = require('./config.json');
console.log('Starting!')
const client = new Discord.Client();
client.commands = new Discord.Collection();
const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js'));
for (const file of commandFiles) {
require('dotenv').config();
console.log('Starting!');
// const client = new Discord.Client({ intents: config.intents.map(intent => eval(`Discord.Intents.FLAGS.${intent}`)) });
const client = new Client({
intents: [
GatewayIntentBits.Guilds,
GatewayIntentBits.GuildMessages,
GatewayIntentBits.GuildPresences
]
});
// todo: move back to file
client.commands = new Collection();
fs.readdirSync('./commands')
.filter(file => file.endsWith('.js'))
.forEach(file => {
const command = require(`./commands/${file}`);
client.commands.set(command.name, command);
}
});
// Create a collection using those command files
client.generateErrorMessage = (errorMsg, messageAuthorURL) => ({embed: {
"title": "<:AnitroxError:809651936563429416> Error",
"color": 13632027,
"footer": {
"icon_url": messageAuthorURL,
"text": config.footerTxt
},
"fields": [
{
"name": "Something went wrong!",
"value": errorMsg
}
]
}})
fs.readdirSync('./events')
.filter(file => file.endsWith('.js'))
.map(file => require(`./events/${file}`))
.forEach(({ once, event, listener }) => {
client[once ? 'once' : 'on'](event, listener(client, config));
});
// Create listeners from the event files.
client.on("error", (e) => console.log(`[ERROR] ${error(e)}`));
client.on("warn", (e) => (`[WARN] ${warn(e)}`));
client.once('ready', () => {
console.clear()
console.log(' ___ _ __ ');
console.log(' / | ____ (_) /__________ _ __');
console.log(' / /| | / __ \\/ / __/ ___/ __ \\| |/_/');
console.log(' / ___ |/ / / / / /_/ / / /_/ /> < ');
console.log('/_/ |_/_/ /_/_/\\__/_/ \\____/_/|_| ');
console.log(`${config.release}, ${config.build}`);
console.log("Bot online. | Anitrox by IDeletedSystem64 | ALL MY CODE KEEPS BLOWING UP!");
// Statuses
setInterval(async () => {
// Picks a status from the config file
const index = Math.floor(Math.random() * config.statuses.length);
await client.user.setActivity(config.statuses[index]);
}, 20000);
client.generateErrorMessage = (errorMsg, avatarURL) => ({
embeds: [{
title: '<:AnitroxError:809651936563429416> Error',
color: 13632027,
footer: {
icon_url: avatarURL,
text: config.footerTxt
},
fields: [
{
name: 'Something went wrong!',
value: errorMsg
}
]
}]
});
// Error message generator.
client.updater = require('./functions/updateCheck.js')(); // da update checker (real)
// Begin Command Handler
client.on('message', async (message) => {
if (!message.content.startsWith(config.prefix) || message.author.bot) return;
const args = message.content.slice(config.prefix.length).split(/ +/);
const command = args.shift().toLowerCase();
if (!client.commands.has(command)) return;
try {
await client.commands.get(command).execute(client, message, args, config);
} catch (error) {
console.stack;
message.channel.send({embed: {
"title": "<:AnitroxError:809651936563429416> **Something went wrong!**",
"description": error.stack,
"color": 13632027,
"footer": {
"icon_url": message.author.displayAvatarURL(),
"text": config.footerTxt
},
}});
}
});
client.login(config.token);
client.login(process.env.TOKEN);
// Login to Discord!