Compare commits
9 commits
76f186f68e
...
f620993606
Author | SHA1 | Date | |
---|---|---|---|
f620993606 | |||
ca0b405b2c | |||
e0483fd89e | |||
d994f9ff26 | |||
e1a29c688d | |||
e176dc113f | |||
ab079fa0b2 | |||
75eaa21e93 | |||
d8c5ffa1d9 |
12 changed files with 1479 additions and 24 deletions
|
@ -1,6 +1,8 @@
|
|||
token=YourToken
|
||||
clientId=BotClientId
|
||||
guildId=DevGuildId
|
||||
ownerId=OwnerUserId
|
||||
statusChannel=
|
||||
uptimeURL=UptimeKumaOrWhateverStatusThingYouUseOrJustLeaveEmpty
|
||||
uptimeInterval=60
|
||||
twiConsumer=TwitterConsumerToken
|
||||
|
|
|
@ -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 }],
|
||||
|
|
|
@ -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();
|
||||
|
|
48
events/client/guildCreate.js
Normal file
48
events/client/guildCreate.js
Normal 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] });
|
||||
}
|
||||
},
|
||||
};
|
44
events/client/guildDelete.js
Normal file
44
events/client/guildDelete.js
Normal 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] });
|
||||
}
|
||||
},
|
||||
};
|
|
@ -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
35
events/client/status.js
Normal 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' });
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
5
index.js
5
index.js
|
@ -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
3
json/playing.json
Normal 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
3
json/watching.json
Normal file
|
@ -0,0 +1,3 @@
|
|||
[
|
||||
"you", "everything you type", "Le funny meme", "my wee wee grow", "the world burn"
|
||||
]
|
1304
package-lock.json
generated
1304
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
@ -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"
|
||||
|
|
Loading…
Reference in a new issue