Compare commits

...

9 commits

12 changed files with 1479 additions and 24 deletions

View file

@ -1,6 +1,8 @@
token=YourToken
clientId=BotClientId
guildId=DevGuildId
ownerId=OwnerUserId
statusChannel=
uptimeURL=UptimeKumaOrWhateverStatusThingYouUseOrJustLeaveEmpty
uptimeInterval=60
twiConsumer=TwitterConsumerToken

View file

@ -4,9 +4,16 @@
"node": true,
"es6": true
},
"parser": "@babel/eslint-parser",
"parserOptions": {
"ecmaVersion": 2022,
"sourceType": "module"
"sourceType": "module",
"requireConfigFile": false,
"babelOptions": {
"plugins": [
"@babel/plugin-syntax-import-assertions"
]
}
},
"rules": {
"arrow-spacing": ["warn", { "before": true, "after": true }],

View file

@ -6,7 +6,7 @@ import os from 'node:os';
import fs from 'node:fs';
import db from '../../models/index.js';
import wordToCensor from '../../json/censor.json' assert {type: 'json'};;
import wordToCensor from '../../json/censor.json' assert {type: 'json'};
import dotenv from 'dotenv';
dotenv.config();
const { twiConsumer, twiConsumerSecret, twiToken, twiTokenSecret, twiChannel, twiLogChannel } = process.env;
@ -29,7 +29,6 @@ export default {
cooldown: 3600,
async execute(interaction) {
await interaction.deferReply({ ephemeral: false });
const client = interaction.client;
let tweet = interaction.options.getString('content');
const attachment = interaction.options.getAttachment('image');
const date = new Date();

View file

@ -0,0 +1,48 @@
import db from '../../models/index.js';
const guildBlacklist = db.guildBlacklist;
import { MessageEmbed } from 'discord.js';
import dotenv from 'dotenv';
dotenv.config();
const { statusChannel } = process.env;
export default {
name: 'guildCreate',
once: true,
async execute(guild, client) {
const guildOwner = await client.users.fetch(guild.ownerId);
console.log(`${guild.name}\n${guild.memberCount} users\nOwner: ${guildOwner.username}\nOwner ID: ${guild.ownerId}`);
const blacklist = await guildBlacklist.findOne({ where: { guildID:guild.id } });
if (blacklist) {
guild.leave();
}
// If stats channel settings exist, send bot stats to it
if (statusChannel) {
const channel = client.channels.resolve(statusChannel);
const botCount = guild.members.cache.filter(member => member.user.bot).size;
console.log(guild.memberCount);
const addEmbed = new MessageEmbed()
.setColor('#52e80d')
.setTitle('New boiz in town')
.setURL('https://www.youtube.com/watch?v=6n3pFFPSlW4')
.setThumbnail(guild.iconURL())
.addField('Guild', `${guild.name} (${guild.id})`)
.addField('Total number of members', guild.memberCount.toString(), true)
.addField('Number of users', (guild.memberCount - botCount).toString(), true)
.addField('Number of bots', botCount.toString(), true)
.addField('Owner', `${guildOwner.username} (${guild.ownerId})`, true)
.setFooter({ text: `I'm now in ${client.guilds.cache.size} servers!` })
.setTimestamp();
if (blacklist) {
return channel.send(`${guildOwner.username} (${guild.ownerId}) tried to add me to their guild while being blacklisted!\n${guild.name} (${guild.id})`);
}
channel.send({ embeds: [addEmbed] });
}
},
};

View file

@ -0,0 +1,44 @@
import db from '../../models/index.js';
const guildBlacklist = db.guildBlacklist;
import { MessageEmbed } from 'discord.js';
import dotenv from 'dotenv';
dotenv.config();
const { statusChannel } = process.env;
export default {
name: 'guildDelete',
once: true,
async execute(guild, client) {
const guildOwner = await client.users.fetch(guild.ownerId);
console.log(`***BOT KICKED***\n${guild.name}\n${guild.memberCount} users\nOwner: ${guildOwner.username}\nOwner ID: ${guild.ownerId}\n***BOT KICKED***`);
const blacklist = await guildBlacklist.findOne({ where: { guildID:guild.id } });
// If stats channel settings exist, send bot stats to it
if (statusChannel) {
const channel = client.channels.resolve(statusChannel);
const botCount = guild.members.cache.filter(member => member.user.bot).size;
console.log(guild.memberCount);
const kickEmbed = new MessageEmbed()
.setColor('#FF0000')
.setTitle('Some mofo just removed me from there guild :(')
.setURL('https://www.youtube.com/watch?v=6n3pFFPSlW4')
.setThumbnail(guild.iconURL())
.addField('Guild', `${guild.name} (${guild.id})`)
.addField('Total number of members', guild.memberCount.toString(), true)
.addField('Number of users', (guild.memberCount - botCount).toString(), true)
.addField('Number of bots', botCount.toString(), true)
.addField('Owner', `${guildOwner.username} (${guild.ownerId})`, true)
.setFooter({ text: `I'm now in ${client.guilds.cache.size} servers!` })
.setTimestamp();
if (blacklist) {
kickEmbed.setFooter({ text: kickEmbed.footer.text + ' | Left this guild because owner is blacklisted!' });
}
channel.send({ embeds: [kickEmbed] });
}
},
};

View file

@ -1,6 +1,7 @@
import { exec } from 'node:child_process';
import dotenv from 'dotenv';
dotenv.config();
const { statusChannel } = process.env;
export default {
name: 'ready',
@ -31,5 +32,11 @@ export default {
console.log(`There is \x1b[33m${commandSize}\x1b[0m command loaded.`);
console.log(`Running yt-dlp \x1b[33m${ytdlpVersion.replace('\n', '')}\x1b[0m`);
console.log('===========[ READY ]===========');
// If stats channel settings exist, send bot stats to it
if (statusChannel) {
const channel = client.channels.resolve(statusChannel);
channel.send(`Ready to serve in ${channelSize} channels on ${guildSize} servers.\nThere is ${commandSize} command loaded.\nRunning yt-dlp ${ytdlpVersion.replace('\n', '')}\n${client.readyAt}`);
}
},
};

35
events/client/status.js Normal file
View file

@ -0,0 +1,35 @@
import game from '../../json/playing.json' assert {type: 'json'};
import watch from '../../json/watching.json' assert {type: 'json'};
export default {
name: 'ready',
once: true,
async execute(client) {
// Bot status
setStatus();
// Change status every 30 minutes
setInterval(async () => {
setStatus();
}, 1800000);
async function setStatus() {
const random = Math.floor((Math.random() * 2));
// Random "Watching" status taken from json
if (random === 0) {
console.log('Status type: \x1b[32mWatching\x1b[0m');
const status = watch[Math.floor((Math.random() * watch.length))];
console.log(`Setting status to: ${status}`);
client.user.setActivity(status, { type: 'WATCHING' });
}
// Random "Playing" status taken from json
else if (random === 1) {
console.log('Status type: \x1b[32mPlaying\x1b[0m');
const status = game[Math.floor((Math.random() * game.length))];
console.log(`Setting status to: ${status}`);
client.user.setActivity(status, { type: 'PLAYING' });
}
}
},
};

View file

@ -15,6 +15,7 @@ const client = new Client({ intents: [Intents.FLAGS.GUILDS], shards: 'auto' });
client.commands = new Collection();
await loadCommandFromDir('fun');
await loadCommandFromDir('utility');
await loadCommandFromDir('admin');
await loadCommandFromDir('owner');
// Load events
@ -45,10 +46,10 @@ async function loadEventFromDir(dir, listener) {
let event = await import(filePath);
event = event.default;
if (event.once) {
listener.once(event.name, (...args) => event.execute(...args));
listener.once(event.name, (...args) => event.execute(...args, client));
}
else {
listener.on(event.name, (...args) => event.execute(...args));
listener.on(event.name, (...args) => event.execute(...args, client));
}
}
}

3
json/playing.json Normal file
View file

@ -0,0 +1,3 @@
[
"/feedback <feedback> to tell me what you think of the bot!", "Did you know? This bot used to run on a Raspberry Pi & a hacked Playstation 4!", "with you", "waluigi taco stand", "Minecraft", "super smash bros", "mario kart wii", "Cult of the lamb", "SOMEONE SEND HELP PLEASE, IM STUCK IN THIS BOT", "alone", "You can support me with the donate command!"
]

3
json/watching.json Normal file
View file

@ -0,0 +1,3 @@
[
"you", "everything you type", "Le funny meme", "my wee wee grow", "the world burn"
]

1304
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -29,6 +29,8 @@
"twit": "^2.2.11"
},
"devDependencies": {
"@babel/eslint-parser": "^7.18.9",
"@babel/plugin-syntax-import-assertions": "^7.18.6",
"@types/node": "^18.7.3",
"eslint": "^8.16.0",
"sequelize-cli": "^6.4.1"