nyx

The first CODM discrod bot -- cath.exe Template
git clone https://codeberg.org/night0721/nyx
Log | Files | Refs | LICENSE

commit 3b46b57862d51fea1079bcb9f3c1703a02a2094b
parent 940fe839a168559d2d405c86b47ba30a3a2e985a
Author: night0721 <[email protected]>
Date:   Tue, 15 Jun 2021 00:54:02 +0800

Drake cmd, maintenance cmd

Diffstat:
Acommands/Fun/drake.js | 28++++++++++++++++++++++++++++
Acommands/Owner/status.js | 27+++++++++++++++++++++++++++
Mevents/message.js | 30+++++++++++++++++++++---------
Mevents/ready.js | 28+++++++++++++++++++++-------
Amodels/status.js | 11+++++++++++
Dutil/Data/rank.js | 51---------------------------------------------------
Dutil/Data/triggered.js | 24------------------------
Mutil/functions/mongoose.js | 73++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------
8 files changed, 174 insertions(+), 98 deletions(-)

diff --git a/commands/Fun/drake.js b/commands/Fun/drake.js @@ -0,0 +1,28 @@ +const { + Client, + Message, + MessageEmbed, + MessageAttachment, +} = require("discord.js"); +const fetch = require("node-fetch"); +module.exports = { + name: "drake", + description: "Drake meme", + usage: "(Text) (Text)", + /** + * @param {Client} client + * @param {Message} message + * @param {String[]} args + */ + run: async (client, message, args) => { + const t1 = args[0]; + const t2 = args.slice(1).join(" "); + const res = await fetch( + `https://frenchnoodles.xyz/api/endpoints/drake/?text1=${t1}&text2=${t2}`, + {} + ); + let i = await res.buffer(); + const drake = new MessageAttachment(i); + message.inlineReply(drake); + }, +}; diff --git a/commands/Owner/status.js b/commands/Owner/status.js @@ -0,0 +1,27 @@ +const { Client, Message, MessageEmbed } = require("discord.js"); +module.exports = { + name: "status", + usage: "(Boolean)", + description: "Maintenance mode", + category: "Owner", + Owner: true, + /** + * @param {Client} client + * @param {Message} message + * @param {String[]} args + */ + run: async (client, message, args) => { + if (!args[0]) return message.channel.send("True or False?"); + if (args[0].toLowerCase() === "true") { + await client.data.maintenance(client.user.id, "true"); + message.channel.send( + `**${client.user.username}** is under maintenance now` + ); + } else if (args[0].toLowerCase() === "false") { + await client.data.maintenance(client.user.id, "false"); + message.channel.send(`**${client.user.username}** back online`); + } else { + message.channel.send("True or False?"); + } + }, +}; diff --git a/events/message.js b/events/message.js @@ -10,6 +10,11 @@ const Timeout2 = new Collection(); client.on("message", async message => { const p = await client.prefix(message); if (message.author.bot) return; + if (!message.content.startsWith(p)) return; + if (!message.guild) return; + if (!message.member) { + message.member = await message.guild.fetchMember(message); + } if (message.content.match(new RegExp(`^<@!?${client.user.id}>( |)$`))) { const _ = new MessageEmbed() .setTitle("cath.exe") @@ -18,7 +23,6 @@ client.on("message", async message => { "Prefix/Usage", `My prefix in **${message.guild.name}** is **${p}**\n\nRun \`${p}help\` to start using the bot` ) - .setThumbnail(client.user.displayAvatarURL()) .setURL(client.web) .setFooter("Made by Cath Team") @@ -26,21 +30,26 @@ client.on("message", async message => { .setColor(client.color); return message.inlineReply(_).then(m => m.delete({ timeout: 10000 })); } - if (!message.content.startsWith(p)) return; - if (!message.guild) return; - if (!message.member) { - message.member = await message.guild.fetchMember(message); - } - + const data = {}; let guildDB = await client.data.getGuild(message.guild.id); if (!guildDB) return; let userDB = await client.data.getUser(message.author.id); if (!userDB) return; - const data = {}; + let botDB = await client.data.getBot(client.user.id); + if (!botDB) return; + data.Bot = botDB; data.Guild = guildDB; data.User = userDB; + if ( + botDB && + botDB.Status == "true" && + !client.owners.includes(message.author.id) + ) + return message.inlineReply( + `**${client.user.username}** is currently in maintenance.\nYou can use **cath.exe#9686** or **Cath 2#7414** if it is online\nIf you need help, please contact **Cat drinking a cat#0795** or **Ń1ght#0001**` + ); if (!guildDB) { - client.data.CreateGuild(message.guild.id); + await client.data.CreateGuild(message.guild.id); } if (data.User) { if (data.User.Blacklist) { @@ -96,6 +105,9 @@ client.on("message", async message => { .then(msg => msg.delete({ timeout: 10000 })); } if (command) { + if (command.Owner == true) { + if (!client.owners.includes(message.author.id)) return; + } if (command.Premium == true) { if (data.User.Premium == false) { return message.inlineReply( diff --git a/events/ready.js b/events/ready.js @@ -3,6 +3,7 @@ const config = require("../config.json"); const prefix = config.prefix; const version = require("../package.json").version; const { MessageEmbed } = require("discord.js"); +const m = require("../models/status"); client.on("ready", () => { var users = client.guilds.cache .reduce((a, b) => a + b.memberCount, 0) @@ -12,14 +13,27 @@ client.on("ready", () => { client.web, `with ${users} users`, ]; - var interval = setInterval(function () { - var game = Math.floor(Math.random() * playing.length + 0); - client.user.setActivity({ - name: playing[game], - type: "STREAMING", - url: "https://www.twitch.tv/thekiritosgaming", + async function find() { + const statusdb = await m.findOne({ + Status: "true", }); - }, 5000); + if (statusdb && statusdb.Status == "true") { + await client.user.setPresence({ status: "dnd" }); + client.user.setActivity({ + name: "Under Maintenance", + }); + } else { + var set = setInterval(function () { + var game = Math.floor(Math.random() * playing.length + 0); + client.user.setActivity({ + name: playing[game], + type: "STREAMING", + url: "https://www.twitch.tv/thekiritosgaming", + }); + }, 5000); + } + } + find(); console.log(`${client.user.username} ✅\nVersion: v${version}`); var embed = new MessageEmbed() .setColor(client.color) diff --git a/models/status.js b/models/status.js @@ -0,0 +1,11 @@ +const mongoose = require("mongoose"); +module.exports = mongoose.model( + "status", + new mongoose.Schema({ + Bot: { + type: String, + default: "null", + }, + Status: { type: String, default: "false" }, + }) +); diff --git a/util/Data/rank.js b/util/Data/rank.js @@ -1,51 +0,0 @@ -const { MessageAttachment } = require("discord.js"); -const Levels = require("discord-xp"); -const canvacord = require("canvacord"); -const error = require("../util/err"); -require("../inlinereply"); -module.exports = { - name: "rank", - description: "Shows the current level and rank of the user!", - usage: "{@User/User ID}", - timeout: 5000, - run: async (client, message, args) => { - const p = await client.prefix(message); - if (!message.guild) return; - if (message.author.bot) return; - const target = - message.mentions.users.first() || - message.guild.members.cache.find( - r => r.user.username.toLowerCase() === args[0].toLocaleLowerCase() - ) || - message.guild.members.cache.find( - r => r.displayName.toLowerCase() === args[0].toLocaleLowerCase() - ) || - message.guild.members.cache.get(args[0]) || - message.author; - const user = await Levels.fetch(target.id, message.guild.id, true); - if (!user) - return error( - message, - message.author, - p, - "rank", - "**{@User/User ID}**", - `'User' doesn't have any XP` - ); - const neededXp = Levels.xpFor(parseInt(user.level) + 1); - const Rank = new canvacord.Rank() - .setAvatar(target.displayAvatarURL({ dynamic: false, format: "png" })) - .setCurrentXP(user.xp) - .setRank(parseInt(user.position)) - .setLevel(user.level) - .setRequiredXP(neededXp) - .setStatus(target.presence.status) - .setProgressBar("BLACK", "COLOR") - .setUsername(target.username) - .setDiscriminator(target.discriminator); - Rank.build().then(data => { - const attachment = new MessageAttachment(data, "RankCard.png"); - message.inlineReply(attachment); - }); - }, -}; diff --git a/util/Data/triggered.js b/util/Data/triggered.js @@ -1,23 +0,0 @@ -const { Canvas } = require('canvacord') -const { Client, Message, MessageAttachment } = require('discord.js') -module.exports = { - name: 'trigger', - aliases: ['triggered'], - usage: '(?@User/ User ID)', - description: "Have a trigger effect on a user's avatar", - /** - * @param {Client} client - * @param {Message} message - * @param {String[]} args - */ - run: async(client, message, args) => { - const user = message.mentions.users.first() || message.guild.members.cache.get(args[0]) || message.author - const ava = user.displayAvatarURL({ format: 'png' }) - - const imga = await Canvas.trigger(ava) - - message.channel.send( - new MessageAttachment(imga, 'imgae.gif') - ) - } -} -\ No newline at end of file diff --git a/util/functions/mongoose.js b/util/functions/mongoose.js @@ -6,7 +6,8 @@ const cachegoose = new GooseCache(mongoose, { mongoose.set("useFindAndModify", false); const u = require("../../models/users"); const g = require("../../models/guilds"); -const Econ = require("../../models/econ"); +const e = require("../../models/econ"); +const m = require("../../models/status"); module.exports = { /** * @param {String} URI - Mongo Connection URI @@ -119,6 +120,29 @@ module.exports = { } }, /** + * @param {String} ID - Bot ID + */ + async getBot(ID) { + if (!ID) throw new Error("Bot ID?"); + const bot = await m.findOne({ Bot: ID }).lean().cache(120); + if (!bot) { + const ss = new m({ Bot: ID }); + const { Bot, Status } = ss; + await ss.save().catch(error => console.log(error)); + return { + Bot, + Status, + }; + } else { + const Bot = bot.Bot; + const Status = bot.Status; + return { + Bot, + Status, + }; + } + }, + /** * @param {String} ID - User ID * @param {String} Reason - AFK Reason */ @@ -234,6 +258,13 @@ module.exports = { return; }, /** + * @param {String} ID + */ + async CreateBot(ID) { + await new m({ Guild: ID }); + return; + }, + /** * @param {String} ID - Guild ID */ async DelGuild(ID) { @@ -429,7 +460,7 @@ module.exports = { // */ // async bal(ID) { // new Promise(async ful => { - // const data = await Econ.findOne({ User: ID }); + // const data = await e.findOne({ User: ID }); // if (!data) return ful(0); // ful(data.CP); // }); @@ -438,7 +469,7 @@ module.exports = { * @param {String} ID - User ID */ async bal(ID) { - const data = await Econ.findOne({ User: ID }); + const data = await e.findOne({ User: ID }); if (!data) return 0; else return data.CP; }, @@ -447,12 +478,12 @@ module.exports = { * @param {Number} CP - Number */ async add(ID, CP) { - Econ.findOne({ User: ID }, async (err, data) => { + e.findOne({ User: ID }, async (err, data) => { if (err) throw err; if (data) { data.CP += CP; } else { - data = new Econ({ User: ID, CP }); + data = new e({ User: ID, CP }); } await data.save(); }); @@ -462,14 +493,42 @@ module.exports = { * @param {Number} CP - Number */ async rmv(ID, CP) { - Econ.findOne({ User: ID }, async (err, data) => { + e.findOne({ User: ID }, async (err, data) => { if (err) throw err; if (data) { data.CP -= CP; } else { - data = new Econ({ User: ID, CP: -CP }); + data = new e({ User: ID, CP: -CP }); } await data.save(); }); }, + /** + * @param {String} ID - Bot ID + * @param {String} Toggle - Maintenance Toggle + */ + async maintenance(ID, Toggle) { + if (!ID) throw new Error("Please Provide a ID!"); + if (!Toggle) throw new Error("Please Provide a Toggle!"); + const idk = await m.findOne({ Bot: ID }); + if (!idk) { + const newdb = new m({ Bot: ID }); + if (Toggle === "true") { + newdb.Status === "true"; + } else { + newdb.Status === "false"; + } + await newdb.save().catch(error => console.log(error)); + return; + } else { + if (Toggle === "true") { + idk.Status = "true"; + } else { + idk.Status = "false"; + } + } + await idk.save().catch(error => console.log(error)); + cachegoose.clearCache(); + return; + }, };